Commit 51684082 authored by Chris Mason's avatar Chris Mason

Btrfs: run the backing dev more often in the submit_bio helper

The submit_bio helper thread can decide to loop back around to
service more bios.  This commit forces it to unplug first, which helps
reduce the latency seen by submitters.
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 4849f01d
...@@ -325,16 +325,6 @@ static noinline int run_scheduled_bios(struct btrfs_device *device) ...@@ -325,16 +325,6 @@ static noinline int run_scheduled_bios(struct btrfs_device *device)
num_sync_run = 0; num_sync_run = 0;
blk_run_backing_dev(bdi, NULL); blk_run_backing_dev(bdi, NULL);
} }
cond_resched();
if (again)
goto loop;
spin_lock(&device->io_lock);
if (device->pending_bios.head || device->pending_sync_bios.head)
goto loop_lock;
spin_unlock(&device->io_lock);
/* /*
* IO has already been through a long path to get here. Checksumming, * IO has already been through a long path to get here. Checksumming,
* async helper threads, perhaps compression. We've done a pretty * async helper threads, perhaps compression. We've done a pretty
...@@ -346,6 +336,16 @@ static noinline int run_scheduled_bios(struct btrfs_device *device) ...@@ -346,6 +336,16 @@ static noinline int run_scheduled_bios(struct btrfs_device *device)
* cared about found its way down here. * cared about found its way down here.
*/ */
blk_run_backing_dev(bdi, NULL); blk_run_backing_dev(bdi, NULL);
cond_resched();
if (again)
goto loop;
spin_lock(&device->io_lock);
if (device->pending_bios.head || device->pending_sync_bios.head)
goto loop_lock;
spin_unlock(&device->io_lock);
done: done:
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment