Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03b88384 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm:
  dlm: linux/{dlm,dlm_device}.h: cleanup for userspace
  dlm: common max length definitions
  dlm: move plock code from gfs2
  dlm: recover nodes that are removed and re-added
  dlm: save master info after failed no-queue request
  dlm: make dlm_print_rsb() static
  dlm: match signedness between dlm_config_info and cluster_set
parents 0d07a15b c1c76743
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -10,6 +10,7 @@ dlm-y := ast.o \
				midcomms.o \
				midcomms.o \
				netlink.o \
				netlink.o \
				lowcomms.o \
				lowcomms.o \
				plock.o \
				rcom.o \
				rcom.o \
				recover.o \
				recover.o \
				recoverd.o \
				recoverd.o \
+40 −10
Original line number Original line Diff line number Diff line
@@ -114,7 +114,7 @@ struct cluster_attribute {
};
};


static ssize_t cluster_set(struct cluster *cl, unsigned int *cl_field,
static ssize_t cluster_set(struct cluster *cl, unsigned int *cl_field,
			   unsigned int *info_field, int check_zero,
			   int *info_field, int check_zero,
			   const char *buf, size_t len)
			   const char *buf, size_t len)
{
{
	unsigned int x;
	unsigned int x;
@@ -284,6 +284,7 @@ struct node {
	struct list_head list; /* space->members */
	struct list_head list; /* space->members */
	int nodeid;
	int nodeid;
	int weight;
	int weight;
	int new;
};
};


static struct configfs_group_operations clusters_ops = {
static struct configfs_group_operations clusters_ops = {
@@ -565,6 +566,7 @@ static struct config_item *make_node(struct config_group *g, const char *name)
	config_item_init_type_name(&nd->item, name, &node_type);
	config_item_init_type_name(&nd->item, name, &node_type);
	nd->nodeid = -1;
	nd->nodeid = -1;
	nd->weight = 1;  /* default weight of 1 if none is set */
	nd->weight = 1;  /* default weight of 1 if none is set */
	nd->new = 1;     /* set to 0 once it's been read by dlm_nodeid_list() */


	mutex_lock(&sp->members_lock);
	mutex_lock(&sp->members_lock);
	list_add(&nd->list, &sp->members);
	list_add(&nd->list, &sp->members);
@@ -805,12 +807,13 @@ static void put_comm(struct comm *cm)
}
}


/* caller must free mem */
/* caller must free mem */
int dlm_nodeid_list(char *lsname, int **ids_out)
int dlm_nodeid_list(char *lsname, int **ids_out, int *ids_count_out,
		    int **new_out, int *new_count_out)
{
{
	struct space *sp;
	struct space *sp;
	struct node *nd;
	struct node *nd;
	int i = 0, rv = 0;
	int i = 0, rv = 0, ids_count = 0, new_count = 0;
	int *ids;
	int *ids, *new;


	sp = get_space(lsname);
	sp = get_space(lsname);
	if (!sp)
	if (!sp)
@@ -818,23 +821,50 @@ int dlm_nodeid_list(char *lsname, int **ids_out)


	mutex_lock(&sp->members_lock);
	mutex_lock(&sp->members_lock);
	if (!sp->members_count) {
	if (!sp->members_count) {
		rv = 0;
		rv = -EINVAL;
		printk(KERN_ERR "dlm: zero members_count\n");
		goto out;
		goto out;
	}
	}


	ids = kcalloc(sp->members_count, sizeof(int), GFP_KERNEL);
	ids_count = sp->members_count;

	ids = kcalloc(ids_count, sizeof(int), GFP_KERNEL);
	if (!ids) {
	if (!ids) {
		rv = -ENOMEM;
		rv = -ENOMEM;
		goto out;
		goto out;
	}
	}


	rv = sp->members_count;
	list_for_each_entry(nd, &sp->members, list) {
	list_for_each_entry(nd, &sp->members, list)
		ids[i++] = nd->nodeid;
		ids[i++] = nd->nodeid;
		if (nd->new)
			new_count++;
	}

	if (ids_count != i)
		printk(KERN_ERR "dlm: bad nodeid count %d %d\n", ids_count, i);

	if (!new_count)
		goto out_ids;

	new = kcalloc(new_count, sizeof(int), GFP_KERNEL);
	if (!new) {
		kfree(ids);
		rv = -ENOMEM;
		goto out;
	}


	if (rv != i)
	i = 0;
		printk("bad nodeid count %d %d\n", rv, i);
	list_for_each_entry(nd, &sp->members, list) {
		if (nd->new) {
			new[i++] = nd->nodeid;
			nd->new = 0;
		}
	}
	*new_count_out = new_count;
	*new_out = new;


 out_ids:
	*ids_count_out = ids_count;
	*ids_out = ids;
	*ids_out = ids;
 out:
 out:
	mutex_unlock(&sp->members_lock);
	mutex_unlock(&sp->members_lock);
+2 −1
Original line number Original line Diff line number Diff line
@@ -35,7 +35,8 @@ extern struct dlm_config_info dlm_config;
int dlm_config_init(void);
int dlm_config_init(void);
void dlm_config_exit(void);
void dlm_config_exit(void);
int dlm_node_weight(char *lsname, int nodeid);
int dlm_node_weight(char *lsname, int nodeid);
int dlm_nodeid_list(char *lsname, int **ids_out);
int dlm_nodeid_list(char *lsname, int **ids_out, int *ids_count_out,
		    int **new_out, int *new_count_out);
int dlm_nodeid_to_addr(int nodeid, struct sockaddr_storage *addr);
int dlm_nodeid_to_addr(int nodeid, struct sockaddr_storage *addr);
int dlm_addr_to_nodeid(struct sockaddr_storage *addr, int *nodeid);
int dlm_addr_to_nodeid(struct sockaddr_storage *addr, int *nodeid);
int dlm_our_nodeid(void);
int dlm_our_nodeid(void);
+5 −3
Original line number Original line Diff line number Diff line
@@ -42,8 +42,6 @@
#include <linux/dlm.h>
#include <linux/dlm.h>
#include "config.h"
#include "config.h"


#define DLM_LOCKSPACE_LEN	64

/* Size of the temp buffer midcomms allocates on the stack.
/* Size of the temp buffer midcomms allocates on the stack.
   We try to make this large enough so most messages fit.
   We try to make this large enough so most messages fit.
   FIXME: should sctp make this unnecessary? */
   FIXME: should sctp make this unnecessary? */
@@ -132,8 +130,10 @@ struct dlm_member {


struct dlm_recover {
struct dlm_recover {
	struct list_head	list;
	struct list_head	list;
	int			*nodeids;
	int			*nodeids;   /* nodeids of all members */
	int			node_count;
	int			node_count;
	int			*new;       /* nodeids of new members */
	int			new_count;
	uint64_t		seq;
	uint64_t		seq;
};
};


@@ -579,6 +579,8 @@ static inline int dlm_no_directory(struct dlm_ls *ls)
int dlm_netlink_init(void);
int dlm_netlink_init(void);
void dlm_netlink_exit(void);
void dlm_netlink_exit(void);
void dlm_timeout_warn(struct dlm_lkb *lkb);
void dlm_timeout_warn(struct dlm_lkb *lkb);
int dlm_plock_init(void);
void dlm_plock_exit(void);


#ifdef CONFIG_DLM_DEBUG
#ifdef CONFIG_DLM_DEBUG
int dlm_register_debugfs(void);
int dlm_register_debugfs(void);
+2 −3
Original line number Original line Diff line number Diff line
@@ -165,7 +165,7 @@ void dlm_print_lkb(struct dlm_lkb *lkb)
	       lkb->lkb_grmode, lkb->lkb_wait_type, lkb->lkb_ast_type);
	       lkb->lkb_grmode, lkb->lkb_wait_type, lkb->lkb_ast_type);
}
}


void dlm_print_rsb(struct dlm_rsb *r)
static void dlm_print_rsb(struct dlm_rsb *r)
{
{
	printk(KERN_ERR "rsb: nodeid %d flags %lx first %x rlc %d name %s\n",
	printk(KERN_ERR "rsb: nodeid %d flags %lx first %x rlc %d name %s\n",
	       r->res_nodeid, r->res_flags, r->res_first_lkid,
	       r->res_nodeid, r->res_flags, r->res_first_lkid,
@@ -1956,8 +1956,7 @@ static void confirm_master(struct dlm_rsb *r, int error)
			list_del_init(&lkb->lkb_rsb_lookup);
			list_del_init(&lkb->lkb_rsb_lookup);
			r->res_first_lkid = lkb->lkb_id;
			r->res_first_lkid = lkb->lkb_id;
			_request_lock(r, lkb);
			_request_lock(r, lkb);
		} else
		}
			r->res_nodeid = -1;
		break;
		break;


	default:
	default:
Loading