]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/exportfs/expfs.c
fs: dcache per-inode inode alias locking
[karo-tx-linux.git] / fs / exportfs / expfs.c
index f06a940065f63fbdf53a1cfecc87f9a2c18f0950..4b6825740dd5e6cfcf38918d3c8e477a677e94a4 100644 (file)
@@ -43,24 +43,26 @@ find_acceptable_alias(struct dentry *result,
                void *context)
 {
        struct dentry *dentry, *toput = NULL;
+       struct inode *inode;
 
        if (acceptable(context, result))
                return result;
 
-       spin_lock(&dcache_inode_lock);
-       list_for_each_entry(dentry, &result->d_inode->i_dentry, d_alias) {
+       inode = result->d_inode;
+       spin_lock(&inode->i_lock);
+       list_for_each_entry(dentry, &inode->i_dentry, d_alias) {
                dget(dentry);
-               spin_unlock(&dcache_inode_lock);
+               spin_unlock(&inode->i_lock);
                if (toput)
                        dput(toput);
                if (dentry != result && acceptable(context, dentry)) {
                        dput(result);
                        return dentry;
                }
-               spin_lock(&dcache_inode_lock);
+               spin_lock(&inode->i_lock);
                toput = dentry;
        }
-       spin_unlock(&dcache_inode_lock);
+       spin_unlock(&inode->i_lock);
 
        if (toput)
                dput(toput);