Relax serialization of SYNCHRONIZE CACHE commands.
Before this change SYNCHRONIZE CACHE commands were executed exclusively, as if they had ORDERED tag. But looking through SCSI specs I've found no any reason to be so strict. For reads this ordering seems pointless. For writes it looks less obvious, so I left ordering against preceeding write commands, while following ones are no longer required to wait. MFC after: 2 weeks Sponsored by: iXsystems, Inc.
This commit is contained in:
parent
a2925a5ae3
commit
f2a20b166a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=286345
@ -785,8 +785,8 @@ const struct ctl_cmd_entry ctl_cmd_table[256] =
|
|||||||
{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
|
{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
|
||||||
|
|
||||||
/* 35 SYNCHRONIZE CACHE(10) */
|
/* 35 SYNCHRONIZE CACHE(10) */
|
||||||
{ctl_sync_cache, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
|
{ctl_sync_cache, CTL_SERIDX_SYNC, CTL_CMD_FLAG_OK_ON_SLUN |
|
||||||
CTL_FLAG_DATA_NONE,
|
CTL_FLAG_DATA_NONE,
|
||||||
CTL_LUN_PAT_NONE,
|
CTL_LUN_PAT_NONE,
|
||||||
10, {0, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
|
10, {0, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0x07}},
|
||||||
|
|
||||||
@ -1138,8 +1138,8 @@ const struct ctl_cmd_entry ctl_cmd_table[256] =
|
|||||||
{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
|
{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
|
||||||
|
|
||||||
/* 91 SYNCHRONIZE CACHE(16) */
|
/* 91 SYNCHRONIZE CACHE(16) */
|
||||||
{ctl_sync_cache, CTL_SERIDX_START, CTL_CMD_FLAG_OK_ON_SLUN |
|
{ctl_sync_cache, CTL_SERIDX_SYNC, CTL_CMD_FLAG_OK_ON_SLUN |
|
||||||
CTL_FLAG_DATA_NONE,
|
CTL_FLAG_DATA_NONE,
|
||||||
CTL_LUN_PAT_NONE,
|
CTL_LUN_PAT_NONE,
|
||||||
16, {0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
16, {0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
|
||||||
|
@ -141,6 +141,7 @@ typedef enum {
|
|||||||
CTL_SERIDX_READ,
|
CTL_SERIDX_READ,
|
||||||
CTL_SERIDX_WRITE,
|
CTL_SERIDX_WRITE,
|
||||||
CTL_SERIDX_UNMAP,
|
CTL_SERIDX_UNMAP,
|
||||||
|
CTL_SERIDX_SYNC,
|
||||||
CTL_SERIDX_MD_SNS,
|
CTL_SERIDX_MD_SNS,
|
||||||
CTL_SERIDX_MD_SEL,
|
CTL_SERIDX_MD_SEL,
|
||||||
CTL_SERIDX_RQ_SNS,
|
CTL_SERIDX_RQ_SNS,
|
||||||
|
@ -63,19 +63,20 @@
|
|||||||
|
|
||||||
static ctl_serialize_action
|
static ctl_serialize_action
|
||||||
ctl_serialize_table[CTL_SERIDX_COUNT][CTL_SERIDX_COUNT] = {
|
ctl_serialize_table[CTL_SERIDX_COUNT][CTL_SERIDX_COUNT] = {
|
||||||
/**>IDX_ :: 2nd:TUR RD WRT UNM MDSN MDSL RQSN INQ RDCP RES LSNS FMT STR*/
|
/**>IDX_ :: 2nd:TUR RD WRT UNM SYN MDSN MDSL RQSN INQ RDCP RES LSNS FMT STR*/
|
||||||
/*TUR */{ pS, pS, pS, pS, bK, bK, bK, pS, pS, bK, pS, bK, bK},
|
/*TUR */{ pS, pS, pS, pS, pS, bK, bK, bK, pS, pS, bK, pS, bK, bK},
|
||||||
/*READ */{ pS, xS, xT, bO, bK, bK, bK, pS, pS, bK, pS, bK, bK},
|
/*READ */{ pS, xS, xT, bO, pS, bK, bK, bK, pS, pS, bK, pS, bK, bK},
|
||||||
/*WRITE */{ pS, xT, xT, bO, bK, bK, bK, pS, pS, bK, pS, bK, bK},
|
/*WRITE */{ pS, xT, xT, bO, bO, bK, bK, bK, pS, pS, bK, pS, bK, bK},
|
||||||
/*UNMAP */{ pS, xO, xO, pS, bK, bK, bK, pS, pS, bK, pS, bK, bK},
|
/*UNMAP */{ pS, xO, xO, pS, pS, bK, bK, bK, pS, pS, bK, pS, bK, bK},
|
||||||
/*MD_SNS */{ bK, bK, bK, bK, pS, bK, bK, pS, pS, bK, pS, bK, bK},
|
/*SYNC */{ pS, pS, pS, pS, pS, bK, bK, bK, pS, pS, bK, pS, bK, bK},
|
||||||
/*MD_SEL */{ bK, bK, bK, bK, bK, bK, bK, pS, pS, bK, pS, bK, bK},
|
/*MD_SNS */{ bK, bK, bK, bK, bK, pS, bK, bK, pS, pS, bK, pS, bK, bK},
|
||||||
/*RQ_SNS */{ pS, pS, pS, pS, pS, pS, bK, pS, pS, bK, pS, bK, bK},
|
/*MD_SEL */{ bK, bK, bK, bK, bK, bK, bK, bK, pS, pS, bK, pS, bK, bK},
|
||||||
/*INQ */{ pS, pS, pS, pS, pS, pS, bK, pS, pS, pS, pS, bK, bK},
|
/*RQ_SNS */{ pS, pS, pS, pS, pS, pS, pS, bK, pS, pS, bK, pS, bK, bK},
|
||||||
/*RD_CAP */{ pS, pS, pS, pS, pS, pS, bK, pS, pS, pS, pS, bK, pS},
|
/*INQ */{ pS, pS, pS, pS, pS, pS, pS, bK, pS, pS, pS, pS, bK, bK},
|
||||||
/*RES */{ bK, bK, bK, bK, bK, bK, bK, pS, bK, bK, bK, bK, bK},
|
/*RD_CAP */{ pS, pS, pS, pS, pS, pS, pS, bK, pS, pS, pS, pS, bK, pS},
|
||||||
/*LOG_SNS */{ pS, pS, pS, pS, pS, bK, bK, pS, pS, bK, pS, bK, bK},
|
/*RES */{ bK, bK, bK, bK, bK, bK, bK, bK, pS, bK, bK, bK, bK, bK},
|
||||||
/*FORMAT */{ pS, bK, bK, bK, bK, bK, pS, pS, bK, bK, bK, bK, bK},
|
/*LOG_SNS */{ pS, pS, pS, pS, pS, pS, bK, bK, pS, pS, bK, pS, bK, bK},
|
||||||
/*START */{ bK, bK, bK, bK, bK, bK, bK, pS, bK, bK, bK, bK, bK},
|
/*FORMAT */{ pS, bK, bK, bK, bK, bK, bK, pS, pS, bK, bK, bK, bK, bK},
|
||||||
|
/*START */{ bK, bK, bK, bK, bK, bK, bK, bK, pS, bK, bK, bK, bK, bK},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user