From fe59efa12157a4bdea1d9e3159671e49fcf39aab Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Thu, 24 Feb 2011 09:56:32 +0100 Subject: [PATCH] --- yaml --- r: 233641 b: refs/heads/master c: e7407d1619713f4b1fdff3a485e1bd8e77bd480d h: refs/heads/master i: 233639: af51f25874f838d524ec91824eae7e242f8e7783 v: v3 --- [refs] | 2 +- trunk/fs/block_dev.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index b338ab4e58f1..b2e6f8847ae2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8074b26f67165bf045d92e778c9c10dc5e207fc6 +refs/heads/master: e7407d1619713f4b1fdff3a485e1bd8e77bd480d diff --git a/trunk/fs/block_dev.c b/trunk/fs/block_dev.c index 4fb8a3431531..94d41db62004 100644 --- a/trunk/fs/block_dev.c +++ b/trunk/fs/block_dev.c @@ -873,6 +873,11 @@ int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk) ret = add_symlink(bdev->bd_part->holder_dir, &disk_to_dev(disk)->kobj); if (ret) goto out_del; + /* + * bdev could be deleted beneath us which would implicitly destroy + * the holder directory. Hold on to it. + */ + kobject_get(bdev->bd_part->holder_dir); list_add(&holder->list, &bdev->bd_holder_disks); goto out_unlock; @@ -909,6 +914,7 @@ void bd_unlink_disk_holder(struct block_device *bdev, struct gendisk *disk) del_symlink(disk->slave_dir, &part_to_dev(bdev->bd_part)->kobj); del_symlink(bdev->bd_part->holder_dir, &disk_to_dev(disk)->kobj); + kobject_put(bdev->bd_part->holder_dir); list_del_init(&holder->list); kfree(holder); }