summaryrefslogtreecommitdiff
path: root/src/umount.c
diff options
context:
space:
mode:
authorHarald Hoyer <harald@redhat.com>2011-05-05 12:26:31 +0200
committerHarald Hoyer <harald@redhat.com>2011-07-04 12:47:50 +0200
commit6f7f51f793e5f2a5d42e05e3f1e3101f49d37299 (patch)
tree3866ad4ee6a917b84da5ea2be965e309b63a1aea /src/umount.c
parent0415a104366b93418fcedb076a962c632d9dd2ab (diff)
umount: umount, until all umounts failed
Diffstat (limited to 'src/umount.c')
-rw-r--r--src/umount.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/umount.c b/src/umount.c
index 290e6cad02..20db612ace 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;