locks: don't check for race with close when setting OFD lock
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>
This commit is contained in:
Родитель
7f3697e24d
Коммит
0752ba807b
16
fs/locks.c
16
fs/locks.c
|
@ -2219,10 +2219,12 @@ int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd,
|
|||
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
|
||||
|
@ -2361,10 +2363,12 @@ int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd,
|
|||
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
|
||||
|
|
Загрузка…
Ссылка в новой задаче