[PATCH 17/23] dlm: use per-attribute show and store methods

2015-10-03 Thread Christoph Hellwig
To simplify the configfs interface and remove boilerplate code that also
causes binary bloat.

Signed-off-by: Christoph Hellwig 
Reviewed-by: David Teigland cl_cluster_name);
 }
 
-static ssize_t cluster_cluster_name_write(struct dlm_cluster *cl,
+static ssize_t cluster_cluster_name_store(struct config_item *item,
  const char *buf, size_t len)
 {
+   struct dlm_cluster *cl = config_item_to_cluster(item);
+
strlcpy(dlm_config.ci_cluster_name, buf,
sizeof(dlm_config.ci_cluster_name));
strlcpy(cl->cl_cluster_name, buf, sizeof(cl->cl_cluster_name));
return len;
 }
 
-static struct cluster_attribute cluster_attr_cluster_name = {
-   .attr   = { .ca_owner = THIS_MODULE,
-.ca_name = "cluster_name",
-.ca_mode = S_IRUGO | S_IWUSR },
-   .show   = cluster_cluster_name_read,
-   .store  = cluster_cluster_name_write,
-};
+CONFIGFS_ATTR(cluster_, cluster_name);
 
 static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field,
   int *info_field, int check_zero,
@@ -175,17 +145,19 @@ static ssize_t cluster_set(struct dlm_cluster *cl, 
unsigned int *cl_field,
 }
 
 #define CLUSTER_ATTR(name, check_zero)\
-static ssize_t name##_write(struct dlm_cluster *cl, const char *buf, size_t 
len) \
+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, 

Re: [Cluster-devel] [PATCH 17/23] dlm: use per-attribute show and store methods

2015-09-28 Thread David Teigland
On Fri, Sep 25, 2015 at 06:49:54AM -0700, Christoph Hellwig wrote:
> Signed-off-by: Christoph Hellwig 
> ---
>  fs/dlm/config.c | 288 
> +++-
>  1 file changed, 74 insertions(+), 214 deletions(-)

Looks good to me.
Dave
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 17/23] dlm: use per-attribute show and store methods

2015-09-25 Thread Christoph Hellwig
Signed-off-by: Christoph Hellwig 
---
 fs/dlm/config.c | 288 +++-
 1 file changed, 74 insertions(+), 214 deletions(-)

diff --git a/fs/dlm/config.c b/fs/dlm/config.c
index d521bdd..8e294fb 100644
--- a/fs/dlm/config.c
+++ b/fs/dlm/config.c
@@ -61,35 +61,8 @@ static struct config_item *make_node(struct config_group *, 
const char *);
 static void drop_node(struct config_group *, struct config_item *);
 static void release_node(struct config_item *);
 
-static ssize_t show_cluster(struct config_item *i, struct configfs_attribute 
*a,
-   char *buf);
-static ssize_t store_cluster(struct config_item *i,
-struct configfs_attribute *a,
-const char *buf, size_t len);
-static ssize_t show_comm(struct config_item *i, struct configfs_attribute *a,
-char *buf);
-static ssize_t store_comm(struct config_item *i, struct configfs_attribute *a,
- const char *buf, size_t len);
-static ssize_t show_node(struct config_item *i, struct configfs_attribute *a,
-char *buf);
-static ssize_t store_node(struct config_item *i, struct configfs_attribute *a,
- const char *buf, size_t len);
-
-static ssize_t comm_nodeid_read(struct dlm_comm *cm, char *buf);
-static ssize_t comm_nodeid_write(struct dlm_comm *cm, const char *buf,
-   size_t len);
-static ssize_t comm_local_read(struct dlm_comm *cm, char *buf);
-static ssize_t comm_local_write(struct dlm_comm *cm, const char *buf,
-   size_t len);
-static ssize_t comm_addr_write(struct dlm_comm *cm, const char *buf,
-   size_t len);
-static ssize_t comm_addr_list_read(struct dlm_comm *cm, char *buf);
-static ssize_t node_nodeid_read(struct dlm_node *nd, char *buf);
-static ssize_t node_nodeid_write(struct dlm_node *nd, const char *buf,
-   size_t len);
-static ssize_t node_weight_read(struct dlm_node *nd, char *buf);
-static ssize_t node_weight_write(struct dlm_node *nd, const char *buf,
-   size_t len);
+static struct configfs_attribute *comm_attrs[];
+static struct configfs_attribute *node_attrs[];
 
 struct dlm_cluster {
struct config_group group;
@@ -108,6 +81,12 @@ struct dlm_cluster {
char cl_cluster_name[DLM_LOCKSPACE_LEN];
 };
 
+static struct dlm_cluster *config_item_to_cluster(struct config_item *i)
+{
+   return i ? container_of(to_config_group(i), struct dlm_cluster, group) :
+  NULL;
+}
+
 enum {
CLUSTER_ATTR_TCP_PORT = 0,
CLUSTER_ATTR_BUFFER_SIZE,
@@ -124,33 +103,24 @@ enum {
CLUSTER_ATTR_CLUSTER_NAME,
 };
 
-struct cluster_attribute {
-   struct configfs_attribute attr;
-   ssize_t (*show)(struct dlm_cluster *, char *);
-   ssize_t (*store)(struct dlm_cluster *, const char *, size_t);
-};
-
-static ssize_t cluster_cluster_name_read(struct dlm_cluster *cl, char *buf)
+static ssize_t cluster_cluster_name_show(struct config_item *item, char *buf)
 {
+   struct dlm_cluster *cl = config_item_to_cluster(item);
return sprintf(buf, "%s\n", cl->cl_cluster_name);
 }
 
-static ssize_t cluster_cluster_name_write(struct dlm_cluster *cl,
+static ssize_t cluster_cluster_name_store(struct config_item *item,
  const char *buf, size_t len)
 {
+   struct dlm_cluster *cl = config_item_to_cluster(item);
+
strlcpy(dlm_config.ci_cluster_name, buf,
sizeof(dlm_config.ci_cluster_name));
strlcpy(cl->cl_cluster_name, buf, sizeof(cl->cl_cluster_name));
return len;
 }
 
-static struct cluster_attribute cluster_attr_cluster_name = {
-   .attr   = { .ca_owner = THIS_MODULE,
-.ca_name = "cluster_name",
-.ca_mode = S_IRUGO | S_IWUSR },
-   .show   = cluster_cluster_name_read,
-   .store  = cluster_cluster_name_write,
-};
+CONFIGFS_ATTR(cluster_, cluster_name);
 
 static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field,
   int *info_field, int check_zero,
@@ -175,17 +145,19 @@ static ssize_t cluster_set(struct dlm_cluster *cl, 
unsigned int *cl_field,
 }
 
 #define CLUSTER_ATTR(name, check_zero)\
-static ssize_t name##_write(struct dlm_cluster *cl, const char *buf, size_t 
len) \
+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_##name, _config.ci_##name, \
   check_zero, buf, len); \
 }