@@ -551,15 +551,6 @@ void device_add_disk(struct device *parent, struct gendisk *disk,
551551 register_disk (parent , disk , groups );
552552 blk_register_queue (disk );
553553
554- /*
555- * Take an extra ref on queue which will be put on disk_release()
556- * so that it sticks around as long as @disk is there.
557- */
558- if (blk_get_queue (disk -> queue ))
559- set_bit (GD_QUEUE_REF , & disk -> state );
560- else
561- WARN_ON_ONCE (1 );
562-
563554 disk_add_events (disk );
564555 blk_integrity_add (disk );
565556}
@@ -1087,8 +1078,7 @@ static void disk_release(struct device *dev)
10871078 disk_release_events (disk );
10881079 kfree (disk -> random );
10891080 xa_destroy (& disk -> part_tbl );
1090- if (test_bit (GD_QUEUE_REF , & disk -> state ) && disk -> queue )
1091- blk_put_queue (disk -> queue );
1081+ blk_put_queue (disk -> queue );
10921082 iput (disk -> part0 -> bd_inode ); /* frees the disk */
10931083}
10941084
@@ -1259,9 +1249,12 @@ struct gendisk *__alloc_disk_node(struct request_queue *q, int node_id,
12591249{
12601250 struct gendisk * disk ;
12611251
1252+ if (!blk_get_queue (q ))
1253+ return NULL ;
1254+
12621255 disk = kzalloc_node (sizeof (struct gendisk ), GFP_KERNEL , node_id );
12631256 if (!disk )
1264- return NULL ;
1257+ goto out_put_queue ;
12651258
12661259 disk -> bdi = bdi_alloc (node_id );
12671260 if (!disk -> bdi )
@@ -1296,6 +1289,8 @@ struct gendisk *__alloc_disk_node(struct request_queue *q, int node_id,
12961289 bdi_put (disk -> bdi );
12971290out_free_disk :
12981291 kfree (disk );
1292+ out_put_queue :
1293+ blk_put_queue (q );
12991294 return NULL ;
13001295}
13011296EXPORT_SYMBOL (__alloc_disk_node );
0 commit comments