summaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_main.c
diff options
context:
space:
mode:
authorAndreas Gruenbacher2011-06-21 17:23:59 +0200
committerPhilipp Reisner2014-02-17 16:45:00 +0100
commitc06ece6ba6f1bb2e01616e111303c3ae5f80fdbe (patch)
tree2044b6aecd791466750863dbda4a544bce31bd19 /drivers/block/drbd/drbd_main.c
parentdrbd: Move resource options from connection to resource (diff)
downloadkernel-qcow2-linux-c06ece6ba6f1bb2e01616e111303c3ae5f80fdbe.tar.gz
kernel-qcow2-linux-c06ece6ba6f1bb2e01616e111303c3ae5f80fdbe.tar.xz
kernel-qcow2-linux-c06ece6ba6f1bb2e01616e111303c3ae5f80fdbe.zip
drbd: Turn connection->volumes into connection->peer_devices
Let connection->peer_devices point to peer devices; connection->volumes was pointing to devices. Signed-off-by: Andreas Gruenbacher <agruen@linbit.com> Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_main.c')
-rw-r--r--drivers/block/drbd/drbd_main.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index e58239cf7ec1..3a67f2421077 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -496,15 +496,16 @@ char *drbd_task_to_thread_name(struct drbd_connection *connection, struct task_s
int conn_lowest_minor(struct drbd_connection *connection)
{
- struct drbd_device *device;
- int vnr = 0, m;
+ struct drbd_peer_device *peer_device;
+ int vnr = 0, minor = -1;
rcu_read_lock();
- device = idr_get_next(&connection->volumes, &vnr);
- m = device ? device_to_minor(device) : -1;
+ peer_device = idr_get_next(&connection->peer_devices, &vnr);
+ if (peer_device)
+ minor = device_to_minor(peer_device->device);
rcu_read_unlock();
- return m;
+ return minor;
}
#ifdef CONFIG_SMP
@@ -2590,7 +2591,7 @@ struct drbd_connection *conn_create(const char *name, struct res_opts *res_opts)
spin_lock_init(&connection->req_lock);
mutex_init(&connection->conf_update);
init_waitqueue_head(&connection->ping_wait);
- idr_init(&connection->volumes);
+ idr_init(&connection->peer_devices);
drbd_init_workqueue(&connection->sender_work);
mutex_init(&connection->data.mutex);
@@ -2632,7 +2633,7 @@ void drbd_destroy_connection(struct kref *kref)
conn_err(connection, "epoch_size:%d\n", atomic_read(&connection->current_epoch->epoch_size));
kfree(connection->current_epoch);
- idr_destroy(&connection->volumes);
+ idr_destroy(&connection->peer_devices);
free_cpumask_var(connection->cpu_mask);
drbd_free_socket(&connection->meta);
@@ -2760,7 +2761,7 @@ enum drbd_ret_code drbd_create_minor(struct drbd_connection *connection, unsigne
}
kref_get(&device->kref);
- id = idr_alloc(&connection->volumes, device, vnr, vnr + 1, GFP_KERNEL);
+ id = idr_alloc(&connection->peer_devices, peer_device, vnr, vnr + 1, GFP_KERNEL);
if (id < 0) {
if (id == -ENOSPC) {
err = ERR_INVALID_REQUEST;
@@ -2786,7 +2787,7 @@ enum drbd_ret_code drbd_create_minor(struct drbd_connection *connection, unsigne
return NO_ERROR;
out_idr_remove_vol:
- idr_remove(&connection->volumes, vnr);
+ idr_remove(&connection->peer_devices, vnr);
out_idr_remove_from_resource:
idr_remove(&resource->devices, vnr);
out_idr_remove_minor:
@@ -2815,7 +2816,7 @@ void drbd_delete_minor(struct drbd_device *device)
int refs = 3;
for_each_connection(connection, resource) {
- idr_remove(&connection->volumes, device->vnr);
+ idr_remove(&connection->peer_devices, device->vnr);
refs++;
}
idr_remove(&resource->devices, device->vnr);
@@ -2938,11 +2939,13 @@ void drbd_free_sock(struct drbd_connection *connection)
void conn_md_sync(struct drbd_connection *connection)
{
- struct drbd_device *device;
+ struct drbd_peer_device *peer_device;
int vnr;
rcu_read_lock();
- idr_for_each_entry(&connection->volumes, device, vnr) {
+ idr_for_each_entry(&connection->peer_devices, peer_device, vnr) {
+ struct drbd_device *device = peer_device->device;
+
kref_get(&device->kref);
rcu_read_unlock();
drbd_md_sync(device);