Commit 17b985de authored by Jeff Layton's avatar Jeff Layton

nfs: use locks_inode_context helper

nfs currently doesn't access i_flctx safely. This requires a
smp_load_acquire, as the pointer is set via cmpxchg (a release
operation).

Cc: Trond Myklebust <trond.myklebust@hammerspace.com>
Cc: Anna Schumaker <anna@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
parent 98b41ffe
...@@ -146,7 +146,7 @@ static int nfs_delegation_claim_locks(struct nfs4_state *state, const nfs4_state ...@@ -146,7 +146,7 @@ static int nfs_delegation_claim_locks(struct nfs4_state *state, const nfs4_state
{ {
struct inode *inode = state->inode; struct inode *inode = state->inode;
struct file_lock *fl; struct file_lock *fl;
struct file_lock_context *flctx = inode->i_flctx; struct file_lock_context *flctx = locks_inode_context(inode);
struct list_head *list; struct list_head *list;
int status = 0; int status = 0;
......
...@@ -1501,7 +1501,7 @@ static int nfs4_reclaim_locks(struct nfs4_state *state, const struct nfs4_state_ ...@@ -1501,7 +1501,7 @@ static int nfs4_reclaim_locks(struct nfs4_state *state, const struct nfs4_state_
struct file_lock *fl; struct file_lock *fl;
struct nfs4_lock_state *lsp; struct nfs4_lock_state *lsp;
int status = 0; int status = 0;
struct file_lock_context *flctx = inode->i_flctx; struct file_lock_context *flctx = locks_inode_context(inode);
struct list_head *list; struct list_head *list;
if (flctx == NULL) if (flctx == NULL)
......
...@@ -1055,7 +1055,7 @@ static unsigned int nfs_coalesce_size(struct nfs_page *prev, ...@@ -1055,7 +1055,7 @@ static unsigned int nfs_coalesce_size(struct nfs_page *prev,
if (prev) { if (prev) {
if (!nfs_match_open_context(nfs_req_openctx(req), nfs_req_openctx(prev))) if (!nfs_match_open_context(nfs_req_openctx(req), nfs_req_openctx(prev)))
return 0; return 0;
flctx = d_inode(nfs_req_openctx(req)->dentry)->i_flctx; flctx = locks_inode_context(d_inode(nfs_req_openctx(req)->dentry));
if (flctx != NULL && if (flctx != NULL &&
!(list_empty_careful(&flctx->flc_posix) && !(list_empty_careful(&flctx->flc_posix) &&
list_empty_careful(&flctx->flc_flock)) && list_empty_careful(&flctx->flc_flock)) &&
......
...@@ -1185,7 +1185,7 @@ int nfs_flush_incompatible(struct file *file, struct page *page) ...@@ -1185,7 +1185,7 @@ int nfs_flush_incompatible(struct file *file, struct page *page)
{ {
struct nfs_open_context *ctx = nfs_file_open_context(file); struct nfs_open_context *ctx = nfs_file_open_context(file);
struct nfs_lock_context *l_ctx; struct nfs_lock_context *l_ctx;
struct file_lock_context *flctx = file_inode(file)->i_flctx; struct file_lock_context *flctx = locks_inode_context(file_inode(file));
struct nfs_page *req; struct nfs_page *req;
int do_flush, status; int do_flush, status;
/* /*
...@@ -1321,7 +1321,7 @@ static int nfs_can_extend_write(struct file *file, struct page *page, ...@@ -1321,7 +1321,7 @@ static int nfs_can_extend_write(struct file *file, struct page *page,
struct inode *inode, unsigned int pagelen) struct inode *inode, unsigned int pagelen)
{ {
int ret; int ret;
struct file_lock_context *flctx = inode->i_flctx; struct file_lock_context *flctx = locks_inode_context(inode);
struct file_lock *fl; struct file_lock *fl;
if (file->f_flags & O_DSYNC) if (file->f_flags & O_DSYNC)
......
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