diff options
author | John Wren Kennedy <John.Wren.Kennedy@Sun.COM> | 2008-12-24 08:23:40 -0700 |
---|---|---|
committer | John Wren Kennedy <John.Wren.Kennedy@Sun.COM> | 2008-12-24 08:23:40 -0700 |
commit | bf85a12b7c81d0745d5a8aff65baeff50006cde9 (patch) | |
tree | 2df17ed75d500b9d39accaf22e204ad908d92afb /usr/src/cmd/lvm/util | |
parent | 2a22541854e0588bbe16b56aee850bdab9f2684b (diff) | |
download | illumos-joyent-bf85a12b7c81d0745d5a8aff65baeff50006cde9.tar.gz |
6580729 node 16th joined, metaclust timed out in step4, local_daemon has rpc tli error
6692015 SVM global reader-writer mutex priority inversion causes deadlock under load
6725904 callers of meta_getdnp_bydevid() should do so correctly
6726615 Bruichladdich - SVM support for sQFS on mirrors in SunCluster
6756133 MD_MN_MSG_MDDB_PARSE message passes incorrect message size when used
6758399 mdmn_ksend_message() retries door_ki_upcall() without resetting data_ptr/data_size
6766848 mdcommd assumes SVCXPRT will survive thr_create()
6769738 md_mps_t not completely cleared before re-use
Diffstat (limited to 'usr/src/cmd/lvm/util')
-rw-r--r-- | usr/src/cmd/lvm/util/metaclust.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/usr/src/cmd/lvm/util/metaclust.c b/usr/src/cmd/lvm/util/metaclust.c index deeff350e2..cb98329aac 100644 --- a/usr/src/cmd/lvm/util/metaclust.c +++ b/usr/src/cmd/lvm/util/metaclust.c @@ -24,8 +24,6 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include <meta.h> #include <sdssc.h> #include <signal.h> @@ -117,6 +115,8 @@ static void sigalarmhandler(int sig) { int i, n, ret, stat_loc = 0; + FILE *pgcore; + char corecmd[256]; n = sizeof (step_table) / sizeof (step_table[0]); for (i = 0; i < n; i++) { @@ -130,6 +130,25 @@ sigalarmhandler(int sig) step_table[i].step_nam, meta_print_hrtime(gethrtime() - start_time)); + /* + * See what the child was actually doing when the timeout expired. + * A core-dump of this would be _really_ good, so let's just + * try a 'gcore -g c_pid' and hope + */ + + (void) memset(corecmd, 0, sizeof (corecmd)); + (void) snprintf(corecmd, sizeof (corecmd), + "/bin/gcore -g %d >/dev/null 2>&1", (int)c_pid); + + pgcore = popen(corecmd, "r"); + + if (pgcore == NULL) { + meta_mc_log(MC_LOG1, gettext("Could not grab core for pid %s"), + c_pid); + } else { + (void) pclose(pgcore); + } + if ((ret = kill(c_pid, SIGKILL)) == 0) { /* * The child will wait forever until the status is retrieved @@ -1762,7 +1781,6 @@ main(int argc, char **argv) "rpc.mdcommd for set %s\n"), sp->setname); md_exit(local_sp, 1); } - meta_ping_mnset(setno); /* Unblock mddb parse messages */ if (s_ownset(sp->setno, ep) == MD_SETOWNER_YES) { |