Route to_canvas and _owned_write through paths.write_*_atomic so concurrent readers (e.g. git hashing) never see a truncated file. Fixes #3282 (cherry picked from commit 39564e4eef)
39564e4eef