lkml.org 
[lkml]   [2021]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.12 156/292] NFS: nfs_find_open_context() may only select open files
    Date
    From: Trond Myklebust <trond.myklebust@hammerspace.com>

    [ Upstream commit e97bc66377bca097e1f3349ca18ca17f202ff659 ]

    If a file has already been closed, then it should not be selected to
    support further I/O.

    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    [Trond: Fix an invalid pointer deref reported by Colin Ian King]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/nfs/inode.c | 4 ++++
    include/linux/nfs_fs.h | 1 +
    2 files changed, 5 insertions(+)

    diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
    index ae8bc84e39fb..6b1f2bf65bee 100644
    --- a/fs/nfs/inode.c
    +++ b/fs/nfs/inode.c
    @@ -1079,6 +1079,7 @@ EXPORT_SYMBOL_GPL(nfs_inode_attach_open_context);
    void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx)
    {
    filp->private_data = get_nfs_open_context(ctx);
    + set_bit(NFS_CONTEXT_FILE_OPEN, &ctx->flags);
    if (list_empty(&ctx->list))
    nfs_inode_attach_open_context(ctx);
    }
    @@ -1098,6 +1099,8 @@ struct nfs_open_context *nfs_find_open_context(struct inode *inode, const struct
    continue;
    if ((pos->mode & (FMODE_READ|FMODE_WRITE)) != mode)
    continue;
    + if (!test_bit(NFS_CONTEXT_FILE_OPEN, &pos->flags))
    + continue;
    ctx = get_nfs_open_context(pos);
    if (ctx)
    break;
    @@ -1113,6 +1116,7 @@ void nfs_file_clear_open_context(struct file *filp)
    if (ctx) {
    struct inode *inode = d_inode(ctx->dentry);

    + clear_bit(NFS_CONTEXT_FILE_OPEN, &ctx->flags);
    /*
    * We fatal error on write before. Try to writeback
    * every page again.
    diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
    index eadaabd18dc7..be9eadd23659 100644
    --- a/include/linux/nfs_fs.h
    +++ b/include/linux/nfs_fs.h
    @@ -84,6 +84,7 @@ struct nfs_open_context {
    #define NFS_CONTEXT_RESEND_WRITES (1)
    #define NFS_CONTEXT_BAD (2)
    #define NFS_CONTEXT_UNLOCK (3)
    +#define NFS_CONTEXT_FILE_OPEN (4)
    int error;

    struct list_head list;
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-19 20:40    [W:2.438 / U:0.272 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site