]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
Implement SPC-3 exceptions to SPC-2 RESERVE and RELEASE behavior.
authormav <mav@FreeBSD.org>
Thu, 1 Oct 2015 12:57:37 +0000 (12:57 +0000)
committermav <mav@FreeBSD.org>
Thu, 1 Oct 2015 12:57:37 +0000 (12:57 +0000)
sys/cam/ctl/ctl.c

index 52319eabefd9856c12b8c4c3abea26f0f57f09a9..30c4eb094d5e2b1987a3e82f5e0c85602fe56f80 100644 (file)
@@ -5101,6 +5101,13 @@ ctl_scsi_reserve(struct ctl_scsiio *ctsio)
                ctl_set_reservation_conflict(ctsio);
                goto bailout;
        }
+
+       /* SPC-3 exceptions to SPC-2 RESERVE and RELEASE behavior. */
+       if (lun->flags & CTL_LUN_PR_RESERVED) {
+               ctl_set_success(ctsio);
+               goto bailout;
+       }
+
        lun->flags |= CTL_LUN_RESERVED;
        lun->res_idx = residx;
        ctl_set_success(ctsio);
@@ -7624,7 +7631,8 @@ retry:
 
                res_cap = (struct scsi_per_res_cap *)ctsio->kern_data_ptr;
                scsi_ulto2b(sizeof(*res_cap), res_cap->length);
-               res_cap->flags2 |= SPRI_TMV | SPRI_ALLOW_5;
+               res_cap->flags1 = SPRI_CRH;
+               res_cap->flags2 = SPRI_TMV | SPRI_ALLOW_5;
                type_mask = SPRI_TM_WR_EX_AR |
                            SPRI_TM_EX_AC_RO |
                            SPRI_TM_WR_EX_RO |