struct bd_holder_disk {
struct list_head list;
- struct gendisk *disk;
+ struct block_device *bdev;
int refcnt;
};
{
struct bd_holder_disk *holder;
- list_for_each_entry(holder, &bdev->bd_holder_disks, list)
- if (holder->disk == disk)
+ list_for_each_entry(holder, &disk->slave_bdevs, list)
+ if (holder->bdev == bdev)
return holder;
return NULL;
}
struct bd_holder_disk *holder;
int ret = 0;
- mutex_lock(&bdev->bd_disk->open_mutex);
+ mutex_lock(&disk->open_mutex);
WARN_ON_ONCE(!bdev->bd_holder);
}
INIT_LIST_HEAD(&holder->list);
- holder->disk = disk;
+ holder->bdev = bdev;
holder->refcnt = 1;
ret = add_symlink(disk->slave_dir, bdev_kobj(bdev));
if (ret)
goto out_del;
- list_add(&holder->list, &bdev->bd_holder_disks);
+ list_add(&holder->list, &disk->slave_bdevs);
goto out_unlock;
out_del:
out_free:
kfree(holder);
out_unlock:
- mutex_unlock(&bdev->bd_disk->open_mutex);
+ mutex_unlock(&disk->open_mutex);
return ret;
}
EXPORT_SYMBOL_GPL(bd_link_disk_holder);
{
struct bd_holder_disk *holder;
- mutex_lock(&bdev->bd_disk->open_mutex);
+ mutex_lock(&disk->open_mutex);
holder = bd_find_holder_disk(bdev, disk);
if (!WARN_ON_ONCE(holder == NULL) && !--holder->refcnt) {
del_symlink(disk->slave_dir, bdev_kobj(bdev));
list_del_init(&holder->list);
kfree(holder);
}
- mutex_unlock(&bdev->bd_disk->open_mutex);
+ mutex_unlock(&disk->open_mutex);
}
EXPORT_SYMBOL_GPL(bd_unlink_disk_holder);
unsigned open_partitions; /* number of open partitions */
struct kobject *slave_dir;
-
+#ifdef CONFIG_BLOCK_HOLDER_DEPRECATED
+ struct list_head slave_bdevs;
+#endif
struct timer_rand_state *random;
atomic_t sync_io; /* RAID */
struct disk_events *ev;