]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
homework: add new helper home_setup_undo_mount()
authorLennart Poettering <lennart@poettering.net>
Thu, 21 Oct 2021 11:58:10 +0000 (13:58 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 27 Oct 2021 20:05:20 +0000 (22:05 +0200)
src/home/homework-directory.c
src/home/homework.c
src/home/homework.h

index 65575713617dbc685e9d9c9b042c96232f40cc6c..3418034bd1ab222c520ed61a6589e349ef8e7841 100644 (file)
@@ -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);
index 7d1ea481cea137818e82a79655634e47dbaed852..8dc9004c064388caf6cdb9db270b096564b815b3 100644 (file)
@@ -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);
index 1fa5a1e37a56d87dea1df233c11cc9f867319e12..0ce8457727cab5f75eddb7946075080313a3ed81 100644 (file)
@@ -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);