dlm: variable allocation
Subsystems (2)
David Teigland
maintainerPATCH 1/1 dlm: variable allocation
From: Patrick Caulfield <[email protected]>
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 Patrick Caulfield <[email protected]>
Signed-off-by David Teigland <[email protected]>
fs/dlm/dlm_internal.h +1 -0
@@ -463,6 +463,7 @@int ls_low_nodeid;int ls_total_weight;int *ls_node_array; +gfp_t ls_allocation;struct dlm_rsb ls_stub_rsb;/* for returning errors */ struct dlm_lkb ls_stub_lkb;/* for returning errors */
fs/dlm/lock.c +1 -1
@@ -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 ;
fs/dlm/lockspace.c +5 -0
@@ -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;
fs/dlm/rcom.c +5 -4
@@ -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 ; }
fs/gfs2/locking/dlm/mount.c +1 -1
@@ -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);
include/linux/dlm.h +1 -0
@@ -206,6 +206,7 @@#define DLM_LSFL_NODIR 0x00000001#define DLM_LSFL_TIMEWARN 0x00000002 +#define DLM_LSFL_FS 0x00000004#ifdef __KERNEL__