Эх сурвалжийг харах

[GFS2] make lock_dlm drop_count tunable in sysfs

We want to be able to change or disable the default drop_count (number at
which the dlm asks gfs to limit the the number of locks it's holding).
Add it to the collection of sysfs tunables for an fs.

Signed-off-by: David Teigland <teigland@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
David Teigland 18 жил өмнө
parent
commit
ee32e4f3d3

+ 0 - 6
fs/gfs2/locking/dlm/main.c

@@ -11,9 +11,6 @@
 
 
 #include "lock_dlm.h"
 #include "lock_dlm.h"
 
 
-extern int gdlm_drop_count;
-extern int gdlm_drop_period;
-
 extern struct lm_lockops gdlm_ops;
 extern struct lm_lockops gdlm_ops;
 
 
 static int __init init_lock_dlm(void)
 static int __init init_lock_dlm(void)
@@ -40,9 +37,6 @@ static int __init init_lock_dlm(void)
 		return error;
 		return error;
 	}
 	}
 
 
-	gdlm_drop_count = GDLM_DROP_COUNT;
-	gdlm_drop_period = GDLM_DROP_PERIOD;
-
 	printk(KERN_INFO
 	printk(KERN_INFO
 	       "Lock_DLM (built %s %s) installed\n", __DATE__, __TIME__);
 	       "Lock_DLM (built %s %s) installed\n", __DATE__, __TIME__);
 	return 0;
 	return 0;

+ 2 - 4
fs/gfs2/locking/dlm/mount.c

@@ -9,8 +9,6 @@
 
 
 #include "lock_dlm.h"
 #include "lock_dlm.h"
 
 
-int gdlm_drop_count;
-int gdlm_drop_period;
 const struct lm_lockops gdlm_ops;
 const struct lm_lockops gdlm_ops;
 
 
 
 
@@ -24,8 +22,8 @@ static struct gdlm_ls *init_gdlm(lm_callback_t cb, struct gfs2_sbd *sdp,
 	if (!ls)
 	if (!ls)
 		return NULL;
 		return NULL;
 
 
-	ls->drop_locks_count = gdlm_drop_count;
-	ls->drop_locks_period = gdlm_drop_period;
+	ls->drop_locks_count = GDLM_DROP_COUNT;
+	ls->drop_locks_period = GDLM_DROP_PERIOD;
 	ls->fscb = cb;
 	ls->fscb = cb;
 	ls->sdp = sdp;
 	ls->sdp = sdp;
 	ls->fsflags = flags;
 	ls->fsflags = flags;

+ 13 - 0
fs/gfs2/locking/dlm/sysfs.c

@@ -116,6 +116,17 @@ static ssize_t recover_status_show(struct gdlm_ls *ls, char *buf)
 	return sprintf(buf, "%d\n", ls->recover_jid_status);
 	return sprintf(buf, "%d\n", ls->recover_jid_status);
 }
 }
 
 
+static ssize_t drop_count_show(struct gdlm_ls *ls, char *buf)
+{
+	return sprintf(buf, "%d\n", ls->drop_locks_count);
+}
+
+static ssize_t drop_count_store(struct gdlm_ls *ls, const char *buf, size_t len)
+{
+	ls->drop_locks_count = simple_strtol(buf, NULL, 0);
+	return len;
+}
+
 struct gdlm_attr {
 struct gdlm_attr {
 	struct attribute attr;
 	struct attribute attr;
 	ssize_t (*show)(struct gdlm_ls *, char *);
 	ssize_t (*show)(struct gdlm_ls *, char *);
@@ -135,6 +146,7 @@ GDLM_ATTR(first_done,     0444, first_done_show,     NULL);
 GDLM_ATTR(recover,        0644, recover_show,        recover_store);
 GDLM_ATTR(recover,        0644, recover_show,        recover_store);
 GDLM_ATTR(recover_done,   0444, recover_done_show,   NULL);
 GDLM_ATTR(recover_done,   0444, recover_done_show,   NULL);
 GDLM_ATTR(recover_status, 0444, recover_status_show, NULL);
 GDLM_ATTR(recover_status, 0444, recover_status_show, NULL);
+GDLM_ATTR(drop_count,     0644, drop_count_show,     drop_count_store);
 
 
 static struct attribute *gdlm_attrs[] = {
 static struct attribute *gdlm_attrs[] = {
 	&gdlm_attr_proto_name.attr,
 	&gdlm_attr_proto_name.attr,
@@ -147,6 +159,7 @@ static struct attribute *gdlm_attrs[] = {
 	&gdlm_attr_recover.attr,
 	&gdlm_attr_recover.attr,
 	&gdlm_attr_recover_done.attr,
 	&gdlm_attr_recover_done.attr,
 	&gdlm_attr_recover_status.attr,
 	&gdlm_attr_recover_status.attr,
+	&gdlm_attr_drop_count.attr,
 	NULL,
 	NULL,
 };
 };