Commit 6bab076a authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull dlm updates from David Teigland:
 "This includes more dlm networking cleanups and improvements for making
  dlm shutdowns more robust"

* tag 'dlm-5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm:
  fs: dlm: fix missing unlock on error in accept_from_sock()
  fs: dlm: add shutdown hook
  fs: dlm: flush swork on shutdown
  fs: dlm: remove unaligned memory access handling
  fs: dlm: check on minimum msglen size
  fs: dlm: simplify writequeue handling
  fs: dlm: use GFP_ZERO for page buffer
  fs: dlm: change allocation limits
  fs: dlm: add check if dlm is currently running
  fs: dlm: add errno handling to check callback
  fs: dlm: set subclass for othercon sock_mutex
  fs: dlm: set connected bit after accept
  fs: dlm: fix mark setting deadlock
  fs: dlm: fix debugfs dump
parents 9ec1efbf 2fd8db2d
Loading
Loading
Loading
Loading
+58 −28
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@ static ssize_t cluster_cluster_name_store(struct config_item *item,
CONFIGFS_ATTR(cluster_, cluster_name);

static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field,
			   int *info_field, bool (*check_cb)(unsigned int x),
			   int *info_field, int (*check_cb)(unsigned int x),
			   const char *buf, size_t len)
{
	unsigned int x;
@@ -137,8 +137,11 @@ static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field,
	if (rc)
		return rc;

	if (check_cb && check_cb(x))
		return -EINVAL;
	if (check_cb) {
		rc = check_cb(x);
		if (rc)
			return rc;
	}

	*cl_field = x;
	*info_field = x;
@@ -161,17 +164,53 @@ static ssize_t cluster_##name##_show(struct config_item *item, char *buf) \
}                                                                             \
CONFIGFS_ATTR(cluster_, name);

static bool dlm_check_zero(unsigned int x)
static int dlm_check_protocol_and_dlm_running(unsigned int x)
{
	return !x;
	switch (x) {
	case 0:
		/* TCP */
		break;
	case 1:
		/* SCTP */
		break;
	default:
		return -EINVAL;
	}

static bool dlm_check_buffer_size(unsigned int x)
	if (dlm_allow_conn)
		return -EBUSY;

	return 0;
}

static int dlm_check_zero_and_dlm_running(unsigned int x)
{
	return (x < DEFAULT_BUFFER_SIZE);
	if (!x)
		return -EINVAL;

	if (dlm_allow_conn)
		return -EBUSY;

	return 0;
}

CLUSTER_ATTR(tcp_port, dlm_check_zero);
static int dlm_check_zero(unsigned int x)
{
	if (!x)
		return -EINVAL;

	return 0;
}

static int dlm_check_buffer_size(unsigned int x)
{
	if (x < DEFAULT_BUFFER_SIZE)
		return -EINVAL;

	return 0;
}

CLUSTER_ATTR(tcp_port, dlm_check_zero_and_dlm_running);
CLUSTER_ATTR(buffer_size, dlm_check_buffer_size);
CLUSTER_ATTR(rsbtbl_size, dlm_check_zero);
CLUSTER_ATTR(recover_timer, dlm_check_zero);
@@ -179,7 +218,7 @@ CLUSTER_ATTR(toss_secs, dlm_check_zero);
CLUSTER_ATTR(scan_secs, dlm_check_zero);
CLUSTER_ATTR(log_debug, NULL);
CLUSTER_ATTR(log_info, NULL);
CLUSTER_ATTR(protocol, NULL);
CLUSTER_ATTR(protocol, dlm_check_protocol_and_dlm_running);
CLUSTER_ATTR(mark, NULL);
CLUSTER_ATTR(timewarn_cs, dlm_check_zero);
CLUSTER_ATTR(waitwarn_us, NULL);
@@ -688,6 +727,7 @@ static ssize_t comm_mark_show(struct config_item *item, char *buf)
static ssize_t comm_mark_store(struct config_item *item, const char *buf,
			       size_t len)
{
	struct dlm_comm *comm;
	unsigned int mark;
	int rc;

@@ -695,7 +735,15 @@ static ssize_t comm_mark_store(struct config_item *item, const char *buf,
	if (rc)
		return rc;

	config_item_to_comm(item)->mark = mark;
	if (mark == 0)
		mark = dlm_config.ci_mark;

	comm = config_item_to_comm(item);
	rc = dlm_lowcomms_nodes_set_mark(comm->nodeid, mark);
	if (rc)
		return rc;

	comm->mark = mark;
	return len;
}

@@ -870,24 +918,6 @@ int dlm_comm_seq(int nodeid, uint32_t *seq)
	return 0;
}

