6671900 Nevada83a iSCSI target dumping core, shared QFS iscsi Initiators are doing moderate I/O
6674650 Nevada85 dumps core when deleting iSCSI lun
--- a/usr/src/cmd/iscsi/iscsitgtd/iscsi_ffp.c Tue Mar 25 10:48:32 2008 -0700
+++ b/usr/src/cmd/iscsi/iscsitgtd/iscsi_ffp.c Tue Mar 25 13:21:02 2008 -0700
@@ -310,9 +310,12 @@
*/
if (cmd->c_state == CmdAlloc) {
cmd->c_state = CmdCanceled;
-
- t10_cmd_shoot_event(cmd->c_t10_cmd,
- T10_Cmd_T6);
+ if (cmd->c_t10_cmd != NULL) {
+ t10_cmd_shoot_event(
+ cmd->c_t10_cmd,
+ T10_Cmd_T6);
+ cmd->c_t10_cmd = NULL;
+ }
}
}
--- a/usr/src/cmd/iscsi/iscsitgtd/t10_sam.c Tue Mar 25 10:48:32 2008 -0700
+++ b/usr/src/cmd/iscsi/iscsitgtd/t10_sam.c Tue Mar 25 13:21:02 2008 -0700
@@ -341,8 +341,8 @@
t->s_targ_num);
}
}
+ avl_destroy(&l->l_cmds);
(void) pthread_mutex_unlock(&l->l_cmd_mutex);
- avl_destroy(&l->l_cmds);
free(l);
}
}
@@ -737,6 +737,7 @@
switch (op) {
case InventoryChange:
+ (void) pthread_mutex_lock(&t->s_mutex);
if ((lu = avl_first(&t->s_open_lu)) != NULL) {
do {
/*CSTYLED*/
@@ -744,40 +745,53 @@
0, msg_targ_inventory_change, (void *)lu);
} while ((lu = AVL_NEXT(&t->s_open_lu, lu)) != NULL);
}
+ (void) pthread_mutex_unlock(&t->s_mutex);
return (True);
case ResetTarget:
+ (void) pthread_mutex_lock(&t->s_mutex);
if ((lu = avl_first(&t->s_open_lu)) != NULL) {
do {
/*CSTYLED*/
queue_message_set(lu->l_common->l_from_transports,
Q_HIGH, msg_reset_lu, (void *)lu);
} while ((lu = AVL_NEXT(&t->s_open_lu, lu)) != NULL);
+ (void) pthread_mutex_unlock(&t->s_mutex);
return (True);
- } else
+ } else {
+ (void) pthread_mutex_unlock(&t->s_mutex);
return (False);
+ }
case ResetLun:
search.l_targ_lun = opt_lun;
+ (void) pthread_mutex_lock(&t->s_mutex);
if ((lu = avl_find(&t->s_open_lu, (void *)&search, NULL)) !=
NULL) {
queue_message_set(lu->l_common->l_from_transports,
Q_HIGH, msg_reset_lu, (void *)lu);
+ (void) pthread_mutex_unlock(&t->s_mutex);
return (True);
- } else
+ } else {
+ (void) pthread_mutex_unlock(&t->s_mutex);
return (False);
+ }
break;
case CapacityChange:
search.l_targ_lun = opt_lun;
+ (void) pthread_mutex_lock(&t->s_mutex);
if ((lu = avl_find(&t->s_open_lu, (void *)&search, NULL)) !=
NULL) {
queue_message_set(lu->l_common->l_from_transports,
Q_HIGH, msg_lu_capacity_change,
(void *)(uintptr_t)opt_lun);
+ (void) pthread_mutex_unlock(&t->s_mutex);
return (True);
- } else
+ } else {
+ (void) pthread_mutex_unlock(&t->s_mutex);
return (False);
+ }
break;
default:
@@ -806,6 +820,7 @@
if (t == NULL)
return;
+ (void) pthread_mutex_lock(&t->s_mutex);
itl = avl_first(&t->s_open_lu);
while (itl) {
tgt_buf_add_tag(buf, XML_ELEMENT_LUN, Tag_Start);
@@ -837,6 +852,7 @@
tgt_buf_add_tag(buf, XML_ELEMENT_LUN, Tag_End);
itl = AVL_NEXT(&t->s_open_lu, itl);
}
+ (void) pthread_mutex_unlock(&t->s_mutex);
}
/*
@@ -1380,6 +1396,7 @@
*/
search.l_targ_lun = lun;
+ (void) pthread_mutex_lock(&t->s_mutex);
if ((l = avl_find(&t->s_open_lu, (void *)&search, &wt)) != NULL) {
/*
@@ -1390,8 +1407,10 @@
* even faster than an AVL tree and not take up to much space.
*/
cmd->c_lu = l;
+ (void) pthread_mutex_unlock(&t->s_mutex);
return (True);
}
+ (void) pthread_mutex_unlock(&t->s_mutex);
/*
* First access for this I_T_L so we need to allocate space for it.
@@ -1615,7 +1634,9 @@
* We wait to add the LU to the target list until now so that we don't
* have to delete the node in case an error occurs.
*/
+ (void) pthread_mutex_lock(&t->s_mutex);
avl_insert(&t->s_open_lu, (void *)l, wt);
+ (void) pthread_mutex_unlock(&t->s_mutex);
(void) pthread_mutex_lock(&l->l_mutex);
l->l_common = common;
--- a/usr/src/cmd/iscsi/iscsitgtd/t10_spc.c Tue Mar 25 10:48:32 2008 -0700
+++ b/usr/src/cmd/iscsi/iscsitgtd/t10_spc.c Tue Mar 25 13:21:02 2008 -0700
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -738,8 +738,10 @@
* and subtract one since the first is accounted for in
* rtpg_targ_desc_t
*/
+ (void) pthread_mutex_lock(&lu->l_common_mutex);
alloc_len = ((avl_numnodes(&lu->l_all_open) - 1) *
sizeof (rtpg_targ_desc_t)) + sizeof (rtpg_hdr_t);
+ (void) pthread_mutex_unlock(&lu->l_common_mutex);
/*
* Make sure that we have enough room to store everything
@@ -768,7 +770,9 @@
r->len[2] = hibyte(loword(i));
r->len[3] = lobyte(loword(i));
dp = &r->desc_list[0];
+ (void) pthread_mutex_lock(&lu->l_common_mutex);
dp->tpg_cnt = avl_numnodes(&lu->l_all_open);
+ (void) pthread_mutex_unlock(&lu->l_common_mutex);
dp->status_code = 0;
dp->access_state = 0; /* Active/optimized */
dp->pref = 1;
@@ -782,6 +786,7 @@
dp->tpg[1] = lobyte(loword(i));
tp = &dp->targ_list[0];
+ (void) pthread_mutex_lock(&lu->l_common_mutex);
lu_per = avl_first(&lu->l_all_open);
do {
tp->rel_tpi[0] = hibyte(loword(lu_per->l_targ->s_tpgt));
@@ -789,6 +794,7 @@
lu_per = AVL_NEXT(&lu->l_all_open, lu_per);
tp++;
} while (lu_per != NULL);
+ (void) pthread_mutex_unlock(&lu->l_common_mutex);
if (trans_send_datain(cmd, (char *)r, MIN(rqst_len, alloc_len), 0,
spc_free, True, (char *)r) == False) {
--- a/usr/src/cmd/iscsi/iscsitgtd/t10_spc_pr.c Tue Mar 25 10:48:32 2008 -0700
+++ b/usr/src/cmd/iscsi/iscsitgtd/t10_spc_pr.c Tue Mar 25 13:21:02 2008 -0700
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -891,6 +891,7 @@
/*
* We may need register all initiators, depending on ALL_TG_TP
*/
+ (void) pthread_mutex_lock(&cmd->c_lu->l_common->l_common_mutex);
lu = avl_first(&cmd->c_lu->l_common->l_all_open);
do {
/*
@@ -981,6 +982,7 @@
}
lu = AVL_NEXT(&cmd->c_lu->l_common->l_all_open, lu);
} while (lu != NULL);
+ (void) pthread_mutex_unlock(&cmd->c_lu->l_common->l_common_mutex);
/*
* Apply the last valid APTPL bit