Skip to content

Commit

Permalink
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…
Browse files Browse the repository at this point in the history
…/git/teigland/dlm

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm:
  dlm: choose better identifiers
  dlm: remove bkl
  dlm: fix address compare
  dlm: fix locking of lockspace list in dlm_scand
  dlm: detect available userspace daemon
  dlm: allow multiple lockspace creates
  • Loading branch information
Linus Torvalds committed Oct 10, 2008
2 parents b0af205 + 27eccf4 commit 13dd7f8
Show file tree
Hide file tree
Showing 9 changed files with 281 additions and 100 deletions.
77 changes: 53 additions & 24 deletions fs/dlm/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/configfs.h>
#include <linux/in.h>
#include <linux/in6.h>
#include <net/ipv6.h>
#include <net/sock.h>

#include "config.h"
Expand Down Expand Up @@ -377,24 +380,24 @@ static struct config_item_type node_type = {
.ct_owner = THIS_MODULE,
};

static struct dlm_cluster *to_cluster(struct config_item *i)
static struct dlm_cluster *config_item_to_cluster(struct config_item *i)
{
return i ? container_of(to_config_group(i), struct dlm_cluster, group) :
NULL;
}

static struct dlm_space *to_space(struct config_item *i)
static struct dlm_space *config_item_to_space(struct config_item *i)
{
return i ? container_of(to_config_group(i), struct dlm_space, group) :
NULL;
}

static struct dlm_comm *to_comm(struct config_item *i)
static struct dlm_comm *config_item_to_comm(struct config_item *i)
{
return i ? container_of(i, struct dlm_comm, item) : NULL;
}

