lkml.org 
[lkml]   [2014]   [Mar]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.13 086/149] NFS: Fix a delegation callback race
    Date
    3.13-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Trond Myklebust <trond.myklebust@primarydata.com>

    commit 755a48a7a4eb05b9c8424e3017d947b2961a60e0 upstream.

    The clean-up in commit 36281caa839f ended up removing a NULL pointer check
    that is needed in order to prevent an Oops in
    nfs_async_inode_return_delegation().

    Reported-by: "Yan, Zheng" <zheng.z.yan@intel.com>
    Link: http://lkml.kernel.org/r/5313E9F6.2020405@intel.com
    Fixes: 36281caa839f (NFSv4: Further clean-ups of delegation stateid validation)
    Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/nfs/delegation.c | 11 +++++++----
    1 file changed, 7 insertions(+), 4 deletions(-)

    --- a/fs/nfs/delegation.c
    +++ b/fs/nfs/delegation.c
    @@ -659,16 +659,19 @@ int nfs_async_inode_return_delegation(st

    rcu_read_lock();
    delegation = rcu_dereference(NFS_I(inode)->delegation);
    + if (delegation == NULL)
    + goto out_enoent;

    - if (!clp->cl_mvops->match_stateid(&delegation->stateid, stateid)) {
    - rcu_read_unlock();
    - return -ENOENT;
    - }
    + if (!clp->cl_mvops->match_stateid(&delegation->stateid, stateid))
    + goto out_enoent;
    nfs_mark_return_delegation(server, delegation);
    rcu_read_unlock();

    nfs_delegation_run_state_manager(clp);
    return 0;
    +out_enoent:
    + rcu_read_unlock();
    + return -ENOENT;
    }

    static struct inode *



    \
     
     \ /
      Last update: 2014-03-21 03:01    [W:4.025 / U:0.488 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site