Manually reverting "block: remove the extra kobject reference in bd_link_disk_holder" as show below fixed the issue for me. I'll spend some more time tomorrow trying to fully understan the life time rules tomorrow before sending a patch, though. --- >From 6b94f5435900d23769db8d07ff47415aab4ac63e Mon Sep 17 00:00:00 2001 From: Christoph Hellwig <hch@xxxxxx> Date: Thu, 19 Aug 2021 20:01:43 +0200 Subject: Revert "block: remove the extra kobject reference in bd_link_disk_holder" This reverts commit fbd9a39542ecdd2ade55869c13856b2590db3df8. --- block/holder.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/block/holder.c b/block/holder.c index 4568cc4f6827..ecbc6941e7d8 100644 --- a/block/holder.c +++ b/block/holder.c @@ -106,6 +106,12 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk) } list_add(&holder->list, &disk->slave_bdevs); + /* + * bdev could be deleted beneath us which would implicitly destroy + * the holder directory. Hold on to it. + */ + kobject_get(bdev->bd_holder_dir); + out_unlock: mutex_unlock(&disk->open_mutex); return ret; @@ -138,6 +144,7 @@ void bd_unlink_disk_holder(struct block_device *bdev, struct gendisk *disk) if (!WARN_ON_ONCE(holder == NULL) && !--holder->refcnt) { if (disk->slave_dir) __unlink_disk_holder(bdev, disk); + kobject_put(bdev->bd_holder_dir); list_del_init(&holder->list); kfree(holder); } -- 2.30.2