]> Pileus Git - ~andy/linux/blobdiff - fs/dlm/config.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[~andy/linux] / fs / dlm / config.c
index 024ace9973a81b0d3af2c14c75e6f4fc8f2d5051..88553054bbfa4cd7a03efdf41036e75b54255d7a 100644 (file)
@@ -17,6 +17,7 @@
 #include <net/sock.h>
 
 #include "config.h"
+#include "lowcomms.h"
 
 /*
  * /config/dlm/<cluster>/spaces/<space>/nodes/<node>/nodeid
@@ -162,7 +163,7 @@ struct spaces {
 struct space {
        struct config_group group;
        struct list_head members;
-       struct semaphore members_lock;
+       struct mutex members_lock;
        int members_count;
 };
 
@@ -374,7 +375,7 @@ static struct config_group *make_space(struct config_group *g, const char *name)
        sp->group.default_groups[1] = NULL;
 
        INIT_LIST_HEAD(&sp->members);
-       init_MUTEX(&sp->members_lock);
+       mutex_init(&sp->members_lock);
        sp->members_count = 0;
        return &sp->group;
 
@@ -429,6 +430,7 @@ static void drop_comm(struct config_group *g, struct config_item *i)
        struct comm *cm = to_comm(i);
        if (local_comm == cm)
                local_comm = NULL;
+       dlm_lowcomms_close(cm->nodeid);
        while (cm->addr_count--)
                kfree(cm->addr[cm->addr_count]);
        config_item_put(i);
@@ -453,10 +455,10 @@ static struct config_item *make_node(struct config_group *g, const char *name)
        nd->nodeid = -1;
        nd->weight = 1;  /* default weight of 1 if none is set */
 
-       down(&sp->members_lock);
+       mutex_lock(&sp->members_lock);
        list_add(&nd->list, &sp->members);
        sp->members_count++;
-       up(&sp->members_lock);
+       mutex_unlock(&sp->members_lock);
 
        return &nd->item;
 }
@@ -466,10 +468,10 @@ static void drop_node(struct config_group *g, struct config_item *i)
        struct space *sp = to_space(g->cg_item.ci_parent);
        struct node *nd = to_node(i);
 
-       down(&sp->members_lock);
+       mutex_lock(&sp->members_lock);
        list_del(&nd->list);
        sp->members_count--;
-       up(&sp->members_lock);
+       mutex_unlock(&sp->members_lock);
 
        config_item_put(i);
 }
@@ -677,7 +679,7 @@ int dlm_nodeid_list(char *lsname, int **ids_out)
        if (!sp)
                return -EEXIST;
 
-       down(&sp->members_lock);
+       mutex_lock(&sp->members_lock);
        if (!sp->members_count) {
                rv = 0;
                goto out;
@@ -698,7 +700,7 @@ int dlm_nodeid_list(char *lsname, int **ids_out)
 
        *ids_out = ids;
  out:
-       up(&sp->members_lock);
+       mutex_unlock(&sp->members_lock);
        put_space(sp);
        return rv;
 }
@@ -713,14 +715,14 @@ int dlm_node_weight(char *lsname, int nodeid)
        if (!sp)
                goto out;
 
-       down(&sp->members_lock);
+       mutex_lock(&sp->members_lock);
        list_for_each_entry(nd, &sp->members, list) {
                if (nd->nodeid != nodeid)
                        continue;
                w = nd->weight;
                break;
        }
-       up(&sp->members_lock);
+       mutex_unlock(&sp->members_lock);
        put_space(sp);
  out:
        return w;