@@ -466,10 +466,9 @@ static void register_disk(struct device *parent, struct gendisk *disk,
466466 dev_set_uevent_suppress (ddev , 0 );
467467 disk_uevent (disk , KOBJ_ADD );
468468
469- if (disk -> queue -> backing_dev_info -> dev ) {
470- err = sysfs_create_link (& ddev -> kobj ,
471- & disk -> queue -> backing_dev_info -> dev -> kobj ,
472- "bdi" );
469+ if (disk -> bdi -> dev ) {
470+ err = sysfs_create_link (& ddev -> kobj , & disk -> bdi -> dev -> kobj ,
471+ "bdi" );
473472 WARN_ON (err );
474473 }
475474}
@@ -540,15 +539,14 @@ void device_add_disk(struct device *parent, struct gendisk *disk,
540539 disk -> flags |= GENHD_FL_SUPPRESS_PARTITION_INFO ;
541540 disk -> flags |= GENHD_FL_NO_PART_SCAN ;
542541 } else {
543- struct backing_dev_info * bdi = disk -> queue -> backing_dev_info ;
544542 struct device * dev = disk_to_dev (disk );
545543
546544 /* Register BDI before referencing it from bdev */
547545 dev -> devt = MKDEV (disk -> major , disk -> first_minor );
548- ret = bdi_register (bdi , "%u:%u" ,
546+ ret = bdi_register (disk -> bdi , "%u:%u" ,
549547 disk -> major , disk -> first_minor );
550548 WARN_ON (ret );
551- bdi_set_owner (bdi , dev );
549+ bdi_set_owner (disk -> bdi , dev );
552550 bdev_add (disk -> part0 , dev -> devt );
553551 }
554552 register_disk (parent , disk , groups );
@@ -615,7 +613,7 @@ void del_gendisk(struct gendisk *disk)
615613 * Unregister bdi before releasing device numbers (as they can
616614 * get reused and we'd get clashes in sysfs).
617615 */
618- bdi_unregister (disk -> queue -> backing_dev_info );
616+ bdi_unregister (disk -> bdi );
619617 }
620618
621619 blk_unregister_queue (disk );
@@ -1088,6 +1086,7 @@ static void disk_release(struct device *dev)
10881086
10891087 might_sleep ();
10901088
1089+ bdi_put (disk -> bdi );
10911090 if (MAJOR (dev -> devt ) == BLOCK_EXT_MAJOR )
10921091 blk_free_ext_minor (MINOR (dev -> devt ));
10931092 disk_release_events (disk );
@@ -1268,9 +1267,13 @@ struct gendisk *__alloc_disk_node(int minors, int node_id)
12681267 if (!disk )
12691268 return NULL ;
12701269
1270+ disk -> bdi = bdi_alloc (node_id );
1271+ if (!disk -> bdi )
1272+ goto out_free_disk ;
1273+
12711274 disk -> part0 = bdev_alloc (disk , 0 );
12721275 if (!disk -> part0 )
1273- goto out_free_disk ;
1276+ goto out_free_bdi ;
12741277
12751278 disk -> node_id = node_id ;
12761279 mutex_init (& disk -> open_mutex );
@@ -1292,6 +1295,8 @@ struct gendisk *__alloc_disk_node(int minors, int node_id)
12921295out_destroy_part_tbl :
12931296 xa_destroy (& disk -> part_tbl );
12941297 iput (disk -> part0 -> bd_inode );
1298+ out_free_bdi :
1299+ bdi_put (disk -> bdi );
12951300out_free_disk :
12961301 kfree (disk );
12971302 return NULL ;
0 commit comments