--- embedaddon/istgt/src/istgt_lu_disk.c 2012/10/09 09:13:23 1.1.1.2 +++ embedaddon/istgt/src/istgt_lu_disk.c 2013/07/21 23:49:22 1.1.1.3 @@ -1864,6 +1864,13 @@ istgt_lu_disk_scsi_mode_sense_page(ISTGT_LU_DISK *spec plen = 0x12 + 2; MODE_SENSE_PAGE_INIT(cp, plen, page, subpage); BDADD8(&cp[0], 1, 7); /* PS */ + if (pc == 0x01) { + // Changeable values + BDADD8(&cp[2], 1, 2); /* WCE */ + BDADD8(&cp[2], 1, 0); /* RCD */ + len += plen; + break; + } BDADD8(&cp[2], 1, 2); /* WCE */ //BDADD8(&cp[2], 1, 0); /* RCD */ { @@ -5088,7 +5095,7 @@ istgt_lu_disk_queue_start(ISTGT_LU_Ptr lu, int lun) CONN_Ptr conn; ISTGT_LU_CMD_Ptr lu_cmd; struct timespec abstime; - time_t now; + time_t start, now; uint8_t *iobuf; char tmp[1]; int abort_task = 0; @@ -5257,7 +5264,7 @@ istgt_lu_disk_queue_start(ISTGT_LU_Ptr lu, int lun) goto error_return; } - now = time(NULL); + start = now = time(NULL); abstime.tv_sec = now + (lu_task->condwait / 1000); abstime.tv_nsec = (lu_task->condwait % 1000) * 1000000; #if 0 @@ -5279,8 +5286,11 @@ istgt_lu_disk_queue_start(ISTGT_LU_Ptr lu, int lun) spec->wait_lu_task = NULL; MTX_UNLOCK(&spec->wait_lu_task_mutex); MTX_UNLOCK(&lu_task->trans_mutex); - ISTGT_ERRLOG("timeout trans_cond CmdSN=%u\n", - lu_task->lu_cmd.CmdSN); + now = time(NULL); + ISTGT_ERRLOG("timeout trans_cond CmdSN=%u " + "(time=%d)\n", + lu_task->lu_cmd.CmdSN, + (int)difftime(now, start)); /* timeout */ return -1; } @@ -5315,8 +5325,9 @@ istgt_lu_disk_queue_start(ISTGT_LU_Ptr lu, int lun) } if (rc == ETIMEDOUT) { lu_task->error = 1; - ISTGT_ERRLOG("timeout trans_cond CmdSN=%u\n", - lu_task->lu_cmd.CmdSN); + now = time(NULL); + ISTGT_ERRLOG("timeout trans_cond CmdSN=%u (time=%d)\n", + lu_task->lu_cmd.CmdSN, (int)difftime(now, start)); return -1; } lu_task->error = 1;