All of lore.kernel.org
 help / color / mirror / Atom feed
* [Cluster-devel] [PATCH] dlm: variable allocation flags
@ 2007-06-06 13:55 David Teigland
  0 siblings, 0 replies; only message in thread
From: David Teigland @ 2007-06-06 13:55 UTC (permalink / raw)
  To: cluster-devel.redhat.com

From: Patrick Caulfield <pcaulfie@redhat.com>

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.

Signed-Off-By: Patrick Caulfield <pcaulfie@redhat.com>
Signed-Off-By: David Teigland <teigland@redhat.com>

Index: linux-quilt/fs/dlm/dlm_internal.h
===================================================================
--- linux-quilt.orig/fs/dlm/dlm_internal.h	2007-05-25 15:00:11.000000000 -0500
+++ linux-quilt/fs/dlm/dlm_internal.h	2007-06-06 08:47:45.000000000 -0500
@@ -463,6 +463,7 @@
 	int			ls_low_nodeid;
 	int			ls_total_weight;
 	int			*ls_node_array;
+	int                     ls_allocation;
 
 	struct dlm_rsb		ls_stub_rsb;	/* for returning errors */
 	struct dlm_lkb		ls_stub_lkb;	/* for returning errors */
Index: linux-quilt/fs/dlm/lock.c
===================================================================
--- linux-quilt.orig/fs/dlm/lock.c	2007-05-25 14:59:46.000000000 -0500
+++ linux-quilt/fs/dlm/lock.c	2007-06-06 08:47:45.000000000 -0500
@@ -2594,7 +2594,7 @@
 	   pass into lowcomms_commit and a message buffer (mb) that we
 	   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)
 		return -ENOBUFS;
 
Index: linux-quilt/fs/dlm/lockspace.c
===================================================================
--- linux-quilt.orig/fs/dlm/lockspace.c	2007-05-25 14:57:56.000000000 -0500
+++ linux-quilt/fs/dlm/lockspace.c	2007-06-06 08:47:45.000000000 -0500
@@ -444,6 +444,11 @@
 		set_bit(LSFL_TIMEWARN, &ls->ls_flags);
 	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;
 	ls->ls_rsbtbl_size = size;
 
Index: linux-quilt/fs/dlm/rcom.c
===================================================================
--- linux-quilt.orig/fs/dlm/rcom.c	2007-05-25 14:57:56.000000000 -0500
+++ linux-quilt/fs/dlm/rcom.c	2007-06-06 08:48:33.000000000 -0500
@@ -38,7 +38,7 @@
 	char *mb;
 	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) {
 		log_print("create_rcom to %d type %d len %d ENOBUFS",
 			  to_nodeid, type, len);
@@ -386,7 +386,8 @@
 	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 rcom_config *rf;
@@ -394,7 +395,7 @@
 	char *mb;
 	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)
 		return -ENOBUFS;
 	memset(mb, 0, mb_len);
@@ -464,7 +465,7 @@
 		log_print("lockspace %x from %d type %x not found",
 			  hd->h_lockspace, nodeid, rc->rc_type);
 		if (rc->rc_type == DLM_RCOM_STATUS)
-			send_ls_not_ready(nodeid, rc);
+			send_ls_not_ready(ls, nodeid, rc);
 		return;
 	}
 
Index: linux-quilt/fs/gfs2/locking/dlm/mount.c
===================================================================
--- linux-quilt.orig/fs/gfs2/locking/dlm/mount.c	2007-04-25 22:08:32.000000000 -0500
+++ linux-quilt/fs/gfs2/locking/dlm/mount.c	2007-06-06 08:47:45.000000000 -0500
@@ -147,7 +147,7 @@
 
 	error = dlm_new_lockspace(ls->fsname, strlen(ls->fsname),
 				  &ls->dlm_lockspace,
-				  nodir ? DLM_LSFL_NODIR : 0,
+				  DLM_LSFL_FS | (nodir ? DLM_LSFL_NODIR : 0),
 				  GDLM_LVB_SIZE);
 	if (error) {
 		log_error("dlm_new_lockspace error %d", error);
Index: linux-quilt/include/linux/dlm.h
===================================================================
--- linux-quilt.orig/include/linux/dlm.h	2007-05-25 14:57:57.000000000 -0500
+++ linux-quilt/include/linux/dlm.h	2007-06-06 08:47:45.000000000 -0500
@@ -206,6 +206,7 @@
 
 #define DLM_LSFL_NODIR		0x00000001
 #define DLM_LSFL_TIMEWARN	0x00000002
+#define DLM_LSFL_FS     	0x00000004
 
 #ifdef __KERNEL__
 



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2007-06-06 13:55 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-06 13:55 [Cluster-devel] [PATCH] dlm: variable allocation flags David Teigland

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.