void dlm_comm_mark(int nodeid, unsigned int *mark)
{
	struct dlm_comm *cm;

	cm = get_comm(nodeid);
	if (!cm) {
		*mark = dlm_config.ci_mark;
		return;
	}

	if (cm->mark)
		*mark = cm->mark;
	else
		*mark = dlm_config.ci_mark;

	put_comm(cm);
}

int dlm_our_nodeid(void)
{
	return local_comm ? local_comm->nodeid : 0;
+0 −1
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ void dlm_config_exit(void);
int dlm_config_nodes(char *lsname, struct dlm_config_node **nodes_out,
		     int *count_out);
int dlm_comm_seq(int nodeid, uint32_t *seq);
void dlm_comm_mark(int nodeid, unsigned int *mark);
int dlm_our_nodeid(void);
int dlm_our_addr(struct sockaddr_storage *addr, int num);

+1 −0
Original line number Diff line number Diff line
@@ -542,6 +542,7 @@ static void *table_seq_next(struct seq_file *seq, void *iter_ptr, loff_t *pos)

		if (bucket >= ls->ls_rsbtbl_size) {
			kfree(ri);
			++*pos;
			return NULL;
		}
		tree = toss ? &ls->ls_rsbtbl[bucket].toss : &ls->ls_rsbtbl[bucket].keep;
+0 −2
Original line number Diff line number Diff line
@@ -3541,8 +3541,6 @@ static int _create_message(struct dlm_ls *ls, int mb_len,
	if (!mh)
		return -ENOBUFS;

	memset(mb, 0, mb_len);

	ms = (struct dlm_message *) mb;

	ms->m_header.h_version = (DLM_HEADER_MAJOR | DLM_HEADER_MINOR);
+11 −9
Original line number Diff line number Diff line
@@ -404,12 +404,6 @@ static int threads_start(void)
	return error;
}

static void threads_stop(void)
{
	dlm_scand_stop();
	dlm_lowcomms_stop();
}

static int new_lockspace(const char *name, const char *cluster,
			 uint32_t flags, int lvblen,
			 const struct dlm_lockspace_ops *ops, void *ops_arg,
@@ -702,8 +696,11 @@ int dlm_new_lockspace(const char *name, const char *cluster,
		ls_count++;
	if (error > 0)
		error = 0;
	if (!ls_count)
		threads_stop();
	if (!ls_count) {
		dlm_scand_stop();
		dlm_lowcomms_shutdown();
		dlm_lowcomms_stop();
	}
 out:
	mutex_unlock(&ls_lock);
	return error;
@@ -788,6 +785,11 @@ static int release_lockspace(struct dlm_ls *ls, int force)

	dlm_recoverd_stop(ls);

	if (ls_count == 1) {
		dlm_scand_stop();
		dlm_lowcomms_shutdown();
	}

	dlm_callback_stop(ls);

	remove_lockspace(ls);
@@ -880,7 +882,7 @@ int dlm_release_lockspace(void *lockspace, int force)
	if (!error)
		ls_count--;
	if (!ls_count)
		threads_stop();
		dlm_lowcomms_stop();
	mutex_unlock(&ls_lock);

	return error;
Loading