aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/cluster/nodemanager.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ocfs2/cluster/nodemanager.c')
-rw-r--r--fs/ocfs2/cluster/nodemanager.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/fs/ocfs2/cluster/nodemanager.c b/fs/ocfs2/cluster/nodemanager.c
index 7ee6188bc79a..ed0c9f367fed 100644
--- a/fs/ocfs2/cluster/nodemanager.c
+++ b/fs/ocfs2/cluster/nodemanager.c
@@ -19,6 +19,7 @@
19 * Boston, MA 021110-1307, USA. 19 * Boston, MA 021110-1307, USA.
20 */ 20 */
21 21
22#include <linux/slab.h>
22#include <linux/kernel.h> 23#include <linux/kernel.h>
23#include <linux/module.h> 24#include <linux/module.h>
24#include <linux/configfs.h> 25#include <linux/configfs.h>
@@ -35,6 +36,10 @@
35 * cluster references throughout where nodes are looked up */ 36 * cluster references throughout where nodes are looked up */
36struct o2nm_cluster *o2nm_single_cluster = NULL; 37struct o2nm_cluster *o2nm_single_cluster = NULL;
37 38
39char *o2nm_fence_method_desc[O2NM_FENCE_METHODS] = {
40 "reset", /* O2NM_FENCE_RESET */
41 "panic", /* O2NM_FENCE_PANIC */
42};
38 43
39struct o2nm_node *o2nm_get_node_by_num(u8 node_num) 44struct o2nm_node *o2nm_get_node_by_num(u8 node_num)
40{ 45{
@@ -579,6 +584,43 @@ static ssize_t o2nm_cluster_attr_reconnect_delay_ms_write(
579 return o2nm_cluster_attr_write(page, count, 584 return o2nm_cluster_attr_write(page, count,
580 &cluster->cl_reconnect_delay_ms); 585 &cluster->cl_reconnect_delay_ms);
581} 586}
587
588static ssize_t o2nm_cluster_attr_fence_method_read(
589 struct o2nm_cluster *cluster, char *page)
590{
591 ssize_t ret = 0;
592
593 if (cluster)
594 ret = sprintf(page, "%s\n",
595 o2nm_fence_method_desc[cluster->cl_fence_method]);
596 return ret;
597}
598
599static ssize_t o2nm_cluster_attr_fence_method_write(
600 struct o2nm_cluster *cluster, const char *page, size_t count)
601{
602 unsigned int i;
603
604 if (page[count - 1] != '\n')
605 goto bail;
606
607 for (i = 0; i < O2NM_FENCE_METHODS; ++i) {
608 if (count != strlen(o2nm_fence_method_desc[i]) + 1)
609 continue;
610 if (strncasecmp(page, o2nm_fence_method_desc[i], count - 1))
611 continue;
612 if (cluster->cl_fence_method != i) {
613 printk(KERN_INFO "ocfs2: Changing fence method to %s\n",
614 o2nm_fence_method_desc[i]);
615 cluster->cl_fence_method = i;
616 }
617 return count;
618 }
619
620bail:
621 return -EINVAL;
622}
623
582static struct o2nm_cluster_attribute o2nm_cluster_attr_idle_timeout_ms = { 624static struct o2nm_cluster_attribute o2nm_cluster_attr_idle_timeout_ms = {
583 .attr = { .ca_owner = THIS_MODULE, 625 .attr = { .ca_owner = THIS_MODULE,
584 .ca_name = "idle_timeout_ms", 626 .ca_name = "idle_timeout_ms",
@@ -603,10 +645,19 @@ static struct o2nm_cluster_attribute o2nm_cluster_attr_reconnect_delay_ms = {
603 .store = o2nm_cluster_attr_reconnect_delay_ms_write, 645 .store = o2nm_cluster_attr_reconnect_delay_ms_write,
604}; 646};
605 647
648static struct o2nm_cluster_attribute o2nm_cluster_attr_fence_method = {
649 .attr = { .ca_owner = THIS_MODULE,
650 .ca_name = "fence_method",
651 .ca_mode = S_IRUGO | S_IWUSR },
652 .show = o2nm_cluster_attr_fence_method_read,
653 .store = o2nm_cluster_attr_fence_method_write,
654};
655
606static struct configfs_attribute *o2nm_cluster_attrs[] = { 656static struct configfs_attribute *o2nm_cluster_attrs[] = {
607 &o2nm_cluster_attr_idle_timeout_ms.attr, 657 &o2nm_cluster_attr_idle_timeout_ms.attr,
608 &o2nm_cluster_attr_keepalive_delay_ms.attr, 658 &o2nm_cluster_attr_keepalive_delay_ms.attr,
609 &o2nm_cluster_attr_reconnect_delay_ms.attr, 659 &o2nm_cluster_attr_reconnect_delay_ms.attr,
660 &o2nm_cluster_attr_fence_method.attr,
610 NULL, 661 NULL,
611}; 662};
612static ssize_t o2nm_cluster_show(struct config_item *item, 663static ssize_t o2nm_cluster_show(struct config_item *item,
@@ -778,6 +829,7 @@ static struct config_group *o2nm_cluster_group_make_group(struct config_group *g
778 cluster->cl_reconnect_delay_ms = O2NET_RECONNECT_DELAY_MS_DEFAULT; 829 cluster->cl_reconnect_delay_ms = O2NET_RECONNECT_DELAY_MS_DEFAULT;
779 cluster->cl_idle_timeout_ms = O2NET_IDLE_TIMEOUT_MS_DEFAULT; 830 cluster->cl_idle_timeout_ms = O2NET_IDLE_TIMEOUT_MS_DEFAULT;
780 cluster->cl_keepalive_delay_ms = O2NET_KEEPALIVE_DELAY_MS_DEFAULT; 831 cluster->cl_keepalive_delay_ms = O2NET_KEEPALIVE_DELAY_MS_DEFAULT;
832 cluster->cl_fence_method = O2NM_FENCE_RESET;
781 833
782 ret = &cluster->cl_group; 834 ret = &cluster->cl_group;
783 o2nm_single_cluster = cluster; 835 o2nm_single_cluster = cluster;