|
@@ -1134,6 +1134,8 @@ int have_submounts(struct dentry *parent)
|
|
|
return 1;
|
|
return 1;
|
|
|
|
|
|
|
|
rename_retry:
|
|
rename_retry:
|
|
|
|
|
+ if (locked)
|
|
|
|
|
+ goto again;
|
|
|
locked = 1;
|
|
locked = 1;
|
|
|
write_seqlock(&rename_lock);
|
|
write_seqlock(&rename_lock);
|
|
|
goto again;
|
|
goto again;
|
|
@@ -1236,6 +1238,8 @@ static int select_parent(struct dentry *parent, struct list_head *dispose)
|
|
|
rename_retry:
|
|
rename_retry:
|
|
|
if (found)
|
|
if (found)
|
|
|
return found;
|
|
return found;
|
|
|
|
|
+ if (locked)
|
|
|
|
|
+ goto again;
|
|
|
locked = 1;
|
|
locked = 1;
|
|
|
write_seqlock(&rename_lock);
|
|
write_seqlock(&rename_lock);
|
|
|
goto again;
|
|
goto again;
|
|
@@ -3035,6 +3039,8 @@ void d_genocide(struct dentry *root)
|
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
rename_retry:
|
|
rename_retry:
|
|
|
|
|
+ if (locked)
|
|
|
|
|
+ goto again;
|
|
|
locked = 1;
|
|
locked = 1;
|
|
|
write_seqlock(&rename_lock);
|
|
write_seqlock(&rename_lock);
|
|
|
goto again;
|
|
goto again;
|