mirror of https://gitee.com/openkylin/linux.git
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: Alexander Aring <aahringo@redhat.com> Signed-off-by: David Teigland <teigland@redhat.com>
This commit is contained in:
parent
3f78cd7d24
commit
e1a0ec30a5
|
@ -125,7 +125,7 @@ static ssize_t cluster_cluster_name_store(struct config_item *item,
|
|||
CONFIGFS_ATTR(cluster_, cluster_name);
|
||||
|
||||
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)
|
||||
{
|
||||
unsigned int x;
|
||||
|
@ -137,7 +137,7 @@ static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field,
|
|||
if (rc)
|
||||
return rc;
|
||||
|
||||
if (check_zero && !x)
|
||||
if (check_cb && check_cb(x))
|
||||
return -EINVAL;
|
||||
|
||||
*cl_field = x;
|
||||
|
@ -146,13 +146,13 @@ static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field,
|
|||
return len;
|
||||
}
|
||||
|
||||
#define CLUSTER_ATTR(name, check_zero) \
|
||||
#define CLUSTER_ATTR(name, check_cb) \
|
||||
static ssize_t cluster_##name##_store(struct config_item *item, \
|
||||
const char *buf, size_t len) \
|
||||
{ \
|
||||
struct dlm_cluster *cl = config_item_to_cluster(item); \
|
||||
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) \
|
||||
{ \
|
||||
|
@ -161,20 +161,25 @@ static ssize_t cluster_##name##_show(struct config_item *item, char *buf) \
|
|||
} \
|
||||
CONFIGFS_ATTR(cluster_, name);
|
||||
|
||||
CLUSTER_ATTR(tcp_port, 1);
|
||||
CLUSTER_ATTR(buffer_size, 1);
|
||||
CLUSTER_ATTR(rsbtbl_size, 1);
|
||||
CLUSTER_ATTR(recover_timer, 1);
|
||||
CLUSTER_ATTR(toss_secs, 1);
|
||||
CLUSTER_ATTR(scan_secs, 1);
|
||||
CLUSTER_ATTR(log_debug, 0);
|
||||
CLUSTER_ATTR(log_info, 0);
|
||||
CLUSTER_ATTR(protocol, 0);
|
||||
CLUSTER_ATTR(mark, 0);
|
||||
CLUSTER_ATTR(timewarn_cs, 1);
|
||||
CLUSTER_ATTR(waitwarn_us, 0);
|
||||
CLUSTER_ATTR(new_rsb_count, 0);
|
||||
CLUSTER_ATTR(recover_callbacks, 0);
|
||||
static bool dlm_check_zero(unsigned int x)
|
||||
{
|
||||
return !x;
|
||||
}
|
||||
|
||||
CLUSTER_ATTR(tcp_port, dlm_check_zero);
|
||||
CLUSTER_ATTR(buffer_size, dlm_check_zero);
|
||||
CLUSTER_ATTR(rsbtbl_size, dlm_check_zero);
|
||||
CLUSTER_ATTR(recover_timer, dlm_check_zero);
|
||||
CLUSTER_ATTR(toss_secs, dlm_check_zero);
|
||||
CLUSTER_ATTR(scan_secs, dlm_check_zero);
|
||||
CLUSTER_ATTR(log_debug, NULL);
|
||||
CLUSTER_ATTR(log_info, NULL);
|
||||
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[] = {
|
||||
[CLUSTER_ATTR_TCP_PORT] = &cluster_attr_tcp_port,
|
||||
|
|
Loading…
Reference in New Issue