From 07a4ce11f12a2deb8445c8c7016c4a7e34e4e06b Mon Sep 17 00:00:00 2001 From: 13914885250 Date: Mon, 19 Aug 2024 10:00:49 +0800 Subject: [PATCH] =?UTF-8?q?scsi3=E9=A2=84=E7=95=99=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=BA5=EF=BC=8C=E5=8F=AA=E9=99=90?= =?UTF-8?q?=E5=88=B6=E5=86=99=EF=BC=8C=E4=B8=8D=E9=99=90=E5=88=B6=E8=AF=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cm_utils/cm_scsi.c | 18 +++++++++++++++--- src/cm_utils/cm_scsi.h | 7 +++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/cm_utils/cm_scsi.c b/src/cm_utils/cm_scsi.c index 38ae8b9..f398801 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 ec2ad8b..ad7db59 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 -- Gitee