summaryrefslogtreecommitdiff
path: root/drivers/md/dm.c
diff options
context:
space:
mode:
authorMike Snitzer <snitzer@redhat.com>2016-02-02 22:35:06 -0500
committerMike Snitzer <snitzer@redhat.com>2016-02-22 11:06:20 -0500
commite522c039059b0fdf5ecd15d7007026326fffc9be (patch)
treea5430d774614667b9f62349d437939e60fd35be0 /drivers/md/dm.c
parentae6ad75e5c3c51f99c57e289058c5ec4c8701963 (diff)
dm: cleanup dm_any_congested()
The request-based DM support for checking queue congestion doesn't require access to the live DM table. Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'drivers/md/dm.c')
-rw-r--r--drivers/md/dm.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 30302df20201..d605170a02d9 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -2137,19 +2137,18 @@ static int dm_any_congested(void *congested_data, int bdi_bits)
struct dm_table *map;
if (!test_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags)) {
- map = dm_get_live_table_fast(md);
- if (map) {
+ if (dm_request_based(md)) {
/*
- * Request-based dm cares about only own queue for
- * the query about congestion status of request_queue
+ * With request-based DM we only need to check the
+ * top-level queue for congestion.
*/
- if (dm_request_based(md))
- r = md->queue->backing_dev_info.wb.state &
- bdi_bits;
- else
+ r = md->queue->backing_dev_info.wb.state & bdi_bits;
+ } else {
+ map = dm_get_live_table_fast(md);
+ if (map)
r = dm_table_any_congested(map, bdi_bits);
+ dm_put_live_table_fast(md);
}
- dm_put_live_table_fast(md);
}
return r;