From: Lennart Poettering Date: Thu, 21 Oct 2021 11:58:10 +0000 (+0200) Subject: homework: add new helper home_setup_undo_mount() X-Git-Tag: v250-rc1~397^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=55166094ae68951f3905d376e3e4a32669b34372;p=thirdparty%2Fsystemd.git homework: add new helper home_setup_undo_mount() --- diff --git a/src/home/homework-directory.c b/src/home/homework-directory.c index 65575713617..3418034bd1a 100644 --- a/src/home/homework-directory.c +++ b/src/home/homework-directory.c @@ -241,13 +241,9 @@ int home_create_directory_or_subvolume(UserRecord *h, HomeSetup *setup, UserReco setup->root_fd = safe_close(setup->root_fd); /* Unmount mapped mount before we move the dir into place */ - if (setup->undo_mount) { - r = umount_verbose(LOG_ERR, HOME_RUNTIME_WORK_DIR, UMOUNT_NOFOLLOW); - if (r < 0) - return r; - - setup->undo_mount = false; - } + r = home_setup_undo_mount(setup, LOG_ERR); + if (r < 0) + return r; if (rename(temporary, ip) < 0) return log_error_errno(errno, "Failed to rename %s to %s: %m", temporary, ip); diff --git a/src/home/homework.c b/src/home/homework.c index 7d1ea481cea..8dc9004c064 100644 --- a/src/home/homework.c +++ b/src/home/homework.c @@ -298,6 +298,22 @@ static void drop_caches_now(void) { log_debug("Dropped caches."); } +int home_setup_undo_mount(HomeSetup *setup, int level) { + int r; + + assert(setup); + + if (!setup->undo_mount) + return 0; + + r = umount_verbose(level, HOME_RUNTIME_WORK_DIR, UMOUNT_NOFOLLOW); + if (r < 0) + return r; + + setup->undo_mount = false; + return 1; +} + int home_setup_done(HomeSetup *setup) { int r = 0, q; @@ -316,11 +332,9 @@ int home_setup_done(HomeSetup *setup) { setup->root_fd = safe_close(setup->root_fd); } - if (setup->undo_mount) { - q = umount_verbose(LOG_DEBUG, HOME_RUNTIME_WORK_DIR, UMOUNT_NOFOLLOW); - if (q < 0) - r = q; - } + q = home_setup_undo_mount(setup, LOG_DEBUG); + if (q < 0) + r = q; if (setup->undo_dm && setup->crypt_device && setup->dm_name) { q = sym_crypt_deactivate_by_name(setup->crypt_device, setup->dm_name, 0); diff --git a/src/home/homework.h b/src/home/homework.h index 1fa5a1e37a5..0ce8457727c 100644 --- a/src/home/homework.h +++ b/src/home/homework.h @@ -70,6 +70,8 @@ typedef enum HomeSetupFlags { int home_setup_done(HomeSetup *setup); +int home_setup_undo_mount(HomeSetup *setup, int level); + int home_setup(UserRecord *h, HomeSetupFlags flags, PasswordCache *cache, HomeSetup *setup, UserRecord **ret_header_home); int home_refresh(UserRecord *h, HomeSetup *setup, UserRecord *header_home, PasswordCache *cache, struct statfs *ret_statfs, UserRecord **ret_new_home);