lkml.org 
[lkml]   [2018]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 30/87] locks: dont check for race with close when setting OFD lock
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

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

    From: Jeff Layton <jeff.layton@primarydata.com>

    commit 0752ba807b04ccd69cb4bc8bbf829a80ee208a3c upstream.

    We don't clean out OFD locks on close(), so there's no need to check
    for a race with them here. They'll get cleaned out at the same time
    that flock locks are.

    Signed-off-by: Jeff Layton <jeff.layton@primarydata.com>
    Acked-by: "J. Bruce Fields" <bfields@fieldses.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Mel Gorman <mgorman@suse.de>


    ---
    fs/locks.c | 16 ++++++++++------
    1 file changed, 10 insertions(+), 6 deletions(-)

    --- a/fs/locks.c
    +++ b/fs/locks.c
    @@ -2220,10 +2220,12 @@ int fcntl_setlk(unsigned int fd, struct
    error = do_lock_file_wait(filp, cmd, file_lock);

    /*
    - * Attempt to detect a close/fcntl race and recover by
    - * releasing the lock that was just acquired.
    + * Attempt to detect a close/fcntl race and recover by releasing the
    + * lock that was just acquired. There is no need to do that when we're
    + * unlocking though, or for OFD locks.
    */
    - if (!error && file_lock->fl_type != F_UNLCK) {
    + if (!error && file_lock->fl_type != F_UNLCK &&
    + !(file_lock->fl_flags & FL_OFDLCK)) {
    /*
    * We need that spin_lock here - it prevents reordering between
    * update of i_flctx->flc_posix and check for it done in
    @@ -2362,10 +2364,12 @@ int fcntl_setlk64(unsigned int fd, struc
    error = do_lock_file_wait(filp, cmd, file_lock);

    /*
    - * Attempt to detect a close/fcntl race and recover by
    - * releasing the lock that was just acquired.
    + * Attempt to detect a close/fcntl race and recover by releasing the
    + * lock that was just acquired. There is no need to do that when we're
    + * unlocking though, or for OFD locks.
    */
    - if (!error && file_lock->fl_type != F_UNLCK) {
    + if (!error && file_lock->fl_type != F_UNLCK &&
    + !(file_lock->fl_flags & FL_OFDLCK)) {
    /*
    * We need that spin_lock here - it prevents reordering between
    * update of i_flctx->flc_posix and check for it done in

    \
     
     \ /
      Last update: 2018-01-15 15:20    [W:2.744 / U:0.092 seconds]
    ©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site