On Mon, Oct 29 2018 at 10:25am -0400, Jens Axboe <axboe@xxxxxxxxx> wrote: > On 10/29/18 1:10 AM, Hannes Reinecke wrote: > > On 10/25/18 11:10 PM, Jens Axboe wrote: > >> Nobody sets the helper, so we always return 0. Kill it. > >> > >> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> > >> --- > >> block/blk-core.c | 28 ---------------------------- > >> block/blk-settings.c | 6 ------ > >> drivers/md/dm-mpath.c | 4 +--- > >> include/linux/blkdev.h | 4 ---- > >> 4 files changed, 1 insertion(+), 41 deletions(-) > >> > >> diff --git a/block/blk-core.c b/block/blk-core.c > >> index 4c39c7865f9c..dd1328f4dc31 100644 > >> --- a/block/blk-core.c > >> +++ b/block/blk-core.c > >> @@ -1795,34 +1795,6 @@ void rq_flush_dcache_pages(struct request *rq) > >> EXPORT_SYMBOL_GPL(rq_flush_dcache_pages); > >> #endif > >> > >> -/** > >> - * blk_lld_busy - Check if underlying low-level drivers of a device are busy > >> - * @q : the queue of the device being checked > >> - * > >> - * Description: > >> - * Check if underlying low-level drivers of a device are busy. > >> - * If the drivers want to export their busy state, they must set own > >> - * exporting function using blk_queue_lld_busy() first. > >> - * > >> - * Basically, this function is used only by request stacking drivers > >> - * to stop dispatching requests to underlying devices when underlying > >> - * devices are busy. This behavior helps more I/O merging on the queue > >> - * of the request stacking driver and prevents I/O throughput regression > >> - * on burst I/O load. > >> - * > >> - * Return: > >> - * 0 - Not busy (The request stacking driver should dispatch request) > >> - * 1 - Busy (The request stacking driver should stop dispatching request) > >> - */ > >> -int blk_lld_busy(struct request_queue *q) > >> -{ > >> - if (q->lld_busy_fn) > >> - return q->lld_busy_fn(q); > >> - > >> - return 0; > >> -} > >> -EXPORT_SYMBOL_GPL(blk_lld_busy); > >> - > >> /** > >> * blk_rq_unprep_clone - Helper function to free all bios in a cloned request > >> * @rq: the clone request to be cleaned up > >> diff --git a/block/blk-settings.c b/block/blk-settings.c > >> index 3c5da75c2def..1895f499bbe5 100644 > >> --- a/block/blk-settings.c > >> +++ b/block/blk-settings.c > >> @@ -32,12 +32,6 @@ void blk_queue_rq_timeout(struct request_queue *q, unsigned int timeout) > >> } > >> EXPORT_SYMBOL_GPL(blk_queue_rq_timeout); > >> > >> -void blk_queue_lld_busy(struct request_queue *q, lld_busy_fn *fn) > >> -{ > >> - q->lld_busy_fn = fn; > >> -} > >> -EXPORT_SYMBOL_GPL(blk_queue_lld_busy); > >> - > >> /** > >> * blk_set_default_limits - reset limits to default values > >> * @lim: the queue_limits structure to reset > >> diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c > >> index a24ed3973e7c..4d736e0fd67f 100644 > >> --- a/drivers/md/dm-mpath.c > >> +++ b/drivers/md/dm-mpath.c > >> @@ -1936,9 +1936,7 @@ static int multipath_iterate_devices(struct dm_target *ti, > >> > >> static int pgpath_busy(struct pgpath *pgpath) > >> { > >> - struct request_queue *q = bdev_get_queue(pgpath->path.dev->bdev); > >> - > >> - return blk_lld_busy(q); > >> + return 0; > >> } > >> > >> /* > > Actually, I'm not quite sure this is correct; dm-mpath needs to return a > > busy status (via the '->busy' callback) to allow for back-pressure on > > the upper layers. > > Just disabling the callback will disable this. > > Shouldn't we check if the tagmap is busy here? > > Mike? We can pretty easily make it just check for busy tags. OK, please feel free to do so. Happy to pick the patch up or provide review so you can stage it in your 4.21 oriented tree. Thanks, Mike