Commit e1a0ec30 authored by Alexander Aring's avatar Alexander Aring Committed by David Teigland

fs: dlm: handle range check as callback

This patch adds a callback to CLUSTER_ATTR macro to allow individual
callbacks for attributes which might have a more complex attribute range
checking just than non zero.
Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
parent 3f78cd7d
...@@ -125,7 +125,7 @@ static ssize_t cluster_cluster_name_store(struct config_item *item, ...@@ -125,7 +125,7 @@ static ssize_t cluster_cluster_name_store(struct config_item *item,
CONFIGFS_ATTR(cluster_, cluster_name); CONFIGFS_ATTR(cluster_, cluster_name);
static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field, static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field,
int *info_field, int check_zero, int *info_field, bool (*check_cb)(unsigned int x),
const char *buf, size_t len) const char *buf, size_t len)
{ {
unsigned int x; unsigned int x;
...@@ -137,7 +137,7 @@ static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field, ...@@ -137,7 +137,7 @@ static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field,
if (rc) if (rc)
return rc; return rc;
if (check_zero && !x) if (check_cb && check_cb(x))
return -EINVAL; return -EINVAL;
*cl_field = x; *cl_field = x;
...@@ -146,13 +146,13 @@ static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field, ...@@ -146,13 +146,13 @@ static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field,
return len; return len;
} }
#define CLUSTER_ATTR(name, check_zero) \ #define CLUSTER_ATTR(name, check_cb) \
static ssize_t cluster_##name##_store(struct config_item *item, \ static ssize_t cluster_##name##_store(struct config_item *item, \
const char *buf, size_t len) \ const char *buf, size_t len) \
{ \ { \
struct dlm_cluster *cl = config_item_to_cluster(item); \ struct dlm_cluster *cl = config_item_to_cluster(item); \
return cluster_set(cl, &cl->cl_##name, &dlm_config.ci_##name, \ return cluster_set(cl, &cl->cl_##name, &dlm_config.ci_##name, \
check_zero, buf, len); \ check_cb, buf, len); \
} \ } \
static ssize_t cluster_##name##_show(struct config_item *item, char *buf) \ static ssize_t cluster_##name##_show(struct config_item *item, char *buf) \
{ \ { \
...@@ -161,20 +161,25 @@ static ssize_t cluster_##name##_show(struct config_item *item, char *buf) \ ...@@ -161,20 +161,25 @@ static ssize_t cluster_##name##_show(struct config_item *item, char *buf) \
} \ } \
CONFIGFS_ATTR(cluster_, name); CONFIGFS_ATTR(cluster_, name);
CLUSTER_ATTR(tcp_port, 1); static bool dlm_check_zero(unsigned int x)
CLUSTER_ATTR(buffer_size, 1); {
CLUSTER_ATTR(rsbtbl_size, 1); return !x;
CLUSTER_ATTR(recover_timer, 1); }
CLUSTER_ATTR(toss_secs, 1);
CLUSTER_ATTR(scan_secs, 1); CLUSTER_ATTR(tcp_port, dlm_check_zero);
CLUSTER_ATTR(log_debug, 0); CLUSTER_ATTR(buffer_size, dlm_check_zero);
CLUSTER_ATTR(log_info, 0); CLUSTER_ATTR(rsbtbl_size, dlm_check_zero);
CLUSTER_ATTR(protocol, 0); CLUSTER_ATTR(recover_timer, dlm_check_zero);
CLUSTER_ATTR(mark, 0); CLUSTER_ATTR(toss_secs, dlm_check_zero);
CLUSTER_ATTR(timewarn_cs, 1); CLUSTER_ATTR(scan_secs, dlm_check_zero);
CLUSTER_ATTR(waitwarn_us, 0); CLUSTER_ATTR(log_debug, NULL);
CLUSTER_ATTR(new_rsb_count, 0); CLUSTER_ATTR(log_info, NULL);
CLUSTER_ATTR(recover_callbacks, 0); CLUSTER_ATTR(protocol, NULL);
CLUSTER_ATTR(mark, NULL);
CLUSTER_ATTR(timewarn_cs, dlm_check_zero);
CLUSTER_ATTR(waitwarn_us, NULL);
CLUSTER_ATTR(new_rsb_count, NULL);
CLUSTER_ATTR(recover_callbacks, NULL);
static struct configfs_attribute *cluster_attrs[] = { static struct configfs_attribute *cluster_attrs[] = {
[CLUSTER_ATTR_TCP_PORT] = &cluster_attr_tcp_port, [CLUSTER_ATTR_TCP_PORT] = &cluster_attr_tcp_port,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment