diff --git a/block/partitions/core.c b/block/partitions/core.c index 1a7558917c47d6..f5d5872b89d57e 100644 --- a/block/partitions/core.c +++ b/block/partitions/core.c @@ -288,15 +288,12 @@ struct device_type part_type = { void delete_partition(struct block_device *part) { xa_erase(&part->bd_disk->part_tbl, part->bd_partno); - kobject_put(part->bd_holder_dir); - device_del(&part->bd_device); - - /* - * Remove the block device from the inode hash, so that it cannot be - * looked up any more even when openers still hold references. - */ remove_inode_hash(part->bd_inode); + synchronize_rcu(); + + kobject_put(part->bd_holder_dir); + device_del(&part->bd_device); put_device(&part->bd_device); }