block: fix blk_register_queue() return value
PATCH 1/1 block: fix blk_register_queue() return value
blk_register_queue() returns -ENXIO when queue->request_fn is NULL. But there are some block drivers that call blk_register_queue() via add_disk() with queue->request_fn == NULL. (For example, brd, loop)
Although no one checks return value of blk_register_queue(), this patch makes it return 0 instead of -ENXIO when queue->request_fn is NULL,
Also this patch adds warning when blk_register_queue() and blk_unregister_queue() are called with queue == NULL rather than ignore invalid usage silently.
Signed-off-by Akinobu Mita <[email protected]>
Cc Jens Axboe <[email protected]>
--- block/blk-sysfs.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
block/blk-sysfs.c +8 -2
@@ -276,9 +276,12 @@ int blk_register_queue(struct gendisk *dstruct request_queue *q = disk->queue; -if (!q || !q->request_fn) +if (WARN_ON (!q))return -ENXIO ; +if (!q->request_fn) +return 0 ; + ret =kobject_add (&q->kobj,kobject_get (&disk->dev.kobj),"%s" ,"queue" );if (ret <0 )
@@ -300,7 +303,10 @@ void blk_unregister_queue(struct gendisk {struct request_queue *q = disk->queue; -if (q && q->request_fn) { +if (WARN_ON (!q)) +return ; + +if (q->request_fn) {elv_unregister_queue (q);kobject_uevent (&q->kobj,KOBJ_REMOVE );