file locks: Use wait_event_interruptible_timeout()

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: J. Bruce Fields <bfields@...>
Cc: Oleg Drokin <Oleg.Drokin@...>, <linux-fsdevel@...>
Date: Tuesday, January 15, 2008 - 12:28 am

interruptible_sleep_on_locked() is just an open-coded
wait_event_interruptible_timeout() with a few assumptions since we know
we hold the BKL.  locks_block_on_timeout() is only used in one place, so
it's actually simpler to inline it into its caller.

Signed-off-by: Matthew Wilcox <willy@linux.intel.com>

 locks.c |   33 ++++-----------------------------
 1 file changed, 4 insertions(+), 29 deletions(-)

diff --git a/fs/locks.c b/fs/locks.c
index 8b8388e..b681459 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -634,33 +634,6 @@ static int flock_locks_conflict(struct file_lock *caller_fl, struct file_lock *s
 	return (locks_conflict(caller_fl, sys_fl));
 }
 
-static int interruptible_sleep_on_locked(wait_queue_head_t *fl_wait, int timeout)
-{
-	int result = 0;
-	DECLARE_WAITQUEUE(wait, current);
-
-	__set_current_state(TASK_INTERRUPTIBLE);
-	add_wait_queue(fl_wait, &wait);
-	if (timeout == 0)
-		schedule();
-	else
-		result = schedule_timeout(timeout);
-	if (signal_pending(current))
-		result = -ERESTARTSYS;
-	remove_wait_queue(fl_wait, &wait);
-	__set_current_state(TASK_RUNNING);
-	return result;
-}
-
-static int locks_block_on_timeout(struct file_lock *blocker, struct file_lock *waiter, int time)
-{
-	int result;
-	locks_insert_block(blocker, waiter);
-	result = interruptible_sleep_on_locked(&waiter->fl_wait, time);
-	__locks_delete_block(waiter);
-	return result;
-}
-
 void
 posix_test_lock(struct file *filp, struct file_lock *fl)
 {
@@ -1256,7 +1229,10 @@ restart:
 		if (break_time == 0)
 			break_time++;
 	}
-	error = locks_block_on_timeout(flock, new_fl, break_time);
+	locks_insert_block(flock, new_fl);
+	error = wait_event_interruptible_timeout(new_fl->fl_wait,
+						!new_fl->fl_next, break_time);
+	__locks_delete_block(new_fl);
 	if (error >= 0) {
 		if (error == 0)
 			time_out_leases(inode);

-- 
Intel are signing my paycheques ... these opinions are still mine
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours.  We can't possibly take such
a retrograde step."
-
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Leak in nlmsvc_testlock for async GETFL case, Oleg Drokin, (Thu Nov 29, 2:46 pm)
Re: Leak in nlmsvc_testlock for async GETFL case, Felix Blyakher, (Mon Dec 3, 1:00 pm)
Re: Leak in nlmsvc_testlock for async GETFL case, Oleg Drokin, (Mon Dec 3, 1:49 pm)
Re: Leak in nlmsvc_testlock for async GETFL case, J. Bruce Fields, (Thu Nov 29, 3:08 pm)
Re: Leak in nlmsvc_testlock for async GETFL case, Oleg Drokin, (Fri Jan 11, 10:57 pm)
Re: Leak in nlmsvc_testlock for async GETFL case, J. Bruce Fields, (Mon Jan 14, 4:44 pm)
Re: Leak in nlmsvc_testlock for async GETFL case, Matthew Wilcox, (Tue Jan 15, 12:26 am)
Re: Leak in nlmsvc_testlock for async GETFL case, J. Bruce Fields, (Tue Jan 15, 10:42 am)
file locks: Split flock_find_conflict out of flock_lock_file, Matthew Wilcox, (Tue Jan 15, 12:29 am)
file locks: Use wait_event_interruptible_timeout(), Matthew Wilcox, (Tue Jan 15, 12:28 am)
Re: file locks: Use wait_event_interruptible_timeout(), J. Bruce Fields, (Tue Jan 15, 10:48 am)
Re: file locks: Use wait_event_interruptible_timeout(), Matthew Wilcox, (Tue Jan 15, 11:04 am)
Re: file locks: Use wait_event_interruptible_timeout(), J. Bruce Fields, (Tue Jan 15, 2:54 pm)