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: Christoph Hellwig <hch@lst.de> Signed-off-by: Jeff Layton <jlayton@kernel.org>
This commit is contained in:
Родитель
98b41ffe0a
Коммит
17b985def2
|
@ -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_
|
||||||
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,
|
||||||
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)
|
||||||
{
|
{
|
||||||
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,
|
||||||
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)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче