]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
mount-util: rework umount_verbose() to take log level and flags arg
authorLennart Poettering <lennart@poettering.net>
Tue, 22 Sep 2020 14:32:07 +0000 (16:32 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 23 Sep 2020 16:57:36 +0000 (18:57 +0200)
Let's make umount_verbose() more like mount_verbose_xyz(), i.e. take log
level and flags param. In particular the latter matters, since we
typically don't actually want to follow symlinks when unmounting.

src/core/automount.c
src/home/homework-directory.c
src/home/homework-luks.c
src/home/homework-mount.c
src/home/homework.c
src/nspawn/nspawn-cgroup.c
src/nspawn/nspawn-mount.c
src/shared/mount-util.c
src/shared/mount-util.h
src/volatile-root/volatile-root.c

index 8318deef8a0e1ad2acb7c539c97da0e1121ecbfd..b0d43a3ef40ace0f3010cae6b95804855b82e123 100644 (file)
@@ -94,7 +94,7 @@ static void unmount_autofs(Automount *a) {
                 automount_send_ready(a, a->expire_tokens, -EHOSTDOWN);
 
                 if (a->where) {
-                        r = repeat_unmount(a->where, MNT_DETACH);
+                        r = repeat_unmount(a->where, MNT_DETACH|UMOUNT_NOFOLLOW);
                         if (r < 0)
                                 log_error_errno(r, "Failed to unmount: %m");
                 }
@@ -647,7 +647,7 @@ fail:
         safe_close_pair(p);
 
         if (mounted) {
-                r = repeat_unmount(a->where, MNT_DETACH);
+                r = repeat_unmount(a->where, MNT_DETACH|UMOUNT_NOFOLLOW);
                 if (r < 0)
                         log_error_errno(r, "Failed to unmount, ignoring: %m");
         }
index 49660c738961aafdd1a9d7319b1729590226cbe2..bffeac0a5ef32f624277f6716bf87f5f936313df 100644 (file)
@@ -67,7 +67,7 @@ int home_activate_directory(
 
         r = mount_nofollow_verbose(LOG_ERR, NULL, hd, NULL, MS_BIND|MS_REMOUNT|user_record_mount_flags(h), NULL);
         if (r < 0) {
-                (void) umount_verbose(hd);
+                (void) umount_verbose(LOG_ERR, hd, UMOUNT_NOFOLLOW);
                 return r;
         }
 
index f13f41e61279ee4a330f8b0424a2565cd16c2650..947a559c2671d8f8a79fbfe848be4e513e61e6ee 100644 (file)
@@ -1259,7 +1259,7 @@ int home_prepare_luks(
 
 fail:
         if (mounted)
-                (void) umount_verbose("/run/systemd/user-home-mount");
+                (void) umount_verbose(LOG_ERR, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
 
         if (dm_activated)
                 (void) crypt_deactivate(cd, setup->dm_name);
@@ -2168,7 +2168,7 @@ int home_create_luks(
 
         root_fd = safe_close(root_fd);
 
-        r = umount_verbose("/run/systemd/user-home-mount");
+        r = umount_verbose(LOG_ERR, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
         if (r < 0)
                 goto fail;
 
@@ -2238,7 +2238,7 @@ fail:
         root_fd = safe_close(root_fd);
 
         if (mounted)
-                (void) umount_verbose("/run/systemd/user-home-mount");
+                (void) umount_verbose(LOG_WARNING, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
 
         if (dm_activated)
                 (void) crypt_deactivate(cd, dm_name);
@@ -2340,7 +2340,7 @@ static int ext4_offline_resize_fs(HomeSetup *setup, uint64_t new_size, bool disc
         }
 
         if (setup->undo_mount) {
-                r = umount_verbose("/run/systemd/user-home-mount");
+                r = umount_verbose(LOG_ERR, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
                 if (r < 0)
                         return r;
 
index 7c94de49cc55022b861bb6bf58a24419ece2af55..853181b80d81ae8789ace2b569b92f76cd39ebd0 100644 (file)
@@ -87,7 +87,7 @@ int home_move_mount(const char *user_name_and_realm, const char *target) {
         if (r < 0)
                 return r;
 
-        r = umount_verbose("/run/systemd/user-home-mount");
+        r = umount_verbose(LOG_ERR, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
         if (r < 0)
                 return r;
 
index 986ce2b3f09d04aa83f5a5db0d0d9feeaf23b54c..14e2002c7325fab5e7177d046a901e08b2383869 100644 (file)
@@ -291,7 +291,7 @@ int home_setup_undo(HomeSetup *setup) {
         }
 
         if (setup->undo_mount) {
-                q = umount_verbose("/run/systemd/user-home-mount");
+                q = umount_verbose(LOG_DEBUG, "/run/systemd/user-home-mount", UMOUNT_NOFOLLOW);
                 if (q < 0)
                         r = q;
         }
index 508b8b6460952990dab1f017988aad670faa7074..f7b34ccc5828852379e538e5c27e51a7ffd08a62 100644 (file)
@@ -136,7 +136,7 @@ int sync_cgroup(pid_t pid, CGroupUnified unified_requested, uid_t uid_shift) {
                 log_error_errno(r, "Failed to chown() cgroup %s: %m", fn);
 finish:
         if (undo_mount)
-                (void) umount_verbose(tree);
+                (void) umount_verbose(LOG_ERR, tree, UMOUNT_NOFOLLOW);
 
         (void) rmdir(tree);
         return r;
index 8c5bcd890d0941f4660ebf4c633245346e6047a4..065099cf399f08fdb2015a638993794239c2a492 100644 (file)
@@ -472,7 +472,7 @@ int mount_sysfs(const char *dest, MountSettingsMask mount_settings) {
                         return r;
         }
 
-        r = umount_verbose(full);
+        r = umount_verbose(LOG_ERR, full, UMOUNT_NOFOLLOW);
         if (r < 0)
                 return r;
 
@@ -895,7 +895,7 @@ static int mount_inaccessible(const char *dest, CustomMount *m) {
 
         r = mount_nofollow_verbose(m->graceful ? LOG_DEBUG : LOG_ERR, NULL, where, NULL, MS_BIND|MS_RDONLY|MS_REMOUNT, NULL);
         if (r < 0) {
-                (void) umount_verbose(where);
+                (void) umount_verbose(m->graceful ? LOG_DEBUG : LOG_ERR, where, UMOUNT_NOFOLLOW);
                 return m->graceful ? 0 : r;
         }
 
@@ -1099,10 +1099,11 @@ static int setup_volatile_yes(const char *directory, uid_t uid_shift, const char
 
 fail:
         if (bind_mounted)
-                (void) umount_verbose(t);
+                (void) umount_verbose(LOG_ERR, t, UMOUNT_NOFOLLOW);
 
         if (tmpfs_mounted)
-                (void) umount_verbose(template);
+                (void) umount_verbose(LOG_ERR, template, UMOUNT_NOFOLLOW);
+
         (void) rmdir(template);
         return r;
 }
@@ -1163,7 +1164,7 @@ static int setup_volatile_overlay(const char *directory, uid_t uid_shift, const
 
 finish:
         if (tmpfs_mounted)
-                (void) umount_verbose(template);
+                (void) umount_verbose(LOG_ERR, template, UMOUNT_NOFOLLOW);
 
         (void) rmdir(template);
         return r;
index 9ff96bd3be838b3bc8ce35ac4b620ad9ddcf7b77..e0a03156398990621e7a9df6d799571a804a2758 100644 (file)
@@ -658,10 +658,19 @@ int mount_verbose_full(
         return 0;
 }
 
-int umount_verbose(const char *what) {
+int umount_verbose(
+                int error_log_level,
+                const char *what,
+                int flags) {
+
+        assert(what);
+
         log_debug("Umounting %s...", what);
-        if (umount(what) < 0)
-                return log_error_errno(errno, "Failed to unmount %s: %m", what);
+
+        if (umount2(what, flags) < 0)
+                return log_full_errno(error_log_level, errno,
+                                      "Failed to unmount %s: %m", what);
+
         return 0;
 }
 
index b377e68851a671afa7d95374a7a12b065ad968f2..ba5d6280d2d628232f506f847f15802f214f29f5 100644 (file)
@@ -75,7 +75,10 @@ static inline int mount_nofollow_verbose(
         return mount_verbose_full(error_log_level, what, where, type, flags, options, false);
 }
 
-int umount_verbose(const char *where);
+int umount_verbose(
+                int error_log_level,
+                const char *where,
+                int flags);
 
 int mount_option_mangle(
                 const char *options,
index 35c045630f042f8d6e4f98442442fad0bdce2abe..04c371077a8317e1b46e92a6777d142944638c07 100644 (file)
@@ -107,7 +107,7 @@ static int make_overlay(const char *path) {
 
 finish:
         if (tmpfs_mounted)
-                (void) umount_verbose("/run/systemd/overlay-sysroot");
+                (void) umount_verbose(LOG_ERR, "/run/systemd/overlay-sysroot", UMOUNT_NOFOLLOW);
 
         (void) rmdir("/run/systemd/overlay-sysroot");
         return r;