aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/cluster/nodemanager.c
diff options
context:
space:
mode:
authorAndrew Beekhof <abeekhof@suse.de>2006-12-04 08:04:55 -0500
committerMark Fasheh <mark.fasheh@oracle.com>2006-12-11 17:26:44 -0500
commit828ae6afbef03bfe107a4a8cc38798419d6a2765 (patch)
treeaa9cd680db9af2070f124cfd66aad88da279a5b9 /fs/ocfs2/cluster/nodemanager.c
parentb5dd80304da482d77b2320e1a01a189e656b9770 (diff)
[patch 3/3] OCFS2 Configurable timeouts - Protocol changes
Modify the OCFS2 handshake to ensure essential timeouts are configured identically on all nodes. Only allow changes when there are no connected peers Improves the logic in o2net_advance_rx() which broke now that sizeof(struct o2net_handshake) is greater than sizeof(struct o2net_msg) Included is the field for userspace-heartbeat timeout to avoid the need for further protocol changes. Uses a global spinlock to ensure the decisions to update configfs entries are made on the correct value. The region covered by the spinlock when incrementing the counter is much larger as this is the more critical case. Small cleanup contributed by Adrian Bunk <bunk@stusta.de> Signed-off-by: Andrew Beekhof <abeekhof@suse.de> Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Diffstat (limited to 'fs/ocfs2/cluster/nodemanager.c')
-rw-r--r--fs/ocfs2/cluster/nodemanager.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/fs/ocfs2/cluster/nodemanager.c b/fs/ocfs2/cluster/nodemanager.c
index 234f83f2897f..357f1d551771 100644
--- a/fs/ocfs2/cluster/nodemanager.c
+++ b/fs/ocfs2/cluster/nodemanager.c
@@ -573,12 +573,21 @@ static ssize_t o2nm_cluster_attr_idle_timeout_ms_write(
573 ret = o2nm_cluster_attr_write(page, count, &val); 573 ret = o2nm_cluster_attr_write(page, count, &val);
574 574
575 if (ret > 0) { 575 if (ret > 0) {
576 if (val <= cluster->cl_keepalive_delay_ms) { 576 if (cluster->cl_idle_timeout_ms != val
577 && o2net_num_connected_peers()) {
578 mlog(ML_NOTICE,
579 "o2net: cannot change idle timeout after "
580 "the first peer has agreed to it."
581 " %d connected peers\n",
582 o2net_num_connected_peers());
583 ret = -EINVAL;
584 } else if (val <= cluster->cl_keepalive_delay_ms) {
577 mlog(ML_NOTICE, "o2net: idle timeout must be larger " 585 mlog(ML_NOTICE, "o2net: idle timeout must be larger "
578 "than keepalive delay\n"); 586 "than keepalive delay\n");
579 return -EINVAL; 587 ret = -EINVAL;
588 } else {
589 cluster->cl_idle_timeout_ms = val;
580 } 590 }
581 cluster->cl_idle_timeout_ms = val;
582 } 591 }
583 592
584 return ret; 593 return ret;
@@ -599,12 +608,21 @@ static ssize_t o2nm_cluster_attr_keepalive_delay_ms_write(
599 ret = o2nm_cluster_attr_write(page, count, &val); 608 ret = o2nm_cluster_attr_write(page, count, &val);
600 609
601 if (ret > 0) { 610 if (ret > 0) {
602 if (val >= cluster->cl_idle_timeout_ms) { 611 if (cluster->cl_keepalive_delay_ms != val
612 && o2net_num_connected_peers()) {
613 mlog(ML_NOTICE,
614 "o2net: cannot change keepalive delay after"
615 " the first peer has agreed to it."
616 " %d connected peers\n",
617 o2net_num_connected_peers());
618 ret = -EINVAL;
619 } else if (val >= cluster->cl_idle_timeout_ms) {
603 mlog(ML_NOTICE, "o2net: keepalive delay must be " 620 mlog(ML_NOTICE, "o2net: keepalive delay must be "
604 "smaller than idle timeout\n"); 621 "smaller than idle timeout\n");
605 return -EINVAL; 622 ret = -EINVAL;
623 } else {
624 cluster->cl_keepalive_delay_ms = val;
606 } 625 }
607 cluster->cl_keepalive_delay_ms = val;
608 } 626 }
609 627
610 return ret; 628 return ret;