From b7e8c7bdc573ed87aa0787b2c829db58d9697a65 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Fri, 30 Oct 2015 21:40:14 -0400 Subject: [PATCH] compose: Ensure we've cleaned up references to tmpfs workdir before umount Otherwise the `umount()` will always fail. This hasn't been a problem so far while running in a external container (docker/systemd-nspawn), but is when running in `mock` because it doesn't set its namespace to be private. This should help Fedora's Bodhi, which uses rpm-ostree inside mock. --- src/app/rpmostree-compose-builtin-tree.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/app/rpmostree-compose-builtin-tree.c b/src/app/rpmostree-compose-builtin-tree.c index 42691de1..8cb64630 100644 --- a/src/app/rpmostree-compose-builtin-tree.c +++ b/src/app/rpmostree-compose-builtin-tree.c @@ -945,11 +945,19 @@ rpmostree_compose_builtin_tree (int argc, } out: + /* Move back out of the workding directory to ensure unmount works */ + (void )chdir ("/"); + + if (self->workdir_dfd != -1) + (void) close (self->workdir_dfd); if (workdir_is_tmp) { if (opt_workdir_tmpfs) - (void) umount (gs_file_get_path_cached (self->workdir)); + if (umount (gs_file_get_path_cached (self->workdir)) != 0) + { + fprintf (stderr, "warning: umount failed: %m\n"); + } (void) gs_shutil_rm_rf (self->workdir, NULL, NULL); } if (self)