locks: don't check for race with close when setting OFD lock

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>
This commit is contained in:
Jeff Layton 2016-01-08 07:30:43 -05:00 committed by Greg Kroah-Hartman
parent c4eafbc2ba
commit e143f5d262

View File

@ -2220,10 +2220,12 @@ int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd,
error = do_lock_file_wait(filp, cmd, file_lock); error = do_lock_file_wait(filp, cmd, file_lock);
/* /*
* Attempt to detect a close/fcntl race and recover by * Attempt to detect a close/fcntl race and recover by releasing the
* releasing the lock that was just acquired. * 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 * We need that spin_lock here - it prevents reordering between
* update of i_flctx->flc_posix and check for it done in * update of i_flctx->flc_posix and check for it done in
@ -2362,10 +2364,12 @@ int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd,
error = do_lock_file_wait(filp, cmd, file_lock); error = do_lock_file_wait(filp, cmd, file_lock);
/* /*
* Attempt to detect a close/fcntl race and recover by * Attempt to detect a close/fcntl race and recover by releasing the
* releasing the lock that was just acquired. * 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 * We need that spin_lock here - it prevents reordering between
* update of i_flctx->flc_posix and check for it done in * update of i_flctx->flc_posix and check for it done in