ext4: Use schedule_timeout_interruptible() for waiting in lazyinit thread
authorLukas Czerner <lczerner@redhat.com>
Fri, 20 May 2011 17:49:04 +0000 (13:49 -0400)
committerSteve Conklin <sconklin@canonical.com>
Fri, 15 Jul 2011 17:21:13 +0000 (12:21 -0500)
commit9993ee015d68dcc2cd2ab0e612faf49974a83b0e
tree36469745a56f10e329dcb840d1d35a19e6cc42d8
parentd394a224594965d53046908ea5851c7043f9997d
ext4: Use schedule_timeout_interruptible() for waiting in lazyinit thread

BugLink: http://bugs.launchpad.net/bugs/793702

commit 4ed5c033c11b33149d993734a6a8de1016e8f03f upstream.

In order to make lazyinit eat approx. 10% of io bandwidth at max, we
are sleeping between zeroing each single inode table. For that purpose
we are using timer which wakes up thread when it expires. It is set
via add_timer() and this may cause troubles in the case that thread
has been woken up earlier and in next iteration we call add_timer() on
still running timer hence hitting BUG_ON in add_timer(). We could fix
that by using mod_timer() instead however we can use
schedule_timeout_interruptible() for waiting and hence simplifying
things a lot.

This commit exchange the old "waiting mechanism" with simple
schedule_timeout_interruptible(), setting the time to sleep. Hence we
do not longer need li_wait_daemon waiting queue and others, so get rid
of it.

Addresses-Red-Hat-Bugzilla: #699708

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
fs/ext4/ext4.h
fs/ext4/super.c