mirror of https://gitee.com/openkylin/linux.git
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 <akinobu.mita@gmail.com> Cc: Jens Axboe <axboe@kernel.dk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
2472892a3c
commit
fb19974630
|
@ -276,9 +276,12 @@ int blk_register_queue(struct gendisk *disk)
|
|||
|
||||
struct 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 *disk)
|
|||
{
|
||||
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);
|
||||
|
|
Loading…
Reference in New Issue