diff --git a/[refs] b/[refs] index a35ed359027b..1b88f6651010 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6a3e3dbee62a8fcf13c349b141b3cedf35a65c41 +refs/heads/master: 8110e16d42d587997bcaee0c864179e6d93603fe diff --git a/trunk/fs/dcache.c b/trunk/fs/dcache.c index 0364af2311f4..693f95bf1cae 100644 --- a/trunk/fs/dcache.c +++ b/trunk/fs/dcache.c @@ -1134,6 +1134,8 @@ int have_submounts(struct dentry *parent) return 1; rename_retry: + if (locked) + goto again; locked = 1; write_seqlock(&rename_lock); goto again; @@ -1236,6 +1238,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; @@ -3035,6 +3039,8 @@ void d_genocide(struct dentry *root) return; rename_retry: + if (locked) + goto again; locked = 1; write_seqlock(&rename_lock); goto again;