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

Commit 44f487a5 authored by Patrick Caulfield's avatar Patrick Caulfield Committed by Steven Whitehouse
Browse files

[DLM] variable allocation



Add a new flag, DLM_LSFL_FS, to be used when a file system creates a lockspace.
This flag causes the dlm to use GFP_NOFS for allocations instead of GFP_KERNEL.
(This updated version of the patch uses gfp_t for ls_allocation.)

Signed-Off-By: default avatarPatrick Caulfield <pcaulfie@redhat.com>
Signed-Off-By: default avatarDavid Teigland <teigland@redhat.com>
Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
parent 292e539e
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -463,6 +463,7 @@ struct dlm_ls {
	int			ls_low_nodeid;
	int			ls_low_nodeid;
	int			ls_total_weight;
	int			ls_total_weight;
	int			*ls_node_array;
	int			*ls_node_array;
	gfp_t			ls_allocation;


	struct dlm_rsb		ls_stub_rsb;	/* for returning errors */
	struct dlm_rsb		ls_stub_rsb;	/* for returning errors */
	struct dlm_lkb		ls_stub_lkb;	/* for returning errors */
	struct dlm_lkb		ls_stub_lkb;	/* for returning errors */
+1 −1
Original line number Original line Diff line number Diff line
@@ -2594,7 +2594,7 @@ static int _create_message(struct dlm_ls *ls, int mb_len,
	   pass into lowcomms_commit and a message buffer (mb) that we
	   pass into lowcomms_commit and a message buffer (mb) that we
	   write our data into */
	   write our data into */


	mh = dlm_lowcomms_get_buffer(to_nodeid, mb_len, GFP_KERNEL, &mb);
	mh = dlm_lowcomms_get_buffer(to_nodeid, mb_len, ls->ls_allocation, &mb);
	if (!mh)
	if (!mh)
		return -ENOBUFS;
		return -ENOBUFS;


+5 −0
Original line number Original line Diff line number Diff line
@@ -444,6 +444,11 @@ static int new_lockspace(char *name, int namelen, void **lockspace,
		set_bit(LSFL_TIMEWARN, &ls->ls_flags);
		set_bit(LSFL_TIMEWARN, &ls->ls_flags);
	ls->ls_exflags = (flags & ~DLM_LSFL_TIMEWARN);
	ls->ls_exflags = (flags & ~DLM_LSFL_TIMEWARN);


	if (flags & DLM_LSFL_FS)
		ls->ls_allocation = GFP_NOFS;
	else
		ls->ls_allocation = GFP_KERNEL;

	size = dlm_config.ci_rsbtbl_size;
	size = dlm_config.ci_rsbtbl_size;
	ls->ls_rsbtbl_size = size;
	ls->ls_rsbtbl_size = size;


+5 −4
Original line number Original line Diff line number Diff line
@@ -38,7 +38,7 @@ static int create_rcom(struct dlm_ls *ls, int to_nodeid, int type, int len,
	char *mb;
	char *mb;
	int mb_len = sizeof(struct dlm_rcom) + len;
	int mb_len = sizeof(struct dlm_rcom) + len;


	mh = dlm_lowcomms_get_buffer(to_nodeid, mb_len, GFP_KERNEL, &mb);
	mh = dlm_lowcomms_get_buffer(to_nodeid, mb_len, ls->ls_allocation, &mb);
	if (!mh) {
	if (!mh) {
		log_print("create_rcom to %d type %d len %d ENOBUFS",
		log_print("create_rcom to %d type %d len %d ENOBUFS",
			  to_nodeid, type, len);
			  to_nodeid, type, len);
@@ -386,7 +386,8 @@ static void receive_rcom_lock_reply(struct dlm_ls *ls, struct dlm_rcom *rc_in)
	dlm_recover_process_copy(ls, rc_in);
	dlm_recover_process_copy(ls, rc_in);
}
}


static int send_ls_not_ready(int nodeid, struct dlm_rcom *rc_in)
static int send_ls_not_ready(struct dlm_ls *ls, int nodeid,
			     struct dlm_rcom *rc_in)
{
{
	struct dlm_rcom *rc;
	struct dlm_rcom *rc;
	struct rcom_config *rf;
	struct rcom_config *rf;
@@ -394,7 +395,7 @@ static int send_ls_not_ready(int nodeid, struct dlm_rcom *rc_in)
	char *mb;
	char *mb;
	int mb_len = sizeof(struct dlm_rcom) + sizeof(struct rcom_config);
	int mb_len = sizeof(struct dlm_rcom) + sizeof(struct rcom_config);


	mh = dlm_lowcomms_get_buffer(nodeid, mb_len, GFP_KERNEL, &mb);
	mh = dlm_lowcomms_get_buffer(nodeid, mb_len, ls->ls_allocation, &mb);
	if (!mh)
	if (!mh)
		return -ENOBUFS;
		return -ENOBUFS;
	memset(mb, 0, mb_len);
	memset(mb, 0, mb_len);
@@ -464,7 +465,7 @@ void dlm_receive_rcom(struct dlm_header *hd, int nodeid)
		log_print("lockspace %x from %d type %x not found",
		log_print("lockspace %x from %d type %x not found",
			  hd->h_lockspace, nodeid, rc->rc_type);
			  hd->h_lockspace, nodeid, rc->rc_type);
		if (rc->rc_type == DLM_RCOM_STATUS)
		if (rc->rc_type == DLM_RCOM_STATUS)
			send_ls_not_ready(nodeid, rc);
			send_ls_not_ready(ls, nodeid, rc);
		return;
		return;
	}
	}


+1 −1
Original line number Original line Diff line number Diff line
@@ -147,7 +147,7 @@ static int gdlm_mount(char *table_name, char *host_data,


	error = dlm_new_lockspace(ls->fsname, strlen(ls->fsname),
	error = dlm_new_lockspace(ls->fsname, strlen(ls->fsname),
				  &ls->dlm_lockspace,
				  &ls->dlm_lockspace,
				  nodir ? DLM_LSFL_NODIR : 0,
				  DLM_LSFL_FS | (nodir ? DLM_LSFL_NODIR : 0),
				  GDLM_LVB_SIZE);
				  GDLM_LVB_SIZE);
	if (error) {
	if (error) {
		log_error("dlm_new_lockspace error %d", error);
		log_error("dlm_new_lockspace error %d", error);
Loading