Skip to content

Commit

Permalink
From: Olaf Kirch <okir@suse.de>
Browse files Browse the repository at this point in the history
[PATCH] Fix miscompare in __posix_lock_file

 If an application requests the same lock twice, the
 kernel should just leave the existing lock in place.
 Currently, it will install a second lock of the same type.

 Signed-off-by: Olaf Kirch <okir@suse.de>
 Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
  • Loading branch information
Olaf Kirch authored and Trond Myklebust committed Sep 23, 2005
1 parent 20509f1 commit 449231d
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion fs/locks.c
Original file line number Diff line number Diff line change
Expand Up @@ -829,12 +829,16 @@ static int __posix_lock_file(struct inode *inode, struct file_lock *request)
/* Detect adjacent or overlapping regions (if same lock type)
*/
if (request->fl_type == fl->fl_type) {
/* In all comparisons of start vs end, use
* "start - 1" rather than "end + 1". If end
* is OFFSET_MAX, end + 1 will become negative.
*/
if (fl->fl_end < request->fl_start - 1)
goto next_lock;
/* If the next lock in the list has entirely bigger
* addresses than the new one, insert the lock here.
*/
if (fl->fl_start > request->fl_end + 1)
if (fl->fl_start - 1 > request->fl_end)
break;

/* If we come here, the new and old lock are of the
Expand Down

0 comments on commit 449231d

Please sign in to comment.