The patch titled
locks: fix F_GETLK regression (failure to find conflicts)
has been removed from the -mm tree. Its filename was
locks-fix-f_getlk-regression-failure-to-find-conflicts.patch
This patch was dropped because it was merged into mainline or a subsystem tree
------------------------------------------------------
Subject: locks: fix F_GETLK regression (failure to find conflicts)
From: "J. Bruce Fields" <[EMAIL PROTECTED]>
In 9d6a8c5c213e34c475e72b245a8eb709258e968c we changed posix_test_lock to
modify its single file_lock argument instead of taking separate input and
output arguments. This makes it no longer safe to set the output lock's
fl_type to F_UNLCK before looking for a conflict, since that means
searching for a conflict against a lock with type F_UNLCK.
This fixes a regression which causes F_GETLK to incorrectly report no
conflict on most filesystems (including any filesystem that doesn't do its
own locking).
Also fix posix_lock_to_flock() to copy the lock type. This isn't strictly
necessary, since the caller already does this; but it seems less likely to
cause confusion in the future.
Thanks to Doug Chapman for the bug report.
Signed-off-by: "J. Bruce Fields" <[EMAIL PROTECTED]>
Cc: Doug Chapman <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
---
fs/locks.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff -puN fs/locks.c~locks-fix-f_getlk-regression-failure-to-find-conflicts
fs/locks.c
--- a/fs/locks.c~locks-fix-f_getlk-regression-failure-to-find-conflicts
+++ a/fs/locks.c
@@ -669,7 +669,6 @@ posix_test_lock(struct file *filp, struc
{
struct file_lock *cfl;
- fl->fl_type = F_UNLCK;
lock_kernel();
for (cfl = filp->f_path.dentry->d_inode->i_flock; cfl; cfl =
cfl->fl_next) {
if (!IS_POSIX(cfl))
@@ -681,7 +680,8 @@ posix_test_lock(struct file *filp, struc
__locks_copy_lock(fl, cfl);
unlock_kernel();
return 1;
- }
+ } else
+ fl->fl_type = F_UNLCK;
unlock_kernel();
return 0;
}
@@ -1632,6 +1632,7 @@ static int posix_lock_to_flock(struct fl
flock->l_len = fl->fl_end == OFFSET_MAX ? 0 :
fl->fl_end - fl->fl_start + 1;
flock->l_whence = 0;
+ flock->l_type = fl->fl_type;
return 0;
}
_
Patches currently in -mm which might be from [EMAIL PROTECTED] are
origin.patch
nlmclnt_recovery-dont-use-clone_sighand.patch
nfs-use-zero_user_page.patch
remove-slab_ctor_constructor.patch
-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html