Please enable JavaScript.
Coggle requires JavaScript to display documents.
disk release vs. module unloading - Coggle Diagram
disk release vs. module unloading
contexts
disk open
get ref of bdev->bd_device.kobj
disk_to_dev
(&((disk)->part0->bd_device)
put_disk
put_device(disk_to_dev(disk))
try_module_get
->open()
scsi disk delete
scsi_remove_device
device_del
sd_remove
put_device(scsi_disk)
scsi_disk_release()
put_disk()
put_device(sdev)
put_host()
disk close
blkdev_put
disk->fops->release()
module_put(disk->fops->owner)
rmmod is possible
put_device(&bdev->bd_device)
issues
lifetime: gendisk vs. scsi_disk
gendisk refcnt is grabbed in blkdev_get_no_open()
scsi_disk refcnt is grabbed in sd_open()
delete comes before grabbing scsi_disk refcnt
module unloading starts
del_gensik won't drain openers
try_module_get() is done between the above two opens()
observations
disk can't be opened after it is deleted via del_gendisk
there can be old bdev openers after disk is deleted
del_gendisk after opened
try_get_module() shouldn't touch unloaded module
module_exit() should make sure no one will grab modules?