* [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.