lkml.org 
[lkml]   [2014]   [Jun]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.2 82/92] nfsd4: remove lockowner when removing lock stateid
    3.2.60-rc1 review patch.  If anyone has any objections, please let me know.

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

    From: "J. Bruce Fields" <bfields@redhat.com>

    commit a1b8ff4c97b4375d21b6d6c45d75877303f61b3b upstream.

    The nfsv4 state code has always assumed a one-to-one correspondance
    between lock stateid's and lockowners even if it appears not to in some
    places.

    We may actually change that, but for now when FREE_STATEID releases a
    lock stateid it also needs to release the parent lockowner.

    Symptoms were a subsequent LOCK crashing in find_lockowner_str when it
    calls same_lockowner_ino on a lockowner that unexpectedly has an empty
    so_stateids list.

    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    fs/nfsd/nfs4state.c | 11 +++++++++--
    1 file changed, 9 insertions(+), 2 deletions(-)

    --- a/fs/nfsd/nfs4state.c
    +++ b/fs/nfsd/nfs4state.c
    @@ -3376,9 +3376,16 @@ out:
    static __be32
    nfsd4_free_lock_stateid(struct nfs4_ol_stateid *stp)
    {
    - if (check_for_locks(stp->st_file, lockowner(stp->st_stateowner)))
    + struct nfs4_lockowner *lo = lockowner(stp->st_stateowner);
    +
    + if (check_for_locks(stp->st_file, lo))
    return nfserr_locks_held;
    - release_lock_stateid(stp);
    + /*
    + * Currently there's a 1-1 lock stateid<->lockowner
    + * correspondance, and we have to delete the lockowner when we
    + * delete the lock stateid:
    + */
    + unhash_lockowner(lo);
    return nfs_ok;
    }



    \
     
     \ /
      Last update: 2014-06-07 04:01    [W:4.782 / U:0.668 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site