On Thu, Mar 31, 2022 at 10:19:57AM -0400, James Bottomley wrote: > On Thu, 2022-03-31 at 16:42 +0300, Dan Carpenter wrote: > [...] > > Also, I don't really understand why we don't have to call > > put_device(&sdkp->disk_dev) at the end of sd_remove(). > > That's because the final put is done by the gendisk ->free_disk() > function which is scsi_disk_free_disk(). Most of the gendisk functions > we provide convert a gendisk to a scsi_disk (via the gendisk > private_data), so the sdkp has to live as long as the gendisk. > > James Thanks James. Ah... And scsi_disk_free_disk() will not be called unless device_add_disk() succeeds. So Wenchao Hao's patch is correct. And after that there is just a missing device_del() and also I see another problem where if device_add() fails then we need to call put_disk(gd); on that error path. regards, dan carpenter