diff --git a/src/cm_utils/cm_scsi.c b/src/cm_utils/cm_scsi.c index 38ae8b9b0aba20a6c078fba2368112d802bd090a..f398801b53b6e8d0b5beef1bd0a2ebf06593552e 100644 --- a/src/cm_utils/cm_scsi.c +++ b/src/cm_utils/cm_scsi.c @@ -358,7 +358,11 @@ status_t cm_scsi3_reserve(int32 fd, int64 rk) { uchar cdb[10] = { 0 }; int32 scope = 0; - uint32 type = 0x06; +#ifdef OPENGAUSS + uint32 type = RESERV_TYPE_REGISTER_ACCESS; +#else + uint32 type = RESERV_TYPE_REGISTER_WRITE; +#endif int32 servact = 0x01; uint16 param_len = CM_SCSI_XFER_DATA_LEN_24; uchar sense_buffer[CM_SCSI_SENSE_LEN] = { 0 }; @@ -415,7 +419,11 @@ status_t cm_scsi3_release(int32 fd, int64 rk) { uchar cdb[10] = { 0 }; int32 scope = 0; - uint32 type = 0x06; +#ifdef OPENGAUSS + uint32 type = RESERV_TYPE_REGISTER_ACCESS; +#else + uint32 type = RESERV_TYPE_REGISTER_WRITE; +#endif int32 servact = 0x02; uint16 param_len = CM_SCSI_XFER_DATA_LEN_24; uchar sense_buffer[CM_SCSI_SENSE_LEN] = { 0 }; @@ -519,7 +527,11 @@ status_t cm_scsi3_preempt(int32 fd, int64 rk, int64 sark) { uchar cdb[10] = {0}; uint32 scope = 0; - uint32 type = 0x06; +#ifdef OPENGAUSS + uint32 type = RESERV_TYPE_REGISTER_ACCESS; +#else + uint32 type = RESERV_TYPE_REGISTER_WRITE; +#endif uint32 servact = 0x04; uint16 param_len = CM_SCSI_XFER_DATA_LEN_24; uchar sense_buffer[CM_SCSI_SENSE_LEN] = {0}; diff --git a/src/cm_utils/cm_scsi.h b/src/cm_utils/cm_scsi.h index ec2ad8b2def018a5be6e238b149264b82b4579fa..ad7db5958535514b069e15a0fa95d6f93fd5c34f 100644 --- a/src/cm_utils/cm_scsi.h +++ b/src/cm_utils/cm_scsi.h @@ -97,6 +97,13 @@ typedef struct st_scsi_sense_hdr { uchar add_length; } scsi_sense_hdr_t; +typedef enum en_scsi_reserv_type { + RESERV_TYPE_EXC_WRITE = 0x01, /* readable by all, only reserv owner can write */ + RESERV_TYPE_EXC_ACCESS = 0x03, /* only reserv owner can read/write */ + RESERV_TYPE_REGISTER_WRITE = 0x05, /* readable by all, only registers can write */ + RESERV_TYPE_REGISTER_ACCESS = 0x06, /* only registers can read/write */ +} scsi_reserv_type_e; + #ifdef WIN32 status_t cm_scsi3_rkeys(int32 fd, int64 *reg_keys, int32 *key_count, uint32 *generation); #else