umount: umount, until all umounts failed

This commit is contained in:
Harald Hoyer 2011-05-05 12:26:31 +02:00
parent 0415a10436
commit 6f7f51f793

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;