From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Wilcox Subject: file locks: Use wait_event_interruptible_timeout() Date: Mon, 14 Jan 2008 21:28:30 -0700 Message-ID: <20080115042830.GU18741@parisc-linux.org> References: <48611B2F-1587-48C5-9F30-8DCFA1121CF6@Sun.COM> <20071129190848.GA17907@fieldses.org> <71BCABE5-52AD-4573-8DC0-5C57152A397B@Sun.COM> <20080114204419.GD16926@fieldses.org> <20080115042605.GT18741@parisc-linux.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Oleg Drokin , linux-fsdevel@vger.kernel.org To: "J. Bruce Fields" Return-path: Received: from palinux.external.hp.com ([192.25.206.14]:53704 "EHLO mail.parisc-linux.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750990AbYAOE2b (ORCPT ); Mon, 14 Jan 2008 23:28:31 -0500 Content-Disposition: inline In-Reply-To: <20080115042605.GT18741@parisc-linux.org> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: 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 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."