diff options
author | Lennart Poettering <lennart@poettering.net> | 2011-01-06 19:10:17 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2011-01-06 19:10:17 +0100 |
commit | 7fc942b29e7bdb9d6aa3123f53da6680edabd8f0 (patch) | |
tree | 42f9b679fc66ad5aa3375a75a793d0a8930c9018 | |
parent | update TODO (diff) | |
download | eudev-7fc942b29e7bdb9d6aa3123f53da6680edabd8f0.tar.gz eudev-7fc942b29e7bdb9d6aa3123f53da6680edabd8f0.tar.bz2 eudev-7fc942b29e7bdb9d6aa3123f53da6680edabd8f0.zip |
umount: don't try to detach the dm device the root dir is on, to minimize warning messages
-rw-r--r-- | src/umount.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/umount.c b/src/umount.c index 2ae8f86ec..4fd6b22ad 100644 --- a/src/umount.c +++ b/src/umount.c @@ -466,12 +466,24 @@ static int swap_points_list_off(MountPoint **head, bool *changed) { static int loopback_points_list_detach(MountPoint **head, bool *changed) { MountPoint *m, *n; - int n_failed = 0; + int n_failed = 0, k; + struct stat root_st; assert(head); + k = lstat("/", &root_st); + LIST_FOREACH_SAFE(mount_point, m, n, *head) { int r; + struct stat loopback_st; + + if (k >= 0 && + major(root_st.st_dev) != 0 && + lstat(m->path, &loopback_st) >= 0 && + root_st.st_dev == loopback_st.st_rdev) { + n_failed ++; + continue; + } if ((r = delete_loopback(m->path)) >= 0) { @@ -490,13 +502,23 @@ static int loopback_points_list_detach(MountPoint **head, bool *changed) { static int dm_points_list_detach(MountPoint **head, bool *changed) { MountPoint *m, *n; - int n_failed = 0; + int n_failed = 0, k; + struct stat root_st; assert(head); + k = lstat("/", &root_st); + LIST_FOREACH_SAFE(mount_point, m, n, *head) { int r; + if (k >= 0 && + major(root_st.st_dev) != 0 && + root_st.st_dev == m->devnum) { + n_failed ++; + continue; + } + if ((r = delete_dm(m->devnum)) >= 0) { if (r > 0 && changed) |