lockdep_init_map(&disk->lockdep_map, "(bio completion)", lkclass, 0);
#ifdef CONFIG_BLOCK_HOLDER_DEPRECATED
INIT_LIST_HEAD(&disk->slave_bdevs);
+ mutex_init(&disk->holder_mutex);
#endif
return disk;
struct bd_holder_disk *holder;
int ret = 0;
- mutex_lock(&disk->open_mutex);
+ mutex_lock(&disk->holder_mutex);
WARN_ON_ONCE(!bdev->bd_holder);
kobject_get(bdev->bd_holder_dir);
out_unlock:
- mutex_unlock(&disk->open_mutex);
+ mutex_unlock(&disk->holder_mutex);
return ret;
}
EXPORT_SYMBOL_GPL(bd_link_disk_holder);
{
struct bd_holder_disk *holder;
- mutex_lock(&disk->open_mutex);
+ mutex_lock(&disk->holder_mutex);
holder = bd_find_holder_disk(bdev, disk);
if (!WARN_ON_ONCE(holder == NULL) && !--holder->refcnt) {
if (disk->slave_dir)
list_del_init(&holder->list);
kfree(holder);
}
- mutex_unlock(&disk->open_mutex);
+ mutex_unlock(&disk->holder_mutex);
}
EXPORT_SYMBOL_GPL(bd_unlink_disk_holder);
struct bd_holder_disk *holder;
int ret;
- mutex_lock(&disk->open_mutex);
+ mutex_lock(&disk->holder_mutex);
list_for_each_entry(holder, &disk->slave_bdevs, list) {
ret = __link_disk_holder(holder->bdev, disk);
if (ret)
goto out_undo;
}
- mutex_unlock(&disk->open_mutex);
+ mutex_unlock(&disk->holder_mutex);
return 0;
out_undo:
list_for_each_entry_continue_reverse(holder, &disk->slave_bdevs, list)
__unlink_disk_holder(holder->bdev, disk);
- mutex_unlock(&disk->open_mutex);
+ mutex_unlock(&disk->holder_mutex);
return ret;
}
struct kobject *slave_dir;
#ifdef CONFIG_BLOCK_HOLDER_DEPRECATED
struct list_head slave_bdevs;
+ struct mutex holder_mutex;
#endif
struct timer_rand_state *random;
atomic_t sync_io; /* RAID */