summaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_main.c
diff options
context:
space:
mode:
authorLars Ellenberg2011-03-10 22:18:18 +0100
committerPhilipp Reisner2012-11-04 00:16:19 +0100
commit543cc10b4cc5c60aa9fcc62705ccfb9998bf4697 (patch)
tree50493080737a5f852f39e0253e7755f361a1e7ae /drivers/block/drbd/drbd_main.c
parentdrbd: remove now unused connector related files (diff)
downloadkernel-qcow2-linux-543cc10b4cc5c60aa9fcc62705ccfb9998bf4697.tar.gz
kernel-qcow2-linux-543cc10b4cc5c60aa9fcc62705ccfb9998bf4697.tar.xz
kernel-qcow2-linux-543cc10b4cc5c60aa9fcc62705ccfb9998bf4697.zip
drbd: drbd_adm_get_status needs to show some more detail
We want to see existing connection objects, even if they do not currently have volumes attached. Change the .dumpit variant of drbd_adm_get_status to iterate not over minor devices, but over connections + volumes. Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_main.c')
-rw-r--r--drivers/block/drbd/drbd_main.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index 24c712b91fb1..113c7b465384 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -120,6 +120,7 @@ module_param_string(usermode_helper, usermode_helper, sizeof(usermode_helper), 0
*/
struct idr minors;
struct list_head drbd_tconns; /* list of struct drbd_tconn */
+DEFINE_MUTEX(drbd_cfg_mutex);
struct kmem_cache *drbd_request_cache;
struct kmem_cache *drbd_ee_cache; /* peer requests */
@@ -2238,14 +2239,14 @@ struct drbd_tconn *conn_by_name(const char *name)
if (!name || !name[0])
return NULL;
- write_lock_irq(&global_state_lock);
+ mutex_lock(&drbd_cfg_mutex);
list_for_each_entry(tconn, &drbd_tconns, all_tconn) {
if (!strcmp(tconn->name, name))
goto found;
}
tconn = NULL;
found:
- write_unlock_irq(&global_state_lock);
+ mutex_unlock(&drbd_cfg_mutex);
return tconn;
}
@@ -2285,9 +2286,9 @@ struct drbd_tconn *drbd_new_tconn(const char *name)
drbd_thread_init(tconn, &tconn->worker, drbd_worker, "worker");
drbd_thread_init(tconn, &tconn->asender, drbd_asender, "asender");
- write_lock_irq(&global_state_lock);
- list_add(&tconn->all_tconn, &drbd_tconns);
- write_unlock_irq(&global_state_lock);
+ mutex_lock(&drbd_cfg_mutex);
+ list_add_tail(&tconn->all_tconn, &drbd_tconns);
+ mutex_unlock(&drbd_cfg_mutex);
return tconn;
@@ -2302,9 +2303,9 @@ fail:
void drbd_free_tconn(struct drbd_tconn *tconn)
{
- write_lock_irq(&global_state_lock);
+ mutex_lock(&drbd_cfg_mutex);
list_del(&tconn->all_tconn);
- write_unlock_irq(&global_state_lock);
+ mutex_unlock(&drbd_cfg_mutex);
idr_destroy(&tconn->volumes);
free_cpumask_var(tconn->cpu_mask);