aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/dlm/dlmmaster.c
diff options
context:
space:
mode:
authorKurt Hackel <kurt.hackel@oracle.com>2006-04-27 22:26:15 -0400
committerMark Fasheh <mark.fasheh@oracle.com>2006-06-26 17:42:57 -0400
commita9ee4c8a67b962db0208addf0e32935aa571af6b (patch)
treeeec80824fba4b87dcf940533ab8dac87d25ed5f0 /fs/ocfs2/dlm/dlmmaster.c
parenta7f90d83ea8dc8b0999ab7c1c0539af9a6ed69d2 (diff)
ocfs2: better error handling during assert master message
handle errors during lock assert master by either killing self or other node Signed-off-by: Kurt Hackel <kurt.hackel@oracle.com> Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Diffstat (limited to 'fs/ocfs2/dlm/dlmmaster.c')
-rw-r--r--fs/ocfs2/dlm/dlmmaster.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
index 427c0af0d219..81ceee2e0d50 100644
--- a/fs/ocfs2/dlm/dlmmaster.c
+++ b/fs/ocfs2/dlm/dlmmaster.c
@@ -1633,6 +1633,8 @@ again:
1633 dlm_node_iter_init(nodemap, &iter); 1633 dlm_node_iter_init(nodemap, &iter);
1634 while ((to = dlm_node_iter_next(&iter)) >= 0) { 1634 while ((to = dlm_node_iter_next(&iter)) >= 0) {
1635 int r = 0; 1635 int r = 0;
1636 struct dlm_master_list_entry *mle = NULL;
1637
1636 mlog(0, "sending assert master to %d (%.*s)\n", to, 1638 mlog(0, "sending assert master to %d (%.*s)\n", to,
1637 namelen, lockname); 1639 namelen, lockname);
1638 memset(&assert, 0, sizeof(assert)); 1640 memset(&assert, 0, sizeof(assert));
@@ -1657,7 +1659,15 @@ again:
1657 /* ok, something horribly messed. kill thyself. */ 1659 /* ok, something horribly messed. kill thyself. */
1658 mlog(ML_ERROR,"during assert master of %.*s to %u, " 1660 mlog(ML_ERROR,"during assert master of %.*s to %u, "
1659 "got %d.\n", namelen, lockname, to, r); 1661 "got %d.\n", namelen, lockname, to, r);
1660 dlm_dump_lock_resources(dlm); 1662 spin_lock(&dlm->spinlock);
1663 spin_lock(&dlm->master_lock);
1664 if (dlm_find_mle(dlm, &mle, (char *)lockname,
1665 namelen)) {
1666 dlm_print_one_mle(mle);
1667 __dlm_put_mle(mle);
1668 }
1669 spin_unlock(&dlm->master_lock);
1670 spin_unlock(&dlm->spinlock);
1661 BUG(); 1671 BUG();
1662 } else if (r == EAGAIN) { 1672 } else if (r == EAGAIN) {
1663 mlog(0, "%.*s: node %u create mles on other " 1673 mlog(0, "%.*s: node %u create mles on other "
@@ -1922,12 +1932,12 @@ done:
1922 1932
1923kill: 1933kill:
1924 /* kill the caller! */ 1934 /* kill the caller! */
1935 mlog(ML_ERROR, "Bad message received from another node. Dumping state "
1936 "and killing the other node now! This node is OK and can continue.\n");
1937 __dlm_print_one_lock_resource(res);
1925 spin_unlock(&res->spinlock); 1938 spin_unlock(&res->spinlock);
1926 spin_unlock(&dlm->spinlock); 1939 spin_unlock(&dlm->spinlock);
1927 dlm_lockres_put(res); 1940 dlm_lockres_put(res);
1928 mlog(ML_ERROR, "Bad message received from another node. Dumping state "
1929 "and killing the other node now! This node is OK and can continue.\n");
1930 dlm_dump_lock_resources(dlm);
1931 dlm_put(dlm); 1941 dlm_put(dlm);
1932 return -EINVAL; 1942 return -EINVAL;
1933} 1943}