aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gilbert <dgilbert@interlog.com>2021-08-01 03:14:05 +0000
committerDouglas Gilbert <dgilbert@interlog.com>2021-08-01 03:14:05 +0000
commitbfbefdf2d9aa12107d08d796d6fc78862ab85402 (patch)
tree76d31932b03f8a71a1432e0b053f1d5ee4ca78e9
parentc2a103b26a80218c8c2ee9a8ddb7122e36a69331 (diff)
downloadsg3_utils-bfbefdf2d9aa12107d08d796d6fc78862ab85402.tar.gz
sg_ses: fix crash when 'm LEN' < 252
Cleanups suggested cppcheck git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@907 6180dd3e-e324-4e3e-922d-17de1ae2f315
-rw-r--r--ChangeLog3
-rw-r--r--lib/sg_cmds_basic.c10
-rw-r--r--lib/sg_cmds_extra.c13
-rw-r--r--lib/sg_cmds_mmc.c18
-rw-r--r--lib/sg_lib.c61
-rw-r--r--lib/sg_pt_freebsd.c48
-rw-r--r--lib/sg_pt_linux.c16
-rw-r--r--lib/sg_pt_linux_nvme.c23
-rw-r--r--src/sg_logs.c139
-rw-r--r--src/sg_rep_zones.c9
-rw-r--r--src/sg_ses.c120
-rw-r--r--testing/sg_iovec_tst.cpp18
-rw-r--r--testing/sg_mrq_dd.cpp18
-rw-r--r--testing/sg_scat_gath.cpp20
-rw-r--r--testing/sg_scat_gath.h2
-rw-r--r--testing/sg_tst_async.cpp41
-rw-r--r--testing/sg_tst_context.cpp8
-rw-r--r--testing/sgh_dd.cpp104
18 files changed, 377 insertions, 294 deletions
diff --git a/ChangeLog b/ChangeLog
index 742619c8..94777699 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,11 +2,12 @@ Each utility has its own version number, date of last change and
some description at the top of its ".c" file. All utilities in the main
directory have their own "man" pages. There is also a sg3_utils man page.
-Changelog for pre-release sg3_utils-1.47 [20210729] [svn: r906]
+Changelog for pre-release sg3_utils-1.47 [20210731] [svn: r907]
- sg_rep_zones: add support for REPORT ZONE DOMAINS and
REPORT REALMS in this utility
- sg_raw: fix prints of NVMe NVM command names
- sg_ses: fix Windows problem "No command (cdb) given"
+ - fix crash when 'm LEN' < 252
- sg_logs: additions to Volume statistics lpage [ssc5r05c]
- sg_vpd: fix do_hex type on some recent pages
- sg_read_buffer: fix --length= problem
diff --git a/lib/sg_cmds_basic.c b/lib/sg_cmds_basic.c
index d1a61168..899caae1 100644
--- a/lib/sg_cmds_basic.c
+++ b/lib/sg_cmds_basic.c
@@ -113,7 +113,6 @@ sg_cmds_process_helper(const char * leadin, int req_din_x, int act_din_x,
int scat;
bool n = false;
bool check_data_in = false;
- char b[512];
scat = sg_err_category_sense(sbp, slen);
switch (scat) {
@@ -145,6 +144,8 @@ sg_cmds_process_helper(const char * leadin, int req_din_x, int act_din_x,
break;
}
if (verbose || n) {
+ char b[512];
+
if (leadin && (strlen(leadin) > 0))
pr2ws("%s:\n", leadin);
sg_get_sense_str(NULL, sbp, slen, (verbose > 1),
@@ -192,7 +193,7 @@ sg_cmds_process_resp(struct sg_pt_base * ptvp, const char * leadin,
int pt_res, bool noisy, int verbose, int * o_sense_cat)
{
bool favour_sense;
- int cat, slen, resp_code, sstat, req_din_x, req_dout_x;
+ int cat, slen, sstat, req_din_x, req_dout_x;
int act_din_x, act_dout_x;
const uint8_t * sbp;
char b[1024];
@@ -244,7 +245,8 @@ sg_cmds_process_resp(struct sg_pt_base * ptvp, const char * leadin,
switch ((cat = get_scsi_pt_result_category(ptvp))) {
case SCSI_PT_RESULT_GOOD:
if (sbp && (slen > 7)) {
- resp_code = sbp[0] & 0x7f;
+ int resp_code = sbp[0] & 0x7f;
+
/* SBC referrals can have status=GOOD and sense_key=COMPLETED */
if (resp_code >= 0x70) {
if (resp_code < 0x72) {
@@ -399,7 +401,7 @@ sg_ll_inquiry_com(struct sg_pt_base * ptvp, int sg_fd, bool cmddt, bool evpd,
sg_get_command_str(inq_cdb, INQUIRY_CMDLEN, false, sizeof(b),
b));
}
- if (resp && (mx_resp_len > 0)) {
+ if (mx_resp_len > 0) {
up = (uint8_t *)resp;
up[0] = 0x7f; /* defensive prefill */
if (mx_resp_len > 4)
diff --git a/lib/sg_cmds_extra.c b/lib/sg_cmds_extra.c
index 7874dd16..e55e8075 100644
--- a/lib/sg_cmds_extra.c
+++ b/lib/sg_cmds_extra.c
@@ -1203,12 +1203,13 @@ static bool
has_blk_ili(uint8_t * sensep, int sb_len)
{
int resp_code;
- const uint8_t * cup;
if (sb_len < 8)
return false;
resp_code = (0x7f & sensep[0]);
if (resp_code >= 0x72) { /* descriptor format */
+ const uint8_t * cup;
+
/* find block command descriptor */
if ((cup = sg_scsi_sense_desc_find(sensep, sb_len, 0x5)))
return (cup[3] & 0x20);
@@ -1567,7 +1568,7 @@ sg_ll_verify10(int sg_fd, int vrprotect, bool dpo, int bytchk,
int vb)
{
static const char * const cdb_s = "verify(10)";
- int k, res, ret, s_cat, slen;
+ int res, ret, s_cat, slen;
uint8_t v_cdb[VERIFY10_CMDLEN] =
{VERIFY10_CMD, 0, 0, 0, 0, 0, 0, 0, 0, 0};
uint8_t sense_b[SENSE_BUFF_LEN];
@@ -1586,7 +1587,8 @@ sg_ll_verify10(int sg_fd, int vrprotect, bool dpo, int bytchk,
sg_get_command_str(v_cdb, VERIFY10_CMDLEN,
false, sizeof(b), b));
if ((vb > 3) && bytchk && data_out && (data_out_len > 0)) {
- k = data_out_len > 4104 ? 4104 : data_out_len;
+ int k = data_out_len > 4104 ? 4104 : data_out_len;
+
pr2ws(" data_out buffer%s\n",
(data_out_len > 4104 ? ", first 4104 bytes" : ""));
hex2stderr((const uint8_t *)data_out, k, vb < 5);
@@ -1644,7 +1646,7 @@ sg_ll_verify16(int sg_fd, int vrprotect, bool dpo, int bytchk, uint64_t llba,
int data_out_len, uint64_t * infop, bool noisy, int vb)
{
static const char * const cdb_s = "verify(16)";
- int k, res, ret, s_cat, slen;
+ int res, ret, s_cat, slen;
uint8_t v_cdb[VERIFY16_CMDLEN] =
{VERIFY16_CMD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
uint8_t sense_b[SENSE_BUFF_LEN];
@@ -1664,7 +1666,8 @@ sg_ll_verify16(int sg_fd, int vrprotect, bool dpo, int bytchk, uint64_t llba,
sg_get_command_str(v_cdb, VERIFY16_CMDLEN,
false, sizeof(b), b));
if ((vb > 3) && bytchk && data_out && (data_out_len > 0)) {
- k = data_out_len > 4104 ? 4104 : data_out_len;
+ int k = data_out_len > 4104 ? 4104 : data_out_len;
+
pr2ws(" data_out buffer%s\n",
(data_out_len > 4104 ? ", first 4104 bytes" : ""));
hex2stderr((const uint8_t *)data_out, k, vb < 5);
diff --git a/lib/sg_cmds_mmc.c b/lib/sg_cmds_mmc.c
index b80e988f..c1dabd74 100644
--- a/lib/sg_cmds_mmc.c
+++ b/lib/sg_cmds_mmc.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008-2019 Douglas Gilbert.
+ * Copyright (c) 2008-2021 Douglas Gilbert.
* All rights reserved.
* Use of this source code is governed by a BSD-style
* license that can be found in the BSD_LICENSE file.
@@ -60,7 +60,7 @@ sg_ll_set_cd_speed(int sg_fd, int rot_control, int drv_read_speed,
int drv_write_speed, bool noisy, int verbose)
{
static const char * const cdb_s = "set cd speed";
- int res, ret, k, sense_cat;
+ int res, ret, sense_cat;
uint8_t scsCmdBlk[SET_CD_SPEED_CMDLEN] = {SET_CD_SPEED_CMD, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0 ,0};
uint8_t sense_b[SENSE_BUFF_LEN];
@@ -71,6 +71,8 @@ sg_ll_set_cd_speed(int sg_fd, int rot_control, int drv_read_speed,
sg_put_unaligned_be16((uint16_t)drv_write_speed, scsCmdBlk + 4);
if (verbose) {
+ int k;
+
pr2ws(" %s cdb: ", cdb_s);
for (k = 0; k < SET_CD_SPEED_CMDLEN; ++k)
pr2ws("%02x ", scsCmdBlk[k]);
@@ -117,7 +119,7 @@ sg_ll_get_config(int sg_fd, int rt, int starting, void * resp,
int mx_resp_len, bool noisy, int verbose)
{
static const char * const cdb_s = "get configuration";
- int res, k, ret, sense_cat;
+ int res, ret, sense_cat;
uint8_t gcCmdBlk[GET_CONFIG_CMD_LEN] = {GET_CONFIG_CMD, 0, 0, 0,
0, 0, 0, 0, 0, 0};
uint8_t sense_b[SENSE_BUFF_LEN];
@@ -140,6 +142,8 @@ sg_ll_get_config(int sg_fd, int rt, int starting, void * resp,
sg_put_unaligned_be16((uint16_t)mx_resp_len, gcCmdBlk + 7);
if (verbose) {
+ int k;
+
pr2ws(" %s cdb: ", cdb_s);
for (k = 0; k < GET_CONFIG_CMD_LEN; ++k)
pr2ws("%02x ", gcCmdBlk[k]);
@@ -207,7 +211,7 @@ sg_ll_get_performance(int sg_fd, int data_type, unsigned int starting_lba,
int mx_resp_len, bool noisy, int verbose)
{
static const char * const cdb_s = "get performance";
- int res, k, ret, sense_cat;
+ int res, ret, sense_cat;
uint8_t gpCmdBlk[GET_PERFORMANCE_CMD_LEN] = {GET_PERFORMANCE_CMD, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
uint8_t sense_b[SENSE_BUFF_LEN];
@@ -231,6 +235,8 @@ sg_ll_get_performance(int sg_fd, int data_type, unsigned int starting_lba,
gpCmdBlk[10] = (uint8_t)ttype;
if (verbose) {
+ int k;
+
pr2ws(" %s cdb: ", cdb_s);
for (k = 0; k < GET_PERFORMANCE_CMD_LEN; ++k)
pr2ws("%02x ", gpCmdBlk[k]);
@@ -298,7 +304,7 @@ sg_ll_set_streaming(int sg_fd, int type, void * paramp, int param_len,
bool noisy, int verbose)
{
static const char * const cdb_s = "set streaming";
- int k, res, ret, sense_cat;
+ int res, ret, sense_cat;
uint8_t ssCmdBlk[SET_STREAMING_CMDLEN] =
{SET_STREAMING_CMD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
uint8_t sense_b[SENSE_BUFF_LEN];
@@ -307,6 +313,8 @@ sg_ll_set_streaming(int sg_fd, int type, void * paramp, int param_len,
ssCmdBlk[8] = type;
sg_put_unaligned_be16((uint16_t)param_len, ssCmdBlk + 9);
if (verbose) {
+ int k;
+
pr2ws(" %s cdb: ", cdb_s);
for (k = 0; k < SET_STREAMING_CMDLEN; ++k)
pr2ws("%02x ", ssCmdBlk[k]);
diff --git a/lib/sg_lib.c b/lib/sg_lib.c
index 1037c2c0..c5eeeddc 100644
--- a/lib/sg_lib.c
+++ b/lib/sg_lib.c
@@ -359,15 +359,14 @@ sg_get_asc_ascq_str(int asc, int ascq, int buff_len, char * buff)
{
int k, num, rlen;
bool found = false;
- struct sg_lib_asc_ascq_t * eip;
- struct sg_lib_asc_ascq_range_t * ei2p;
if (1 == buff_len) {
buff[0] = '\0';
return buff;
}
for (k = 0; sg_lib_asc_ascq_range[k].text; ++k) {
- ei2p = &sg_lib_asc_ascq_range[k];
+ struct sg_lib_asc_ascq_range_t * ei2p = &sg_lib_asc_ascq_range[k];
+
if ((ei2p->asc == asc) &&
(ascq >= ei2p->ascq_min) &&
(ascq <= ei2p->ascq_max)) {
@@ -381,7 +380,8 @@ sg_get_asc_ascq_str(int asc, int ascq, int buff_len, char * buff)
return buff;
for (k = 0; sg_lib_asc_ascq[k].text; ++k) {
- eip = &sg_lib_asc_ascq[k];
+ struct sg_lib_asc_ascq_t * eip = &sg_lib_asc_ascq[k];
+
if (eip->asc == asc &&
eip->ascq == ascq) {
found = true;
@@ -408,7 +408,7 @@ const uint8_t *
sg_scsi_sense_desc_find(const uint8_t * sbp, int sb_len,
int desc_type)
{
- int add_sb_len, add_d_len, desc_len, k;
+ int add_sb_len, desc_len, k;
const uint8_t * descp;
if ((sb_len < 8) || (0 == (add_sb_len = sbp[7])))
@@ -418,6 +418,8 @@ sg_scsi_sense_desc_find(const uint8_t * sbp, int sb_len,
add_sb_len = (add_sb_len < (sb_len - 8)) ? add_sb_len : (sb_len - 8);
descp = &sbp[8];
for (desc_len = 0, k = 0; k < add_sb_len; k += desc_len) {
+ int add_d_len;
+
descp += desc_len;
add_d_len = (k < (add_sb_len - 1)) ? descp[1]: -1;
desc_len = add_d_len + 2;
@@ -437,7 +439,6 @@ sg_get_sense_info_fld(const uint8_t * sbp, int sb_len,
uint64_t * info_outp)
{
const uint8_t * bp;
- uint64_t ull;
if (info_outp)
*info_outp = 0;
@@ -453,7 +454,8 @@ sg_get_sense_info_fld(const uint8_t * sbp, int sb_len,
case 0x73:
bp = sg_scsi_sense_desc_find(sbp, sb_len, 0 /* info desc */);
if (bp && (0xa == bp[1])) {
- ull = sg_get_unaligned_be64(bp + 4);
+ uint64_t ull = sg_get_unaligned_be64(bp + 4);
+
if (info_outp)
*info_outp = ull;
return !!(bp[2] & 0x80); /* since spc3r23 should be set */
@@ -631,7 +633,7 @@ char *
sg_decode_transportid_str(const char * lip, uint8_t * bp, int bplen,
bool only_one, int blen, char * b)
{
- int proto_id, num, k, n, normal_len, tpid_format;
+ int num, k, n;
uint64_t ull;
int bump;
@@ -645,6 +647,8 @@ sg_decode_transportid_str(const char * lip, uint8_t * bp, int bplen,
lip = "";
/* bump = TRANSPORT_ID_MIN_LEN; // some old compilers insisted on this */
for (k = 0, n = 0; bplen > 0; ++k, bp += bump, bplen -= bump) {
+ int proto_id, normal_len, tpid_format;
+
if ((k > 0) && only_one)
break;
if ((bplen < 24) || (0 != (bplen % 4)))
@@ -941,7 +945,6 @@ sg_get_designation_descriptor_str(const char * lip, const uint8_t * ddp,
int vsi, k, n, dlen;
const uint8_t * ip;
uint64_t vsei;
- uint64_t id_ext;
char e[64];
const char * cp;
@@ -1036,8 +1039,9 @@ sg_get_designation_descriptor_str(const char * lip, const uint8_t * ddp,
}
ci_off = 0;
if (16 == dlen) { /* first 8 bytes are 'Identifier Extension' */
+ uint64_t id_ext = sg_get_unaligned_be64(ip);
+
ci_off = 8;
- id_ext = sg_get_unaligned_be64(ip);
n += sg_scnpr(b + n, blen - n, "%s Identifier extension: 0x%"
PRIx64 "\n", lip, id_ext);
} else if ((8 != dlen) && (12 != dlen)) {
@@ -1402,9 +1406,8 @@ uds_referral_descriptor_str(char * b, int blen, const uint8_t * dp,
{
int n = 0;
int dlen = alen - 2;
- int k, j, g, f, tpgd;
+ int k, j, g, f;
const uint8_t * tp;
- uint64_t ull;
char c[40];
if (NULL == lip)
@@ -1413,7 +1416,9 @@ uds_referral_descriptor_str(char * b, int blen, const uint8_t * dp,
!!(dp[2] & 0x1));
dp += 4;
for (k = 0, f = 1; (k + 4) < dlen; k += g, dp += g, ++f) {
- tpgd = dp[3];
+ int tpgd = dp[3];
+ uint64_t ull;
+
g = (tpgd * 4) + 20;
n += sg_scnpr(b + n, blen - n, "%s Descriptor %d\n", lip, f);
if ((k + g) > dlen) {
@@ -1454,7 +1459,7 @@ int
sg_get_sense_descriptors_str(const char * lip, const uint8_t * sbp,
int sb_len, int blen, char * b)
{
- int add_sb_len, add_d_len, desc_len, k, j, sense_key;
+ int add_sb_len, desc_len, k, j, sense_key;
int n, progress, pr, rem;
uint16_t sct_sc;
bool processed;
@@ -1479,7 +1484,8 @@ sg_get_sense_descriptors_str(const char * lip, const uint8_t * sbp,
for (descp = (sbp + 8), k = 0, n = 0;
(k < add_sb_len) && (n < blen);
k += desc_len, descp += desc_len) {
- add_d_len = (k < (add_sb_len - 1)) ? descp[1] : -1;
+ int add_d_len = (k < (add_sb_len - 1)) ? descp[1] : -1;
+
if ((k + add_d_len + 2) > add_sb_len)
add_d_len = add_sb_len - k - 2;
desc_len = add_d_len + 2;
@@ -2161,14 +2167,13 @@ static const char * const bad_sense_cat = "Bad sense category";
const char *
sg_get_category_sense_str(int sense_cat, int b_len, char * b, int verbose)
{
- int n;
-
if (NULL == b)
return bad_sense_cat;
if (b_len <= 0)
return b;
if (! sg_exit2str(sense_cat, (verbose > 0), b_len, b)) {
- n = sg_scnpr(b, b_len, "Sense category: %d", sense_cat);
+ int n = sg_scnpr(b, b_len, "Sense category: %d", sense_cat);
+
if ((0 == verbose) && (n < (b_len - 1)))
sg_scnpr(b + n, b_len - n, ", try '-v' option for more "
"information");
@@ -2620,7 +2625,6 @@ sg_get_sfs_str(uint16_t sfs_code, int peri_type, int buff_len, char * buff,
bool
sg_is_scsi_cdb(const uint8_t * cdbp, int clen)
{
- int ilen, sa;
uint8_t opcode;
uint8_t top3bits;
@@ -2629,6 +2633,8 @@ sg_is_scsi_cdb(const uint8_t * cdbp, int clen)
opcode = cdbp[0];
top3bits = opcode >> 5;
if (0x3 == top3bits) {
+ int ilen, sa;
+
if ((clen < 12) || (clen % 4))
return false; /* must be modulo 4 and 12 or more bytes */
switch (opcode) {
@@ -2801,14 +2807,14 @@ static char safe_errbuf[64] = {'u', 'n', 'k', 'n', 'o', 'w', 'n', ' ',
char *
safe_strerror(int errnum)
{
- size_t len;
char * errstr;
if (errnum < 0)
errnum = -errnum;
errstr = strerror(errnum);
if (NULL == errstr) {
- len = strlen(safe_errbuf);
+ size_t len = strlen(safe_errbuf);
+
sg_scnpr(safe_errbuf + len, sizeof(safe_errbuf) - len, "%i", errnum);
return safe_errbuf;
}
@@ -2946,7 +2952,6 @@ int
dStrHexStr(const char * str, int len, const char * leadin, int format,
int b_len, char * b)
{
- uint8_t c;
int bpstart, bpos, k, n, prior_ascii_len;
bool want_ascii;
char buff[DSHS_LINE_BLEN + 2];
@@ -2980,7 +2985,8 @@ dStrHexStr(const char * str, int len, const char * leadin, int format,
if (bpstart > 0)
memcpy(buff, leadin, bpstart);
for (k = 0; k < len; k++) {
- c = *p++;
+ uint8_t c = *p++;
+
if (bpos == (bpstart + ((DSHS_BPL / 2) * 3)))
bpos++; /* for extra space in middle of each line's hex */
sg_scnpr(buff + bpos, (int)sizeof(buff) - bpos, "%.2x",
@@ -3742,12 +3748,12 @@ sg_ata_get_chars(const uint16_t * word_arr, int start_word,
int num_words, bool is_big_endian, char * ochars)
{
int k;
- uint16_t s;
- char a, b;
char * op = ochars;
for (k = start_word; k < (start_word + num_words); ++k) {
- s = word_arr[k];
+ char a, b;
+ uint16_t s = word_arr[k];
+
if (is_big_endian) {
a = s & 0xff;
b = (s >> 8) & 0xff;
@@ -3806,7 +3812,6 @@ sg_memalign(uint32_t num_bytes, uint32_t align_to, uint8_t ** buff_to_free,
bool vb)
{
size_t psz;
- uint8_t * res;
if (buff_to_free) /* make sure buff_to_free is NULL if alloc fails */
*buff_to_free = NULL;
@@ -3817,6 +3822,7 @@ sg_memalign(uint32_t num_bytes, uint32_t align_to, uint8_t ** buff_to_free,
#ifdef HAVE_POSIX_MEMALIGN
{
int err;
+ uint8_t * res;
void * wp = NULL;
err = posix_memalign(&wp, psz, num_bytes);
@@ -3840,6 +3846,7 @@ sg_memalign(uint32_t num_bytes, uint32_t align_to, uint8_t ** buff_to_free,
#else
{
void * wrkBuff;
+ uint8_t * res;
sg_uintptr_t align_1 = psz - 1;
wrkBuff = (uint8_t *)calloc(num_bytes + psz, 1);
diff --git a/lib/sg_pt_freebsd.c b/lib/sg_pt_freebsd.c
index b6af6704..ad25e8ca 100644
--- a/lib/sg_pt_freebsd.c
+++ b/lib/sg_pt_freebsd.c
@@ -7,7 +7,7 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
-/* sg_pt_freebsd version 1.44 20210601 */
+/* sg_pt_freebsd version 1.45 20210731 */
#include <stdio.h>
#include <stdlib.h>
@@ -587,19 +587,18 @@ destruct_scsi_pt_obj(struct sg_pt_base * vp)
void
clear_scsi_pt_obj(struct sg_pt_base * vp)
{
- int dev_han;
struct sg_pt_freebsd_scsi * ptp;
- struct freebsd_dev_channel *fdc_p;
if (NULL == vp) {
pr2ws(">>>>> %s: NULL pointer given\n", __func__);
return;
}
if ((ptp = &vp->impl)) {
+ int dev_han = ptp->dev_han;
+ struct freebsd_dev_channel *fdc_p = ptp->mchanp;
+
if (ptp->ccb)
cam_freeccb(ptp->ccb);
- dev_han = ptp->dev_han;
- fdc_p = ptp->mchanp;
memset(ptp, 0, sizeof(struct sg_pt_freebsd_scsi));
ptp->dxfer_dir = CAM_DIR_NONE;
ptp->dev_han = dev_han;
@@ -817,7 +816,6 @@ set_scsi_pt_flags(struct sg_pt_base * objp, int flags)
int
do_scsi_pt(struct sg_pt_base * vp, int dev_han, int time_secs, int vb)
{
- int len;
struct sg_pt_freebsd_scsi * ptp = &vp->impl;
struct freebsd_dev_channel *fdc_p;
FILE * ferrp = sg_warnings_strm ? sg_warnings_strm : stderr;
@@ -928,6 +926,8 @@ do_scsi_pt(struct sg_pt_base * vp, int dev_han, int time_secs, int vb)
if ((SAM_STAT_CHECK_CONDITION == ptp->scsi_status) ||
(SAM_STAT_COMMAND_TERMINATED == ptp->scsi_status)) {
+ int len;
+
if (ptp->sense_resid > ptp->sense_len)
len = ptp->sense_len; /* crazy; ignore sense_resid */
else
@@ -1343,7 +1343,7 @@ mk_sense_invalid_fld(struct sg_pt_freebsd_scsi * ptp, bool in_cdb,
int in_byte, int in_bit, int vb)
{
bool ds = ptp->mchanp ? ptp->mchanp->dev_stat.scsi_dsense : false;
- int sl, asc, n;
+ int asc, n;
uint8_t * sbp = (uint8_t *)ptp->sense;
uint8_t sks[4];
@@ -1369,7 +1369,8 @@ mk_sense_invalid_fld(struct sg_pt_freebsd_scsi * ptp, bool in_cdb,
}
sg_put_unaligned_be16(in_byte, sks + 1);
if (ds) {
- sl = sbp[7] + 8;
+ int sl = sbp[7] + 8;
+
sbp[7] = sl;
sbp[sl] = 0x2;
sbp[sl + 1] = 0x6;
@@ -1402,7 +1403,6 @@ nvme_pt_low(struct sg_pt_freebsd_scsi * ptp, void * dxferp, uint32_t len,
uint16_t sct_sc;
uint8_t opcode;
struct freebsd_dev_channel *fdc_p = ptp->mchanp;
- char b[80];
if (vb > 6)
pr2ws("%s: is_read=%d, time_secs=%d, is_cam_nvme=%d, is_admin=%d\n",
@@ -1480,6 +1480,7 @@ nvme_pt_low(struct sg_pt_freebsd_scsi * ptp, void * dxferp, uint32_t len,
ptp->cq_dw0_3 + SG_NVME_PT_CQ_STATUS_P);
if (sct_sc && (vb > 1)) {
char nam[64];
+ char b[80];
sg_get_nvme_opcode_name(opcode, is_admin, sizeof(nam), nam);
pr2ws("%s: %s [0x%x], status: %s\n", __func__, nam, opcode,
@@ -1577,6 +1578,7 @@ cam_nvme:
ptp->cq_dw0_3 + SG_NVME_PT_CQ_STATUS_P);
if (sct_sc && (vb > 1)) {
char nam[64];
+ char b[80];
sg_get_nvme_opcode_name(opcode, is_admin, sizeof(nam),
nam);
@@ -1603,7 +1605,7 @@ sntl_check_enclosure_override(struct freebsd_dev_channel * fdc_p, int vb)
fdc_p->dev_stat.id_ctl253 = nvmsr;
switch (fdc_p->dev_stat.enclosure_override) {
case 0x0: /* no override */
- if (0x3 & nvmsr) {
+ if (0x3 == (0x3 & nvmsr)) {
fdc_p->dev_stat.pdt = PDT_DISK;
fdc_p->dev_stat.enc_serv = 1;
} else if (0x2 & nvmsr) {
@@ -1704,7 +1706,6 @@ sntl_inq(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp, int time_secs,
int vb)
{
bool evpd;
- bool cp_id_ctl = false;
int res;
uint16_t n, alloc_len, pg_cd;
uint32_t pg_sz = sg_get_page_size();
@@ -1739,6 +1740,8 @@ sntl_inq(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp, int time_secs,
evpd = !!(0x1 & cdbp[1]);
pg_cd = cdbp[2];
if (evpd) { /* VPD page responses */
+ bool cp_id_ctl = false;
+
switch (pg_cd) {
case 0: /* Supported VPD pages VPD page */
/* inq_dout[0] = (PQ=0)<<5 | (PDT=0); prefer pdt=0xd --> SES */
@@ -1942,7 +1945,7 @@ sntl_rluns(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
static int
sntl_tur(struct sg_pt_freebsd_scsi * ptp, int time_secs, int vb)
{
- int res, err;
+ int err;
uint32_t pow_state;
struct nvme_pt_command npc;
uint8_t * npc_up = (uint8_t *)&npc;
@@ -1957,7 +1960,8 @@ sntl_tur(struct sg_pt_freebsd_scsi * ptp, int time_secs, int vb)
return -EINVAL;
}
if (NULL == fdc_p->nvme_id_ctlp) {
- res = sntl_cache_identity(ptp, time_secs, vb);
+ int res = sntl_cache_identity(ptp, time_secs, vb);
+
if (SG_LIB_NVME_STATUS == res) {
mk_sense_from_nvme_status(ptp, ptp->nvme_status, vb);
return 0;
@@ -1998,7 +2002,7 @@ sntl_req_sense(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
int time_secs, int vb)
{
bool desc;
- int res, err;
+ int err;
uint32_t pow_state, alloc_len, n;
struct nvme_pt_command npc;
uint8_t * npc_up = (uint8_t *)&npc;
@@ -2014,7 +2018,8 @@ sntl_req_sense(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
return -EINVAL;
}
if (NULL == fdc_p->nvme_id_ctlp) {
- res = sntl_cache_identity(ptp, time_secs, vb);
+ int res = sntl_cache_identity(ptp, time_secs, vb);
+
if (SG_LIB_NVME_STATUS == res) {
mk_sense_from_nvme_status(ptp, ptp->nvme_status, vb);
return 0;
@@ -2065,7 +2070,7 @@ sntl_mode_ss(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
int time_secs, int vb)
{
bool is_msense = (SCSI_MODE_SENSE10_OPC == cdbp[0]);
- int res, n, len;
+ int n, len;
uint8_t * bp;
struct freebsd_dev_channel * fdc_p;
struct sg_sntl_result_t sntl_result;
@@ -2079,7 +2084,8 @@ sntl_mode_ss(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
return -EINVAL;
}
if (NULL == fdc_p->nvme_id_ctlp) {
- res = sntl_cache_identity(ptp, time_secs, vb);
+ int res = sntl_cache_identity(ptp, time_secs, vb);
+
if (SG_LIB_NVME_STATUS == res) {
mk_sense_from_nvme_status(ptp, ptp->nvme_status, vb);
return 0;
@@ -2365,10 +2371,10 @@ sntl_rep_opcodes(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
{
bool rctd;
uint8_t reporting_opts, req_opcode, supp;
- uint16_t req_sa, u;
+ uint16_t req_sa;
uint32_t alloc_len, offset, a_len;
uint32_t pg_sz = sg_get_page_size();
- int k, len, count, bump;
+ int len, count, bump;
const struct sg_opcode_info_t *oip;
uint8_t *arr;
uint8_t *free_arr;
@@ -2445,7 +2451,9 @@ sntl_rep_opcodes(struct sg_pt_freebsd_scsi * ptp, const uint8_t * cdbp,
else
supp = 3;
if (3 == supp) {
- u = oip->len_mask[0];
+ uint16_t u = oip->len_mask[0];
+ int k;
+
sg_put_unaligned_be16(u, arr + 2);
arr[4] = oip->opcode;
for (k = 1; k < u; ++k)
diff --git a/lib/sg_pt_linux.c b/lib/sg_pt_linux.c
index 9da8bab6..cd9083d0 100644
--- a/lib/sg_pt_linux.c
+++ b/lib/sg_pt_linux.c
@@ -385,12 +385,13 @@ static bool ev_dsense = false;
struct sg_pt_base *
construct_scsi_pt_obj_with_fd(int dev_fd, int verbose)
{
- int err;
struct sg_pt_linux_scsi * ptp;
ptp = (struct sg_pt_linux_scsi *)
calloc(1, sizeof(struct sg_pt_linux_scsi));
if (ptp) {
+ int err;
+
#if (HAVE_NVME && (! IGNORE_NVME))
sntl_init_dev_stat(&ptp->dev_stat);
if (! checked_ev_dsense) {
@@ -444,13 +445,14 @@ destruct_scsi_pt_obj(struct sg_pt_base * vp)
void
clear_scsi_pt_obj(struct sg_pt_base * vp)
{
- bool is_sg, is_bsg, is_nvme;
- int fd;
- uint32_t nvme_nsid;
- struct sg_sntl_dev_state_t dev_stat;
struct sg_pt_linux_scsi * ptp = &vp->impl;
if (ptp) {
+ bool is_sg, is_bsg, is_nvme;
+ int fd;
+ uint32_t nvme_nsid;
+ struct sg_sntl_dev_state_t dev_stat;
+
fd = ptp->dev_fd;
is_sg = ptp->is_sg;
is_bsg = ptp->is_bsg;
@@ -1119,7 +1121,6 @@ do_scsi_pt_v4(struct sg_pt_linux_scsi * ptp, int fd, int time_secs,
int
do_scsi_pt(struct sg_pt_base * vp, int fd, int time_secs, int verbose)
{
- int err;
struct sg_pt_linux_scsi * ptp = &vp->impl;
bool have_checked_for_type = (ptp->dev_fd >= 0);
@@ -1147,7 +1148,8 @@ do_scsi_pt(struct sg_pt_base * vp, int fd, int time_secs, int verbose)
} else
fd = ptp->dev_fd;
if (! have_checked_for_type) {
- err = set_pt_file_handle(vp, ptp->dev_fd, verbose);
+ int err = set_pt_file_handle(vp, ptp->dev_fd, verbose);
+
if (err)
return -ptp->os_err;
}
diff --git a/lib/sg_pt_linux_nvme.c b/lib/sg_pt_linux_nvme.c
index 3dbd182e..5a710f9d 100644
--- a/lib/sg_pt_linux_nvme.c
+++ b/lib/sg_pt_linux_nvme.c
@@ -251,7 +251,7 @@ mk_sense_invalid_fld(struct sg_pt_linux_scsi * ptp, bool in_cdb, int in_byte,
int in_bit, int vb)
{
bool dsense = !! ptp->dev_stat.scsi_dsense;
- int sl, asc, n;
+ int asc, n;
uint8_t * sbp = (uint8_t *)(sg_uintptr_t)ptp->io_hdr.response;
uint8_t sks[4];
@@ -278,7 +278,8 @@ mk_sense_invalid_fld(struct sg_pt_linux_scsi * ptp, bool in_cdb, int in_byte,
}
sg_put_unaligned_be16(in_byte, sks + 1);
if (dsense) {
- sl = sbp[7] + 8;
+ int sl = sbp[7] + 8;
+
sbp[7] = sl;
sbp[sl] = 0x2;
sbp[sl + 1] = 0x6;
@@ -408,7 +409,7 @@ sntl_check_enclosure_override(struct sg_pt_linux_scsi * ptp, int vb)
ptp->dev_stat.id_ctl253 = nvmsr;
switch (ptp->dev_stat.enclosure_override) {
case 0x0: /* no override */
- if (0x3 & nvmsr) {
+ if (0x3 == (0x3 & nvmsr)) {
ptp->dev_stat.pdt = PDT_DISK;
ptp->dev_stat.enc_serv = 1;
} else if (0x2 & nvmsr) {
@@ -521,7 +522,6 @@ sntl_inq(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp, int time_secs,
int vb)
{
bool evpd;
- bool cp_id_ctl = false;
int res;
uint16_t n, alloc_len, pg_cd;
uint32_t pg_sz = sg_get_page_size();
@@ -549,6 +549,8 @@ sntl_inq(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp, int time_secs,
evpd = !!(0x1 & cdbp[1]);
pg_cd = cdbp[2];
if (evpd) { /* VPD page responses */
+ bool cp_id_ctl = false;
+
switch (pg_cd) {
case 0:
/* inq_dout[0] = (PQ=0)<<5 | (PDT=0); prefer pdt=0xd --> SES */
@@ -885,7 +887,7 @@ sntl_mode_ss(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp,
cmdp->nsid = nsid ? nsid : SG_NVME_BROADCAST_NSID;
cmdp->cdw10 = 0x6; /* "Volatile write cache" feature id */
if (sp)
- cmdp->cdw10 |= (1 << 31);
+ cmdp->cdw10 |= (1U << 31);
cmdp->cdw11 = (uint32_t)ptp->dev_stat.wce;
cmdp->timeout_ms = (time_secs < 0) ? 0 : (1000 * time_secs);
res = sg_nvme_admin_cmd(ptp, cmdp, NULL, false, time_secs, vb);
@@ -934,7 +936,7 @@ sntl_senddiag(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp,
bool pf, self_test;
int res;
uint8_t st_cd, dpg_cd;
- uint32_t alloc_len, n, dout_len, dpg_len, nvme_dst;
+ uint32_t alloc_len, n, dout_len, dpg_len;
const uint32_t pg_sz = sg_get_page_size();
uint8_t * dop;
struct sg_nvme_passthru_cmd cmd;
@@ -947,6 +949,8 @@ sntl_senddiag(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp,
pr2ws("%s: pf=%d, self_test=%d (st_code=%d)\n", __func__, (int)pf,
(int)self_test, (int)st_cd);
if (self_test || st_cd) {
+ uint32_t nvme_dst;
+
memset(cmd_up, 0, sizeof(cmd));
cmd_up[SG_NVME_PT_OPCODE] = SG_NVME_AD_DEV_SELT_TEST;
/* just this namespace (if there is one) and controller */
@@ -1107,10 +1111,10 @@ sntl_rep_opcodes(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp,
{
bool rctd;
uint8_t reporting_opts, req_opcode, supp;
- uint16_t req_sa, u;
+ uint16_t req_sa;
uint32_t alloc_len, offset, a_len;
uint32_t pg_sz = sg_get_page_size();
- int k, len, count, bump;
+ int len, count, bump;
const struct sg_opcode_info_t *oip;
uint8_t *arr;
uint8_t *free_arr;
@@ -1186,6 +1190,9 @@ sntl_rep_opcodes(struct sg_pt_linux_scsi * ptp, const uint8_t * cdbp,
else
supp = 3;
if (3 == supp) {
+ uint16_t u;
+ int k;
+
u = oip->len_mask[0];
sg_put_unaligned_be16(u, arr + 2);
arr[4] = oip->opcode;
diff --git a/src/sg_logs.c b/src/sg_logs.c
index 91a46181..def65d24 100644
--- a/src/sg_logs.c
+++ b/src/sg_logs.c
@@ -36,7 +36,7 @@
#include "sg_unaligned.h"
#include "sg_pr2serr.h"
-static const char * version_str = "1.83 20210610"; /* spc6r05 + sbc5r01 */
+static const char * version_str = "1.84 20210731"; /* spc6r05 + sbc5r01 */
#define MX_ALLOC_LEN (0xfffc)
#define SHORT_RESP_LEN 128
@@ -750,12 +750,14 @@ enumerate_helper(const struct log_elem * lep, bool first,
static void
enumerate_pages(const struct opts_t * op)
{
- int k, j;
+ int j;
struct log_elem * lep;
- struct log_elem ** lepp;
struct log_elem ** lep_arr;
if (op->do_enumerate < 3) { /* -e, -ee: sort by acronym */
+ int k;
+ struct log_elem ** lepp;
+
for (k = 0, lep = log_arr; lep->pg_code >=0; ++lep, ++k)
;
++k;
@@ -794,11 +796,12 @@ acron_search(const char * acron)
static int
find_vpn_by_acron(const char * vp_ap)
{
- size_t len, k;
const struct vp_name_t * vpp;
for (vpp = vp_arr; vpp->acron; ++vpp) {
- len = strlen(vpp->acron);
+ size_t k;
+ size_t len = strlen(vpp->acron);
+
for (k = 0; k < len; ++k) {
if (tolower((uint8_t)vp_ap[k]) != (uint8_t)vpp->acron[k])
break;
@@ -816,13 +819,13 @@ find_vpn_by_inquiry(void)
size_t len;
size_t t10_v_len = strlen(t10_vendor_str);
size_t t10_p_len = strlen(t10_product_str);
- bool matched;
const struct vp_name_t * vpp;
if ((0 == t10_v_len) && (0 == t10_p_len))
return VP_NONE;
for (vpp = vp_arr; vpp->acron; ++vpp) {
- matched = false;
+ bool matched = false;
+
if (vpp->t10_vendorp && (t10_v_len > 0)) {
len = strlen(vpp->t10_vendorp);
len = (len > t10_v_len) ? t10_v_len : len;
@@ -906,9 +909,8 @@ usage_for(int hval, const struct opts_t * op)
static int
new_parse_cmd_line(struct opts_t * op, int argc, char * argv[])
{
- int c, n;
-
while (1) {
+ int c, n;
int option_index = 0;
c = getopt_long(argc, argv, "aAbc:D:ef:hHi:lLm:M:nNOp:P:qQrRsStTvV"
@@ -1086,11 +1088,13 @@ static int
old_parse_cmd_line(struct opts_t * op, int argc, char * argv[])
{
bool jmp_out;
- int k, plen, num, n;
+ int k, num, n;
unsigned int u, uu;
const char * cp;
for (k = 1; k < argc; ++k) {
+ int plen;
+
cp = argv[k];
plen = strlen(cp);
if (plen <= 0)
@@ -1212,11 +1216,12 @@ old_parse_cmd_line(struct opts_t * op, int argc, char * argv[])
op->vend_prod = cp + 2;
} else if (0 == strncmp("p=", cp, 2)) {
const char * ccp = cp + 2;
- char * xp;
const struct log_elem * lep;
- char b[80];
if (isalpha((uint8_t)ccp[0])) {
+ char * xp;
+ char b[80];
+
if (strlen(ccp) >= (sizeof(b) - 1)) {
pr2serr("argument to '-p=' is too long\n");
return SG_LIB_SYNTAX_ERROR;
@@ -1499,9 +1504,8 @@ static bool
show_supported_pgs_page(const uint8_t * resp, int len,
const struct opts_t * op)
{
- int num, k, pg_code;
+ int num, k;
const uint8_t * bp;
- const struct log_elem * lep;
char b[64];
if (op->verbose || ((! op->do_raw) && (0 == op->do_hex)))
@@ -1509,7 +1513,9 @@ show_supported_pgs_page(const uint8_t * resp, int len,
num = len - 4;
bp = &resp[0] + 4;
for (k = 0; k < num; ++k) {
- pg_code = bp[k];
+ int pg_code = bp[k];
+ const struct log_elem * lep;
+
snprintf(b, sizeof(b) - 1, " 0x%02x ", pg_code);
lep = pg_subpg_pdt_search(pg_code, 0, op->dev_pdt, -1);
if (lep) {
@@ -1531,7 +1537,7 @@ static bool
show_supported_pgs_sub_page(const uint8_t * resp, int len,
const struct opts_t * op)
{
- int num, k, pg_code, subpg_code;
+ int num, k;
const uint8_t * bp;
const struct log_elem * lep;
char b[64];
@@ -1545,8 +1551,9 @@ show_supported_pgs_sub_page(const uint8_t * resp, int len,
num = len - 4;
bp = &resp[0] + 4;
for (k = 0; k < num; k += 2) {
- pg_code = bp[k];
- subpg_code = bp[k + 1];
+ int pg_code = bp[k];
+ int subpg_code = bp[k + 1];
+
if ((op->do_list == 2) && (subpg_code == 0xff) && (pg_code > 0))
continue;
if (NOT_SPG_SUBPG == subpg_code)
@@ -2167,7 +2174,7 @@ skip:
static bool
show_tape_usage_page(const uint8_t * resp, int len, const struct opts_t * op)
{
- int k, num, extra, pc;
+ int k, num, extra;
unsigned int n;
uint64_t ull;
const uint8_t * bp;
@@ -2182,7 +2189,8 @@ show_tape_usage_page(const uint8_t * resp, int len, const struct opts_t * op)
if (op->verbose || ((! op->do_raw) && (0 == op->do_hex)))
printf("Tape usage page (LTO-5 and LTO-6 specific) [0x30]\n");
for (k = num; k > 0; k -= extra, bp += extra) {
- pc = sg_get_unaligned_be16(bp + 0);
+ int pc = sg_get_unaligned_be16(bp + 0);
+
extra = bp[3] + 4;
if (op->filter_given) {
if (pc != op->filter)
@@ -2272,7 +2280,7 @@ static bool
show_hgst_perf_page(const uint8_t * resp, int len, const struct opts_t * op)
{
bool valid = false;
- int num, pl, pc;
+ int num, pl;
const uint8_t * bp;
char str[PCB_STR_LEN];
@@ -2286,7 +2294,8 @@ show_hgst_perf_page(const uint8_t * resp, int len, const struct opts_t * op)
}
bp = &resp[0] + 4;
while (num > 3) {
- pc = sg_get_unaligned_be16(bp + 0);
+ int pc = sg_get_unaligned_be16(bp + 0);
+
pl = bp[3] + 4;
if (op->filter_given) {
if (pc != op->filter)
@@ -2348,7 +2357,7 @@ static bool
show_tape_capacity_page(const uint8_t * resp, int len,
const struct opts_t * op)
{
- int k, num, extra, pc;
+ int k, num, extra;
unsigned int n;
const uint8_t * bp;
char str[PCB_STR_LEN];
@@ -2362,7 +2371,8 @@ show_tape_capacity_page(const uint8_t * resp, int len,
if (op->verbose || ((! op->do_raw) && (0 == op->do_hex)))
printf("Tape capacity page (LTO-5 and LTO-6 specific) [0x31]\n");
for (k = num; k > 0; k -= extra, bp += extra) {
- pc = sg_get_unaligned_be16(bp + 0);
+ int pc = sg_get_unaligned_be16(bp + 0);
+
extra = bp[3] + 4;
if (op->filter_given) {
if (pc != op->filter)
@@ -2513,7 +2523,7 @@ static bool
show_last_n_error_page(const uint8_t * resp, int len,
const struct opts_t * op)
{
- int k, num, pl, pc;
+ int k, num, pl;
const uint8_t * bp;
char str[PCB_STR_LEN];
@@ -2526,6 +2536,8 @@ show_last_n_error_page(const uint8_t * resp, int len,
if (op->verbose || ((! op->do_raw) && (0 == op->do_hex)))
printf("Last n error events page [0x7]\n");
for (k = num; k > 0; k -= pl, bp += pl) {
+ int pc;
+
if (k < 3) {
printf("short Last n error events page\n");
return false;
@@ -2568,7 +2580,7 @@ static bool
show_last_n_deferred_error_page(const uint8_t * resp, int len,
const struct opts_t * op)
{
- int k, num, pl, pc;
+ int k, num, pl;
const uint8_t * bp;
char str[PCB_STR_LEN];
@@ -2581,6 +2593,8 @@ show_last_n_deferred_error_page(const uint8_t * resp, int len,
if (op->verbose || ((! op->do_raw) && (0 == op->do_hex)))
printf("Last n deferred errors page [0xb]\n");
for (k = num; k > 0; k -= pl, bp += pl) {
+ int pc;
+
if (k < 3) {
printf("short Last n deferred errors page\n");
return true;
@@ -2613,7 +2627,7 @@ static bool
show_last_n_inq_data_ch_page(const uint8_t * resp, int len,
const struct opts_t * op)
{
- int j, num, pl, pc;
+ int j, num, pl;
const uint8_t * bp;
char str[PCB_STR_LEN];
@@ -2622,7 +2636,8 @@ show_last_n_inq_data_ch_page(const uint8_t * resp, int len,
num = len - 4;
bp = &resp[0] + 4;
while (num > 3) {
- pc = sg_get_unaligned_be16(bp + 0);
+ int pc = sg_get_unaligned_be16(bp + 0);
+
pl = bp[3] + 4;
if (op->filter_given) {
if (pc != op->filter)
@@ -2672,7 +2687,7 @@ static bool
show_last_n_mode_pg_data_ch_page(const uint8_t * resp, int len,
const struct opts_t * op)
{
- int j, num, pl, pc;
+ int j, num, pl;
const uint8_t * bp;
char str[PCB_STR_LEN];
@@ -2681,7 +2696,7 @@ show_last_n_mode_pg_data_ch_page(const uint8_t * resp, int len,
num = len - 4;
bp = &resp[0] + 4;
while (num > 3) {
- pc = sg_get_unaligned_be16(bp + 0);
+ int pc = sg_get_unaligned_be16(bp + 0);
pl = bp[3] + 4;
if (op->filter_given) {
if (pc != op->filter)
@@ -2749,7 +2764,7 @@ static const char * self_test_result[] = {
static bool
show_self_test_page(const uint8_t * resp, int len, const struct opts_t * op)
{
- int k, num, n, res, pc, pl;
+ int k, num, n, res;
unsigned int v;
const uint8_t * bp;
uint64_t ull;
@@ -2765,8 +2780,9 @@ show_self_test_page(const uint8_t * resp, int len, const struct opts_t * op)
if (op->verbose || ((! op->do_raw) && (0 == op->do_hex)))
printf("Self-test results page [0x10]\n");
for (k = 0, bp = resp + 4; k < 20; ++k, bp += 20 ) {
- pl = bp[3] + 4;
- pc = sg_get_unaligned_be16(bp + 0);
+ int pc = sg_get_unaligned_be16(bp + 0);
+ int pl = bp[3] + 4;
+
if (op->filter_given) {
if (pc != op->filter)
continue;
@@ -2817,7 +2833,7 @@ show_self_test_page(const uint8_t * resp, int len, const struct opts_t * op)
static bool
show_temperature_page(const uint8_t * resp, int len, const struct opts_t * op)
{
- int k, num, extra, pc;
+ int k, num, extra;
const uint8_t * bp;
char str[PCB_STR_LEN];
@@ -2832,6 +2848,8 @@ show_temperature_page(const uint8_t * resp, int len, const struct opts_t * op)
printf("Temperature page [0xd]\n");
}
for (k = num; k > 0; k -= extra, bp += extra) {
+ int pc;
+
if (k < 3) {
pr2serr("short Temperature page\n");
return true;
@@ -2889,7 +2907,7 @@ show_temperature_page(const uint8_t * resp, int len, const struct opts_t * op)
static bool
show_start_stop_page(const uint8_t * resp, int len, const struct opts_t * op)
{
- int k, num, extra, pc;
+ int k, num, extra;
const uint8_t * bp;
char str[PCB_STR_LEN];
@@ -2902,6 +2920,8 @@ show_start_stop_page(const uint8_t * resp, int len, const struct opts_t * op)
if (op->verbose || ((! op->do_raw) && (0 == op->do_hex)))
printf("Start-stop cycle counter page [0xe]\n");
for (k = num; k > 0; k -= extra, bp += extra) {
+ int pc;
+
if (k < 3) {
pr2serr("short Start-stop cycle counter page\n");
return true;
@@ -2997,7 +3017,7 @@ show_start_stop_page(const uint8_t * resp, int len, const struct opts_t * op)
static bool
show_app_client_page(const uint8_t * resp, int len, const struct opts_t * op)
{
- int k, num, extra, pc;
+ int k, num, extra;
const uint8_t * bp;
char str[PCB_STR_LEN];
@@ -3021,6 +3041,8 @@ show_app_client_page(const uint8_t * resp, int len, const struct opts_t * op)
}
/* only here if filter_given set */
for (k = num; k > 0; k -= extra, bp += extra) {
+ int pc;
+
if (k < 3) {
pr2serr("short Application client page\n");
return true;
@@ -3049,7 +3071,7 @@ show_app_client_page(const uint8_t * resp, int len, const struct opts_t * op)
static bool
show_ie_page(const uint8_t * resp, int len, const struct opts_t * op)
{
- int k, num, param_len, pc;
+ int k, num, param_len;
const uint8_t * bp;
const char * cp;
char str[PCB_STR_LEN];
@@ -3076,6 +3098,8 @@ show_ie_page(const uint8_t * resp, int len, const struct opts_t * op)
printf("Informational Exceptions page [0x2f]\n");
}
for (k = num; k > 0; k -= param_len, bp += param_len) {
+ int pc;
+
if (k < 3) {
printf("short Informational Exceptions page\n");
return false;
@@ -3439,7 +3463,6 @@ show_sas_port_param(const uint8_t * bp, int param_len,
const uint8_t * vcp;
uint64_t ull;
unsigned int ui;
- char str[PCB_STR_LEN];
char s[64];
sz = sizeof(s);
@@ -3457,8 +3480,11 @@ show_sas_port_param(const uint8_t * bp, int param_len,
printf(" num_phys=%d\n", nphys);
else {
printf(" number of phys = %d\n", nphys);
- if ((op->do_pcb) && (! op->do_name))
+ if ((op->do_pcb) && (! op->do_name)) {
+ char str[PCB_STR_LEN];
+
printf(" <%s>\n", get_pcb_str(bp[2], str, sizeof(str)));
+ }
}
for (j = 0, vcp = bp + 8; j < (param_len - 8);
@@ -3561,9 +3587,8 @@ show_sas_port_param(const uint8_t * bp, int param_len,
printf(" Phy reset problem count = %u\n", ui);
}
if (spld_len > 51) {
- int num_ped, pes;
+ int num_ped;
const uint8_t * xcp;
- unsigned int pvdt;
num_ped = vcp[51];
if (op->verbose > 1)
@@ -3579,7 +3604,9 @@ show_sas_port_param(const uint8_t * bp, int param_len,
}
xcp = vcp + 52;
for (m = 0; m < (num_ped * 12); m += 12, xcp += 12) {
- pes = xcp[3];
+ int pes = xcp[3];
+ unsigned int pvdt;
+
ui = sg_get_unaligned_be32(xcp + 4);
pvdt = sg_get_unaligned_be32(xcp + 8);
show_sas_phy_event_info(pes, ui, pvdt);
@@ -3594,7 +3621,7 @@ static bool
show_protocol_specific_page(const uint8_t * resp, int len,
const struct opts_t * op)
{
- int k, num, pl, pc, pid;
+ int k, num, pl, pid;
const uint8_t * bp;
num = len - 4;
@@ -3603,7 +3630,8 @@ show_protocol_specific_page(const uint8_t * resp, int len,
printf("log_page=0x%x\n", PROTO_SPECIFIC_LPAGE);
}
for (k = 0, bp = resp + 4; k < num; ) {
- pc = sg_get_unaligned_be16(bp + 0);
+ int pc = sg_get_unaligned_be16(bp + 0);
+
pl = bp[3] + 4;
if (op->filter_given) {
if (pc != op->filter)
@@ -3643,7 +3671,6 @@ show_stats_perform_pages(const uint8_t * resp, int len,
{
bool nam, spf;
int k, num, param_len, param_code, subpg_code, extra;
- unsigned int ui;
uint64_t ull;
const uint8_t * bp;
const char * ccp;
@@ -3673,6 +3700,8 @@ show_stats_perform_pages(const uint8_t * resp, int len,
if (num < 0x5c)
return false;
for (k = num; k > 0; k -= extra, bp += extra) {
+ unsigned int ui;
+
if (k < 3)
return false;
param_len = bp[3];
@@ -3926,7 +3955,7 @@ show_stats_perform_pages(const uint8_t * resp, int len,
static bool
show_cache_stats_page(const uint8_t * resp, int len, const struct opts_t * op)
{
- int k, num, pc, subpg_code, extra;
+ int k, num, subpg_code, extra;
bool nam, spf;
unsigned int ui;
const uint8_t * bp;
@@ -3953,6 +3982,8 @@ show_cache_stats_page(const uint8_t * resp, int len, const struct opts_t * op)
}
for (k = num; k > 0; k -= extra, bp += extra) {
+ int pc;
+
if (k < 3) {
pr2serr("short Cache memory statistics page\n");
return false;
@@ -6086,11 +6117,12 @@ skip:
static void
volume_stats_partition(const uint8_t * xp, int len, bool in_hex)
{
- int dl, pn;
- bool all_ffs, ffs_last_fe;
uint64_t ull;
while (len > 3) {
+ bool all_ffs, ffs_last_fe;
+ int dl, pn;
+
dl = xp[0] + 1;
if (dl < 3)
return;
@@ -6133,9 +6165,9 @@ volume_stats_partition(const uint8_t * xp, int len, bool in_hex)
static void
volume_stats_history(const uint8_t * xp, int len)
{
- int dl, mhi;
-
while (len > 3) {
+ int dl, mhi;
+
dl = xp[0] + 1;
if (dl < 4)
return;
@@ -6768,12 +6800,13 @@ fetchTemperature(int sg_fd, uint8_t * resp, int max_len, struct opts_t * op)
static int
decode_pg_arg(struct opts_t * op)
{
- int n, nn;
+ int nn;
const struct log_elem * lep;
char * cp;
- char b[80];
if (isalpha((uint8_t)op->pg_arg[0])) {
+ char b[80];
+
if (strlen(op->pg_arg) >= (sizeof(b) - 1)) {
pr2serr("argument to '--page=' is too long\n");
return SG_LIB_SYNTAX_ERROR;
@@ -6803,6 +6836,8 @@ decode_pg_arg(struct opts_t * op)
} else
op->subpg_code = lep->subpg_code;
} else { /* numeric arg: either 'pg_num' or 'pg_num,subpg_num' */
+ int n;
+
cp = (char *)strchr(op->pg_arg, ',');
n = sg_get_num_nomult(op->pg_arg);
if ((n < 0) || (n > 63)) {
diff --git a/src/sg_rep_zones.c b/src/sg_rep_zones.c
index a61b6aa1..4c601f00 100644
--- a/src/sg_rep_zones.c
+++ b/src/sg_rep_zones.c
@@ -381,11 +381,10 @@ static int
decode_rep_realms(const uint8_t * rzBuff, int act_len,
const struct opts_t * op)
{
- uint32_t k, j, realms_count, derived_realms_count, r_desc_len,
+ uint32_t k, realms_count, derived_realms_count, r_desc_len,
zdomains_count;
uint64_t nr_locator;
const uint8_t * bp;
- const uint8_t * zp;
if (act_len < 12) {
pr2serr("need more than 12 bytes to decode, got %u\n", act_len);
@@ -431,6 +430,9 @@ decode_rep_realms(const uint8_t * rzBuff, int act_len,
(uint32_t)op->do_num : realms_count;
for (k = 0, bp = rzBuff + 64; k < realms_count; ++k, bp += r_desc_len) {
+ uint32_t j;
+ const uint8_t * zp;
+
printf(" Realm_id=%u\n", sg_get_unaligned_be32(bp + 0));
if (op->do_hex) {
hex2stdout(bp, r_desc_len, -1);
@@ -454,11 +456,10 @@ static int
decode_rep_zdomains(const uint8_t * rzBuff, int act_len,
const struct opts_t * op)
{
- uint32_t k, j, zd_len, zd_ret_len, zdoms_sup, zdoms_rep, zd_rep_opts;
+ uint32_t k, zd_len, zd_ret_len, zdoms_sup, zdoms_rep, zd_rep_opts;
uint32_t num, der_zdoms;
uint64_t zd_locator;
const uint8_t * bp;
- const uint8_t * zp;
if (act_len < 12) {
pr2serr("need more than 12 bytes to decode, got %u\n", act_len);
diff --git a/src/sg_ses.c b/src/sg_ses.c
index b9ac2e43..701359b6 100644
--- a/src/sg_ses.c
+++ b/src/sg_ses.c
@@ -38,7 +38,7 @@
* commands tailored for SES (enclosure) devices.
*/
-static const char * version_str = "2.50 20210610"; /* ses4r04 */
+static const char * version_str = "2.51 20210730"; /* ses4r04 */
#define MX_ALLOC_LEN ((64 * 1024) - 4) /* max allowable for big enclosures */
#define MX_ELEM_HDR 1024
@@ -994,7 +994,6 @@ parse_index(struct opts_t *op)
const char * cp;
char * mallcp;
char * c2p;
- const char * cc3p;
const struct element_type_t * etp;
char b[64];
const int blen = sizeof(b);
@@ -1006,6 +1005,8 @@ parse_index(struct opts_t *op)
if (0 == strcmp("-1", cp + 1))
n = -1;
else {
+ const char * cc3p;
+
n = sg_get_num_nomult(cp + 1);
if ((n < 0) || (n > 255)) {
pr2serr("bad argument to '--index=', after comma expect "
@@ -1566,7 +1567,6 @@ parse_cgs_str(char * buff, struct tuple_acronym_val * tavp)
{
char * esp;
char * colp;
- char * cp;
unsigned int ui;
tavp->acron = NULL;
@@ -1590,6 +1590,8 @@ parse_cgs_str(char * buff, struct tuple_acronym_val * tavp)
if (isalpha((uint8_t)buff[0]))
tavp->acron = buff;
else {
+ char * cp;
+
colp = strchr(buff, ':');
if ((NULL == colp) || (buff == colp))
return -1;
@@ -1677,20 +1679,19 @@ static int
do_senddiag(struct sg_pt_base * ptvp, void * outgoing_pg, int outgoing_len,
bool noisy, int verbose)
{
- const bool pf_bit = true;
- int page_num, ret;
- const char * cp;
+ int ret;
if (outgoing_pg && (verbose > 2)) {
- page_num = ((const char *)outgoing_pg)[0];
- cp = find_out_diag_page_desc(page_num);
+ int page_num = ((const char *)outgoing_pg)[0];
+ const char * cp = find_out_diag_page_desc(page_num);
+
if (cp)
pr2serr(" Send diagnostic command page name: %s\n", cp);
else
pr2serr(" Send diagnostic command page number: 0x%x\n",
page_num);
}
- ret = sg_ll_send_diag_pt(ptvp, 0 /* sf_code */, pf_bit,
+ ret = sg_ll_send_diag_pt(ptvp, 0 /* sf_code */, true /* pf_bit */,
false /* sf_bit */, false /* devofl_bit */,
false /* unitofl_bit */, 0 /* long_duration */,
outgoing_pg, outgoing_len, noisy, verbose);
@@ -2711,12 +2712,12 @@ enc_status_helper(const char * pad, const uint8_t * statp, int etype,
case DISPLAY_ETC: /* Display (ses2r15) */
if (nofilter || (0xc0 & statp[1])) {
int dms = statp[1] & 0x3;
- uint16_t dcs;
printf("%sIdent=%d, Fail=%d, Display mode status=%d", pad,
!!(statp[1] & 0x80), !!(statp[1] & 0x40), dms);
if ((1 == dms) || (2 == dms)) {
- dcs = sg_get_unaligned_be16(statp + 2);
+ uint16_t dcs = sg_get_unaligned_be16(statp + 2);
+
printf(", Display character status=0x%x", dcs);
if (statp[2] && (0 == statp[3]))
printf(" ['%c']", statp[2]);
@@ -3255,7 +3256,7 @@ additional_elem_sas(const char * pad, const uint8_t * ae_bp, int etype,
{
int phys, j, m, n, desc_type, eiioe, eip_offset;
bool nofilter = ! op->do_filter;
- bool eip, print_sas_addr, saddr_nz;
+ bool eip;
const struct join_row_t * jrp;
const uint8_t * aep;
const uint8_t * ed_bp;
@@ -3277,6 +3278,9 @@ additional_elem_sas(const char * pad, const uint8_t * ae_bp, int etype,
printf("\n");
aep = ae_bp + 4 + eip_offset + eip_offset;
for (j = 0; j < phys; ++j, aep += 28) {
+ bool print_sas_addr = false;
+ bool saddr_nz;
+
printf("%sphy index: %d\n", pad, j);
printf("%s SAS device type: %s\n", pad,
sas_device_type[(0x70 & aep[0]) >> 4]);
@@ -3292,7 +3296,6 @@ additional_elem_sas(const char * pad, const uint8_t * ae_bp, int etype,
((aep[3] & 4) ? " STP" : ""),
((aep[3] & 2) ? " SMP" : ""),
((aep[3] & 1) ? " SATA_device" : ""));
- print_sas_addr = false;
saddr_nz = saddr_non_zero(aep + 4);
if (nofilter || saddr_nz) {
print_sas_addr = true;
@@ -3464,7 +3467,7 @@ additional_elem_helper(const char * pad, const uint8_t * ae_bp,
const struct opts_t * op)
{
int ports, phys, j, m, eip_offset, pcie_pt;
- bool cid_valid, psn_valid, bdf_valid, eip;
+ bool eip;
uint16_t pcie_vid;
const uint8_t * aep;
char b[64];
@@ -3542,10 +3545,11 @@ additional_elem_helper(const char * pad, const uint8_t * ae_bp,
printf("%smodel number: %.40s\n", pad, ae_bp + 32);
aep = ae_bp + 72;
for (j = 0; j < phys; ++j, aep += 8) {
+ bool psn_valid = !!(0x4 & aep[0]);
+ bool bdf_valid = !!(0x2 & aep[0]);
+ bool cid_valid = !!(0x1 & aep[0]);
+
printf("%sport index: %d\n", pad, j);
- psn_valid = !!(0x4 & aep[0]);
- bdf_valid = !!(0x2 & aep[0]);
- cid_valid = !!(0x1 & aep[0]);
printf("%s PSN_VALID=%d, BDF_VALID=%d, CID_VALID=%d\n", pad,
(int)psn_valid, (int)bdf_valid, (int)cid_valid);
if (cid_valid) /* N.B. little endian */
@@ -3807,11 +3811,12 @@ supported_pages_sdg(const char * leadin, const uint8_t * resp,
{
int k, code, prev;
bool got1;
- const char * cp;
const struct diag_page_abbrev * ap;
printf("%s:\n", leadin);
for (k = 0, prev = 0; k < (resp_len - 4); ++k, prev = code) {
+ const char * cp;
+
code = resp[k + 4];
if (code < prev)
break; /* assume to be padding at end */
@@ -4387,8 +4392,6 @@ fini:
static void
devslotnum_and_sasaddr(struct join_row_t * jrp, const uint8_t * ae_bp)
{
- int m;
-
if ((NULL == jrp) || (NULL == ae_bp) || (0 == (0x10 & ae_bp[0])))
return; /* sanity and expect EIP=1 */
switch (0xf & ae_bp[0]) {
@@ -4400,6 +4403,8 @@ devslotnum_and_sasaddr(struct join_row_t * jrp, const uint8_t * ae_bp)
/* only for device slot and array device slot elements */
jrp->dev_slot_num = ae_bp[7];
if (ae_bp[4] > 0) { /* number of phys */
+ int m;
+
/* Use the first phy's "SAS ADDRESS" field */
for (m = 0; m < 8; ++m)
jrp->sas_addr[m] = ae_bp[(4 + 4 + 12) + m];
@@ -4780,7 +4785,6 @@ static void
join_juggle_aes(struct th_es_t * tesp, uint8_t * es_bp, const uint8_t * ed_bp,
uint8_t * t_bp)
{
- bool et_used_by_aes;
int k, j, eoe, ei4aess;
struct join_row_t * jrp;
const struct type_desc_hdr_t * tdhp;
@@ -4788,6 +4792,8 @@ join_juggle_aes(struct th_es_t * tesp, uint8_t * es_bp, const uint8_t * ed_bp,
jrp = tesp->j_base;
tdhp = tesp->th_base;
for (k = 0, eoe = 0, ei4aess = 0; k < tesp->num_ths; ++k, ++tdhp) {
+ bool et_used_by_aes;
+
jrp->th_i = k;
jrp->indiv_i = -1;
jrp->etype = tdhp->etype;
@@ -4834,7 +4840,7 @@ join_juggle_aes(struct th_es_t * tesp, uint8_t * es_bp, const uint8_t * ed_bp,
++tesp->num_j_eoe;
}
if (jrp >= join_arr_lastp) {
- ++k;
+ /* ++k; */
break; /* leave last row all zeros */
}
}
@@ -4852,7 +4858,7 @@ static int
join_work(struct sg_pt_base * ptvp, struct opts_t * op, bool display)
{
bool broken_ei;
- int j, res, num_ths, mlen;
+ int res, num_ths, mlen;
uint32_t ref_gen_code, gen_code;
const uint8_t * ae_bp;
const uint8_t * ae_last_bp;
@@ -4875,6 +4881,8 @@ join_work(struct sg_pt_base * ptvp, struct opts_t * op, bool display)
tesp->th_base = type_desc_hdr_arr;
tesp->num_ths = num_ths;
if (display && primary_info.have_info) {
+ int j;
+
printf(" Primary enclosure logical identifier (hex): ");
for (j = 0; j < 8; ++j)
printf("%02x", primary_info.enc_log_id[j]);
@@ -5018,9 +5026,11 @@ join_work(struct sg_pt_base * ptvp, struct opts_t * op, bool display)
static int
strcase_eq(const char * s1p, const char * s2p)
{
- int c1, c2;
+ int c1;
do {
+ int c2;
+
c1 = *s1p++;
c2 = *s2p++;
if (c1 != c2) {
@@ -5081,8 +5091,7 @@ cgs_enc_ctl_stat(struct sg_pt_base * ptvp, struct join_row_t * jrp,
const struct tuple_acronym_val * tavp,
const struct opts_t * op, bool last)
{
- int ret, len, s_byte, s_bit, n_bits, k;
- uint64_t ui;
+ int s_byte, s_bit, n_bits;
const struct acronym2tuple * ap;
if (NULL == tavp->acron) {
@@ -5116,13 +5125,19 @@ cgs_enc_ctl_stat(struct sg_pt_base * ptvp, struct join_row_t * jrp,
if (op->verbose > 1)
pr2serr(" s_byte=%d, s_bit=%d, n_bits=%d\n", s_byte, s_bit, n_bits);
if (GET_OPT == tavp->cgs_sel) {
- ui = sg_get_big_endian(jrp->enc_statp + s_byte, s_bit, n_bits);
+ uint64_t ui = sg_get_big_endian(jrp->enc_statp + s_byte, s_bit,
+ n_bits);
+
if (op->do_hex)
printf("0x%" PRIx64 "\n", ui);
else
printf("%" PRId64 "\n", (int64_t)ui);
} else { /* --set or --clear */
+ int len;
+
if ((! op->mask_ign) && (jrp->etype < NUM_ETC)) {
+ int k;
+
if (op->verbose > 2)
pr2serr("Applying mask to element status [etc=%d] prior to "
"modify then write\n", jrp->etype);
@@ -5138,8 +5153,9 @@ cgs_enc_ctl_stat(struct sg_pt_base * ptvp, struct join_row_t * jrp,
enc_stat_rsp[1] = op->byte1;
len = sg_get_unaligned_be16(enc_stat_rsp + 2) + 4;
if (last) {
- ret = do_senddiag(ptvp, enc_stat_rsp, len, ! op->quiet,
- op->verbose);
+ int ret = do_senddiag(ptvp, enc_stat_rsp, len, ! op->quiet,
+ op->verbose);
+
if (ret) {
pr2serr("couldn't send Enclosure Control page\n");
return -1;
@@ -5157,8 +5173,7 @@ cgs_threshold(struct sg_pt_base * ptvp, const struct join_row_t * jrp,
const struct tuple_acronym_val * tavp,
const struct opts_t * op, bool last)
{
- int ret, len, s_byte, s_bit, n_bits;
- uint64_t ui;
+ int s_byte, s_bit, n_bits;
const struct acronym2tuple * ap;
if (NULL == jrp->thresh_inp) {
@@ -5184,20 +5199,25 @@ cgs_threshold(struct sg_pt_base * ptvp, const struct join_row_t * jrp,
return -2;
}
if (GET_OPT == tavp->cgs_sel) {
- ui = sg_get_big_endian(jrp->thresh_inp + s_byte, s_bit, n_bits);
+ uint64_t ui = sg_get_big_endian(jrp->thresh_inp + s_byte, s_bit,
+ n_bits);
+
if (op->do_hex)
printf("0x%" PRIx64 "\n", ui);
else
printf("%" PRId64 "\n", (int64_t)ui);
} else {
+ int len;
+
sg_set_big_endian((uint64_t)tavp->val,
jrp->thresh_inp + s_byte, s_bit, n_bits);
if (op->byte1_given)
threshold_rsp[1] = op->byte1;
len = sg_get_unaligned_be16(threshold_rsp + 2) + 4;
if (last) {
- ret = do_senddiag(ptvp, threshold_rsp, len, ! op->quiet,
- op->verbose);
+ int ret = do_senddiag(ptvp, threshold_rsp, len, ! op->quiet,
+ op->verbose);
+
if (ret) {
pr2serr("couldn't send Threshold Out page\n");
return -1;
@@ -5216,7 +5236,6 @@ cgs_additional_el(const struct join_row_t * jrp,
const struct opts_t * op)
{
int s_byte, s_bit, n_bits;
- uint64_t ui;
const struct acronym2tuple * ap;
if (NULL == jrp->ae_statp) {
@@ -5242,7 +5261,9 @@ cgs_additional_el(const struct join_row_t * jrp,
return -2;
}
if (GET_OPT == tavp->cgs_sel) {
- ui = sg_get_big_endian(jrp->ae_statp + s_byte, s_bit, n_bits);
+ uint64_t ui = sg_get_big_endian(jrp->ae_statp + s_byte, s_bit,
+ n_bits);
+
if (op->do_hex)
printf("0x%" PRIx64 "\n", ui);
else
@@ -5454,17 +5475,14 @@ static void
enumerate_work(const struct opts_t * op)
{
int num;
- const struct element_type_t * etp;
- const struct acronym2tuple * ap;
- char b[64];
- char a[160];
- const char * cp;
if (op->dev_name)
printf(">>> DEVICE %s ignored when --%s option given.\n",
op->dev_name, (op->do_list ? "list" : "enumerate"));
num = op->enumerate + (int)op->do_list;
if (num < 2) {
+ const struct element_type_t * etp;
+
enumerate_diag_pages();
printf("\nSES element type names, followed by abbreviation and "
"element type code:\n");
@@ -5472,8 +5490,12 @@ enumerate_work(const struct opts_t * op)
printf(" %s [%s] [0x%x]\n", etp->desc, etp->abbrev,
etp->elem_type_code);
} else {
- char bb[64];
bool given_et = false;
+ const struct acronym2tuple * ap;
+ const char * cp;
+ char a[160];
+ char b[64];
+ char bb[64];
/* command line has multiple --enumerate and/or --list options */
printf("--clear, --get, --set acronyms for Enclosure Status/Control "
@@ -5530,7 +5552,7 @@ int
main(int argc, char * argv[])
{
bool have_cgs = false;
- int k, d_len, res, resid, vb;
+ int k, n, d_len, res, resid, vb;
int sg_fd = -1;
int pd_type = 0;
int ret = 0;
@@ -5764,15 +5786,17 @@ main(int argc, char * argv[])
}
}
clear_scsi_pt_obj(ptvp);
- memset(enc_stat_rsp, 0, 4096);
+ memset(enc_stat_rsp, 0, enc_stat_rsp_sz);
}
#endif
if (ptvp) {
- ret = sg_ll_request_sense_pt(ptvp, false, enc_stat_rsp,
- REQUEST_SENSE_RESP_SZ, ! op->quiet, vb);
+ n = (enc_stat_rsp_sz < REQUEST_SENSE_RESP_SZ) ? enc_stat_rsp_sz :
+ REQUEST_SENSE_RESP_SZ;
+ ret = sg_ll_request_sense_pt(ptvp, false, enc_stat_rsp, n,
+ ! op->quiet, vb);
if (0 == ret) {
- int sense_len = REQUEST_SENSE_RESP_SZ - get_scsi_pt_resid(ptvp);
+ int sense_len = n - get_scsi_pt_resid(ptvp);
struct sg_scsi_sense_hdr ssh;
if ((sense_len > 7) && sg_scsi_normalize_sense(enc_stat_rsp,
@@ -5801,7 +5825,7 @@ main(int argc, char * argv[])
" problems ahead\n", ret);
}
clear_scsi_pt_obj(ptvp);
- memset(enc_stat_rsp, 0, REQUEST_SENSE_RESP_SZ);
+ memset(enc_stat_rsp, 0, enc_stat_rsp_sz);
}
if (op->nickname_str)
diff --git a/testing/sg_iovec_tst.cpp b/testing/sg_iovec_tst.cpp
index 73c6168c..6228b9eb 100644
--- a/testing/sg_iovec_tst.cpp
+++ b/testing/sg_iovec_tst.cpp
@@ -151,8 +151,7 @@ sg_read(int sg_fd, uint8_t * buff, int num_blocks, int from_block, int bs,
struct sg_io_hdr io_hdr;
struct pollfd a_poll;
int dxfer_len = bs * num_blocks;
- int k, pos, rem, res;
- char b[128];
+ int k, pos, rem;
sg_put_unaligned_be32((uint32_t)from_block, rdCmd + 2);
sg_put_unaligned_be16((uint16_t)num_blocks, rdCmd + 7);
@@ -185,12 +184,16 @@ sg_read(int sg_fd, uint8_t * buff, int num_blocks, int from_block, int bs,
io_hdr.sbp = senseBuff;
io_hdr.timeout = DEF_TIMEOUT;
io_hdr.pack_id = from_block;
- if (verbose)
+ if (verbose) {
+ char b[128];
+
fprintf(stderr, "cdb: %s\n", sg_get_command_str(rdCmd, 10, true,
sizeof(b), b));
+ }
if (async) {
- res = write(sg_fd, &io_hdr, sizeof(io_hdr));
+ int res = write(sg_fd, &io_hdr, sizeof(io_hdr));
+
if (res < 0) {
perror("write(<sg_device>), error");
return -1;
@@ -253,7 +256,6 @@ sg_read_v4(int sg_fd, uint8_t * buff, int num_blocks, int from_block, int bs,
struct pollfd a_poll;
int dxfer_len = bs * num_blocks;
int k, pos, rem, res;
- char b[128];
sg_put_unaligned_be32((uint32_t)from_block, rdCmd + 2);
sg_put_unaligned_be16((uint16_t)num_blocks, rdCmd + 7);
@@ -285,10 +287,12 @@ sg_read_v4(int sg_fd, uint8_t * buff, int num_blocks, int from_block, int bs,
io_hdr.response = (uint64_t)(uintptr_t)senseBuff;
io_hdr.timeout = DEF_TIMEOUT;
io_hdr.request_extra = from_block; /* pack_id */
- if (verbose)
+ if (verbose) {
+ char b[128];
+
fprintf(stderr, "cdb: %s\n", sg_get_command_str(rdCmd, 10, true,
sizeof(b), b));
-
+ }
if (async) {
res = ioctl(sg_fd, SG_IOSUBMIT, &io_hdr);
if (res < 0) {
diff --git a/testing/sg_mrq_dd.cpp b/testing/sg_mrq_dd.cpp
index 2f1aff94..4dc1f54c 100644
--- a/testing/sg_mrq_dd.cpp
+++ b/testing/sg_mrq_dd.cpp
@@ -30,7 +30,7 @@
*
*/
-static const char * version_str = "1.32 20210627";
+static const char * version_str = "1.33 20210730";
#define _XOPEN_SOURCE 600
#ifndef _GNU_SOURCE
@@ -1797,7 +1797,6 @@ read_write_thread(struct global_collection * clp, int thr_idx, int slice_idx,
clp->processed = true;
} /* this unlocks lk */
clp->infant_cv.notify_one();
- singleton = false;
}
if (res < 0) {
if (seg_blks >= 0)
@@ -2235,9 +2234,8 @@ process_mrq_response(Rq_elem * rep, const struct sg_io_v4 * ctl_v4p,
} /* end of request array scan loop */
if ((n_subm == num_mrq) || (vb < 3))
goto fini;
- if (vb)
- pr2serr_lk("[%d] checking response array _beyond_ number of "
- "submissions [%d] to num_mrq:\n", id, k);
+ pr2serr_lk("[%d] checking response array _beyond_ number of "
+ "submissions [%d] to num_mrq:\n", id, k);
for (all_good = true; k < num_mrq; ++k, ++a_v4p) {
if (SG_INFO_MRQ_FINI & a_v4p->info) {
pr2serr_lk("[%d] a_v4[%d]: unexpected SG_INFO_MRQ_FINI set [%s]\n",
@@ -3386,7 +3384,7 @@ process_flags(const char * arg, struct flags_t * fp)
fp->no_dur = true;
else if (0 == strcmp(cp, "no_dur"))
fp->no_dur = true;
- else if (0 == strcmp(cp, "no_dur"))
+ else if (0 == strcmp(cp, "no-dur"))
fp->no_dur = true;
else if (0 == strcmp(cp, "nothresh"))
fp->no_thresh = true;
@@ -3716,8 +3714,8 @@ parse_cmdline_sanity(int argc, char * argv[], struct global_collection * clp,
goto syn_err;
}
seek_buf = (char *)calloc(n + 16, 1);
- if (NULL == seek_buf)
- goto syn_err;
+ if (NULL == seek_buf)
+ goto syn_err;
memcpy(seek_buf, buf, n + 1);
} else if (0 == strcmp(key, "skip")) {
n = strlen(buf);
@@ -3726,8 +3724,8 @@ parse_cmdline_sanity(int argc, char * argv[], struct global_collection * clp,
goto syn_err;
}
skip_buf = (char *)calloc(n + 16, 1);
- if (NULL == skip_buf)
- goto syn_err;
+ if (NULL == skip_buf)
+ goto syn_err;
memcpy(skip_buf, buf, n + 1);
} else if (0 == strcmp(key, "sync"))
do_sync = !! sg_get_num(buf);
diff --git a/testing/sg_scat_gath.cpp b/testing/sg_scat_gath.cpp
index b5edc481..e9aa633d 100644
--- a/testing/sg_scat_gath.cpp
+++ b/testing/sg_scat_gath.cpp
@@ -418,7 +418,6 @@ void
scat_gath_list::dbg_print(bool skip_meta, const char * id_str, bool to_stdout,
bool show_sgl) const
{
- int k;
int num = sgl.size();
const char * caller = id_str ? id_str : "unknown";
FILE * fp = to_stdout ? stdout : stderr;
@@ -435,6 +434,8 @@ scat_gath_list::dbg_print(bool skip_meta, const char * id_str, bool to_stdout,
fprintf(fp, " >> %s scatter gather list (%d element%s):\n", caller, num,
(num == 1 ? "" : "s"));
if (show_sgl) {
+ int k;
+
for (k = 0; k < num; ++k) {
const class scat_gath_elem & sge = sgl[k];
@@ -622,7 +623,6 @@ sgls_eq_off(const scat_gath_list & left, int l_e_ind, int l_blk_off,
const scat_gath_list & right, int r_e_ind, int r_blk_off,
bool allow_partial)
{
- int lrem, rrem;
int lelems = left.sgl.size();
int relems = right.sgl.size();
@@ -630,8 +630,10 @@ sgls_eq_off(const scat_gath_list & left, int l_e_ind, int l_blk_off,
if ((left.sgl[l_e_ind].lba + l_blk_off) !=
(right.sgl[r_e_ind].lba + r_blk_off))
return false;
- lrem = left.sgl[l_e_ind].num - l_blk_off;
- rrem = right.sgl[r_e_ind].num - r_blk_off;
+
+ int lrem = left.sgl[l_e_ind].num - l_blk_off;
+ int rrem = right.sgl[r_e_ind].num - r_blk_off;
+
if (lrem == rrem) {
++l_e_ind;
l_blk_off = 0;
@@ -726,7 +728,6 @@ scat_gath_iter::set_by_blk_idx(int64_t _blk_idx)
int k;
const int elems = sglist.sgl.size();
const int last_ind = elems - 1;
- uint32_t num;
int64_t bc = _blk_idx;
if (bc < 0)
@@ -740,8 +741,8 @@ scat_gath_iter::set_by_blk_idx(int64_t _blk_idx)
} else
k = 0;
for (first = true; k < elems; ++k, first = false) {
- num = ((k == last_ind) && extend_last) ? MAX_SGL_NUM_VAL :
- sglist.sgl[k].num;
+ uint32_t num = ((k == last_ind) && extend_last) ? MAX_SGL_NUM_VAL :
+ sglist.sgl[k].num;
if (first) {
if ((int64_t)(num - it_blk_off) < bc)
bc -= (num - it_blk_off);
@@ -780,14 +781,13 @@ scat_gath_iter::add_blks(uint64_t blk_count)
int k;
const int elems = sglist.sgl.size();
const int last_ind = elems - 1;
- uint32_t num;
uint64_t bc = blk_count;
if (0 == bc)
return true;
for (first = true, k = it_el_ind; k < elems; ++k) {
- num = ((k == last_ind) && extend_last) ? MAX_SGL_NUM_VAL :
- sglist.sgl[k].num;
+ uint32_t num = ((k == last_ind) && extend_last) ? MAX_SGL_NUM_VAL :
+ sglist.sgl[k].num;
if (first) {
first = false;
if ((uint64_t)(num - it_blk_off) <= bc)
diff --git a/testing/sg_scat_gath.h b/testing/sg_scat_gath.h
index e864bf8b..d316a7b1 100644
--- a/testing/sg_scat_gath.h
+++ b/testing/sg_scat_gath.h
@@ -105,7 +105,7 @@ private:
class scat_gath_iter {
public:
- scat_gath_iter(const scat_gath_list & my_scat_gath_list);
+ explicit scat_gath_iter(const scat_gath_list & my_scat_gath_list);
scat_gath_iter(const scat_gath_iter & src) = default;
scat_gath_iter& operator=(const scat_gath_iter&) = delete;
~scat_gath_iter() = default;
diff --git a/testing/sg_tst_async.cpp b/testing/sg_tst_async.cpp
index 2a3b54a8..acef7e04 100644
--- a/testing/sg_tst_async.cpp
+++ b/testing/sg_tst_async.cpp
@@ -137,7 +137,7 @@ using namespace std::chrono;
#define DEF_DIRECT false /* true: direct_io */
#define DEF_MMAP_IO false /* true: mmap-ed IO with sg */
#define DEF_NO_XFER 0
-#define DEF_LBA 1000
+#define DEF_LBA 1000U
#define MAX_Q_PER_FD 16383 /* sg driver per file descriptor limit */
#define MAX_CONSEC_NOMEMS 4 /* was 16 */
@@ -432,13 +432,13 @@ static unsigned int
get_urandom_uint(void)
{
unsigned int res = 0;
- int n;
- uint8_t b[sizeof(unsigned int)];
lock_guard<mutex> lg(rand_lba_mutex);
int fd = open(URANDOM_DEV, O_RDONLY);
if (fd >= 0) {
- n = read(fd, b, sizeof(unsigned int));
+ uint8_t b[sizeof(unsigned int)];
+ int n = read(fd, b, sizeof(unsigned int));
+
if (sizeof(unsigned int) == n)
memcpy(&res, b, sizeof(unsigned int));
close(fd);
@@ -965,10 +965,9 @@ work_thread(int id, struct opts_t * op)
int open_flags = O_RDWR;
int thr_async_starts = 0;
int thr_async_finishes = 0;
- int thr_ovn_force_read = 0;
int vb = op->verbose;
int k, n, res, sg_fd, num_outstanding, do_inc, npt, pack_id, sg_flags;
- int num_waiting_read, num_to_read, sz, ern, encore_pack_id, ask, j, m, o;
+ int num_waiting_read, sz, encore_pack_id, ask, j, m, o;
int prev_pack_id, blk_sz;
unsigned int thr_enomem_count = 0;
unsigned int thr_start_eagain_count = 0;
@@ -977,7 +976,6 @@ work_thread(int id, struct opts_t * op)
unsigned int thr_fin_eagain_count = 0;
unsigned int thr_fin_ebusy_count = 0;
unsigned int thr_start_edom_count = 0;
- unsigned int seed = 0;
int needed_sz = op->lb_sz * op->num_lbs;
unsigned int nanosecs;
unsigned int hi_lba;
@@ -1112,7 +1110,8 @@ work_thread(int id, struct opts_t * op)
wrkMmap = (uint8_t *)mmap(NULL, needed_sz, PROT_READ | PROT_WRITE,
MAP_SHARED, sg_fd, 0);
if (MAP_FAILED == wrkMmap) {
- ern = errno;
+ int ern = errno;
+
pr2serr_lk("t_id=%d: mmap() failed, errno=%d\n", id, ern);
return;
}
@@ -1120,7 +1119,8 @@ work_thread(int id, struct opts_t * op)
pfd[0].fd = sg_fd;
pfd[0].events = POLLIN;
if (is_rw && hi_lba) {
- seed = get_urandom_uint();
+ unsigned int seed = get_urandom_uint();
+
if (vb > 1)
pr2serr_lk(" id=%d, /dev/urandom seed=0x%x\n", id, seed);
ruip = new Rand_uint((unsigned int)op->lba, hi_lba, seed);
@@ -1153,6 +1153,8 @@ work_thread(int id, struct opts_t * op)
* no more outstanding responses */
for (k = 0, m = 0, o=0, num_outstanding = 0; (k < npt) || num_outstanding;
k = do_inc ? k + 1 : k, ++o) {
+ int num_to_read = 0;
+
if (do_inc)
m = 0;
else {
@@ -1336,7 +1338,6 @@ work_thread(int id, struct opts_t * op)
pr2serr_lk("%d->id: free_lst.size() over 6000 (b)\n", id);
}
}
- num_to_read = 0;
if (need_finish) {
num_waiting_read = 0;
if (ioctl(sg_fd, SG_GET_NUM_WAITING, &num_waiting_read) < 0) {
@@ -1579,9 +1580,6 @@ work_thread(int id, struct opts_t * op)
if ((vb > 2) && (k > 0))
pr2serr_lk("%d->id: Maximum number of READ/WRITEs queued: %d\n",
id, k);
- if (vb && (thr_ovn_force_read > 0))
- pr2serr_lk("%d->id: Number of ovn (override number) forced reads: "
- "%d\n", id, thr_ovn_force_read);
async_starts += thr_async_starts;
async_finishes += thr_async_finishes;
start_eagain_count += thr_start_eagain_count;
@@ -1742,15 +1740,13 @@ int
main(int argc, char * argv[])
{
bool maxq_per_thread_given = false;
- int k, n, c, res;
+ int n;
int force = 0;
int64_t ll;
int num_threads = DEF_NUM_THREADS;
- char b[128];
struct timespec start_tm, end_tm;
struct opts_t * op;
const char * cp;
- const char * dev_name;
op = &a_opts;
#if 0
@@ -1775,6 +1771,7 @@ main(int argc, char * argv[])
while (1) {
int option_index = 0;
+ int c;
c = getopt_long(argc, argv,
"34acdefghl:L:mM:n:NO:pq:Q:Rs:St:TuvVw:W",
@@ -1992,10 +1989,8 @@ main(int argc, char * argv[])
}
}
if (optind < argc) {
- if (optind < argc) {
- for (; optind < argc; ++optind)
- op->dev_names.push_back(argv[optind]);
- }
+ for (; optind < argc; ++optind)
+ op->dev_names.push_back(argv[optind]);
}
#ifdef DEBUG
pr2serr_lk("In DEBUG mode, ");
@@ -2054,12 +2049,16 @@ main(int argc, char * argv[])
}
try {
- int sg_ver_num;
+ int k, sg_ver_num;
unsigned int last_lba;
unsigned int blk_sz;
struct stat a_stat;
for (k = 0; k < (int)op->dev_names.size(); ++k) {
+ int res;
+ const char * dev_name;
+ char b[128];
+
dev_name = op->dev_names[k];
if (stat(dev_name, &a_stat) < 0) {
snprintf(b, sizeof(b), "could not stat() %s", dev_name);
diff --git a/testing/sg_tst_context.cpp b/testing/sg_tst_context.cpp
index a6948c0e..6f95717e 100644
--- a/testing/sg_tst_context.cpp
+++ b/testing/sg_tst_context.cpp
@@ -277,9 +277,7 @@ work_thread(const char * dev_name, int id, int num, bool share,
int res = 0;
unsigned int thr_even_notreadys = 0;
unsigned int thr_odd_notreadys = 0;
- unsigned int thr_ebusy_count = 0;
struct sg_pt_base * ptp = NULL;
- char ebuff[EBUFF_SZ];
{
lock_guard<mutex> lg(console_mutex);
@@ -289,6 +287,7 @@ work_thread(const char * dev_name, int id, int num, bool share,
}
if (! share) { /* ignore passed ptp, make this thread's own */
int oflags = O_RDWR;
+ unsigned int thr_ebusy_count = 0;
if (nonblock)
oflags |= O_NONBLOCK;
@@ -300,6 +299,8 @@ work_thread(const char * dev_name, int id, int num, bool share,
this_thread::yield(); // give other threads a chance
}
if (pt_fd < 0) {
+ char ebuff[EBUFF_SZ];
+
snprintf(ebuff, EBUFF_SZ, "work_thread id=%d: error opening: %s",
id, dev_name);
perror(ebuff);
@@ -379,7 +380,6 @@ main(int argc, char * argv[])
bool share = false;
int num_threads = DEF_NUM_THREADS;
char * dev_name = NULL;
- char ebuff[EBUFF_SZ];
for (k = 1; k < argc; ++k) {
if (0 == memcmp("-e", argv[k], 2))
@@ -446,6 +446,8 @@ main(int argc, char * argv[])
sleep(0); // process yield ??
}
if (pt_fd < 0) {
+ char ebuff[EBUFF_SZ];
+
snprintf(ebuff, EBUFF_SZ, "main: error opening: %s",
dev_name);
perror(ebuff);
diff --git a/testing/sgh_dd.cpp b/testing/sgh_dd.cpp
index 4610caef..c2d1e7ae 100644
--- a/testing/sgh_dd.cpp
+++ b/testing/sgh_dd.cpp
@@ -36,7 +36,7 @@
* renamed [20181221]
*/
-static const char * version_str = "2.12 20210727";
+static const char * version_str = "2.13 20210730";
#define _XOPEN_SOURCE 600
#ifndef _GNU_SOURCE
@@ -987,7 +987,7 @@ calc_duration_throughput(int contin)
static void
print_stats(const char * str)
{
- int64_t infull, outfull;
+ int64_t infull;
if (0 != gcoll.out_rem_count.load())
pr2serr(" remaining block count=%" PRId64 "\n",
@@ -999,7 +999,8 @@ print_stats(const char * str)
if (gcoll.out_type == FT_DEV_NULL)
pr2serr("%s0+0 records out\n", str);
else {
- outfull = dd_count - gcoll.out_rem_count.load();
+ int64_t outfull = dd_count - gcoll.out_rem_count.load();
+
pr2serr("%s%" PRId64 "+%d records %s\n", str,
outfull - gcoll.out_partial.load(), gcoll.out_partial.load(),
(gcoll.verify ? "verified" : "out"));
@@ -1218,7 +1219,6 @@ sig_listen_thread(void * v_clp)
{
bool stall_reported = false;
int prev_pack_id = 0;
- int sig_number, pack_id;
struct timespec ts;
struct timespec * tsp = &ts;
struct global_collection * clp = (struct global_collection *)v_clp;
@@ -1227,13 +1227,15 @@ sig_listen_thread(void * v_clp)
tsp->tv_sec = ict_ms / 1000;
tsp->tv_nsec = (ict_ms % 1000) * 1000 * 1000; /* DEF_SDT_ICT_MS */
while (1) {
- sig_number = sigtimedwait(&signal_set, NULL, tsp);
+ int sig_number = sigtimedwait(&signal_set, NULL, tsp);
+
if (sig_number < 0) {
int err = errno;
/* EAGAIN implies a timeout */
if ((EAGAIN == err) && (clp->sdt_crt > 0)) {
- pack_id = mono_pack_id.load();
+ int pack_id = mono_pack_id.load();
+
if ((pack_id > 0) && (pack_id == prev_pack_id)) {
if (! stall_reported) {
stall_reported = true;
@@ -1264,37 +1266,6 @@ sig_listen_thread(void * v_clp)
if (clp->verbose > 1)
pr2serr_lk("%s: exiting\n", __func__);
-
-#if 0
-
-
- if (EAGAIN == err) { /* timeout */
- pack_id = mono_pack_id.load();
- if (pack_id == prev_pack_id) {
- if (! stall_reported) {
- stall_reported = true;
- tsp->tv_sec = 2;
- tsp->tv_nsec = 0;
- pr2serr_lk("%s: first stall at pack_id=%d "
- "detected\n", __func__, pack_id);
- } else
- pr2serr_lk("%s: subsequent stall at pack_id=%d\n",
- __func__, pack_id);
- system_wrapper("/usr/bin/cat /proc/scsi/sg/debug\n");
- } else
- prev_pack_id = pack_id;
- } else
- pr2serr_lk("%s: sigtimedwait() errno=%d\n", __func__, err);
- }
- if (SIGINT == sig_number) {
- pr2serr_lk("%sinterrupted by SIGINT\n", my_name);
- stop_both(clp);
- pthread_cond_broadcast(&clp->out_sync_cv);
- }
- }
- if (clp->verbose > 1)
- pr2serr_lk("%s: exiting\n", __func__);
-#endif
return NULL;
}
@@ -1524,8 +1495,7 @@ read_write_thread(void * v_tip)
if (vb > 2)
pr2serr_lk("%d <-- Starting worker thread\n", rep->id);
if (! (in_mmap || out_mmap)) {
- int n = sz;
-
+ n = sz;
if (clp->unbalanced_mrq)
n *= clp->nmrqs;
rep->buffp = sg_memalign(n, 0 /* page align */, &rep->alloc_bp,
@@ -1659,6 +1629,9 @@ read_write_thread(void * v_tip)
"to_do=%u\n", rep->id,
(uint32_t)deferred_arr.first.size());
res = sgh_do_deferred_mrq(rep, deferred_arr);
+ if (res)
+ pr2serr_lk("%s tid=%d: sgh_do_deferred_mrq failed\n",
+ __func__, rep->id);
}
break; /* at or beyond end, so leave loop >>>>>>>>>> */
} else if ((my_index + clp->bpt) > dd_count)
@@ -1771,6 +1744,9 @@ skip_force_out_sequence:
pr2serr_lk("thread=%d: tail-end, to_do=%u\n", rep->id,
(uint32_t)deferred_arr.first.size());
res = sgh_do_deferred_mrq(rep, deferred_arr);
+ if (res)
+ pr2serr_lk("%s tid=%d: sgh_do_deferred_mrq failed\n",
+ __func__, rep->id);
}
clp->out_stop = true;
stop_after_write = true;
@@ -1792,7 +1768,7 @@ skip_force_out_sequence:
fini:
if ((1 == rep->mmap_active) && (rep->mmap_len > 0)) {
if (munmap(rep->buffp, rep->mmap_len) < 0) {
- int err = errno;
+ err = errno;
char bb[STRERR_BUFF_LEN + 1];
pr2serr_lk("thread=%d: munmap() failed: %s\n", rep->id,
@@ -1805,8 +1781,8 @@ fini:
}
if (rep->alloc_bp) {
free(rep->alloc_bp);
- rep->alloc_bp = NULL;
- rep->buffp = NULL;
+ rep->alloc_bp = NULL;
+ rep->buffp = NULL;
}
if (sg_version_ge_40045) {
@@ -1862,7 +1838,6 @@ normal_in_rd(Rq_elem * rep, int blocks)
bool stop_after_write = false;
bool same_fds = clp->in_flags.same_fds || clp->out_flags.same_fds;
int res;
- char strerr_buff[STRERR_BUFF_LEN + 1];
if (clp->verbose > 4)
pr2serr_lk("%s: tid=%d: iblk=%" PRIu64 ", blocks=%d\n", __func__,
@@ -1904,6 +1879,8 @@ normal_in_rd(Rq_elem * rep, int blocks)
((EINTR == errno) || (EAGAIN == errno)))
std::this_thread::yield();/* another thread may be able to progress */
if (res < 0) {
+ char strerr_buff[STRERR_BUFF_LEN + 1];
+
if (clp->in_flags.coe) {
memset(rep->buffp, 0, rep->num_blks * clp->bs);
pr2serr_lk("tid=%d: >> substituted zeros for in blk=%" PRId64
@@ -1944,7 +1921,6 @@ normal_out_wr(Rq_elem * rep, int blocks)
{
int res;
struct global_collection * clp = rep->clp;
- char strerr_buff[STRERR_BUFF_LEN + 1];
/* enters holding out_mutex */
if (clp->verbose > 4)
@@ -1954,6 +1930,8 @@ normal_out_wr(Rq_elem * rep, int blocks)
< 0) && ((EINTR == errno) || (EAGAIN == errno)))
std::this_thread::yield();/* another thread may be able to progress */
if (res < 0) {
+ char strerr_buff[STRERR_BUFF_LEN + 1];
+
if (clp->out_flags.coe) {
pr2serr_lk("tid=%d: >> ignored error for out blk=%" PRId64
" for %d bytes, %s\n", rep->id, rep->oblk,
@@ -2068,10 +2046,11 @@ static void
sg_in_rd_cmd(struct global_collection * clp, Rq_elem * rep,
mrq_arr_t & def_arr)
{
- int res, status, pack_id;
+ int status, pack_id;
while (1) {
- res = sg_start_io(rep, def_arr, pack_id, NULL);
+ int res = sg_start_io(rep, def_arr, pack_id, NULL);
+
if (1 == res)
err_exit(ENOMEM, "sg starting in command");
else if (res < 0) {
@@ -2419,11 +2398,8 @@ process_mrq_response(Rq_elem * rep, const struct sg_io_v4 * ctl_v4p,
if (sg_scsi_normalize_sense(sbp, slen, &ssh) &&
(ssh.response_code >= 0x70)) {
- char b[256];
-
- if (ssh.response_code & 0x1) {
+ if (ssh.response_code & 0x1)
ok = true;
- }
if (vb) {
sg_get_sense_str(" ", sbp, slen, false, blen, b);
pr2serr_lk("[%d] a_v4[%d]:\n%s\n", id, k, b);
@@ -2442,9 +2418,8 @@ process_mrq_response(Rq_elem * rep, const struct sg_io_v4 * ctl_v4p,
} /* end of request array scan loop */
if ((n_subm == num_mrq) || (vb < 3))
goto fini;
- if (vb)
- pr2serr_lk("[%d] checking response array _beyond_ number of "
- "submissions [%d] to num_mrq:\n", id, k);
+ pr2serr_lk("[%d] checking response array _beyond_ number of "
+ "submissions [%d] to num_mrq:\n", id, k);
for (all_good = true; k < num_mrq; ++k, ++a_v4p) {
if (SG_INFO_MRQ_FINI & a_v4p->info) {
pr2serr_lk("[%d] a_v4[%d]: unexpected SG_INFO_MRQ_FINI set [%s]\n",
@@ -2780,7 +2755,7 @@ static int
split_def_arr(const mrq_arr_t & def_arr, mrq_arr_t & fd_def_arr,
mrq_arr_t & o_fd_def_arr)
{
- int nrq, k, flags;
+ int nrq, k;
int res = 0;
const struct sg_io_v4 * a_v4p;
@@ -2788,6 +2763,7 @@ split_def_arr(const mrq_arr_t & def_arr, mrq_arr_t & fd_def_arr,
nrq = def_arr.first.size();
for (k = 0; k < nrq; ++k) {
+ int flags;
const struct sg_io_v4 * h4p = a_v4p + k;
flags = h4p->flags;
@@ -3327,8 +3303,12 @@ do_v4:
def_arr.first.push_back(*h4p);
def_arr.second.push_back(cdb_arr);
res = 0;
- if ((int)def_arr.first.size() >= clp->nmrqs)
+ if ((int)def_arr.first.size() >= clp->nmrqs) {
res = sgh_do_deferred_mrq(rep, def_arr);
+ if (res)
+ pr2serr_lk("%s tid=%d: sgh_do_deferred_mrq failed\n",
+ __func__, rep->id);
+ }
return res;
}
while (((res = ioctl(fd, SG_IOSUBMIT, h4p)) < 0) &&
@@ -3853,9 +3833,8 @@ static int
sg_in_open(struct global_collection *clp, const char *inf, uint8_t **mmpp,
int * mmap_lenp)
{
- int fd, err, n;
+ int fd, n;
int flags = O_RDWR;
- char ebuff[EBUFF_SZ];
if (clp->in_flags.direct)
flags |= O_DIRECT;
@@ -3865,7 +3844,9 @@ sg_in_open(struct global_collection *clp, const char *inf, uint8_t **mmpp,
flags |= O_SYNC;
if ((fd = open(inf, flags)) < 0) {
- err = errno;
+ int err = errno;
+ char ebuff[EBUFF_SZ];
+
snprintf(ebuff, EBUFF_SZ, "%s: could not open %s for sg reading",
__func__, inf);
perror(ebuff);
@@ -3887,9 +3868,8 @@ static int
sg_out_open(struct global_collection *clp, const char *outf, uint8_t **mmpp,
int * mmap_lenp)
{
- int fd, err, n;
+ int fd, n;
int flags = O_RDWR;
- char ebuff[EBUFF_SZ];
if (clp->out_flags.direct)
flags |= O_DIRECT;
@@ -3899,7 +3879,9 @@ sg_out_open(struct global_collection *clp, const char *outf, uint8_t **mmpp,
flags |= O_SYNC;
if ((fd = open(outf, flags)) < 0) {
- err = errno;
+ int err = errno;
+ char ebuff[EBUFF_SZ];
+
snprintf(ebuff, EBUFF_SZ, "%s: could not open %s for sg %s",
__func__, outf, (clp->verify ? "verifying" : "writing"));
perror(ebuff);