chiark / gitweb /
umount: umount, until all umounts failed
authorHarald Hoyer <harald@redhat.com>
Thu, 5 May 2011 10:26:31 +0000 (12:26 +0200)
committerHarald Hoyer <harald@redhat.com>
Mon, 4 Jul 2011 10:47:50 +0000 (12:47 +0200)
src/umount.c

index 290e6cad02e7b7875d784ca3f02c6b6e6ac88ff8..20db612ace8d11e2eea2e6796ade9c4a29212b6f 100644 (file)
@@ -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;