NFS: Release dcache_lock in an error path of nfs_path
authorJosh Triplett <josht@us.ibm.com>
Mon, 24 Jul 2006 23:30:00 +0000 (16:30 -0700)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Thu, 3 Aug 2006 20:55:01 +0000 (16:55 -0400)
In one of the error paths of nfs_path, it may return with dcache_lock still
held; fix this by adding and using a new error path Elong_unlock which unlocks
dcache_lock.

Signed-off-by: Josh Triplett <josh@freedesktop.org>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
(cherry picked from f4b90b43677fb23297c56802c3056fc304f988d9 commit)

fs/nfs/namespace.c

index 19b98ca..86b3169 100644 (file)
@@ -51,7 +51,7 @@ char *nfs_path(const char *base, const struct dentry *dentry,
                namelen = dentry->d_name.len;
                buflen -= namelen + 1;
                if (buflen < 0)
-                       goto Elong;
+                       goto Elong_unlock;
                end -= namelen;
                memcpy(end, dentry->d_name.name, namelen);
                *--end = '/';
@@ -68,6 +68,8 @@ char *nfs_path(const char *base, const struct dentry *dentry,
        end -= namelen;
        memcpy(end, base, namelen);
        return end;
+Elong_unlock:
+       spin_unlock(&dcache_lock);
 Elong:
        return ERR_PTR(-ENAMETOOLONG);
 }