static struct dlm_node *to_node(struct config_item *i)
static struct dlm_node *config_item_to_node(struct config_item *i)
{
return i ? container_of(i, struct dlm_node, item) : NULL;
}
Expand Down Expand Up @@ -450,7 +453,7 @@ static struct config_group *make_cluster(struct config_group *g,

static void drop_cluster(struct config_group *g, struct config_item *i)
{
struct dlm_cluster *cl = to_cluster(i);
struct dlm_cluster *cl = config_item_to_cluster(i);
struct config_item *tmp;
int j;

Expand All @@ -468,7 +471,7 @@ static void drop_cluster(struct config_group *g, struct config_item *i)

static void release_cluster(struct config_item *i)
{
struct dlm_cluster *cl = to_cluster(i);
struct dlm_cluster *cl = config_item_to_cluster(i);
kfree(cl->group.default_groups);
kfree(cl);
}
Expand Down Expand Up @@ -507,7 +510,7 @@ static struct config_group *make_space(struct config_group *g, const char *name)

static void drop_space(struct config_group *g, struct config_item *i)
{
struct dlm_space *sp = to_space(i);
struct dlm_space *sp = config_item_to_space(i);
struct config_item *tmp;
int j;

Expand All @@ -524,7 +527,7 @@ static void drop_space(struct config_group *g, struct config_item *i)

static void release_space(struct config_item *i)
{
struct dlm_space *sp = to_space(i);
struct dlm_space *sp = config_item_to_space(i);
kfree(sp->group.default_groups);
kfree(sp);
}
Expand All @@ -546,7 +549,7 @@ static struct config_item *make_comm(struct config_group *g, const char *name)

static void drop_comm(struct config_group *g, struct config_item *i)
{
struct dlm_comm *cm = to_comm(i);
struct dlm_comm *cm = config_item_to_comm(i);
if (local_comm == cm)
local_comm = NULL;
dlm_lowcomms_close(cm->nodeid);
Expand All @@ -557,13 +560,13 @@ static void drop_comm(struct config_group *g, struct config_item *i)

static void release_comm(struct config_item *i)
{
struct dlm_comm *cm = to_comm(i);
struct dlm_comm *cm = config_item_to_comm(i);
kfree(cm);
}

static struct config_item *make_node(struct config_group *g, const char *name)
{
struct dlm_space *sp = to_space(g->cg_item.ci_parent);
struct dlm_space *sp = config_item_to_space(g->cg_item.ci_parent);
struct dlm_node *nd;

nd = kzalloc(sizeof(struct dlm_node), GFP_KERNEL);
Expand All @@ -585,8 +588,8 @@ static struct config_item *make_node(struct config_group *g, const char *name)

static void drop_node(struct config_group *g, struct config_item *i)
{
struct dlm_space *sp = to_space(g->cg_item.ci_parent);
struct dlm_node *nd = to_node(i);
struct dlm_space *sp = config_item_to_space(g->cg_item.ci_parent);
struct dlm_node *nd = config_item_to_node(i);

mutex_lock(&sp->members_lock);
list_del(&nd->list);
Expand All @@ -598,7 +601,7 @@ static void drop_node(struct config_group *g, struct config_item *i)

static void release_node(struct config_item *i)
{
struct dlm_node *nd = to_node(i);
struct dlm_node *nd = config_item_to_node(i);
kfree(nd);
}

Expand Down Expand Up @@ -632,7 +635,7 @@ void dlm_config_exit(void)
static ssize_t show_cluster(struct config_item *i, struct configfs_attribute *a,
char *buf)
{
struct dlm_cluster *cl = to_cluster(i);
struct dlm_cluster *cl = config_item_to_cluster(i);
struct cluster_attribute *cla =
container_of(a, struct cluster_attribute, attr);
return cla->show ? cla->show(cl, buf) : 0;
Expand All @@ -642,7 +645,7 @@ static ssize_t store_cluster(struct config_item *i,
struct configfs_attribute *a,
const char *buf, size_t len)
{
struct dlm_cluster *cl = to_cluster(i);
struct dlm_cluster *cl = config_item_to_cluster(i);
struct cluster_attribute *cla =
container_of(a, struct cluster_attribute, attr);
return cla->store ? cla->store(cl, buf, len) : -EINVAL;
Expand All @@ -651,7 +654,7 @@ static ssize_t store_cluster(struct config_item *i,
static ssize_t show_comm(struct config_item *i, struct configfs_attribute *a,
char *buf)
{
struct dlm_comm *cm = to_comm(i);
struct dlm_comm *cm = config_item_to_comm(i);
struct comm_attribute *cma =
container_of(a, struct comm_attribute, attr);
return cma->show ? cma->show(cm, buf) : 0;
Expand All @@ -660,7 +663,7 @@ static ssize_t show_comm(struct config_item *i, struct configfs_attribute *a,
static ssize_t store_comm(struct config_item *i, struct configfs_attribute *a,
const char *buf, size_t len)
{
struct dlm_comm *cm = to_comm(i);
struct dlm_comm *cm = config_item_to_comm(i);
struct comm_attribute *cma =
container_of(a, struct comm_attribute, attr);
return cma->store ? cma->store(cm, buf, len) : -EINVAL;
Expand Down Expand Up @@ -714,7 +717,7 @@ static ssize_t comm_addr_write(struct dlm_comm *cm, const char *buf, size_t len)
static ssize_t show_node(struct config_item *i, struct configfs_attribute *a,
char *buf)
{
struct dlm_node *nd = to_node(i);
struct dlm_node *nd = config_item_to_node(i);
struct node_attribute *nda =
container_of(a, struct node_attribute, attr);
return nda->show ? nda->show(nd, buf) : 0;
Expand All @@ -723,7 +726,7 @@ static ssize_t show_node(struct config_item *i, struct configfs_attribute *a,
static ssize_t store_node(struct config_item *i, struct configfs_attribute *a,
const char *buf, size_t len)
{
struct dlm_node *nd = to_node(i);
struct dlm_node *nd = config_item_to_node(i);
struct node_attribute *nda =
container_of(a, struct node_attribute, attr);
return nda->store ? nda->store(nd, buf, len) : -EINVAL;
Expand Down Expand Up @@ -768,14 +771,41 @@ static struct dlm_space *get_space(char *name)
i = config_group_find_item(space_list, name);
mutex_unlock(&space_list->cg_subsys->su_mutex);

return to_space(i);
return config_item_to_space(i);
}

static void put_space(struct dlm_space *sp)
{
config_item_put(&sp->group.cg_item);
}

static int addr_compare(struct sockaddr_storage *x, struct sockaddr_storage *y)
{
switch (x->ss_family) {
case AF_INET: {
struct sockaddr_in *sinx = (struct sockaddr_in *)x;
struct sockaddr_in *siny = (struct sockaddr_in *)y;
if (sinx->sin_addr.s_addr != siny->sin_addr.s_addr)
return 0;
if (sinx->sin_port != siny->sin_port)
return 0;
break;
}
case AF_INET6: {
struct sockaddr_in6 *sinx = (struct sockaddr_in6 *)x;
struct sockaddr_in6 *siny = (struct sockaddr_in6 *)y;
if (!ipv6_addr_equal(&sinx->sin6_addr, &siny->sin6_addr))
return 0;
if (sinx->sin6_port != siny->sin6_port)
return 0;
break;
}
default:
return 0;
}
return 1;
}

static struct dlm_comm *get_comm(int nodeid, struct sockaddr_storage *addr)
{
struct config_item *i;
Expand All @@ -788,7 +818,7 @@ static struct dlm_comm *get_comm(int nodeid, struct sockaddr_storage *addr)
mutex_lock(&clusters_root.subsys.su_mutex);

list_for_each_entry(i, &comm_list->cg_children, ci_entry) {
cm = to_comm(i);
cm = config_item_to_comm(i);

if (nodeid) {
if (cm->nodeid != nodeid)
Expand All @@ -797,8 +827,7 @@ static struct dlm_comm *get_comm(int nodeid, struct sockaddr_storage *addr)
config_item_get(i);
break;
} else {
if (!cm->addr_count ||
memcmp(cm->addr[0], addr, sizeof(*addr)))
if (!cm->addr_count || !addr_compare(cm->addr[0], addr))
continue;
found = 1;
config_item_get(i);
Expand Down
7 changes: 5 additions & 2 deletions fs/dlm/dlm_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
*******************************************************************************
**
** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
** Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
** Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved.
**
** This copyrighted material is made available to anyone wishing to use,
** modify, copy, or redistribute it subject to the terms and conditions
Expand Down Expand Up @@ -441,8 +441,11 @@ struct dlm_ls {
uint32_t ls_global_id; /* global unique lockspace ID */
uint32_t ls_exflags;
int ls_lvblen;
int ls_count; /* reference count */
int ls_count; /* refcount of processes in
the dlm using this ls */
int ls_create_count; /* create/release refcount */
unsigned long ls_flags; /* LSFL_ */
unsigned long ls_scan_time;
struct kobject ls_kobj;

struct dlm_rsbtable *ls_rsbtbl;
Expand Down
Loading

0 comments on commit 13dd7f8

Please sign in to comment.