diff options
author | Douglas Gilbert <dgilbert@interlog.com> | 2018-06-16 03:47:09 +0000 |
---|---|---|
committer | Douglas Gilbert <dgilbert@interlog.com> | 2018-06-16 03:47:09 +0000 |
commit | 11f6f1f439415e57696f473b1475f190018741c7 (patch) | |
tree | 257a3b14baae2b5f3860e04bdbfde2ca0f4715e2 /src | |
parent | e05f7acda57fbbbad555df38fef89aa70447b590 (diff) | |
download | sg3_utils-11f6f1f439415e57696f473b1475f190018741c7.tar.gz |
rescan-scsi-bus.sh: add --ignore-rev; sg_persist: add RLR_C bit to Read capabilities; sg_pt_freebsd+win32: fix SNTL error crashes
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@778 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'src')
-rw-r--r-- | src/sg_opcodes.c | 4 | ||||
-rw-r--r-- | src/sg_persist.c | 41 | ||||
-rw-r--r-- | src/sgm_dd.c | 8 |
3 files changed, 23 insertions, 30 deletions
diff --git a/src/sg_opcodes.c b/src/sg_opcodes.c index a56948a3..3f2a12a7 100644 --- a/src/sg_opcodes.c +++ b/src/sg_opcodes.c @@ -31,7 +31,7 @@ #include "sg_pt.h" -static const char * version_str = "0.59 20180428"; /* spc5r14 */ +static const char * version_str = "0.60 20180615"; /* spc5r14 */ #define SENSE_BUFF_LEN 64 /* Arbitrary, could be larger */ @@ -704,7 +704,7 @@ list_all_codes(uint8_t * rsoc_buff, int rsoc_len, struct opts_t * op, } /* SPC-4 does _not_ require any ordering of opcodes in the response */ if (! op->do_unsorted) { - sort_arr = (uint8_t **)malloc(cd_len * sizeof(uint8_t *)); + sort_arr = (uint8_t **)calloc(cd_len, sizeof(uint8_t *)); if (NULL == sort_arr) { printf("sg_opcodes: no memory to sort operation codes, " "try '-u'\n"); diff --git a/src/sg_persist.c b/src/sg_persist.c index 0158bb5e..919aad6f 100644 --- a/src/sg_persist.c +++ b/src/sg_persist.c @@ -33,7 +33,7 @@ #include "sg_unaligned.h" #include "sg_pr2serr.h" -static const char * version_str = "0.65 20180523"; +static const char * version_str = "0.66 20180615"; #define PRIN_RKEY_SA 0x0 @@ -71,9 +71,9 @@ struct opts_t { int prin_sa; int prout_sa; int verbose; - unsigned int alloc_len; - unsigned int param_rtp; - unsigned int prout_type; + uint32_t alloc_len; + uint32_t param_rtp; + uint32_t prout_type; uint64_t param_rk; uint64_t param_sark; uint8_t transportid_arr[MX_TIDS * MX_TID_LEN]; @@ -276,13 +276,12 @@ prin_work(int sg_fd, const struct opts_t * op) uint8_t * bp; uint8_t * pr_buff = NULL; uint8_t * free_pr_buff = NULL; - int pr_buff_sz = MX_ALLOC_LEN; - pr_buff = sg_memalign(pr_buff_sz, 0 /* page aligned */, &free_pr_buff, + pr_buff = sg_memalign(op->alloc_len, 0 /* page aligned */, &free_pr_buff, false); if (NULL == pr_buff) { pr2serr("%s: unable to allocate %d bytes on heap\n", __func__, - pr_buff_sz); + op->alloc_len); return sg_convert_errno(ENOMEM); } res = sg_ll_persistent_reserve_in(sg_fd, op->prin_sa, pr_buff, @@ -319,6 +318,8 @@ prin_work(int sg_fd, const struct opts_t * op) hex2stdout(pr_buff, 8, 1); else { printf("Report capabilities response:\n"); + printf(" Replace Lost Reservation Capable(RLR_C): %d\n", + !!(pr_buff[2] & 0x80)); /* added spc4r26 */ printf(" Compatible Reservation Handling(CRH): %d\n", !!(pr_buff[2] & 0x10)); printf(" Specify Initiator Ports Capable(SIP_C): %d\n", @@ -334,17 +335,17 @@ prin_work(int sg_fd, const struct opts_t * op) if (pr_buff[3] & 0x80) { printf(" Support indicated in Type mask:\n"); printf(" %s: %d\n", pr_type_strs[7], - !!(pr_buff[4] & 0x80)); + !!(pr_buff[4] & 0x80)); /* WR_EX_AR */ printf(" %s: %d\n", pr_type_strs[6], - !!(pr_buff[4] & 0x40)); + !!(pr_buff[4] & 0x40)); /* EX_AC_RO */ printf(" %s: %d\n", pr_type_strs[5], - !!(pr_buff[4] & 0x20)); + !!(pr_buff[4] & 0x20)); /* WR_EX_RO */ printf(" %s: %d\n", pr_type_strs[3], - !!(pr_buff[4] & 0x8)); + !!(pr_buff[4] & 0x8)); /* EX_AC */ printf(" %s: %d\n", pr_type_strs[1], - !!(pr_buff[4] & 0x2)); + !!(pr_buff[4] & 0x2)); /* WR_EX */ printf(" %s: %d\n", pr_type_strs[8], - !!(pr_buff[5] & 0x1)); + !!(pr_buff[5] & 0x1)); /* EX_AC_AR */ } } } else { @@ -357,10 +358,10 @@ prin_work(int sg_fd, const struct opts_t * op) printf(" PR generation=0x%x, ", pr_gen); if (add_len <= 0) printf("Additional length=%d\n", add_len); - if (add_len > (pr_buff_sz - 8)) { + if ((uint32_t)add_len > (op->alloc_len - 8)) { printf("Additional length too large=%d, truncate\n", add_len); - hex2stdout((pr_buff + 8), pr_buff_sz - 8, 1); + hex2stdout((pr_buff + 8), op->alloc_len - 8, 1); } else { printf("Additional length=%d\n", add_len); hex2stdout((pr_buff + 8), add_len, 1); @@ -477,16 +478,15 @@ prout_work(int sg_fd, struct opts_t * op) int res = 0; uint8_t * pr_buff = NULL; uint8_t * free_pr_buff = NULL; - int pr_buff_sz = MX_ALLOC_LEN; char b[64]; char bb[80]; t_arr_len = compact_transportid_array(op); - pr_buff = sg_memalign(pr_buff_sz, 0 /* page aligned */, &free_pr_buff, + pr_buff = sg_memalign(op->alloc_len, 0 /* page aligned */, &free_pr_buff, false); if (NULL == pr_buff) { pr2serr("%s: unable to allocate %d bytes on heap\n", __func__, - pr_buff_sz); + op->alloc_len); return sg_convert_errno(ENOMEM); } sg_put_unaligned_be64(op->param_rk, pr_buff + 0); @@ -537,14 +537,13 @@ prout_reg_move_work(int sg_fd, struct opts_t * op) int res = 0; uint8_t * pr_buff = NULL; uint8_t * free_pr_buff = NULL; - int pr_buff_sz = MX_ALLOC_LEN; t_arr_len = compact_transportid_array(op); - pr_buff = sg_memalign(pr_buff_sz, 0 /* page aligned */, &free_pr_buff, + pr_buff = sg_memalign(op->alloc_len, 0 /* page aligned */, &free_pr_buff, false); if (NULL == pr_buff) { pr2serr("%s: unable to allocate %d bytes on heap\n", __func__, - pr_buff_sz); + op->alloc_len); return sg_convert_errno(ENOMEM); } sg_put_unaligned_be64(op->param_rk, pr_buff + 0); diff --git a/src/sgm_dd.c b/src/sgm_dd.c index dc47ca77..2a48b738 100644 --- a/src/sgm_dd.c +++ b/src/sgm_dd.c @@ -66,7 +66,7 @@ #include "sg_pr2serr.h" -static const char * version_str = "1.55 20180601"; +static const char * version_str = "1.56 20180615"; #define DEF_BLOCK_SIZE 512 #define DEF_BLOCKS_PER_TRANSFER 128 @@ -1249,12 +1249,6 @@ main(int argc, char * argv[]) pr2serr("Not enough user memory\n"); return sg_convert_errno(ENOMEM); } -#if 0 /* keep copy of hack below, just in case ... */ - /* perhaps use posix_memalign() instead */ - wrkBuff = (uint8_t *)malloc(blk_sz * bpt + psz); - wrkPos = (uint8_t *)(((sg_uintptr_t)wrkBuff + psz - 1) & - (~(psz - 1))); -#endif } blocks_per = bpt; |