On Fri, Nov 27, 2020 at 02:19:01PM +0100, Jan Kara wrote: > The percpu refcount is long gone after the series refactoring... True. > > @@ -939,13 +910,13 @@ void blk_request_module(dev_t devt) > > */ > > struct block_device *bdget_disk(struct gendisk *disk, int partno) > > { > > - struct hd_struct *part; > > struct block_device *bdev = NULL; > > > > - part = disk_get_part(disk, partno); > > - if (part) > > - bdev = bdget_part(part); > > - disk_put_part(part); > > + rcu_read_lock(); > > + bdev = __disk_get_part(disk, partno); > > + if (bdev) > > + bdgrab(bdev); > > Again I think you need to accommodate for bdgrab() returning NULL here when > we race with partition destruction... For that we need to allow bdgrab to return NULL first, but otherwise this seems like the right way.