diff options
| author | Christoph Hellwig <hch@lst.de> | 2015-10-03 09:32:53 -0400 |
|---|---|---|
| committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2015-10-14 01:16:18 -0400 |
| commit | 9ae0f367df5d0d7be09fad1e2e5b080f6a45ca6b (patch) | |
| tree | c81a69b90b020c12b8b516277f06a5ec981e5915 /fs/dlm | |
| parent | 0b4be4fa878780a15a953577499eb69839942956 (diff) | |
dlm: use per-attribute show and store methods
To simplify the configfs interface and remove boilerplate code that also
causes binary bloat.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: David Teigland <teigland@redhat.com
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'fs/dlm')
| -rw-r--r-- | fs/dlm/config.c | 288 |
1 files changed, 74 insertions, 214 deletions
diff --git a/fs/dlm/config.c b/fs/dlm/config.c index d521bddf876d..8e294fbbac39 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 *); | |||
| 61 | static void drop_node(struct config_group *, struct config_item *); | 61 | static void drop_node(struct config_group *, struct config_item *); |
| 62 | static void release_node(struct config_item *); | 62 | static void release_node(struct config_item *); |
| 63 | 63 | ||
| 64 | static ssize_t show_cluster(struct config_item *i, struct configfs_attribute *a, | 64 | static struct configfs_attribute *comm_attrs[]; |
| 65 | char *buf); | 65 | static struct configfs_attribute *node_attrs[]; |
| 66 | static ssize_t store_cluster(struct config_item *i, | ||
| 67 | struct configfs_attribute *a, | ||
| 68 | const char *buf, size_t len); | ||
| 69 | static ssize_t show_comm(struct config_item *i, struct configfs_attribute *a, | ||
| 70 | char *buf); | ||
| 71 | static ssize_t store_comm(struct config_item *i, struct configfs_attribute *a, | ||
| 72 | const char *buf, size_t len); | ||
| 73 | static ssize_t show_node(struct config_item *i, struct configfs_attribute *a, | ||
| 74 | char *buf); | ||
| 75 | static ssize_t store_node(struct config_item *i, struct configfs_attribute *a, | ||
| 76 | const char *buf, size_t len); | ||
| 77 | |||
| 78 | static ssize_t comm_nodeid_read(struct dlm_comm *cm, char *buf); | ||
| 79 | static ssize_t comm_nodeid_write(struct dlm_comm *cm, const char *buf, | ||
| 80 | size_t len); | ||
| 81 | static ssize_t comm_local_read(struct dlm_comm *cm, char *buf); | ||
| 82 | static ssize_t comm_local_write(struct dlm_comm *cm, const char *buf, | ||
| 83 | size_t len); | ||
| 84 | static ssize_t comm_addr_write(struct dlm_comm *cm, const char *buf, | ||
| 85 | size_t len); | ||
| 86 | static ssize_t comm_addr_list_read(struct dlm_comm *cm, char *buf); | ||
| 87 | static ssize_t node_nodeid_read(struct dlm_node *nd, char *buf); | ||
| 88 | static ssize_t node_nodeid_write(struct dlm_node *nd, const char *buf, | ||
| 89 | size_t len); | ||
| 90 | static ssize_t node_weight_read(struct dlm_node *nd, char *buf); | ||
| 91 | static ssize_t node_weight_write(struct dlm_node *nd, const char *buf, | ||
| 92 | size_t len); | ||
| 93 | 66 | ||
| 94 | struct dlm_cluster { | 67 | struct dlm_cluster { |
| 95 | struct config_group group; | 68 | struct config_group group; |
| @@ -108,6 +81,12 @@ struct dlm_cluster { | |||
| 108 | char cl_cluster_name[DLM_LOCKSPACE_LEN]; | 81 | char cl_cluster_name[DLM_LOCKSPACE_LEN]; |
| 109 | }; | 82 | }; |
| 110 | 83 | ||
| 84 | static struct dlm_cluster *config_item_to_cluster(struct config_item *i) | ||
| 85 | { | ||
| 86 | return i ? container_of(to_config_group(i), struct dlm_cluster, group) : | ||
| 87 | NULL; | ||
| 88 | } | ||
| 89 | |||
| 111 | enum { | 90 | enum { |
| 112 | CLUSTER_ATTR_TCP_PORT = 0, | 91 | CLUSTER_ATTR_TCP_PORT = 0, |
| 113 | CLUSTER_ATTR_BUFFER_SIZE, | 92 | CLUSTER_ATTR_BUFFER_SIZE, |
| @@ -124,33 +103,24 @@ enum { | |||
| 124 | CLUSTER_ATTR_CLUSTER_NAME, | 103 | CLUSTER_ATTR_CLUSTER_NAME, |
| 125 | }; | 104 | }; |
| 126 | 105 | ||
| 127 | struct cluster_attribute { | 106 | static ssize_t cluster_cluster_name_show(struct config_item *item, char *buf) |
| 128 | struct configfs_attribute attr; | ||
| 129 | ssize_t (*show)(struct dlm_cluster *, char *); | ||
| 130 | ssize_t (*store)(struct dlm_cluster *, const char *, size_t); | ||
| 131 | }; | ||
| 132 | |||
| 133 | static ssize_t cluster_cluster_name_read(struct dlm_cluster *cl, char *buf) | ||
| 134 | { | 107 | { |
| 108 | struct dlm_cluster *cl = config_item_to_cluster(item); | ||
| 135 | return sprintf(buf, "%s\n", cl->cl_cluster_name); | 109 | return sprintf(buf, "%s\n", cl->cl_cluster_name); |
| 136 | } | 110 | } |
| 137 | 111 | ||
| 138 | static ssize_t cluster_cluster_name_write(struct dlm_cluster *cl, | 112 | static ssize_t cluster_cluster_name_store(struct config_item *item, |
| 139 | const char *buf, size_t len) | 113 | const char *buf, size_t len) |
| 140 | { | 114 | { |
| 115 | struct dlm_cluster *cl = config_item_to_cluster(item); | ||
| 116 | |||
| 141 | strlcpy(dlm_config.ci_cluster_name, buf, | 117 | strlcpy(dlm_config.ci_cluster_name, buf, |
| 142 | sizeof(dlm_config.ci_cluster_name)); | 118 | sizeof(dlm_config.ci_cluster_name)); |
| 143 | strlcpy(cl->cl_cluster_name, buf, sizeof(cl->cl_cluster_name)); | 119 | strlcpy(cl->cl_cluster_name, buf, sizeof(cl->cl_cluster_name)); |
| 144 | return len; | 120 | return len; |
| 145 | } | 121 | } |
| 146 | 122 | ||
| 147 | static struct cluster_attribute cluster_attr_cluster_name = { | 123 | CONFIGFS_ATTR(cluster_, cluster_name); |
| 148 | .attr = { .ca_owner = THIS_MODULE, | ||
| 149 | .ca_name = "cluster_name", | ||
| 150 | .ca_mode = S_IRUGO | S_IWUSR }, | ||
| 151 | .show = cluster_cluster_name_read, | ||
| 152 | .store = cluster_cluster_name_write, | ||
| 153 | }; | ||
| 154 | 124 | ||
| 155 | static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field, | 125 | static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field, |
| 156 | int *info_field, int check_zero, | 126 | int *info_field, int check_zero, |
| @@ -175,17 +145,19 @@ static ssize_t cluster_set(struct dlm_cluster *cl, unsigned int *cl_field, | |||
| 175 | } | 145 | } |
| 176 | 146 | ||
| 177 | #define CLUSTER_ATTR(name, check_zero) \ | 147 | #define CLUSTER_ATTR(name, check_zero) \ |
| 178 | static ssize_t name##_write(struct dlm_cluster *cl, const char *buf, size_t len) \ | 148 | static ssize_t cluster_##name##_store(struct config_item *item, \ |
| 149 | const char *buf, size_t len) \ | ||
| 179 | { \ | 150 | { \ |
| 151 | struct dlm_cluster *cl = config_item_to_cluster(item); \ | ||
| 180 | return cluster_set(cl, &cl->cl_##name, &dlm_config.ci_##name, \ | 152 | return cluster_set(cl, &cl->cl_##name, &dlm_config.ci_##name, \ |
| 181 | check_zero, buf, len); \ | 153 | check_zero, buf, len); \ |
| 182 | } \ | 154 | } \ |
| 183 | static ssize_t name##_read(struct dlm_cluster *cl, char *buf) \ | 155 | static ssize_t cluster_##name##_show(struct config_item *item, char *buf) \ |
| 184 | { \ | 156 | { \ |
| 157 | struct dlm_cluster *cl = config_item_to_cluster(item); \ | ||
| 185 | return snprintf(buf, PAGE_SIZE, "%u\n", cl->cl_##name); \ | 158 | return snprintf(buf, PAGE_SIZE, "%u\n", cl->cl_##name); \ |
| 186 | } \ | 159 | } \ |
| 187 | static struct cluster_attribute cluster_attr_##name = \ | 160 | CONFIGFS_ATTR(cluster_, name); |
| 188 | __CONFIGFS_ATTR(name, 0644, name##_read, name##_write) | ||
| 189 | 161 | ||
| 190 | CLUSTER_ATTR(tcp_port, 1); | 162 | CLUSTER_ATTR(tcp_port, 1); |
| 191 | CLUSTER_ATTR(buffer_size, 1); | 163 | CLUSTER_ATTR(buffer_size, 1); |
| @@ -201,19 +173,19 @@ CLUSTER_ATTR(new_rsb_count, 0); | |||
| 201 | CLUSTER_ATTR(recover_callbacks, 0); | 173 | CLUSTER_ATTR(recover_callbacks, 0); |
| 202 | 174 | ||
| 203 | static struct configfs_attribute *cluster_attrs[] = { | 175 | static struct configfs_attribute *cluster_attrs[] = { |
| 204 | [CLUSTER_ATTR_TCP_PORT] = &cluster_attr_tcp_port.attr, | 176 | [CLUSTER_ATTR_TCP_PORT] = &cluster_attr_tcp_port, |
| 205 | [CLUSTER_ATTR_BUFFER_SIZE] = &cluster_attr_buffer_size.attr, | 177 | [CLUSTER_ATTR_BUFFER_SIZE] = &cluster_attr_buffer_size, |
| 206 | [CLUSTER_ATTR_RSBTBL_SIZE] = &cluster_attr_rsbtbl_size.attr, | 178 | [CLUSTER_ATTR_RSBTBL_SIZE] = &cluster_attr_rsbtbl_size, |
| 207 | [CLUSTER_ATTR_RECOVER_TIMER] = &cluster_attr_recover_timer.attr, | 179 | [CLUSTER_ATTR_RECOVER_TIMER] = &cluster_attr_recover_timer, |
| 208 | [CLUSTER_ATTR_TOSS_SECS] = &cluster_attr_toss_secs.attr, | 180 | [CLUSTER_ATTR_TOSS_SECS] = &cluster_attr_toss_secs, |
| 209 | [CLUSTER_ATTR_SCAN_SECS] = &cluster_attr_scan_secs.attr, | 181 | [CLUSTER_ATTR_SCAN_SECS] = &cluster_attr_scan_secs, |
| 210 | [CLUSTER_ATTR_LOG_DEBUG] = &cluster_attr_log_debug.attr, | 182 | [CLUSTER_ATTR_LOG_DEBUG] = &cluster_attr_log_debug, |
| 211 | [CLUSTER_ATTR_PROTOCOL] = &cluster_attr_protocol.attr, | 183 | [CLUSTER_ATTR_PROTOCOL] = &cluster_attr_protocol, |
| 212 | [CLUSTER_ATTR_TIMEWARN_CS] = &cluster_attr_timewarn_cs.attr, | 184 | [CLUSTER_ATTR_TIMEWARN_CS] = &cluster_attr_timewarn_cs, |
| 213 | [CLUSTER_ATTR_WAITWARN_US] = &cluster_attr_waitwarn_us.attr, | 185 | [CLUSTER_ATTR_WAITWARN_US] = &cluster_attr_waitwarn_us, |
| 214 | [CLUSTER_ATTR_NEW_RSB_COUNT] = &cluster_attr_new_rsb_count.attr, | 186 | [CLUSTER_ATTR_NEW_RSB_COUNT] = &cluster_attr_new_rsb_count, |
| 215 | [CLUSTER_ATTR_RECOVER_CALLBACKS] = &cluster_attr_recover_callbacks.attr, | 187 | [CLUSTER_ATTR_RECOVER_CALLBACKS] = &cluster_attr_recover_callbacks, |
| 216 | [CLUSTER_ATTR_CLUSTER_NAME] = &cluster_attr_cluster_name.attr, | 188 | [CLUSTER_ATTR_CLUSTER_NAME] = &cluster_attr_cluster_name, |
| 217 | NULL, | 189 | NULL, |
| 218 | }; | 190 | }; |
| 219 | 191 | ||
| @@ -224,83 +196,11 @@ enum { | |||
| 224 | COMM_ATTR_ADDR_LIST, | 196 | COMM_ATTR_ADDR_LIST, |
| 225 | }; | 197 | }; |
| 226 | 198 | ||
| 227 | struct comm_attribute { | ||
| 228 | struct configfs_attribute attr; | ||
| 229 | ssize_t (*show)(struct dlm_comm *, char *); | ||
| 230 | ssize_t (*store)(struct dlm_comm *, const char *, size_t); | ||
| 231 | }; | ||
| 232 | |||
| 233 | static struct comm_attribute comm_attr_nodeid = { | ||
| 234 | .attr = { .ca_owner = THIS_MODULE, | ||
| 235 | .ca_name = "nodeid", | ||
| 236 | .ca_mode = S_IRUGO | S_IWUSR }, | ||
| 237 | .show = comm_nodeid_read, | ||
| 238 | .store = comm_nodeid_write, | ||
| 239 | }; | ||
| 240 | |||
| 241 | static struct comm_attribute comm_attr_local = { | ||
| 242 | .attr = { .ca_owner = THIS_MODULE, | ||
| 243 | .ca_name = "local", | ||
| 244 | .ca_mode = S_IRUGO | S_IWUSR }, | ||
| 245 | .show = comm_local_read, | ||
| 246 | .store = comm_local_write, | ||
| 247 | }; | ||
| 248 | |||
| 249 | static struct comm_attribute comm_attr_addr = { | ||
| 250 | .attr = { .ca_owner = THIS_MODULE, | ||
| 251 | .ca_name = "addr", | ||
| 252 | .ca_mode = S_IWUSR }, | ||
| 253 | .store = comm_addr_write, | ||
| 254 | }; | ||
| 255 | |||
| 256 | static struct comm_attribute comm_attr_addr_list = { | ||
| 257 | .attr = { .ca_owner = THIS_MODULE, | ||
| 258 | .ca_name = "addr_list", | ||
| 259 | .ca_mode = S_IRUGO }, | ||
| 260 | .show = comm_addr_list_read, | ||
| 261 | }; | ||
| 262 | |||
| 263 | static struct configfs_attribute *comm_attrs[] = { | ||
| 264 | [COMM_ATTR_NODEID] = &comm_attr_nodeid.attr, | ||
| 265 | [COMM_ATTR_LOCAL] = &comm_attr_local.attr, | ||
| 266 | [COMM_ATTR_ADDR] = &comm_attr_addr.attr, | ||
| 267 | [COMM_ATTR_ADDR_LIST] = &comm_attr_addr_list.attr, | ||
| 268 | NULL, | ||
| 269 | }; | ||
| 270 | |||
| 271 | enum { | 199 | enum { |
| 272 | NODE_ATTR_NODEID = 0, | 200 | NODE_ATTR_NODEID = 0, |
| 273 | NODE_ATTR_WEIGHT, | 201 | NODE_ATTR_WEIGHT, |
| 274 | }; | 202 | }; |
| 275 | 203 | ||
| 276 | struct node_attribute { | ||
| 277 | struct configfs_attribute attr; | ||
| 278 | ssize_t (*show)(struct dlm_node *, char *); | ||
| 279 | ssize_t (*store)(struct dlm_node *, const char *, size_t); | ||
| 280 | }; | ||
| 281 | |||
| 282 | static struct node_attribute node_attr_nodeid = { | ||
| 283 | .attr = { .ca_owner = THIS_MODULE, | ||
| 284 | .ca_name = "nodeid", | ||
| 285 | .ca_mode = S_IRUGO | S_IWUSR }, | ||
| 286 | .show = node_nodeid_read, | ||
| 287 | .store = node_nodeid_write, | ||
| 288 | }; | ||
| 289 | |||
| 290 | static struct node_attribute node_attr_weight = { | ||
| 291 | .attr = { .ca_owner = THIS_MODULE, | ||
| 292 | .ca_name = "weight", | ||
| 293 | .ca_mode = S_IRUGO | S_IWUSR }, | ||
| 294 | .show = node_weight_read, | ||
| 295 | .store = node_weight_write, | ||
| 296 | }; | ||
| 297 | |||
| 298 | static struct configfs_attribute *node_attrs[] = { | ||
| 299 | [NODE_ATTR_NODEID] = &node_attr_nodeid.attr, | ||
| 300 | [NODE_ATTR_WEIGHT] = &node_attr_weight.attr, | ||
| 301 | NULL, | ||
| 302 | }; | ||
| 303 | |||
| 304 | struct dlm_clusters { | 204 | struct dlm_clusters { |
| 305 | struct configfs_subsystem subsys; | 205 | struct configfs_subsystem subsys; |
| 306 | }; | 206 | }; |
| @@ -349,8 +249,6 @@ static struct configfs_group_operations clusters_ops = { | |||
| 349 | 249 | ||
| 350 | static struct configfs_item_operations cluster_ops = { | 250 | static struct configfs_item_operations cluster_ops = { |
| 351 | .release = release_cluster, | 251 | .release = release_cluster, |
| 352 | .show_attribute = show_cluster, | ||
| 353 | .store_attribute = store_cluster, | ||
| 354 | }; | 252 | }; |
| 355 | 253 | ||
| 356 | static struct configfs_group_operations spaces_ops = { | 254 | static struct configfs_group_operations spaces_ops = { |
| @@ -369,8 +267,6 @@ static struct configfs_group_operations comms_ops = { | |||
| 369 | 267 | ||
| 370 | static struct configfs_item_operations comm_ops = { | 268 | static struct configfs_item_operations comm_ops = { |
| 371 | .release = release_comm, | 269 | .release = release_comm, |
| 372 | .show_attribute = show_comm, | ||
| 373 | .store_attribute = store_comm, | ||
| 374 | }; | 270 | }; |
| 375 | 271 | ||
| 376 | static struct configfs_group_operations nodes_ops = { | 272 | static struct configfs_group_operations nodes_ops = { |
| @@ -380,8 +276,6 @@ static struct configfs_group_operations nodes_ops = { | |||
| 380 | 276 | ||
| 381 | static struct configfs_item_operations node_ops = { | 277 | static struct configfs_item_operations node_ops = { |
| 382 | .release = release_node, | 278 | .release = release_node, |
| 383 | .show_attribute = show_node, | ||
| 384 | .store_attribute = store_node, | ||
| 385 | }; | 279 | }; |
| 386 | 280 | ||
| 387 | static struct config_item_type clusters_type = { | 281 | static struct config_item_type clusters_type = { |
| @@ -427,12 +321,6 @@ static struct config_item_type node_type = { | |||
| 427 | .ct_owner = THIS_MODULE, | 321 | .ct_owner = THIS_MODULE, |
| 428 | }; | 322 | }; |
| 429 | 323 | ||
| 430 | static struct dlm_cluster *config_item_to_cluster(struct config_item *i) | ||
| 431 | { | ||
| 432 | return i ? container_of(to_config_group(i), struct dlm_cluster, group) : | ||
| 433 | NULL; | ||
| 434 | } | ||
| 435 | |||
| 436 | static struct dlm_space *config_item_to_space(struct config_item *i) | 324 | static struct dlm_space *config_item_to_space(struct config_item *i) |
| 437 | { | 325 | { |
| 438 | return i ? container_of(to_config_group(i), struct dlm_space, group) : | 326 | return i ? container_of(to_config_group(i), struct dlm_space, group) : |
| @@ -687,66 +575,30 @@ void dlm_config_exit(void) | |||
| 687 | * Functions for user space to read/write attributes | 575 | * Functions for user space to read/write attributes |
| 688 | */ | 576 | */ |
| 689 | 577 | ||
| 690 | static ssize_t show_cluster(struct config_item *i, struct configfs_attribute *a, | 578 | static ssize_t comm_nodeid_show(struct config_item *item, char *buf) |
| 691 | char *buf) | ||
| 692 | { | ||
| 693 | struct dlm_cluster *cl = config_item_to_cluster(i); | ||
| 694 | struct cluster_attribute *cla = | ||
| 695 | container_of(a, struct cluster_attribute, attr); | ||
| 696 | return cla->show ? cla->show(cl, buf) : 0; | ||
| 697 | } | ||
| 698 | |||
| 699 | static ssize_t store_cluster(struct config_item *i, | ||
| 700 | struct configfs_attribute *a, | ||
| 701 | const char *buf, size_t len) | ||
| 702 | { | 579 | { |
| 703 | struct dlm_cluster *cl = config_item_to_cluster(i); | 580 | return sprintf(buf, "%d\n", config_item_to_comm(item)->nodeid); |
| 704 | struct cluster_attribute *cla = | ||
| 705 | container_of(a, struct cluster_attribute, attr); | ||
| 706 | return cla->store ? cla->store(cl, buf, len) : -EINVAL; | ||
| 707 | } | ||
| 708 | |||
| 709 | static ssize_t show_comm(struct config_item *i, struct configfs_attribute *a, | ||
| 710 | char *buf) | ||
| 711 | { | ||
| 712 | struct dlm_comm *cm = config_item_to_comm(i); | ||
| 713 | struct comm_attribute *cma = | ||
| 714 | container_of(a, struct comm_attribute, attr); | ||
| 715 | return cma->show ? cma->show(cm, buf) : 0; | ||
| 716 | } | ||
| 717 | |||
| 718 | static ssize_t store_comm(struct config_item *i, struct configfs_attribute *a, | ||
| 719 | const char *buf, size_t len) | ||
| 720 | { | ||
| 721 | struct dlm_comm *cm = config_item_to_comm(i); | ||
| 722 | struct comm_attribute *cma = | ||
| 723 | container_of(a, struct comm_attribute, attr); | ||
| 724 | return cma->store ? cma->store(cm, buf, len) : -EINVAL; | ||
| 725 | } | 581 | } |
| 726 | 582 | ||
| 727 | static ssize_t comm_nodeid_read(struct dlm_comm *cm, char *buf) | 583 | static ssize_t comm_nodeid_store(struct config_item *item, const char *buf, |
| 728 | { | ||
| 729 | return sprintf(buf, "%d\n", cm->nodeid); | ||
| 730 | } | ||
| 731 | |||
| 732 | static ssize_t comm_nodeid_write(struct dlm_comm *cm, const char *buf, | ||
| 733 | size_t len) | 584 | size_t len) |
| 734 | { | 585 | { |
| 735 | int rc = kstrtoint(buf, 0, &cm->nodeid); | 586 | int rc = kstrtoint(buf, 0, &config_item_to_comm(item)->nodeid); |
| 736 | 587 | ||
| 737 | if (rc) | 588 | if (rc) |
| 738 | return rc; | 589 | return rc; |
| 739 | return len; | 590 | return len; |
| 740 | } | 591 | } |
| 741 | 592 | ||
| 742 | static ssize_t comm_local_read(struct dlm_comm *cm, char *buf) | 593 | static ssize_t comm_local_show(struct config_item *item, char *buf) |
| 743 | { | 594 | { |
| 744 | return sprintf(buf, "%d\n", cm->local); | 595 | return sprintf(buf, "%d\n", config_item_to_comm(item)->local); |
| 745 | } | 596 | } |
| 746 | 597 | ||
| 747 | static ssize_t comm_local_write(struct dlm_comm *cm, const char *buf, | 598 | static ssize_t comm_local_store(struct config_item *item, const char *buf, |
| 748 | size_t len) | 599 | size_t len) |
| 749 | { | 600 | { |
| 601 | struct dlm_comm *cm = config_item_to_comm(item); | ||
| 750 | int rc = kstrtoint(buf, 0, &cm->local); | 602 | int rc = kstrtoint(buf, 0, &cm->local); |
| 751 | 603 | ||
| 752 | if (rc) | 604 | if (rc) |
| @@ -756,8 +608,10 @@ static ssize_t comm_local_write(struct dlm_comm *cm, const char *buf, | |||
| 756 | return len; | 608 | return len; |
| 757 | } | 609 | } |
| 758 | 610 | ||
| 759 | static ssize_t comm_addr_write(struct dlm_comm *cm, const char *buf, size_t len) | 611 | static ssize_t comm_addr_store(struct config_item *item, const char *buf, |
| 612 | size_t len) | ||
| 760 | { | 613 | { |
| 614 | struct dlm_comm *cm = config_item_to_comm(item); | ||
| 761 | struct sockaddr_storage *addr; | 615 | struct sockaddr_storage *addr; |
| 762 | int rv; | 616 | int rv; |
| 763 | 617 | ||
| @@ -783,8 +637,9 @@ static ssize_t comm_addr_write(struct dlm_comm *cm, const char *buf, size_t len) | |||
| 783 | return len; | 637 | return len; |
| 784 | } | 638 | } |
| 785 | 639 | ||
| 786 | static ssize_t comm_addr_list_read(struct dlm_comm *cm, char *buf) | 640 | static ssize_t comm_addr_list_show(struct config_item *item, char *buf) |
| 787 | { | 641 | { |
| 642 | struct dlm_comm *cm = config_item_to_comm(item); | ||
| 788 | ssize_t s; | 643 | ssize_t s; |
| 789 | ssize_t allowance; | 644 | ssize_t allowance; |
| 790 | int i; | 645 | int i; |
| @@ -827,32 +682,28 @@ static ssize_t comm_addr_list_read(struct dlm_comm *cm, char *buf) | |||
| 827 | return 4096 - allowance; | 682 | return 4096 - allowance; |
| 828 | } | 683 | } |
| 829 | 684 | ||
| 830 | static ssize_t show_node(struct config_item *i, struct configfs_attribute *a, | 685 | CONFIGFS_ATTR(comm_, nodeid); |
| 831 | char *buf) | 686 | CONFIGFS_ATTR(comm_, local); |
| 832 | { | 687 | CONFIGFS_ATTR_WO(comm_, addr); |
| 833 | struct dlm_node *nd = config_item_to_node(i); | 688 | CONFIGFS_ATTR_RO(comm_, addr_list); |
| 834 | struct node_attribute *nda = | ||
| 835 | container_of(a, struct node_attribute, attr); | ||
| 836 | return nda->show ? nda->show(nd, buf) : 0; | ||
| 837 | } | ||
| 838 | 689 | ||
| 839 | static ssize_t store_node(struct config_item *i, struct configfs_attribute *a, | 690 | static struct configfs_attribute *comm_attrs[] = { |
| 840 | const char *buf, size_t len) | 691 | [COMM_ATTR_NODEID] = &comm_attr_nodeid, |
| 841 | { | 692 | [COMM_ATTR_LOCAL] = &comm_attr_local, |
| 842 | struct dlm_node *nd = config_item_to_node(i); | 693 | [COMM_ATTR_ADDR] = &comm_attr_addr, |
| 843 | struct node_attribute *nda = | 694 | [COMM_ATTR_ADDR_LIST] = &comm_attr_addr_list, |
| 844 | container_of(a, struct node_attribute, attr); | 695 | NULL, |
| 845 | return nda->store ? nda->store(nd, buf, len) : -EINVAL; | 696 | }; |
| 846 | } | ||
| 847 | 697 | ||
| 848 | static ssize_t node_nodeid_read(struct dlm_node *nd, char *buf) | 698 | static ssize_t node_nodeid_show(struct config_item *item, char *buf) |
| 849 | { | 699 | { |
| 850 | return sprintf(buf, "%d\n", nd->nodeid); | 700 | return sprintf(buf, "%d\n", config_item_to_node(item)->nodeid); |
| 851 | } | 701 | } |
| 852 | 702 | ||
| 853 | static ssize_t node_nodeid_write(struct dlm_node *nd, const char *buf, | 703 | static ssize_t node_nodeid_store(struct config_item *item, const char *buf, |
| 854 | size_t len) | 704 | size_t len) |
| 855 | { | 705 | { |
| 706 | struct dlm_node *nd = config_item_to_node(item); | ||
| 856 | uint32_t seq = 0; | 707 | uint32_t seq = 0; |
| 857 | int rc = kstrtoint(buf, 0, &nd->nodeid); | 708 | int rc = kstrtoint(buf, 0, &nd->nodeid); |
| 858 | 709 | ||
| @@ -863,21 +714,30 @@ static ssize_t node_nodeid_write(struct dlm_node *nd, const char *buf, | |||
| 863 | return len; | 714 | return len; |
| 864 | } | 715 | } |
| 865 | 716 | ||
| 866 | static ssize_t node_weight_read(struct dlm_node *nd, char *buf) | 717 | static ssize_t node_weight_show(struct config_item *item, char *buf) |
| 867 | { | 718 | { |
| 868 | return sprintf(buf, "%d\n", nd->weight); | 719 | return sprintf(buf, "%d\n", config_item_to_node(item)->weight); |
| 869 | } | 720 | } |
| 870 | 721 | ||
| 871 | static ssize_t node_weight_write(struct dlm_node *nd, const char *buf, | 722 | static ssize_t node_weight_store(struct config_item *item, const char *buf, |
| 872 | size_t len) | 723 | size_t len) |
| 873 | { | 724 | { |
| 874 | int rc = kstrtoint(buf, 0, &nd->weight); | 725 | int rc = kstrtoint(buf, 0, &config_item_to_node(item)->weight); |
| 875 | 726 | ||
| 876 | if (rc) | 727 | if (rc) |
| 877 | return rc; | 728 | return rc; |
| 878 | return len; | 729 | return len; |
| 879 | } | 730 | } |
| 880 | 731 | ||
| 732 | CONFIGFS_ATTR(node_, nodeid); | ||
| 733 | CONFIGFS_ATTR(node_, weight); | ||
| 734 | |||
| 735 | static struct configfs_attribute *node_attrs[] = { | ||
| 736 | [NODE_ATTR_NODEID] = &node_attr_nodeid, | ||
| 737 | [NODE_ATTR_WEIGHT] = &node_attr_weight, | ||
| 738 | NULL, | ||
| 739 | }; | ||
| 740 | |||
| 881 | /* | 741 | /* |
| 882 | * Functions for the dlm to get the info that's been configured | 742 | * Functions for the dlm to get the info that's been configured |
| 883 | */ | 743 | */ |
