nodemanager.c (13a83fc9096dfaf2a7f4671b5777780bbe1d4a30) | nodemanager.c (45b997737a8025be2825e464e9e9dd5d07160dc3) |
---|---|
1/* -*- mode: c; c-basic-offset: 8; -*- 2 * vim: noexpandtab sw=8 ts=8 sts=0: 3 * 4 * Copyright (C) 2004, 2005 Oracle. All rights reserved. 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public 8 * License as published by the Free Software Foundation; either --- 158 unchanged lines hidden (view full) --- 167} 168 169static void o2nm_node_release(struct config_item *item) 170{ 171 struct o2nm_node *node = to_o2nm_node(item); 172 kfree(node); 173} 174 | 1/* -*- mode: c; c-basic-offset: 8; -*- 2 * vim: noexpandtab sw=8 ts=8 sts=0: 3 * 4 * Copyright (C) 2004, 2005 Oracle. All rights reserved. 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public 8 * License as published by the Free Software Foundation; either --- 158 unchanged lines hidden (view full) --- 167} 168 169static void o2nm_node_release(struct config_item *item) 170{ 171 struct o2nm_node *node = to_o2nm_node(item); 172 kfree(node); 173} 174 |
175static ssize_t o2nm_node_num_read(struct o2nm_node *node, char *page) | 175static ssize_t o2nm_node_num_show(struct config_item *item, char *page) |
176{ | 176{ |
177 return sprintf(page, "%d\n", node->nd_num); | 177 return sprintf(page, "%d\n", to_o2nm_node(item)->nd_num); |
178} 179 180static struct o2nm_cluster *to_o2nm_cluster_from_node(struct o2nm_node *node) 181{ 182 /* through the first node_set .parent 183 * mycluster/nodes/mynode == o2nm_cluster->o2nm_node_group->o2nm_node */ 184 return to_o2nm_cluster(node->nd_item.ci_parent->ci_parent); 185} 186 187enum { 188 O2NM_NODE_ATTR_NUM = 0, 189 O2NM_NODE_ATTR_PORT, 190 O2NM_NODE_ATTR_ADDRESS, 191}; 192 | 178} 179 180static struct o2nm_cluster *to_o2nm_cluster_from_node(struct o2nm_node *node) 181{ 182 /* through the first node_set .parent 183 * mycluster/nodes/mynode == o2nm_cluster->o2nm_node_group->o2nm_node */ 184 return to_o2nm_cluster(node->nd_item.ci_parent->ci_parent); 185} 186 187enum { 188 O2NM_NODE_ATTR_NUM = 0, 189 O2NM_NODE_ATTR_PORT, 190 O2NM_NODE_ATTR_ADDRESS, 191}; 192 |
193static ssize_t o2nm_node_num_write(struct o2nm_node *node, const char *page, | 193static ssize_t o2nm_node_num_store(struct config_item *item, const char *page, |
194 size_t count) 195{ | 194 size_t count) 195{ |
196 struct o2nm_node *node = to_o2nm_node(item); |
|
196 struct o2nm_cluster *cluster = to_o2nm_cluster_from_node(node); 197 unsigned long tmp; 198 char *p = (char *)page; 199 int ret = 0; 200 201 tmp = simple_strtoul(p, &p, 0); 202 if (!p || (*p && (*p != '\n'))) 203 return -EINVAL; --- 21 unchanged lines hidden (view full) --- 225 set_bit(tmp, cluster->cl_nodes_bitmap); 226 } 227 write_unlock(&cluster->cl_nodes_lock); 228 if (ret) 229 return ret; 230 231 return count; 232} | 197 struct o2nm_cluster *cluster = to_o2nm_cluster_from_node(node); 198 unsigned long tmp; 199 char *p = (char *)page; 200 int ret = 0; 201 202 tmp = simple_strtoul(p, &p, 0); 203 if (!p || (*p && (*p != '\n'))) 204 return -EINVAL; --- 21 unchanged lines hidden (view full) --- 226 set_bit(tmp, cluster->cl_nodes_bitmap); 227 } 228 write_unlock(&cluster->cl_nodes_lock); 229 if (ret) 230 return ret; 231 232 return count; 233} |
233static ssize_t o2nm_node_ipv4_port_read(struct o2nm_node *node, char *page) | 234static ssize_t o2nm_node_ipv4_port_show(struct config_item *item, char *page) |
234{ | 235{ |
235 return sprintf(page, "%u\n", ntohs(node->nd_ipv4_port)); | 236 return sprintf(page, "%u\n", ntohs(to_o2nm_node(item)->nd_ipv4_port)); |
236} 237 | 237} 238 |
238static ssize_t o2nm_node_ipv4_port_write(struct o2nm_node *node, | 239static ssize_t o2nm_node_ipv4_port_store(struct config_item *item, |
239 const char *page, size_t count) 240{ | 240 const char *page, size_t count) 241{ |
242 struct o2nm_node *node = to_o2nm_node(item); |
|
241 unsigned long tmp; 242 char *p = (char *)page; 243 244 tmp = simple_strtoul(p, &p, 0); 245 if (!p || (*p && (*p != '\n'))) 246 return -EINVAL; 247 248 if (tmp == 0) 249 return -EINVAL; 250 if (tmp >= (u16)-1) 251 return -ERANGE; 252 253 if (test_and_set_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes)) 254 return -EBUSY; 255 node->nd_ipv4_port = htons(tmp); 256 257 return count; 258} 259 | 243 unsigned long tmp; 244 char *p = (char *)page; 245 246 tmp = simple_strtoul(p, &p, 0); 247 if (!p || (*p && (*p != '\n'))) 248 return -EINVAL; 249 250 if (tmp == 0) 251 return -EINVAL; 252 if (tmp >= (u16)-1) 253 return -ERANGE; 254 255 if (test_and_set_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes)) 256 return -EBUSY; 257 node->nd_ipv4_port = htons(tmp); 258 259 return count; 260} 261 |
260static ssize_t o2nm_node_ipv4_address_read(struct o2nm_node *node, char *page) | 262static ssize_t o2nm_node_ipv4_address_show(struct config_item *item, char *page) |
261{ | 263{ |
262 return sprintf(page, "%pI4\n", &node->nd_ipv4_address); | 264 return sprintf(page, "%pI4\n", &to_o2nm_node(item)->nd_ipv4_address); |
263} 264 | 265} 266 |
265static ssize_t o2nm_node_ipv4_address_write(struct o2nm_node *node, | 267static ssize_t o2nm_node_ipv4_address_store(struct config_item *item, |
266 const char *page, 267 size_t count) 268{ | 268 const char *page, 269 size_t count) 270{ |
271 struct o2nm_node *node = to_o2nm_node(item); |
|
269 struct o2nm_cluster *cluster = to_o2nm_cluster_from_node(node); 270 int ret, i; 271 struct rb_node **p, *parent; 272 unsigned int octets[4]; 273 __be32 ipv4_addr = 0; 274 275 ret = sscanf(page, "%3u.%3u.%3u.%3u", &octets[3], &octets[2], 276 &octets[1], &octets[0]); --- 21 unchanged lines hidden (view full) --- 298 if (ret) 299 return ret; 300 301 memcpy(&node->nd_ipv4_address, &ipv4_addr, sizeof(ipv4_addr)); 302 303 return count; 304} 305 | 272 struct o2nm_cluster *cluster = to_o2nm_cluster_from_node(node); 273 int ret, i; 274 struct rb_node **p, *parent; 275 unsigned int octets[4]; 276 __be32 ipv4_addr = 0; 277 278 ret = sscanf(page, "%3u.%3u.%3u.%3u", &octets[3], &octets[2], 279 &octets[1], &octets[0]); --- 21 unchanged lines hidden (view full) --- 301 if (ret) 302 return ret; 303 304 memcpy(&node->nd_ipv4_address, &ipv4_addr, sizeof(ipv4_addr)); 305 306 return count; 307} 308 |
306static ssize_t o2nm_node_local_read(struct o2nm_node *node, char *page) | 309static ssize_t o2nm_node_local_show(struct config_item *item, char *page) |
307{ | 310{ |
308 return sprintf(page, "%d\n", node->nd_local); | 311 return sprintf(page, "%d\n", to_o2nm_node(item)->nd_local); |
309} 310 | 312} 313 |
311static ssize_t o2nm_node_local_write(struct o2nm_node *node, const char *page, | 314static ssize_t o2nm_node_local_store(struct config_item *item, const char *page, |
312 size_t count) 313{ | 315 size_t count) 316{ |
317 struct o2nm_node *node = to_o2nm_node(item); |
|
314 struct o2nm_cluster *cluster = to_o2nm_cluster_from_node(node); 315 unsigned long tmp; 316 char *p = (char *)page; 317 ssize_t ret; 318 319 tmp = simple_strtoul(p, &p, 0); 320 if (!p || (*p && (*p != '\n'))) 321 return -EINVAL; --- 30 unchanged lines hidden (view full) --- 352 if (node->nd_local) { 353 cluster->cl_has_local = tmp; 354 cluster->cl_local_node = node->nd_num; 355 } 356 357 return count; 358} 359 | 318 struct o2nm_cluster *cluster = to_o2nm_cluster_from_node(node); 319 unsigned long tmp; 320 char *p = (char *)page; 321 ssize_t ret; 322 323 tmp = simple_strtoul(p, &p, 0); 324 if (!p || (*p && (*p != '\n'))) 325 return -EINVAL; --- 30 unchanged lines hidden (view full) --- 356 if (node->nd_local) { 357 cluster->cl_has_local = tmp; 358 cluster->cl_local_node = node->nd_num; 359 } 360 361 return count; 362} 363 |
360struct o2nm_node_attribute { 361 struct configfs_attribute attr; 362 ssize_t (*show)(struct o2nm_node *, char *); 363 ssize_t (*store)(struct o2nm_node *, const char *, size_t); 364}; | 364CONFIGFS_ATTR(o2nm_node_, num); 365CONFIGFS_ATTR(o2nm_node_, ipv4_port); 366CONFIGFS_ATTR(o2nm_node_, ipv4_address); 367CONFIGFS_ATTR(o2nm_node_, local); |
365 | 368 |
366static struct o2nm_node_attribute o2nm_node_attr_num = { 367 .attr = { .ca_owner = THIS_MODULE, 368 .ca_name = "num", 369 .ca_mode = S_IRUGO | S_IWUSR }, 370 .show = o2nm_node_num_read, 371 .store = o2nm_node_num_write, 372}; 373 374static struct o2nm_node_attribute o2nm_node_attr_ipv4_port = { 375 .attr = { .ca_owner = THIS_MODULE, 376 .ca_name = "ipv4_port", 377 .ca_mode = S_IRUGO | S_IWUSR }, 378 .show = o2nm_node_ipv4_port_read, 379 .store = o2nm_node_ipv4_port_write, 380}; 381 382static struct o2nm_node_attribute o2nm_node_attr_ipv4_address = { 383 .attr = { .ca_owner = THIS_MODULE, 384 .ca_name = "ipv4_address", 385 .ca_mode = S_IRUGO | S_IWUSR }, 386 .show = o2nm_node_ipv4_address_read, 387 .store = o2nm_node_ipv4_address_write, 388}; 389 390static struct o2nm_node_attribute o2nm_node_attr_local = { 391 .attr = { .ca_owner = THIS_MODULE, 392 .ca_name = "local", 393 .ca_mode = S_IRUGO | S_IWUSR }, 394 .show = o2nm_node_local_read, 395 .store = o2nm_node_local_write, 396}; 397 | |
398static struct configfs_attribute *o2nm_node_attrs[] = { | 369static struct configfs_attribute *o2nm_node_attrs[] = { |
399 &o2nm_node_attr_num.attr, 400 &o2nm_node_attr_ipv4_port.attr, 401 &o2nm_node_attr_ipv4_address.attr, 402 &o2nm_node_attr_local.attr, | 370 &o2nm_node_attr_num, 371 &o2nm_node_attr_ipv4_port, 372 &o2nm_node_attr_ipv4_address, 373 &o2nm_node_attr_local, |
403 NULL, 404}; 405 | 374 NULL, 375}; 376 |
406static ssize_t o2nm_node_show(struct config_item *item, 407 struct configfs_attribute *attr, 408 char *page) 409{ 410 struct o2nm_node *node = to_o2nm_node(item); 411 struct o2nm_node_attribute *o2nm_node_attr = 412 container_of(attr, struct o2nm_node_attribute, attr); 413 ssize_t ret = 0; 414 415 if (o2nm_node_attr->show) 416 ret = o2nm_node_attr->show(node, page); 417 return ret; 418} 419 420static ssize_t o2nm_node_store(struct config_item *item, 421 struct configfs_attribute *attr, 422 const char *page, size_t count) 423{ 424 struct o2nm_node *node = to_o2nm_node(item); 425 struct o2nm_node_attribute *o2nm_node_attr = 426 container_of(attr, struct o2nm_node_attribute, attr); 427 428 if (o2nm_node_attr->store == NULL) 429 return -EINVAL; 430 431 return o2nm_node_attr->store(node, page, count); 432} 433 | |
434static struct configfs_item_operations o2nm_node_item_ops = { 435 .release = o2nm_node_release, | 377static struct configfs_item_operations o2nm_node_item_ops = { 378 .release = o2nm_node_release, |
436 .show_attribute = o2nm_node_show, 437 .store_attribute = o2nm_node_store, | |
438}; 439 440static struct config_item_type o2nm_node_type = { 441 .ct_item_ops = &o2nm_node_item_ops, 442 .ct_attrs = o2nm_node_attrs, 443 .ct_owner = THIS_MODULE, 444}; 445 --- 8 unchanged lines hidden (view full) --- 454static struct o2nm_node_group *to_o2nm_node_group(struct config_group *group) 455{ 456 return group ? 457 container_of(group, struct o2nm_node_group, ns_group) 458 : NULL; 459} 460#endif 461 | 379}; 380 381static struct config_item_type o2nm_node_type = { 382 .ct_item_ops = &o2nm_node_item_ops, 383 .ct_attrs = o2nm_node_attrs, 384 .ct_owner = THIS_MODULE, 385}; 386 --- 8 unchanged lines hidden (view full) --- 395static struct o2nm_node_group *to_o2nm_node_group(struct config_group *group) 396{ 397 return group ? 398 container_of(group, struct o2nm_node_group, ns_group) 399 : NULL; 400} 401#endif 402 |
462struct o2nm_cluster_attribute { 463 struct configfs_attribute attr; 464 ssize_t (*show)(struct o2nm_cluster *, char *); 465 ssize_t (*store)(struct o2nm_cluster *, const char *, size_t); 466}; 467 | |
468static ssize_t o2nm_cluster_attr_write(const char *page, ssize_t count, 469 unsigned int *val) 470{ 471 unsigned long tmp; 472 char *p = (char *)page; 473 474 tmp = simple_strtoul(p, &p, 0); 475 if (!p || (*p && (*p != '\n'))) --- 4 unchanged lines hidden (view full) --- 480 if (tmp >= (u32)-1) 481 return -ERANGE; 482 483 *val = tmp; 484 485 return count; 486} 487 | 403static ssize_t o2nm_cluster_attr_write(const char *page, ssize_t count, 404 unsigned int *val) 405{ 406 unsigned long tmp; 407 char *p = (char *)page; 408 409 tmp = simple_strtoul(p, &p, 0); 410 if (!p || (*p && (*p != '\n'))) --- 4 unchanged lines hidden (view full) --- 415 if (tmp >= (u32)-1) 416 return -ERANGE; 417 418 *val = tmp; 419 420 return count; 421} 422 |
488static ssize_t o2nm_cluster_attr_idle_timeout_ms_read( 489 struct o2nm_cluster *cluster, char *page) | 423static ssize_t o2nm_cluster_idle_timeout_ms_show(struct config_item *item, 424 char *page) |
490{ | 425{ |
491 return sprintf(page, "%u\n", cluster->cl_idle_timeout_ms); | 426 return sprintf(page, "%u\n", to_o2nm_cluster(item)->cl_idle_timeout_ms); |
492} 493 | 427} 428 |
494static ssize_t o2nm_cluster_attr_idle_timeout_ms_write( 495 struct o2nm_cluster *cluster, const char *page, size_t count) | 429static ssize_t o2nm_cluster_idle_timeout_ms_store(struct config_item *item, 430 const char *page, size_t count) |
496{ | 431{ |
432 struct o2nm_cluster *cluster = to_o2nm_cluster(item); |
|
497 ssize_t ret; 498 unsigned int val; 499 500 ret = o2nm_cluster_attr_write(page, count, &val); 501 502 if (ret > 0) { 503 if (cluster->cl_idle_timeout_ms != val 504 && o2net_num_connected_peers()) { --- 10 unchanged lines hidden (view full) --- 515 } else { 516 cluster->cl_idle_timeout_ms = val; 517 } 518 } 519 520 return ret; 521} 522 | 433 ssize_t ret; 434 unsigned int val; 435 436 ret = o2nm_cluster_attr_write(page, count, &val); 437 438 if (ret > 0) { 439 if (cluster->cl_idle_timeout_ms != val 440 && o2net_num_connected_peers()) { --- 10 unchanged lines hidden (view full) --- 451 } else { 452 cluster->cl_idle_timeout_ms = val; 453 } 454 } 455 456 return ret; 457} 458 |
523static ssize_t o2nm_cluster_attr_keepalive_delay_ms_read( 524 struct o2nm_cluster *cluster, char *page) | 459static ssize_t o2nm_cluster_keepalive_delay_ms_show( 460 struct config_item *item, char *page) |
525{ | 461{ |
526 return sprintf(page, "%u\n", cluster->cl_keepalive_delay_ms); | 462 return sprintf(page, "%u\n", 463 to_o2nm_cluster(item)->cl_keepalive_delay_ms); |
527} 528 | 464} 465 |
529static ssize_t o2nm_cluster_attr_keepalive_delay_ms_write( 530 struct o2nm_cluster *cluster, const char *page, size_t count) | 466static ssize_t o2nm_cluster_keepalive_delay_ms_store( 467 struct config_item *item, const char *page, size_t count) |
531{ | 468{ |
469 struct o2nm_cluster *cluster = to_o2nm_cluster(item); |
|
532 ssize_t ret; 533 unsigned int val; 534 535 ret = o2nm_cluster_attr_write(page, count, &val); 536 537 if (ret > 0) { 538 if (cluster->cl_keepalive_delay_ms != val 539 && o2net_num_connected_peers()) { --- 10 unchanged lines hidden (view full) --- 550 } else { 551 cluster->cl_keepalive_delay_ms = val; 552 } 553 } 554 555 return ret; 556} 557 | 470 ssize_t ret; 471 unsigned int val; 472 473 ret = o2nm_cluster_attr_write(page, count, &val); 474 475 if (ret > 0) { 476 if (cluster->cl_keepalive_delay_ms != val 477 && o2net_num_connected_peers()) { --- 10 unchanged lines hidden (view full) --- 488 } else { 489 cluster->cl_keepalive_delay_ms = val; 490 } 491 } 492 493 return ret; 494} 495 |
558static ssize_t o2nm_cluster_attr_reconnect_delay_ms_read( 559 struct o2nm_cluster *cluster, char *page) | 496static ssize_t o2nm_cluster_reconnect_delay_ms_show( 497 struct config_item *item, char *page) |
560{ | 498{ |
561 return sprintf(page, "%u\n", cluster->cl_reconnect_delay_ms); | 499 return sprintf(page, "%u\n", 500 to_o2nm_cluster(item)->cl_reconnect_delay_ms); |
562} 563 | 501} 502 |
564static ssize_t o2nm_cluster_attr_reconnect_delay_ms_write( 565 struct o2nm_cluster *cluster, const char *page, size_t count) | 503static ssize_t o2nm_cluster_reconnect_delay_ms_store( 504 struct config_item *item, const char *page, size_t count) |
566{ 567 return o2nm_cluster_attr_write(page, count, | 505{ 506 return o2nm_cluster_attr_write(page, count, |
568 &cluster->cl_reconnect_delay_ms); | 507 &to_o2nm_cluster(item)->cl_reconnect_delay_ms); |
569} 570 | 508} 509 |
571static ssize_t o2nm_cluster_attr_fence_method_read( 572 struct o2nm_cluster *cluster, char *page) | 510static ssize_t o2nm_cluster_fence_method_show( 511 struct config_item *item, char *page) |
573{ | 512{ |
513 struct o2nm_cluster *cluster = to_o2nm_cluster(item); |
|
574 ssize_t ret = 0; 575 576 if (cluster) 577 ret = sprintf(page, "%s\n", 578 o2nm_fence_method_desc[cluster->cl_fence_method]); 579 return ret; 580} 581 | 514 ssize_t ret = 0; 515 516 if (cluster) 517 ret = sprintf(page, "%s\n", 518 o2nm_fence_method_desc[cluster->cl_fence_method]); 519 return ret; 520} 521 |
582static ssize_t o2nm_cluster_attr_fence_method_write( 583 struct o2nm_cluster *cluster, const char *page, size_t count) | 522static ssize_t o2nm_cluster_fence_method_store( 523 struct config_item *item, const char *page, size_t count) |
584{ 585 unsigned int i; 586 587 if (page[count - 1] != '\n') 588 goto bail; 589 590 for (i = 0; i < O2NM_FENCE_METHODS; ++i) { 591 if (count != strlen(o2nm_fence_method_desc[i]) + 1) 592 continue; 593 if (strncasecmp(page, o2nm_fence_method_desc[i], count - 1)) 594 continue; | 524{ 525 unsigned int i; 526 527 if (page[count - 1] != '\n') 528 goto bail; 529 530 for (i = 0; i < O2NM_FENCE_METHODS; ++i) { 531 if (count != strlen(o2nm_fence_method_desc[i]) + 1) 532 continue; 533 if (strncasecmp(page, o2nm_fence_method_desc[i], count - 1)) 534 continue; |
595 if (cluster->cl_fence_method != i) { | 535 if (to_o2nm_cluster(item)->cl_fence_method != i) { |
596 printk(KERN_INFO "ocfs2: Changing fence method to %s\n", 597 o2nm_fence_method_desc[i]); | 536 printk(KERN_INFO "ocfs2: Changing fence method to %s\n", 537 o2nm_fence_method_desc[i]); |
598 cluster->cl_fence_method = i; | 538 to_o2nm_cluster(item)->cl_fence_method = i; |
599 } 600 return count; 601 } 602 603bail: 604 return -EINVAL; 605} 606 | 539 } 540 return count; 541 } 542 543bail: 544 return -EINVAL; 545} 546 |
607static struct o2nm_cluster_attribute o2nm_cluster_attr_idle_timeout_ms = { 608 .attr = { .ca_owner = THIS_MODULE, 609 .ca_name = "idle_timeout_ms", 610 .ca_mode = S_IRUGO | S_IWUSR }, 611 .show = o2nm_cluster_attr_idle_timeout_ms_read, 612 .store = o2nm_cluster_attr_idle_timeout_ms_write, 613}; | 547CONFIGFS_ATTR(o2nm_cluster_, idle_timeout_ms); 548CONFIGFS_ATTR(o2nm_cluster_, keepalive_delay_ms); 549CONFIGFS_ATTR(o2nm_cluster_, reconnect_delay_ms); 550CONFIGFS_ATTR(o2nm_cluster_, fence_method); |
614 | 551 |
615static struct o2nm_cluster_attribute o2nm_cluster_attr_keepalive_delay_ms = { 616 .attr = { .ca_owner = THIS_MODULE, 617 .ca_name = "keepalive_delay_ms", 618 .ca_mode = S_IRUGO | S_IWUSR }, 619 .show = o2nm_cluster_attr_keepalive_delay_ms_read, 620 .store = o2nm_cluster_attr_keepalive_delay_ms_write, 621}; 622 623static struct o2nm_cluster_attribute o2nm_cluster_attr_reconnect_delay_ms = { 624 .attr = { .ca_owner = THIS_MODULE, 625 .ca_name = "reconnect_delay_ms", 626 .ca_mode = S_IRUGO | S_IWUSR }, 627 .show = o2nm_cluster_attr_reconnect_delay_ms_read, 628 .store = o2nm_cluster_attr_reconnect_delay_ms_write, 629}; 630 631static struct o2nm_cluster_attribute o2nm_cluster_attr_fence_method = { 632 .attr = { .ca_owner = THIS_MODULE, 633 .ca_name = "fence_method", 634 .ca_mode = S_IRUGO | S_IWUSR }, 635 .show = o2nm_cluster_attr_fence_method_read, 636 .store = o2nm_cluster_attr_fence_method_write, 637}; 638 | |
639static struct configfs_attribute *o2nm_cluster_attrs[] = { | 552static struct configfs_attribute *o2nm_cluster_attrs[] = { |
640 &o2nm_cluster_attr_idle_timeout_ms.attr, 641 &o2nm_cluster_attr_keepalive_delay_ms.attr, 642 &o2nm_cluster_attr_reconnect_delay_ms.attr, 643 &o2nm_cluster_attr_fence_method.attr, | 553 &o2nm_cluster_attr_idle_timeout_ms, 554 &o2nm_cluster_attr_keepalive_delay_ms, 555 &o2nm_cluster_attr_reconnect_delay_ms, 556 &o2nm_cluster_attr_fence_method, |
644 NULL, 645}; | 557 NULL, 558}; |
646static ssize_t o2nm_cluster_show(struct config_item *item, 647 struct configfs_attribute *attr, 648 char *page) 649{ 650 struct o2nm_cluster *cluster = to_o2nm_cluster(item); 651 struct o2nm_cluster_attribute *o2nm_cluster_attr = 652 container_of(attr, struct o2nm_cluster_attribute, attr); 653 ssize_t ret = 0; | |
654 | 559 |
655 if (o2nm_cluster_attr->show) 656 ret = o2nm_cluster_attr->show(cluster, page); 657 return ret; 658} 659 660static ssize_t o2nm_cluster_store(struct config_item *item, 661 struct configfs_attribute *attr, 662 const char *page, size_t count) 663{ 664 struct o2nm_cluster *cluster = to_o2nm_cluster(item); 665 struct o2nm_cluster_attribute *o2nm_cluster_attr = 666 container_of(attr, struct o2nm_cluster_attribute, attr); 667 ssize_t ret; 668 669 if (o2nm_cluster_attr->store == NULL) { 670 ret = -EINVAL; 671 goto out; 672 } 673 674 ret = o2nm_cluster_attr->store(cluster, page, count); 675 if (ret < count) 676 goto out; 677out: 678 return ret; 679} 680 | |
681static struct config_item *o2nm_node_group_make_item(struct config_group *group, 682 const char *name) 683{ 684 struct o2nm_node *node = NULL; 685 686 if (strlen(name) > O2NM_MAX_NAME_LEN) 687 return ERR_PTR(-ENAMETOOLONG); 688 --- 63 unchanged lines hidden (view full) --- 752 struct o2nm_cluster *cluster = to_o2nm_cluster(item); 753 754 kfree(cluster->cl_group.default_groups); 755 kfree(cluster); 756} 757 758static struct configfs_item_operations o2nm_cluster_item_ops = { 759 .release = o2nm_cluster_release, | 560static struct config_item *o2nm_node_group_make_item(struct config_group *group, 561 const char *name) 562{ 563 struct o2nm_node *node = NULL; 564 565 if (strlen(name) > O2NM_MAX_NAME_LEN) 566 return ERR_PTR(-ENAMETOOLONG); 567 --- 63 unchanged lines hidden (view full) --- 631 struct o2nm_cluster *cluster = to_o2nm_cluster(item); 632 633 kfree(cluster->cl_group.default_groups); 634 kfree(cluster); 635} 636 637static struct configfs_item_operations o2nm_cluster_item_ops = { 638 .release = o2nm_cluster_release, |
760 .show_attribute = o2nm_cluster_show, 761 .store_attribute = o2nm_cluster_store, | |
762}; 763 764static struct config_item_type o2nm_cluster_type = { 765 .ct_item_ops = &o2nm_cluster_item_ops, 766 .ct_attrs = o2nm_cluster_attrs, 767 .ct_owner = THIS_MODULE, 768}; 769 --- 202 unchanged lines hidden --- | 639}; 640 641static struct config_item_type o2nm_cluster_type = { 642 .ct_item_ops = &o2nm_cluster_item_ops, 643 .ct_attrs = o2nm_cluster_attrs, 644 .ct_owner = THIS_MODULE, 645}; 646 --- 202 unchanged lines hidden --- |