diff options
author | Harald Hoyer <harald@redhat.com> | 2011-05-05 12:26:31 +0200 |
---|---|---|
committer | Harald Hoyer <harald@redhat.com> | 2011-07-04 12:47:50 +0200 |
commit | 6f7f51f793e5f2a5d42e05e3f1e3101f49d37299 (patch) | |
tree | 3866ad4ee6a917b84da5ea2be965e309b63a1aea /src | |
parent | 0415a104366b93418fcedb076a962c632d9dd2ab (diff) |
umount: umount, until all umounts failed
Diffstat (limited to 'src')
-rw-r--r-- | src/umount.c | 10 |
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; |