{
        int ret;
        struct blk_cmd_filter *filter = &disk->queue->cmd_filter;
-       struct kobject *parent = kobject_get(disk->holder_dir->parent);
 
-       if (!parent)
-               return -ENODEV;
-
-       ret = kobject_init_and_add(&filter->kobj, &rcf_ktype, parent,
+       ret = kobject_init_and_add(&filter->kobj, &rcf_ktype,
+                                  &disk_to_dev(disk)->kobj,
                                   "%s", "cmd_filter");
-
        if (ret < 0)
                return ret;
 
        struct blk_cmd_filter *filter = &disk->queue->cmd_filter;
 
        kobject_put(&filter->kobj);
-       kobject_put(disk->holder_dir->parent);
 }
 EXPORT_SYMBOL(blk_unregister_filter);
 #endif
 
                return kobject_get(&disk_to_dev(bdev->bd_disk)->kobj);
 }
 
-static struct kobject *bdev_get_holder(struct block_device *bdev)
-{
-       if (bdev->bd_contains != bdev)
-               return kobject_get(bdev->bd_part->holder_dir);
-       else
-               return kobject_get(bdev->bd_disk->holder_dir);
-}
-
 static int add_symlink(struct kobject *from, struct kobject *to)
 {
        if (!from || !to)
        if (!bo->sdev)
                goto fail_put_hdev;
 
-       bo->hdir = bdev_get_holder(bdev);
+       bo->hdir = kobject_get(bdev->bd_part->holder_dir);
        if (!bo->hdir)
                goto fail_put_sdev;
 
 
        .release        = part_release,
 };
 
-static inline void disk_sysfs_add_subdirs(struct gendisk *disk)
-{
-       struct kobject *k;
-
-       k = kobject_get(&disk_to_dev(disk)->kobj);
-       disk->holder_dir = kobject_create_and_add("holders", k);
-       disk->slave_dir = kobject_create_and_add("slaves", k);
-       kobject_put(k);
-}
-
 static void delete_partition_rcu_cb(struct rcu_head *head)
 {
        struct hd_struct *part = container_of(head, struct hd_struct, rcu_head);
                return;
        }
 #endif
-       disk_sysfs_add_subdirs(disk);
+       disk->part0.holder_dir = kobject_create_and_add("holders", &ddev->kobj);
+       disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj);
 
        /* No minors to use for partitions */
        if (!disk_partitionable(disk))
        disk_stat_set_all(disk, 0);
        disk->stamp = 0;
 
-       kobject_put(disk->holder_dir);
+       kobject_put(disk->part0.holder_dir);
        kobject_put(disk->slave_dir);
        disk->driverfs_dev = NULL;
 #ifndef CONFIG_SYSFS_DEPRECATED
 
 
        int flags;
        struct device *driverfs_dev;  // FIXME: remove
-       struct kobject *holder_dir;
        struct kobject *slave_dir;
 
        struct timer_rand_state *random;