summaryrefslogtreecommitdiffstats
path: root/sys/cam
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2015-10-05 10:45:33 +0000
committermav <mav@FreeBSD.org>2015-10-05 10:45:33 +0000
commit2e8698ae4006e20d59166bbd40dad6592f1f240e (patch)
treee6f60a9c35d528e534613bb351efcf46c1274258 /sys/cam
parent61035b65c08e83d95ae0b970eb9b13536d3bec51 (diff)
downloadFreeBSD-src-2e8698ae4006e20d59166bbd40dad6592f1f240e.zip
FreeBSD-src-2e8698ae4006e20d59166bbd40dad6592f1f240e.tar.gz
MFC r287994: Always execute REPORT LUNS and REQUEST SENSE commands locally.
REPORT LUNS command is more related to target rather then specific LUN. This node may be primary for LUNs for some reason unknown to another, and command forwarded to another node won't be able to report them. REQUEST SENSE is related to LUN, but in our implementation it reports only UAs and CAs, that are stored locally rather then on primary node.
Diffstat (limited to 'sys/cam')
-rw-r--r--sys/cam/ctl/ctl.c3
-rw-r--r--sys/cam/ctl/ctl_cmd_table.c10
2 files changed, 8 insertions, 5 deletions
diff --git a/sys/cam/ctl/ctl.c b/sys/cam/ctl/ctl.c
index 6308916..8af69e9 100644
--- a/sys/cam/ctl/ctl.c
+++ b/sys/cam/ctl/ctl.c
@@ -11267,7 +11267,8 @@ ctl_scsiio_precheck(struct ctl_softc *softc, struct ctl_scsiio *ctsio)
* side so when we are done we can find the copy.
*/
if ((lun->flags & CTL_LUN_PRIMARY_SC) == 0 &&
- (lun->flags & CTL_LUN_PEER_SC_PRIMARY) != 0) {
+ (lun->flags & CTL_LUN_PEER_SC_PRIMARY) != 0 &&
+ (entry->flags & CTL_CMD_FLAG_RUN_HERE) == 0) {
union ctl_ha_msg msg_info;
int isc_retval;
diff --git a/sys/cam/ctl/ctl_cmd_table.c b/sys/cam/ctl/ctl_cmd_table.c
index 9965eb7..7711b31 100644
--- a/sys/cam/ctl/ctl_cmd_table.c
+++ b/sys/cam/ctl/ctl_cmd_table.c
@@ -554,7 +554,8 @@ const struct ctl_cmd_entry ctl_cmd_table[256] =
CTL_CMD_FLAG_OK_ON_INOPERABLE |
CTL_CMD_FLAG_OK_ON_STANDBY |
CTL_CMD_FLAG_OK_ON_UNAVAIL |
- CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
+ CTL_CMD_FLAG_ALLOW_ON_PR_RESV |
+ CTL_CMD_FLAG_RUN_HERE,
CTL_LUN_PAT_NONE, 6, {0x01, 0, 0, 0xff, 0x07}},
/* 04 FORMAT UNIT */
@@ -1174,7 +1175,8 @@ const struct ctl_cmd_entry ctl_cmd_table[256] =
{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
/* A0 REPORT LUNS */
-{ctl_report_luns, CTL_SERIDX_INQ, CTL_CMD_FLAG_OK_ON_NO_LUN |
+{ctl_report_luns, CTL_SERIDX_INQ, CTL_FLAG_DATA_IN |
+ CTL_CMD_FLAG_OK_ON_NO_LUN |
CTL_CMD_FLAG_OK_ON_BOTH |
CTL_CMD_FLAG_ALLOW_ON_RESV |
CTL_CMD_FLAG_NO_SENSE |
@@ -1182,8 +1184,8 @@ const struct ctl_cmd_entry ctl_cmd_table[256] =
CTL_CMD_FLAG_OK_ON_INOPERABLE |
CTL_CMD_FLAG_OK_ON_STANDBY |
CTL_CMD_FLAG_OK_ON_UNAVAIL |
- CTL_FLAG_DATA_IN |
- CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
+ CTL_CMD_FLAG_ALLOW_ON_PR_RESV |
+ CTL_CMD_FLAG_RUN_HERE,
CTL_LUN_PAT_NONE,
12, {0, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0x07}},
OpenPOWER on IntegriCloud