diff --git a/fs/dcache.c b/fs/dcache.c index 10fab2666274..f104945dcc7d 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -1116,6 +1116,8 @@ int have_submounts(struct dentry *parent) return 1; rename_retry: + if (locked) + goto again; locked = 1; write_seqlock(&rename_lock); goto again; @@ -1218,6 +1220,8 @@ static int select_parent(struct dentry *parent, struct list_head *dispose) rename_retry: if (found) return found; + if (locked) + goto again; locked = 1; write_seqlock(&rename_lock); goto again; @@ -2963,6 +2967,8 @@ void d_genocide(struct dentry *root) return; rename_retry: + if (locked) + goto again; locked = 1; write_seqlock(&rename_lock); goto again;