Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libiscsi for openSUSE:Factory checked in at 2024-03-01 23:34:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libiscsi (Old) and /work/SRC/openSUSE:Factory/.libiscsi.new.1770 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libiscsi" Fri Mar 1 23:34:47 2024 rev:24 rq:1153223 version:1.20.0+git.20240206 Changes: -------- --- /work/SRC/openSUSE:Factory/libiscsi/libiscsi.changes 2023-11-15 21:06:57.720654352 +0100 +++ /work/SRC/openSUSE:Factory/.libiscsi.new.1770/libiscsi.changes 2024-03-01 23:34:58.912105856 +0100 @@ -1,0 +2,13 @@ +Thu Feb 29 13:02:24 UTC 2024 - Martin Pluskal <[email protected]> + +- Update to version 1.20.0+git.20240206: + * spelling fixes: eventhough, shoudl, asyncronous, maxium, implicity + * COPYING: stop mentioning ld_scsi + * New version 1.20.0 + * Previously, 'task->status' was printed as decimal. In iscsi.h, the values that are put into it are defined as hexadecimal. This is a bit confusing (grepping through the code for 251658241 did not result in anything while the hex variant f000001 resulted in SCSI_STATUS_ERROR). + * Fix for https://github.com/sahlberg/libiscsi/issues/409 'ms->pages' was not checked for being NULL. This can happen when a target does not return any pages. + * Improve iSCSI PDU header dump + * Abstract value_string as common utility + * Drain DATAOUT PDU on timeout + +------------------------------------------------------------------- Old: ---- libiscsi-1.19.0+git.20231114.obscpio New: ---- libiscsi-1.20.0+git.20240206.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libiscsi.spec ++++++ --- /var/tmp/diff_new_pack.YBcexu/_old 2024-03-01 23:34:59.628131750 +0100 +++ /var/tmp/diff_new_pack.YBcexu/_new 2024-03-01 23:34:59.632131895 +0100 @@ -1,7 +1,7 @@ # # spec file for package libiscsi # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,13 +16,12 @@ # -%define sover 9 +%define sover 10 Name: libiscsi -Version: 1.19.0+git.20231114 +Version: 1.20.0+git.20240206 Release: 0 Summary: iSCSI client library and utilities License: GPL-2.0-only AND LGPL-2.1-only -Group: Development/Libraries/C and C++ URL: https://github.com/sahlberg/libiscsi Source0: %{name}-%{version}.tar.gz Source99: baselibs.conf @@ -42,7 +41,6 @@ %package -n %{name}%{sover} Summary: iSCSI client library and utilities -Group: System/Libraries %description -n %{name}%{sover} libiscsi is a clientside library to implement the iSCSI protocol @@ -54,7 +52,6 @@ %package utils Summary: Some utilities for %{name} -Group: Productivity/Networking/Other %description utils libiscsi is a clientside library to implement the iSCSI protocol that can @@ -64,7 +61,6 @@ %package devel Summary: Development files for %{name} -Group: Development/Languages/C and C++ Requires: %{name}%{sover} = %{version} %description devel @@ -72,7 +68,6 @@ %package test Summary: Test utilities for iSCSI -Group: System/Base %description test A comprehensive iSCSI transport and SCSI block device test suite based on @@ -93,8 +88,7 @@ %make_install find %{buildroot} -type f -name "*.la" -delete -print -%post -n %{name}%{sover} -p /sbin/ldconfig -%postun -n %{name}%{sover} -p /sbin/ldconfig +%ldconfig_scriptlets -n %{name}%{sover} %files -n %{name}%{sover} %{_libdir}/libiscsi.so.%{sover}* ++++++ _service ++++++ --- /var/tmp/diff_new_pack.YBcexu/_old 2024-03-01 23:34:59.656132763 +0100 +++ /var/tmp/diff_new_pack.YBcexu/_new 2024-03-01 23:34:59.660132907 +0100 @@ -4,7 +4,7 @@ <param name="scm">git</param> <param name="changesgenerate">enable</param> <param name="filename">libiscsi</param> - <param name="versionformat">@PARENT_TAG@+git.%cd</param> + <param name="versionformat">1.20.0+git.%cd</param> </service> <service mode="manual" name="set_version"/> <service name="tar" mode="buildtime"/> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.YBcexu/_old 2024-03-01 23:34:59.676133486 +0100 +++ /var/tmp/diff_new_pack.YBcexu/_new 2024-03-01 23:34:59.680133631 +0100 @@ -3,6 +3,6 @@ <param name="url">[email protected]:sahlberg/libiscsi.git</param> <param name="changesrevision">e6bcdf5fdbf39729399c4f0914661ca1055107a1</param></service><service name="tar_scm"> <param name="url">https://github.com/sahlberg/libiscsi.git</param> - <param name="changesrevision">03e9ddc0a61fa64d84cb4faa4c06b42f694e2301</param></service></servicedata> + <param name="changesrevision">fef688aa99804588c09beb6ef7a3313dc9cf7492</param></service></servicedata> (No newline at EOF) ++++++ baselibs.conf ++++++ --- /var/tmp/diff_new_pack.YBcexu/_old 2024-03-01 23:34:59.696134210 +0100 +++ /var/tmp/diff_new_pack.YBcexu/_new 2024-03-01 23:34:59.700134354 +0100 @@ -1,2 +1,2 @@ -libiscsi9 +libiscsi10 ++++++ libiscsi-1.19.0+git.20231114.obscpio -> libiscsi-1.20.0+git.20240206.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/COPYING new/libiscsi-1.20.0+git.20240206/COPYING --- old/libiscsi-1.19.0+git.20231114/COPYING 2023-11-14 08:50:59.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/COPYING 2024-02-06 00:51:38.000000000 +0100 @@ -15,16 +15,8 @@ This is the licence that applies to the libiscsi library and its use. -src/ld_iscsi.c -============== -This LD_PRELOAD utility is licenced under GNU Lesser General Public License -as published by the Free Software Foundation; either version 2.1 of the -License, or (at your option) any later version. - - - -The src, examples and test-tool directories EXCEPT src/ld_iscsi.c -============================================================= +The src, examples and test-tool directories +=========================================== The utility and example applications using this library, i.e. the src and the examples directories, are licenced under the GNU General Public License as published by the Free Software Foundation; either version 2 of the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/include/utils.h new/libiscsi-1.20.0+git.20240206/include/utils.h --- old/libiscsi-1.19.0+git.20231114/include/utils.h 1970-01-01 01:00:00.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/include/utils.h 2024-02-06 00:51:38.000000000 +0100 @@ -0,0 +1,37 @@ +/* + Utility helper functions. + + Copyright (C) 2023 by zhenwei pi <[email protected]> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef __iscsi_utils_h__ +#define __iscsi_utils_h__ + +#ifdef __cplusplus +extern "C" { +#endif + +struct iscsi_value_string { + int value; + const char *string; +}; + +const char *iscsi_value_string_find(struct iscsi_value_string *values, int value, const char *not_found); + +#ifdef __cplusplus +} +#endif + +#endif /* __iscsi_utils_h__ */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/lib/Makefile.am new/libiscsi-1.20.0+git.20240206/lib/Makefile.am --- old/libiscsi-1.19.0+git.20231114/lib/Makefile.am 2023-11-14 08:50:59.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/lib/Makefile.am 2024-02-06 00:51:38.000000000 +0100 @@ -6,7 +6,7 @@ connect.c crc32c.c discovery.c init.c \ login.c nop.c pdu.c iscsi-command.c \ scsi-lowlevel.c socket.c sync.c task_mgmt.c \ - logging.c + logging.c utils.c if TARGET_OS_IS_WIN32 libiscsipriv_la_SOURCES += ../win32/win32_compat.c @@ -45,7 +45,7 @@ EXTRA_libiscsi_la_DEPENDENCIES = libiscsi.syms -SOCURRENT=9 +SOCURRENT=10 SOREVISON=0 SOAGE=0 libiscsi_la_LDFLAGS = \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/lib/pdu.c new/libiscsi-1.20.0+git.20240206/lib/pdu.c --- old/libiscsi-1.19.0+git.20231114/lib/pdu.c 2023-11-14 08:50:59.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/lib/pdu.c 2024-02-06 00:51:38.000000000 +0100 @@ -48,6 +48,7 @@ #include "iscsi-private.h" #include "scsi-lowlevel.h" #include "slist.h" +#include "utils.h" /* This adds 32-bit serial comparision as defined in RFC1982. * It returns 0 for equality, 1 if s1 is greater than s2 and @@ -78,19 +79,106 @@ return old_itt; } +static const char * +iscsi_opcode_str(int opcode) +{ + static struct iscsi_value_string opcode_strings[] = { + { ISCSI_PDU_NOP_OUT, + "NOP_OUT" }, + { ISCSI_PDU_SCSI_REQUEST, + "SCSI_REQUEST" }, + { ISCSI_PDU_SCSI_TASK_MANAGEMENT_REQUEST, + "SCSI_TASK_MANAGEMENT_REQUEST" }, + { ISCSI_PDU_LOGIN_REQUEST, + "LOGIN_REQUEST" }, + { ISCSI_PDU_TEXT_REQUEST, + "TEXT_REQUEST" }, + { ISCSI_PDU_DATA_OUT, + "DATA_OUT" }, + { ISCSI_PDU_LOGOUT_REQUEST, + "LOGOUT_REQUEST" }, + { ISCSI_PDU_NOP_IN, + "NOP_IN" }, + { ISCSI_PDU_SCSI_RESPONSE, + "SCSI_RESPONSE" }, + { ISCSI_PDU_SCSI_TASK_MANAGEMENT_RESPONSE, + "SCSI_TASK_MANAGEMENT_RESPONSE" }, + { ISCSI_PDU_LOGIN_RESPONSE, + "LOGIN_RESPONSE" }, + { ISCSI_PDU_TEXT_RESPONSE, + "TEXT_RESPONSE" }, + { ISCSI_PDU_DATA_IN, + "DATA_IN" }, + { ISCSI_PDU_LOGOUT_RESPONSE, + "LOGOUT_RESPONSE" }, + { ISCSI_PDU_R2T, + "R2T" }, + { ISCSI_PDU_ASYNC_MSG, + "ASYNC_MSG" }, + { ISCSI_PDU_REJECT, + "REJECT" }, + { ISCSI_PDU_NO_PDU, + "NO_PDU" }, + {0, NULL} + }; + + return iscsi_value_string_find(opcode_strings, opcode, "UNKNOWN"); +} + void iscsi_dump_pdu_header(struct iscsi_context *iscsi, unsigned char *data) { - char dump1[33*3+1]={0}; - char dump2[(ISCSI_RAW_HEADER_SIZE-33)*3+1]={0}; - const char *opcode; - int i; - for (i=0;i<33;i++) { - snprintf(&dump1[i * 3], 4, " %02x", data[i]); - } - opcode = scsi_opcode_str(data[32]); - for (;i<ISCSI_RAW_HEADER_SIZE;i++) { - snprintf(&dump2[(i-33) * 3], 4, " %02x", data[i]); + char output[1024] = { 0 }; + unsigned char iscsi_opcode; + const char *iscsi_opcode_string; + size_t output_off = 0; + int data_off = 0; + + + /* start to dump iSCSI opcode - data[0] */ + iscsi_opcode = data[data_off]; + iscsi_opcode_string = iscsi_opcode_str(iscsi_opcode); + output_off += snprintf(&output[output_off], sizeof(output) - output_off - 1, "%02x[%s]", + iscsi_opcode, iscsi_opcode_string); + data_off++; + + if (iscsi_opcode == ISCSI_PDU_SCSI_REQUEST) { + unsigned char scsi_opcode; + const char *scsi_opcode_string; + + /* the rest iSCSI PDU: data[1] - data[31] */ + for ( ; data_off < 32; data_off++) { + if (sizeof(output) - 1 > output_off) { + output_off += snprintf(&output[output_off], sizeof(output) - output_off - 1, + " %02x", data[data_off]); + } + } + + /* SCSI opcode: data[32] */ + scsi_opcode = data[data_off]; + scsi_opcode_string = scsi_opcode_str(scsi_opcode); + if (sizeof(output) - 1 > output_off) { + output_off += snprintf(&output[output_off], sizeof(output) - output_off - 1, + " %02x[%s]", scsi_opcode, scsi_opcode_string); + data_off++; + } + + /* the rest SCSI PDU: data[33] - data[ISCSI_RAW_HEADER_SIZE - 1] */ + for ( ; data_off < ISCSI_RAW_HEADER_SIZE; data_off++) { + if (sizeof(output) - 1 > output_off) { + output_off += snprintf(&output[output_off], sizeof(output) - output_off - 1, + " %02x", data[data_off]); + } + } + } else { + /* the rest iSCSI PDU: data[1] - data[ISCSI_RAW_HEADER_SIZE - 1] */ + for ( ; data_off < ISCSI_RAW_HEADER_SIZE; data_off++) { + if (sizeof(output) - 1 > output_off) { + output_off += snprintf(&output[output_off], sizeof(output) - output_off - 1, + " %02x", data[data_off]); + } + } } - ISCSI_LOG(iscsi, 2, "PDU header:%s[%s]%s", dump1, opcode, dump2); + + ISCSI_LOG(iscsi, 2, "PDU header: %s", output); } struct iscsi_pdu* @@ -715,6 +803,55 @@ scsi_set_uint32(&pdu->outdata.data[20], expxferlen); } +/* + * A WRITE16 command[w] handles R2T, and queues DATAOUT PDU m,x,y,z: + * + * outqueue->DATAOUT[x]->DATAOUT[y]->DATAOUT[z]... + * outqueue_current->DATAOUT[m] + * waitqueue->WRITE16[w]... + * + * 1, Once x, y, z gets released in initiator side, the target still expects the remaining + * DATAOUT PDUs. + * 2, Once command w timeout and callback to uplayer, uplayers usually releases memory of + * iscsi task(include memory referenced by iovec.iov_base). DATAOUT[m] would access + * invalid memory iovce.iov_base. + */ +static int iscsi_pdu_data_out_inprocess(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) +{ + struct iscsi_pdu *tmp_pdu, *next_pdu; + enum scsi_opcode opcode = pdu->outdata.data[32]; + + /* only care DATA OUT command here */ + if ((pdu->outdata.data[0] & 0x3f) != ISCSI_PDU_SCSI_REQUEST) { + return 0; + } + + switch (opcode) { + case SCSI_OPCODE_WRITE10: + case SCSI_OPCODE_WRITE12: + case SCSI_OPCODE_WRITE16: + break; + default: + return 0; + }; + + /* current outgoing one is part of the PDU? */ + if (iscsi->outqueue_current && (iscsi->outqueue_current->scsi_cbdata.task == pdu->scsi_cbdata.task)) { + return 1; + } + + /* any child DATAOUT PDU in outqueue? */ + for (tmp_pdu = iscsi->outqueue; tmp_pdu; tmp_pdu = next_pdu) { + next_pdu = tmp_pdu->next; + + if (tmp_pdu->scsi_cbdata.task == pdu->scsi_cbdata.task) { + return 1; + } + } + + return 0; +} + void iscsi_timeout_scan(struct iscsi_context *iscsi) { @@ -741,6 +878,8 @@ (pdu->outdata.data[0] & 0x3f) != ISCSI_PDU_DATA_OUT) { iscsi->cmdsn--; cmdsn_gap++; + } else { + continue; } ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu); iscsi_set_error(iscsi, "command timed out from outqueue"); @@ -762,6 +901,9 @@ /* not expired yet */ continue; } + if (iscsi_pdu_data_out_inprocess(iscsi, pdu)) { + continue; + } ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu); iscsi_set_error(iscsi, "command timed out from waitqueue"); iscsi_dump_pdu_header(iscsi, pdu->outdata.data); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/lib/scsi-lowlevel.c new/libiscsi-1.20.0+git.20240206/lib/scsi-lowlevel.c --- old/libiscsi-1.19.0+git.20231114/lib/scsi-lowlevel.c 2023-11-14 08:50:59.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/lib/scsi-lowlevel.c 2024-02-06 00:51:38.000000000 +0100 @@ -56,6 +56,7 @@ #include <errno.h> #include "slist.h" #include "scsi-lowlevel.h" +#include "utils.h" void scsi_task_set_iov_out(struct scsi_task *task, struct scsi_iovec *iov, int niov); @@ -116,26 +117,10 @@ return &mem->buf[0]; } -struct value_string { - int value; - const char *string; -}; - -static const char * -value_string_find(struct value_string *values, int value) -{ - for (; values->string; values++) { - if (value == values->value) { - return values->string; - } - } - return NULL; -} - const char * scsi_sense_key_str(int key) { - static struct value_string keys[] = { + static struct iscsi_value_string keys[] = { {SCSI_SENSE_NO_SENSE, "NO SENSE"}, {SCSI_SENSE_RECOVERED_ERROR, @@ -167,13 +152,13 @@ {0, NULL} }; - return value_string_find(keys, key); + return iscsi_value_string_find(keys, key, "UNKNOWN"); } const char * scsi_sense_ascq_str(int ascq) { - static struct value_string ascqs[] = { + static struct iscsi_value_string ascqs[] = { {SCSI_SENSE_ASCQ_SANITIZE_IN_PROGRESS, "SANITIZE_IN_PROGRESS"}, {SCSI_SENSE_ASCQ_WRITE_AFTER_SANITIZE_REQUIRED, @@ -239,13 +224,13 @@ {0, NULL} }; - return value_string_find(ascqs, ascq); + return iscsi_value_string_find(ascqs, ascq, "UNKNOWN"); } const char * scsi_pr_type_str(enum scsi_persistent_out_type pr_type) { - static struct value_string pr_type_strings[] = { + static struct iscsi_value_string pr_type_strings[] = { {SCSI_PERSISTENT_RESERVE_TYPE_WRITE_EXCLUSIVE, "Write Exclusive"}, {SCSI_PERSISTENT_RESERVE_TYPE_EXCLUSIVE_ACCESS, @@ -261,13 +246,13 @@ {0, NULL} }; - return value_string_find(pr_type_strings, pr_type); + return iscsi_value_string_find(pr_type_strings, pr_type, "UNKNOWN"); } const char * scsi_opcode_str(int opcode) { - static struct value_string opcode_strings[] = { + static struct iscsi_value_string opcode_strings[] = { {SCSI_OPCODE_TESTUNITREADY, "TESTUNITREADY"}, {SCSI_OPCODE_READ6, @@ -361,7 +346,7 @@ {0, NULL} }; - return value_string_find(opcode_strings, opcode); + return iscsi_value_string_find(opcode_strings, opcode, "UNKNOWN"); } uint64_t diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/lib/utils.c new/libiscsi-1.20.0+git.20240206/lib/utils.c --- old/libiscsi-1.19.0+git.20231114/lib/utils.c 1970-01-01 01:00:00.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/lib/utils.c 2024-02-06 00:51:38.000000000 +0100 @@ -0,0 +1,35 @@ +/* + Utility helper functions. + + Copyright (C) 2023 by zhenwei pi <[email protected]> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "utils.h" + +const char *iscsi_value_string_find(struct iscsi_value_string *values, + int value, const char *not_found) +{ + for ( ; values->string; values++) { + if (value == values->value) { + return values->string; + } + } + + return not_found; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/packaging/RPM/libiscsi.spec.in new/libiscsi-1.20.0+git.20240206/packaging/RPM/libiscsi.spec.in --- old/libiscsi-1.19.0+git.20231114/packaging/RPM/libiscsi.spec.in 2023-11-14 08:50:59.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/packaging/RPM/libiscsi.spec.in 2024-02-06 00:51:38.000000000 +0100 @@ -1,6 +1,6 @@ Name: libiscsi Summary: iSCSI client library -Version: 1.19.0 +Version: 1.20.0 Release: 1GITHASH%{?dist} License: LGPLv2+ Group: System Environment/Libraries @@ -109,6 +109,8 @@ %changelog +* Mon Feb 5 2024 : 1.20.0 + - Various updates to the test tool * Sun Jul 14 2019 : 1.19.0 - iSER improvements - Add support to senable/disable digests via URL arguments @@ -229,7 +231,7 @@ - Change all default iqn names so they are valid iqn names. * Mon Jul 9 2012 : 1.5.0 - Make sure we can handle racy eventsystems which might call us for - POLLIN eventhough there is no longer any data to read from the socket. + POLLIN even though there is no longer any data to read from the socket. - Only set up tcp keepalives on systems that support them. - Only export symbols we really want to make public - FreeBSD and Illumos does not define SOL_TCP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/test-tool/iscsi-support.c new/libiscsi-1.20.0+git.20240206/test-tool/iscsi-support.c --- old/libiscsi-1.19.0+git.20231114/test-tool/iscsi-support.c 2023-11-14 08:50:59.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/test-tool/iscsi-support.c 2024-02-06 00:51:38.000000000 +0100 @@ -202,7 +202,7 @@ } if (status == SCSI_STATUS_GOOD && task->status != SCSI_STATUS_GOOD) { logging(LOG_NORMAL, - "[FAILED] %s command failed with status %d / sense key %s(0x%02x) / ASCQ %s(0x%04x)", + "[FAILED] %s command failed with status 0x%x / sense key %s(0x%02x) / ASCQ %s(0x%04x)", opcode, task->status, scsi_sense_key_str(task->sense.key), task->sense.key, scsi_sense_ascq_str(task->sense.ascq), task->sense.ascq); @@ -2735,7 +2735,7 @@ logging(LOG_VERBOSE, "[SUCCESS] CONTROL page fetched."); ms = scsi_datain_unmarshall(sense_task); - if (ms == NULL) { + if (ms == NULL || ms->pages == NULL) { logging(LOG_NORMAL, "failed to unmarshall mode sense datain " "blob"); ret = -1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/test-tool/test_compareandwrite_miscompare.c new/libiscsi-1.20.0+git.20240206/test-tool/test_compareandwrite_miscompare.c --- old/libiscsi-1.19.0+git.20231114/test-tool/test_compareandwrite_miscompare.c 2023-11-14 08:50:59.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/test-tool/test_compareandwrite_miscompare.c 2024-02-06 00:51:38.000000000 +0100 @@ -95,7 +95,7 @@ for (j = 0; j < i * block_size; j++) { if (scratch[j] != 'A') { logging(LOG_VERBOSE, "[FAILED] Data changed " - "eventhough there was a miscompare"); + "even though there was a miscompare"); CU_FAIL("Block was written to"); return; } @@ -151,7 +151,7 @@ for (j = 0; j < i * block_size; j++) { if (scratch[j] != 'A') { logging(LOG_VERBOSE, "[FAILED] Data changed " - "eventhough there was a miscompare"); + "even though there was a miscompare"); CU_FAIL("Block was written to"); return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/test-tool/test_sanitize_block_erase.c new/libiscsi-1.20.0+git.20240206/test-tool/test_sanitize_block_erase.c --- old/libiscsi-1.19.0+git.20231114/test-tool/test_sanitize_block_erase.c 2023-11-14 08:50:59.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/test-tool/test_sanitize_block_erase.c 2024-02-06 00:51:38.000000000 +0100 @@ -161,7 +161,7 @@ lbas->descriptors[i].lba + lbas->descriptors[i].num_blocks); if (lbas->descriptors[i].provisioning == SCSI_PROVISIONING_TYPE_MAPPED) { logging(LOG_VERBOSE, "[FAILED] Descriptor %d is MAPPED." - "All descriptors shoudl be either DEALLOCATED " + "All descriptors should be either DEALLOCATED " "or ANCHORED after SANITIZE", i); CU_FAIL("[FAILED] LBA status descriptor is MAPPED."); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/test-tool/test_sanitize_reset.c new/libiscsi-1.20.0+git.20240206/test-tool/test_sanitize_reset.c --- old/libiscsi-1.19.0+git.20231114/test-tool/test_sanitize_reset.c 2023-11-14 08:50:59.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/test-tool/test_sanitize_reset.c 2024-02-06 00:51:38.000000000 +0100 @@ -58,7 +58,7 @@ return; } - logging(LOG_VERBOSE, "Send an asyncronous SANITIZE to the target."); + logging(LOG_VERBOSE, "Send an asynchronous SANITIZE to the target."); data.size = block_size + 4; data.data = alloca(data.size); memset(&data.data[4], 0, block_size); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/utils/iscsi-perf.c new/libiscsi-1.20.0+git.20240206/utils/iscsi-perf.c --- old/libiscsi-1.19.0+git.20231114/utils/iscsi-perf.c 2023-11-14 08:50:59.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/utils/iscsi-perf.c 2024-02-06 00:51:38.000000000 +0100 @@ -151,7 +151,7 @@ if (status == SCSI_STATUS_BUSY || (status == SCSI_STATUS_CHECK_CONDITION && task->sense.key == SCSI_SENSE_UNIT_ATTENTION)) { if (client->retry_cnt++ > 4 * max_in_flight) { - fprintf(stderr, "maxium number of command retries reached...\n"); + fprintf(stderr, "maximum number of command retries reached...\n"); client->err_cnt++; goto out; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libiscsi-1.19.0+git.20231114/utils/iscsi-pr.c new/libiscsi-1.20.0+git.20240206/utils/iscsi-pr.c --- old/libiscsi-1.19.0+git.20231114/utils/iscsi-pr.c 2023-11-14 08:50:59.000000000 +0100 +++ new/libiscsi-1.20.0+git.20240206/utils/iscsi-pr.c 2024-02-06 00:51:38.000000000 +0100 @@ -236,7 +236,7 @@ fprintf(stderr, " -S, --param-sark=SARK PR Out: parameter service action reservation key (SARK is in hex)\n"); fprintf(stderr, " -T, --prout-type=TYPE PR Out: type field\n"); fprintf(stderr, " -G, --register PR Out: Register\n"); - fprintf(stderr, " -R, --reserve PR Out: Reserve, SARK only(register sark implicity)\n"); + fprintf(stderr, " -R, --reserve PR Out: Reserve, SARK only(register sark implicitly)\n"); fprintf(stderr, " -L, --release PR Out: Release, SARK only. This program releases TYPE 7 and TYPE 8 only\n"); fprintf(stderr, " -C, --clear PR Out: Clear, SARK only\n"); fprintf(stderr, " -P, --preempt PR Out: Preempt, use SARK to preempt reservation from RK\n"); ++++++ libiscsi.obsinfo ++++++ --- /var/tmp/diff_new_pack.YBcexu/_old 2024-03-01 23:34:59.948143323 +0100 +++ /var/tmp/diff_new_pack.YBcexu/_new 2024-03-01 23:34:59.952143468 +0100 @@ -1,5 +1,5 @@ name: libiscsi -version: 1.19.0+git.20231114 -mtime: 1699948259 -commit: 03e9ddc0a61fa64d84cb4faa4c06b42f694e2301 +version: 1.20.0+git.20240206 +mtime: 1707177098 +commit: fef688aa99804588c09beb6ef7a3313dc9cf7492
