diff --git a/fs/block_dev.c b/fs/block_dev.c
index 9868b21b8ef945868fb6f91f14c1b55b62f7d1a7..7e891e08d0cee2184f5b136fc8dee554228d3b91 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1650,6 +1650,7 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
 		}
 	}
 	bdev->bd_openers++;
+	kobject_get(bdev->bd_part->holder_dir);
 	if (for_part)
 		bdev->bd_part_count++;
 	if (mode & FMODE_WRITE)
@@ -1925,6 +1926,7 @@ static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part)
 	if (for_part)
 		bdev->bd_part_count--;
 
+	kobject_put(bdev->bd_part->holder_dir);
 	if (!--bdev->bd_openers) {
 		WARN_ON_ONCE(bdev->bd_holders);
 		sync_blockdev(bdev);