|
@@ -148,7 +148,7 @@ static noinline int run_scheduled_bios(struct btrfs_device *device)
|
|
|
unsigned long limit;
|
|
|
unsigned long last_waited = 0;
|
|
|
|
|
|
- bdi = device->bdev->bd_inode->i_mapping->backing_dev_info;
|
|
|
+ bdi = blk_get_backing_dev_info(device->bdev);
|
|
|
fs_info = device->dev_root->fs_info;
|
|
|
limit = btrfs_async_submit_limit(fs_info);
|
|
|
limit = limit * 2 / 3;
|
|
@@ -258,6 +258,18 @@ loop_lock:
|
|
|
if (device->pending_bios)
|
|
|
goto loop_lock;
|
|
|
spin_unlock(&device->io_lock);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * IO has already been through a long path to get here. Checksumming,
|
|
|
+ * async helper threads, perhaps compression. We've done a pretty
|
|
|
+ * good job of collecting a batch of IO and should just unplug
|
|
|
+ * the device right away.
|
|
|
+ *
|
|
|
+ * This will help anyone who is waiting on the IO, they might have
|
|
|
+ * already unplugged, but managed to do so before the bio they
|
|
|
+ * cared about found its way down here.
|
|
|
+ */
|
|
|
+ blk_run_backing_dev(bdi, NULL);
|
|
|
done:
|
|
|
return 0;
|
|
|
}
|