Commit 83f2c45e authored by Trond Myklebust's avatar Trond Myklebust Committed by Anna Schumaker

NFS: Remove unnecessary inode locking in nfs_llseek_dir()

Remove the contentious inode lock, and instead provide thread safety
using the file->f_lock spinlock.
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 6c2190b3
...@@ -955,7 +955,6 @@ static int nfs_readdir(struct file *file, struct dir_context *ctx) ...@@ -955,7 +955,6 @@ static int nfs_readdir(struct file *file, struct dir_context *ctx)
static loff_t nfs_llseek_dir(struct file *filp, loff_t offset, int whence) static loff_t nfs_llseek_dir(struct file *filp, loff_t offset, int whence)
{ {
struct inode *inode = file_inode(filp);
struct nfs_open_dir_context *dir_ctx = filp->private_data; struct nfs_open_dir_context *dir_ctx = filp->private_data;
dfprintk(FILE, "NFS: llseek dir(%pD2, %lld, %d)\n", dfprintk(FILE, "NFS: llseek dir(%pD2, %lld, %d)\n",
...@@ -967,15 +966,15 @@ static loff_t nfs_llseek_dir(struct file *filp, loff_t offset, int whence) ...@@ -967,15 +966,15 @@ static loff_t nfs_llseek_dir(struct file *filp, loff_t offset, int whence)
case SEEK_SET: case SEEK_SET:
if (offset < 0) if (offset < 0)
return -EINVAL; return -EINVAL;
inode_lock(inode); spin_lock(&filp->f_lock);
break; break;
case SEEK_CUR: case SEEK_CUR:
if (offset == 0) if (offset == 0)
return filp->f_pos; return filp->f_pos;
inode_lock(inode); spin_lock(&filp->f_lock);
offset += filp->f_pos; offset += filp->f_pos;
if (offset < 0) { if (offset < 0) {
inode_unlock(inode); spin_unlock(&filp->f_lock);
return -EINVAL; return -EINVAL;
} }
} }
...@@ -987,7 +986,7 @@ static loff_t nfs_llseek_dir(struct file *filp, loff_t offset, int whence) ...@@ -987,7 +986,7 @@ static loff_t nfs_llseek_dir(struct file *filp, loff_t offset, int whence)
dir_ctx->dir_cookie = 0; dir_ctx->dir_cookie = 0;
dir_ctx->duped = 0; dir_ctx->duped = 0;
} }
inode_unlock(inode); spin_unlock(&filp->f_lock);
return offset; return offset;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment