aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/volumes.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index cc01abff03d9..e0913e469728 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -148,7 +148,7 @@ static noinline int run_scheduled_bios(struct btrfs_device *device)
148 unsigned long limit; 148 unsigned long limit;
149 unsigned long last_waited = 0; 149 unsigned long last_waited = 0;
150 150
151 bdi = device->bdev->bd_inode->i_mapping->backing_dev_info; 151 bdi = blk_get_backing_dev_info(device->bdev);
152 fs_info = device->dev_root->fs_info; 152 fs_info = device->dev_root->fs_info;
153 limit = btrfs_async_submit_limit(fs_info); 153 limit = btrfs_async_submit_limit(fs_info);
154 limit = limit * 2 / 3; 154 limit = limit * 2 / 3;
@@ -258,6 +258,18 @@ loop_lock:
258 if (device->pending_bios) 258 if (device->pending_bios)
259 goto loop_lock; 259 goto loop_lock;
260 spin_unlock(&device->io_lock); 260 spin_unlock(&device->io_lock);
261
262 /*
263 * IO has already been through a long path to get here. Checksumming,
264 * async helper threads, perhaps compression. We've done a pretty
265 * good job of collecting a batch of IO and should just unplug
266 * the device right away.
267 *
268 * This will help anyone who is waiting on the IO, they might have
269 * already unplugged, but managed to do so before the bio they
270 * cared about found its way down here.
271 */
272 blk_run_backing_dev(bdi, NULL);
261done: 273done:
262 return 0; 274 return 0;
263} 275}