umount: umount, until all umounts failed

This commit is contained in:
Harald Hoyer
2011-07-04 12:47:50 +02:00
parent 0415a10436
commit 6f7f51f793
+9 -1
View 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;