]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
Handle PREEMPT AND ABORT service action equal to PREEMPT.
authormav <mav@FreeBSD.org>
Sun, 9 Nov 2014 22:43:29 +0000 (22:43 +0000)
committermav <mav@FreeBSD.org>
Sun, 9 Nov 2014 22:43:29 +0000 (22:43 +0000)
With command serialization used in CTL, there are no other commands to abort
when PREEMPT AND ABORT gets to run, so it is practically equal to PREEMPT.

MFC after: 1 week

sys/cam/ctl/ctl.c
sys/cam/ctl/ctl_cmd_table.c

index b50caad470ce166687d4fefc4ba9591229435bc8..cd0111416b9a0b9a8aacaf712d8b6ea2e1d94bda 100644 (file)
@@ -8914,7 +8914,8 @@ ctl_persistent_reserve_out(struct ctl_scsiio *ctsio)
                }
                break;
 
-       case SPRO_PREEMPT: {
+       case SPRO_PREEMPT:
+       case SPRO_PRE_ABO: {
                int nretval;
 
                nretval = ctl_pro_preempt(softc, lun, res_key, sa_res_key, type,
index 0180cecff2616c9d0c719018ec624ea6662ece1e..fedc11001e96b388b63957f72c3bef09409558e8 100644 (file)
@@ -180,7 +180,16 @@ const struct ctl_cmd_entry ctl_cmd_table_5f[32] =
  10, { 0x04, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
 
 /* 05 PREEMPT AND ABORT */
-{NULL, CTL_SERIDX_INVLD, CTL_CMD_FLAG_NONE, CTL_LUN_PAT_NONE},
+{ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |
+                                               CTL_CMD_FLAG_OK_ON_BOTH |
+                                               CTL_CMD_FLAG_OK_ON_STOPPED |
+                                               CTL_CMD_FLAG_OK_ON_INOPERABLE |
+                                               CTL_CMD_FLAG_OK_ON_OFFLINE |
+                                               CTL_CMD_FLAG_OK_ON_SECONDARY |
+                                               CTL_FLAG_DATA_OUT |
+                                               CTL_CMD_FLAG_ALLOW_ON_PR_RESV,
+ CTL_LUN_PAT_NONE,
+ 10, { 0x05, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0x07}},
 
 /* 06 REGISTER AND IGNORE EXISTING KEY */
 {ctl_persistent_reserve_out, CTL_SERIDX_RES, CTL_CMD_FLAG_ALLOW_ON_RESV |