diff options
author | Chris Mason <chris.mason@oracle.com> | 2009-01-16 11:58:19 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2009-01-16 11:58:19 -0500 |
commit | 1d9e2ae949411c2f329f30e01ea0355cd02c4296 (patch) | |
tree | 64287747fdbb1641052d8ec146c8997c3797bc48 | |
parent | e293e97e363e419d8a3628a927321e3f75206a0b (diff) |
Btrfs: Clear the device->running_pending flag before bailing on congestion
Btrfs maintains a queue of async bio submissions so the checksumming
threads don't have to wait on get_request_wait. In order to avoid
extra wakeups, this code has a running_pending flag that is used
to tell new submissions they don't need to wake the thread.
When the threads notice congestion on a single device, they
may decide to requeue the job and move on to other devices. This
makes sure the running_pending flag is cleared before the
job is requeued.
It should help avoid IO stalls by making sure the task is woken up
when new submissions come in.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r-- | fs/btrfs/volumes.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index b187b537888e..3451e1cca2b5 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c | |||
@@ -220,6 +220,7 @@ loop: | |||
220 | tail->bi_next = old_head; | 220 | tail->bi_next = old_head; |
221 | else | 221 | else |
222 | device->pending_bio_tail = tail; | 222 | device->pending_bio_tail = tail; |
223 | device->running_pending = 0; | ||
223 | 224 | ||
224 | spin_unlock(&device->io_lock); | 225 | spin_unlock(&device->io_lock); |
225 | btrfs_requeue_work(&device->work); | 226 | btrfs_requeue_work(&device->work); |