summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@citi.umich.edu>2007-05-11 16:09:32 -0400
committerJ. Bruce Fields <bfields@citi.umich.edu>2007-07-18 19:17:19 -0400
commit6d34ac199a4af5c678a3a8f3275aeb2586b72da3 (patch)
tree4ab6cffcfe993baa0afb2ab361a8c94ebfc3a444 /fs
parent370f6599e8bc03fd9fc6d1a1be00ae0c6373ca59 (diff)
downloadlwn-6d34ac199a4af5c678a3a8f3275aeb2586b72da3.tar.gz
lwn-6d34ac199a4af5c678a3a8f3275aeb2586b72da3.zip
locks: make posix_test_lock() interface more consistent
Since posix_test_lock(), like fcntl() and ->lock(), indicates absence or presence of a conflict lock by setting fl_type to, respectively, F_UNLCK or something other than F_UNLCK, the return value is no longer needed. Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
Diffstat (limited to 'fs')
-rw-r--r--fs/locks.c10
-rw-r--r--fs/nfs/file.c4
2 files changed, 7 insertions, 7 deletions
diff --git a/fs/locks.c b/fs/locks.c
index 4c73b857dded..4a8072736efa 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -659,7 +659,7 @@ static int locks_block_on_timeout(struct file_lock *blocker, struct file_lock *w
return result;
}
-int
+void
posix_test_lock(struct file *filp, struct file_lock *fl)
{
struct file_lock *cfl;
@@ -671,14 +671,12 @@ posix_test_lock(struct file *filp, struct file_lock *fl)
if (posix_locks_conflict(cfl, fl))
break;
}
- if (cfl) {
+ if (cfl)
__locks_copy_lock(fl, cfl);
- unlock_kernel();
- return 1;
- } else
+ else
fl->fl_type = F_UNLCK;
unlock_kernel();
- return 0;
+ return;
}
EXPORT_SYMBOL(posix_test_lock);
diff --git a/fs/nfs/file.c b/fs/nfs/file.c
index 13ac6fa2b62b..c87dc713b5d7 100644
--- a/fs/nfs/file.c
+++ b/fs/nfs/file.c
@@ -402,7 +402,9 @@ static int do_getlk(struct file *filp, int cmd, struct file_lock *fl)
lock_kernel();
/* Try local locking first */
- if (posix_test_lock(filp, fl)) {
+ posix_test_lock(filp, fl);
+ if (fl->fl_type != F_UNLCK) {
+ /* found a conflict */
goto out;
}