X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=block%2Fgenhd.c;h=3631cd4802955247d27316c10b172744700e6340;hb=a3902ee98304324f681088203391b5c0353ce977;hp=d9ccd42f36756358e6f7e5c0219e916bc08c0d6b;hpb=dc3b17cc8bf21307c7e076e7c778d5db756f7871;p=platform%2Fkernel%2Flinux-rpi.git diff --git a/block/genhd.c b/block/genhd.c index d9ccd42..3631cd4 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -572,6 +572,20 @@ exit: disk_part_iter_exit(&piter); } +void put_disk_devt(struct disk_devt *disk_devt) +{ + if (disk_devt && atomic_dec_and_test(&disk_devt->count)) + disk_devt->release(disk_devt); +} +EXPORT_SYMBOL(put_disk_devt); + +void get_disk_devt(struct disk_devt *disk_devt) +{ + if (disk_devt) + atomic_inc(&disk_devt->count); +} +EXPORT_SYMBOL(get_disk_devt); + /** * device_add_disk - add partitioning information to kernel list * @parent: parent device for the disk @@ -612,6 +626,13 @@ void device_add_disk(struct device *parent, struct gendisk *disk) disk_alloc_events(disk); + /* + * Take a reference on the devt and assign it to queue since it + * must not be reallocated while the bdi is registered + */ + disk->queue->disk_devt = disk->disk_devt; + get_disk_devt(disk->disk_devt); + /* Register BDI before referencing it from bdev */ bdi = disk->queue->backing_dev_info; bdi_register_owner(bdi, disk_to_dev(disk));