[systemd-devel] [PATCH 2/6] umount: umount, until all umounts failed

harald at redhat.com harald at redhat.com
Tue May 31 08:06:56 PDT 2011


From: Harald Hoyer <harald at redhat.com>


Signed-off-by: Harald Hoyer <harald at redhat.com>
---
 src/umount.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/src/umount.c b/src/umount.c
index 5f9d7e4..0f37052 100644
--- a/src/umount.c
+++ b/src/umount.c
@@ -552,6 +552,8 @@ static int dm_points_list_detach(MountPoint **head, bool *changed) {
 
 int umount_all(bool *changed) {
         int r;
+        bool umount_changed;
+
         LIST_HEAD(MountPoint, mp_list_head);
 
         LIST_HEAD_INIT(MountPoint, mp_list_head);
@@ -560,7 +562,13 @@ int umount_all(bool *changed) {
         if (r < 0)
                 goto end;
 
-        r = mount_points_list_umount(&mp_list_head, changed);
+        /* retry umount, until nothing can be umounted anymore */
+        do {
+                umount_changed = false;
+                r = mount_points_list_umount(&mp_list_head, &umount_changed);
+                if (umount_changed)
+                        *changed = true;
+        } while(umount_changed);
         if (r <= 0)
                 goto end;
 
-- 
1.7.5.2



More information about the systemd-devel mailing list