Hello community,

here is the log from the commit of package libiscsi for openSUSE:Factory 
checked in at 2020-08-15 21:18:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libiscsi (Old)
 and      /work/SRC/openSUSE:Factory/.libiscsi.new.3399 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libiscsi"

Sat Aug 15 21:18:38 2020 rev:14 rq:826266 version:1.19.0+git.20200812

Changes:
--------
--- /work/SRC/openSUSE:Factory/libiscsi/libiscsi.changes        2020-05-29 
21:13:40.226387096 +0200
+++ /work/SRC/openSUSE:Factory/.libiscsi.new.3399/libiscsi.changes      
2020-08-15 21:19:00.731576485 +0200
@@ -1,0 +2,18 @@
+Thu Aug 13 11:36:17 UTC 2020 - Martin Pluskal <mplus...@suse.com>
+
+- Update to version 1.19.0+git.20200812:
+  * .travis.yml: Also build for the ppc64le architecture
+  * iscsi-ls: Fix iser url scheme parsing
+  * test-tool: Use block_size instead of hardcoded 512 bytes
+  * examples/iscsi-dd: use common init function for src and dst endpoints
+  * examples/iscsi-dd: use common iscsi_endpoint struct
+  * iscsi-perf: Add explicit casts to avoid two warnings
+  * socket: Make the pdu timeout handling aware of old iscsi context
+  * libiscsi: Make the cancellation aware of the pdus in old iscsi context
+  * pdu: Remove the checking for iscsi->is_loggedin in iscsi_cancel_pdus()
+  * libiscsi: Avoid discontinuities in cmdsn ordering in some cases
+  * test-tool: Use block_size instead of hardcoded 512 bytes
+  * exclude ld_iscsi.so from RPM
+  * include iser-private.h in make dist tarball
+
+-------------------------------------------------------------------

Old:
----
  libiscsi-1.19.0+git.20200521.obscpio

New:
----
  libiscsi-1.19.0+git.20200812.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libiscsi.spec ++++++
--- /var/tmp/diff_new_pack.1KEJck/_old  2020-08-15 21:19:01.675577024 +0200
+++ /var/tmp/diff_new_pack.1KEJck/_new  2020-08-15 21:19:01.679577027 +0200
@@ -18,7 +18,7 @@
 
 %define         sover 9
 Name:           libiscsi
-Version:        1.19.0+git.20200521
+Version:        1.19.0+git.20200812
 Release:        0
 Summary:        iSCSI client library and utilities
 License:        GPL-2.0-only AND LGPL-2.1-only

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.1KEJck/_old  2020-08-15 21:19:01.723577051 +0200
+++ /var/tmp/diff_new_pack.1KEJck/_new  2020-08-15 21:19:01.723577051 +0200
@@ -3,4 +3,4 @@
                 <param name="url">g...@github.com: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">33c66f2c39a01b4e109270ffcc83e2e2daf73ecb</param></service></servicedata>
\ No newline at end of file
+              <param 
name="changesrevision">e9cefe7e421b19f9b984ff3fc8e76856cb439d14</param></service></servicedata>
\ No newline at end of file

++++++ libiscsi-1.19.0+git.20200521.obscpio -> 
libiscsi-1.19.0+git.20200812.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libiscsi-1.19.0+git.20200521/.travis.yml 
new/libiscsi-1.19.0+git.20200812/.travis.yml
--- old/libiscsi-1.19.0+git.20200521/.travis.yml        2020-05-22 
03:39:49.000000000 +0200
+++ new/libiscsi-1.19.0+git.20200812/.travis.yml        2020-08-13 
05:07:10.000000000 +0200
@@ -4,6 +4,10 @@
   - linux
   - osx
 
+arch:
+  - amd64
+  - ppc64le
+
 addons:
   apt:
     packages:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libiscsi-1.19.0+git.20200521/Makefile.am 
new/libiscsi-1.19.0+git.20200812/Makefile.am
--- old/libiscsi-1.19.0+git.20200521/Makefile.am        2020-05-22 
03:39:49.000000000 +0200
+++ new/libiscsi-1.19.0+git.20200812/Makefile.am        2020-08-13 
05:07:10.000000000 +0200
@@ -29,5 +29,6 @@
 
 iscsi_includedir = $(includedir)/iscsi
 dist_iscsi_include_HEADERS = include/iscsi.h include/scsi-lowlevel.h
-dist_noinst_HEADERS = include/iscsi-private.h include/md5.h include/slist.h
+dist_noinst_HEADERS = include/iscsi-private.h include/md5.h include/slist.h \
+                     include/iser-private.h
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libiscsi-1.19.0+git.20200521/examples/iscsi-dd.c 
new/libiscsi-1.19.0+git.20200812/examples/iscsi-dd.c
--- old/libiscsi-1.19.0+git.20200521/examples/iscsi-dd.c        2020-05-22 
03:39:49.000000000 +0200
+++ new/libiscsi-1.19.0+git.20200812/examples/iscsi-dd.c        2020-08-13 
05:07:10.000000000 +0200
@@ -32,22 +32,23 @@
 uint32_t max_in_flight = 50;
 uint32_t blocks_per_io = 200;
 
+struct iscsi_endpoint {
+       struct iscsi_context *iscsi;
+       int lun;
+       int blocksize;
+       uint64_t num_blocks;
+       struct scsi_inquiry_device_designator tgt_desig;
+};
+
 struct client {
        int finished;
        uint32_t in_flight;
 
-       struct iscsi_context *src_iscsi;
-       int src_lun;
-       int src_blocksize;
-       uint64_t src_num_blocks;
-       struct scsi_inquiry_device_designator src_tgt_desig;
+       struct iscsi_endpoint src;
+       struct iscsi_endpoint dst;
+
        uint64_t pos;
 
-       struct iscsi_context *dst_iscsi;
-       int dst_lun;
-       int dst_blocksize;
-       uint64_t dst_num_blocks;
-       struct scsi_inquiry_device_designator dst_tgt_desig;
        int use_16_for_rw;
        int use_xcopy;
        int progress;
@@ -87,10 +88,10 @@
        fill_read_queue(client);
 
        if (client->progress) {
-               printf("\r%"PRIu64" of %"PRIu64" blocks transferred.", 
client->pos, client->src_num_blocks);
+               printf("\r%"PRIu64" of %"PRIu64" blocks transferred.", 
client->pos, client->src.num_blocks);
        }
 
-       if ((client->in_flight == 0) && (client->pos == 
client->src_num_blocks)) {
+       if ((client->in_flight == 0) && (client->pos == 
client->src.num_blocks)) {
                client->finished = 1;
                if (client->progress) {
                        printf("\n");
@@ -134,20 +135,20 @@
                        printf("Failed to unmarshall READ16 CDB.\n");
                        exit(10);
                }
-               task2 = iscsi_write16_task(client->dst_iscsi, client->dst_lun,
-                                                                       
read16_cdb->lba, task->datain.data, task->datain.size,
-                                                                       
client->dst_blocksize, 0, 0, 0, 0, 0,
-                                                                       
write_cb, wt);
+               task2 = iscsi_write16_task(client->dst.iscsi, client->dst.lun,
+                                          read16_cdb->lba, task->datain.data, 
task->datain.size,
+                                          client->dst.blocksize, 0, 0, 0, 0, 0,
+                                          write_cb, wt);
        } else {
                read10_cdb = scsi_cdb_unmarshall(task, SCSI_OPCODE_READ10);
                if (read10_cdb == NULL) {
                        printf("Failed to unmarshall READ16 CDB.\n");
                        exit(10);
                }
-               task2 = iscsi_write10_task(client->dst_iscsi, client->dst_lun,
-                                                                       
read10_cdb->lba, task->datain.data, task->datain.size,
-                                                                       
client->dst_blocksize, 0, 0, 0, 0, 0,
-                                                                       
write_cb, wt);
+               task2 = iscsi_write10_task(client->dst.iscsi, client->dst.lun,
+                                          read10_cdb->lba, task->datain.data, 
task->datain.size,
+                                          client->dst.blocksize, 0, 0, 0, 0, 0,
+                                          write_cb, wt);
        }
        if (task2 == NULL) {
                printf("failed to send read16 command\n");
@@ -161,27 +162,27 @@
 {
        uint32_t num_blocks;
 
-       while(client->in_flight < max_in_flight && client->pos < 
client->src_num_blocks) {
+       while(client->in_flight < max_in_flight && client->pos < 
client->src.num_blocks) {
                struct scsi_task *task;
                client->in_flight++;
 
-               num_blocks = client->src_num_blocks - client->pos;
+               num_blocks = client->src.num_blocks - client->pos;
                if (num_blocks > blocks_per_io) {
                        num_blocks = blocks_per_io;
                }
 
                if (client->use_16_for_rw) {
-                       task = iscsi_read16_task(client->src_iscsi,
-                                                                       
client->src_lun, client->pos,
-                                                                       
num_blocks * client->src_blocksize,
-                                                                       
client->src_blocksize, 0, 0, 0, 0, 0,
-                                                                       
read_cb, client);
+                       task = iscsi_read16_task(client->src.iscsi,
+                                                client->src.lun, client->pos,
+                                                num_blocks * 
client->src.blocksize,
+                                                client->src.blocksize, 0, 0, 
0, 0, 0,
+                                                read_cb, client);
                } else {
-                       task = iscsi_read10_task(client->src_iscsi,
-                                                                       
client->src_lun, client->pos,
-                                                                       
num_blocks * client->src_blocksize,
-                                                                       
client->src_blocksize, 0, 0, 0, 0, 0,
-                                                                       
read_cb, client);
+                       task = iscsi_read10_task(client->src.iscsi,
+                                                client->src.lun, client->pos,
+                                                num_blocks * 
client->src.blocksize,
+                                                client->src.blocksize, 0, 0, 
0, 0, 0,
+                                                read_cb, client);
                }
                if (task == NULL) {
                        printf("failed to send read10/16 command\n");
@@ -300,10 +301,10 @@
 
        if (client->progress) {
                printf("\r%"PRIu64" of %"PRIu64" blocks transferred.",
-                       client->pos, client->src_num_blocks);
+                       client->pos, client->src.num_blocks);
        }
 
-       if ((client->in_flight == 0) && (client->pos == 
client->src_num_blocks)) {
+       if ((client->in_flight == 0) && (client->pos == 
client->src.num_blocks)) {
                client->finished = 1;
                if (client->progress) {
                        printf("\n");
@@ -314,7 +315,7 @@
 
 void fill_xcopy_queue(struct client *client)
 {
-       while (client->in_flight < max_in_flight && client->pos < 
client->src_num_blocks) {
+       while (client->in_flight < max_in_flight && client->pos < 
client->src.num_blocks) {
                struct scsi_task *task;
                struct iscsi_data data;
                unsigned char *xcopybuf;
@@ -325,7 +326,7 @@
 
                client->in_flight++;
 
-               num_blocks = client->src_num_blocks - client->pos;
+               num_blocks = client->src.num_blocks - client->pos;
                if (num_blocks > blocks_per_io) {
                        num_blocks = blocks_per_io;
                }
@@ -345,11 +346,11 @@
                /* Initialise CSCD list with one src + one dst descriptor */
                offset = XCOPY_DESC_OFFSET;
                offset += populate_tgt_desc(xcopybuf + offset,
-                                       &client->src_tgt_desig,
-                                       0, client->src_blocksize);
+                                       &client->src.tgt_desig,
+                                       0, client->src.blocksize);
                offset += populate_tgt_desc(xcopybuf + offset,
-                                       &client->dst_tgt_desig,
-                                       0, client->dst_blocksize);
+                                       &client->dst.tgt_desig,
+                                       0, client->dst.blocksize);
                tgt_desc_len = offset - XCOPY_DESC_OFFSET;
 
                /* Initialise one segment descriptor */
@@ -361,8 +362,8 @@
                populate_param_header(xcopybuf, 1, 0, LIST_ID_USAGE_DISCARD, 0,
                                tgt_desc_len, seg_desc_len, 0);
 
-               task = iscsi_extended_copy_task(client->src_iscsi,
-                                               client->src_lun,
+               task = iscsi_extended_copy_task(client->src.iscsi,
+                                               client->src.lun,
                                                &data, xcopy_cb, client);
                if (task == NULL) {
                        printf("failed to send XCOPY command\n");
@@ -561,11 +562,59 @@
           " %g%c/s.\n", num_blocks, block_size, elapsed, ubytes_per_sec, u[i]);
 }
 
+static void iscsi_endpoint_init(const char *url,
+                               const char *usage,
+                               int use_16_for_rw,
+                               int use_xcopy,
+                               struct iscsi_endpoint *endpoint)
+{
+       struct iscsi_url *iscsi_url;
+
+       if (url == NULL) {
+               fprintf(stderr, "You must specify a %s url\n"
+                       "  --%s iscsi://<host>[:<port>]/<target-iqn>/<lun>\n",
+                       usage, usage);
+               usage_exit(10);
+       }
+
+       endpoint->iscsi = iscsi_create_context(initiator);
+       if (endpoint->iscsi == NULL) {
+               fprintf(stderr, "Failed to create context\n");
+               exit(10);
+       }
+       iscsi_url = iscsi_parse_full_url(endpoint->iscsi, url);
+       if (iscsi_url == NULL) {
+               fprintf(stderr, "Failed to parse URL: %s\n",
+                       iscsi_get_error(endpoint->iscsi));
+               iscsi_destroy_context(endpoint->iscsi);
+               exit(10);
+       }
+       iscsi_set_session_type(endpoint->iscsi, ISCSI_SESSION_NORMAL);
+       iscsi_set_header_digest(endpoint->iscsi, 
ISCSI_HEADER_DIGEST_NONE_CRC32C);
+       if (iscsi_full_connect_sync(endpoint->iscsi, iscsi_url->portal, 
iscsi_url->lun) != 0) {
+               fprintf(stderr, "Login Failed. %s\n", 
iscsi_get_error(endpoint->iscsi));
+               iscsi_destroy_url(iscsi_url);
+               iscsi_destroy_context(endpoint->iscsi);
+               exit(10);
+       }
+       endpoint->lun = iscsi_url->lun;
+       iscsi_destroy_url(iscsi_url);
+
+       readcap(endpoint->iscsi, endpoint->lun, use_16_for_rw,
+               &endpoint->blocksize, &endpoint->num_blocks);
+
+       if (use_xcopy) {
+               cscd_ident_inq(endpoint->iscsi, endpoint->lun,
+                               &endpoint->tgt_desig);
+               cscd_param_check(endpoint->iscsi, endpoint->lun,
+                                endpoint->blocksize);
+       }
+}
+
 int main(int argc, char *argv[])
 {
        char *src_url = NULL;
        char *dst_url = NULL;
-       struct iscsi_url *iscsi_url;
        int c;
        struct pollfd pfd[2];
        struct client client;
@@ -640,88 +689,18 @@
                }
        }
 
-       if (src_url == NULL) {
-               fprintf(stderr, "You must specify source url\n"
-                       "  --src iscsi://<host>[:<port>]/<target-iqn>/<lun>\n");
-               usage_exit(10);
-       }
-       if (dst_url == NULL) {
-               fprintf(stderr, "You must specify destination url\n"
-                       "  --dst iscsi://<host>[:<port>]/<target-iqn>/<lun>\n");
-               usage_exit(10);
-       }
-
-       client.src_iscsi = iscsi_create_context(initiator);
-       if (client.src_iscsi == NULL) {
-               fprintf(stderr, "Failed to create context\n");
-               exit(10);
-       }
-       iscsi_url = iscsi_parse_full_url(client.src_iscsi, src_url);
-       if (iscsi_url == NULL) {
-               fprintf(stderr, "Failed to parse URL: %s\n",
-                       iscsi_get_error(client.src_iscsi));
-               exit(10);
-       }
-       iscsi_set_session_type(client.src_iscsi, ISCSI_SESSION_NORMAL);
-       iscsi_set_header_digest(client.src_iscsi, 
ISCSI_HEADER_DIGEST_NONE_CRC32C);
-       if (iscsi_full_connect_sync(client.src_iscsi, iscsi_url->portal, 
iscsi_url->lun) != 0) {
-               fprintf(stderr, "Login Failed. %s\n", 
iscsi_get_error(client.src_iscsi));
-               iscsi_destroy_url(iscsi_url);
-               iscsi_destroy_context(client.src_iscsi);
-               exit(10);
-       }
-       client.src_lun = iscsi_url->lun;
-       iscsi_destroy_url(iscsi_url);
-
-       readcap(client.src_iscsi, client.src_lun, client.use_16_for_rw,
-               &client.src_blocksize, &client.src_num_blocks);
-
-       if (client.use_xcopy) {
-               cscd_ident_inq(client.src_iscsi, client.src_lun,
-                               &client.src_tgt_desig);
-               cscd_param_check(client.src_iscsi, client.src_lun,
-                                client.src_blocksize);
-       }
-
-       client.dst_iscsi = iscsi_create_context(initiator);
-       if (client.dst_iscsi == NULL) {
-               fprintf(stderr, "Failed to create context\n");
-               exit(10);
-       }
-       iscsi_url = iscsi_parse_full_url(client.dst_iscsi, dst_url);
-       if (iscsi_url == NULL) {
-               fprintf(stderr, "Failed to parse URL: %s\n",
-                       iscsi_get_error(client.dst_iscsi));
-               exit(10);
-       }
-       iscsi_set_session_type(client.dst_iscsi, ISCSI_SESSION_NORMAL);
-       iscsi_set_header_digest(client.dst_iscsi, 
ISCSI_HEADER_DIGEST_NONE_CRC32C);
-       if (iscsi_full_connect_sync(client.dst_iscsi, iscsi_url->portal, 
iscsi_url->lun) != 0) {
-               fprintf(stderr, "Login Failed. %s\n", 
iscsi_get_error(client.dst_iscsi));
-               iscsi_destroy_url(iscsi_url);
-               iscsi_destroy_context(client.dst_iscsi);
-               exit(10);
-       }
-       client.dst_lun = iscsi_url->lun;
-       iscsi_destroy_url(iscsi_url);
-
-       readcap(client.dst_iscsi, client.dst_lun, client.use_16_for_rw,
-               &client.dst_blocksize, &client.dst_num_blocks);
-
-       if (client.use_xcopy) {
-               cscd_ident_inq(client.dst_iscsi, client.dst_lun,
-                               &client.dst_tgt_desig);
-               cscd_param_check(client.dst_iscsi, client.dst_lun,
-                                client.dst_blocksize);
-       }
+       iscsi_endpoint_init(src_url, "src", client.use_16_for_rw,
+                           client.use_xcopy, &client.src);
+       iscsi_endpoint_init(dst_url, "dst", client.use_16_for_rw,
+                           client.use_xcopy, &client.dst);
 
-       if (client.src_blocksize != client.dst_blocksize) {
-               fprintf(stderr, "source LUN has different blocksize than 
destination than destination (%d != %d sectors)\n", client.src_blocksize, 
client.dst_blocksize);
+       if (client.src.blocksize != client.dst.blocksize) {
+               fprintf(stderr, "source LUN has different blocksize than 
destination than destination (%d != %d sectors)\n", client.src.blocksize, 
client.dst.blocksize);
                exit(10);
        }
 
-       if (client.src_num_blocks > client.dst_num_blocks) {
-               fprintf(stderr, "source LUN is bigger than destination 
(%"PRIu64" > %"PRIu64" sectors)\n", client.src_num_blocks, 
client.dst_num_blocks);
+       if (client.src.num_blocks > client.dst.num_blocks) {
+               fprintf(stderr, "source LUN is bigger than destination 
(%"PRIu64" > %"PRIu64" sectors)\n", client.src.num_blocks, 
client.dst.num_blocks);
                exit(10);
        }
 
@@ -737,10 +716,10 @@
        }
 
        while (client.finished == 0) {
-               pfd[0].fd = iscsi_get_fd(client.src_iscsi);
-               pfd[0].events = iscsi_which_events(client.src_iscsi);
-               pfd[1].fd = iscsi_get_fd(client.dst_iscsi);
-               pfd[1].events = iscsi_which_events(client.dst_iscsi);
+               pfd[0].fd = iscsi_get_fd(client.src.iscsi);
+               pfd[0].events = iscsi_which_events(client.src.iscsi);
+               pfd[1].fd = iscsi_get_fd(client.dst.iscsi);
+               pfd[1].events = iscsi_which_events(client.dst.iscsi);
 
                if (!pfd[0].events && !pfd[1].events) {
                        sleep(1);
@@ -751,12 +730,12 @@
                        printf("Poll failed");
                        exit(10);
                }
-               if (iscsi_service(client.src_iscsi, pfd[0].revents) < 0) {
-                       printf("iscsi_service failed with : %s\n", 
iscsi_get_error(client.src_iscsi));
+               if (iscsi_service(client.src.iscsi, pfd[0].revents) < 0) {
+                       printf("iscsi_service failed with : %s\n", 
iscsi_get_error(client.src.iscsi));
                        break;
                }
-               if (iscsi_service(client.dst_iscsi, pfd[1].revents) < 0) {
-                       printf("iscsi_service failed with : %s\n", 
iscsi_get_error(client.dst_iscsi));
+               if (iscsi_service(client.dst.iscsi, pfd[1].revents) < 0) {
+                       printf("iscsi_service failed with : %s\n", 
iscsi_get_error(client.dst.iscsi));
                        break;
                }
        }
@@ -766,14 +745,14 @@
                gettime_ret = clock_gettime(CLOCK_MONOTONIC, &end_time);
                if (gettime_ret == 0) {
                        show_perf(&start_time, &end_time, client.pos,
-                                 client.src_blocksize);
+                                 client.src.blocksize);
                }
        }
 
-       iscsi_logout_sync(client.src_iscsi);
-       iscsi_destroy_context(client.src_iscsi);
-       iscsi_logout_sync(client.dst_iscsi);
-       iscsi_destroy_context(client.dst_iscsi);
+       iscsi_logout_sync(client.src.iscsi);
+       iscsi_destroy_context(client.src.iscsi);
+       iscsi_logout_sync(client.dst.iscsi);
+       iscsi_destroy_context(client.dst.iscsi);
 
        return 0;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libiscsi-1.19.0+git.20200521/lib/iscsi-command.c 
new/libiscsi-1.19.0+git.20200812/lib/iscsi-command.c
--- old/libiscsi-1.19.0+git.20200521/lib/iscsi-command.c        2020-05-22 
03:39:49.000000000 +0200
+++ new/libiscsi-1.19.0+git.20200812/lib/iscsi-command.c        2020-08-13 
05:07:10.000000000 +0200
@@ -271,7 +271,7 @@
        iscsi_pdu_set_expxferlen(pdu, task->expxferlen);
 
        /* cmdsn */
-       iscsi_pdu_set_cmdsn(pdu, iscsi->cmdsn++);
+       iscsi_pdu_set_cmdsn(pdu, iscsi->cmdsn);
 
        /* cdb */
        iscsi_pdu_set_cdb(pdu, task);
@@ -285,6 +285,7 @@
                iscsi->drv->free_pdu(iscsi, pdu);
                return -1;
        }
+       iscsi->cmdsn++;
 
        /* The F flag is not set. This means we haven't sent all the unsolicited
         * data yet. Sent as much as we are allowed as a train of DATA-OUT PDUs.
@@ -2667,6 +2668,9 @@
                       struct scsi_task *task)
 {
        struct iscsi_pdu *pdu;
+       struct iscsi_pdu *next_pdu;
+       uint32_t cmdsn_gap = 0;
+       int ret = -1;
 
        for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) {
                if (pdu->itt == task->itt) {
@@ -2679,22 +2683,45 @@
                        return 0;
                }
        }
-       for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) {
+       for (pdu = iscsi->outqueue; pdu; pdu = next_pdu) {
+               next_pdu = pdu->next;
+
+               if (cmdsn_gap > 0) {
+                       iscsi_pdu_set_cmdsn(pdu, pdu->cmdsn - cmdsn_gap);
+               }
+
                if (pdu->itt == task->itt) {
                        ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu);
                        if (pdu->callback) {
                                pdu->callback(iscsi, SCSI_STATUS_CANCELLED, 
NULL,
                                      pdu->private_data);
                        }
+                       if (!(pdu->outdata.data[0] & ISCSI_PDU_IMMEDIATE) &&
+                           (pdu->outdata.data[0] & 0x3f) != 
ISCSI_PDU_DATA_OUT) {
+                               iscsi->cmdsn--;
+                               cmdsn_gap++;
+                       }
                        iscsi->drv->free_pdu(iscsi, pdu);
-                       return 0;
+                       ret = 0;
+                       if (!cmdsn_gap) {
+                               break;
+                       }
                }
        }
-       return -1;
+
+       if (iscsi->old_iscsi) {
+               return iscsi_scsi_cancel_task(iscsi->old_iscsi, task);
+       }
+
+       return ret;
 }
 
 void
 iscsi_scsi_cancel_all_tasks(struct iscsi_context *iscsi)
 {
        iscsi_cancel_pdus(iscsi);
+
+       if (iscsi->old_iscsi) {
+               iscsi_cancel_pdus(iscsi->old_iscsi);
+       }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libiscsi-1.19.0+git.20200521/lib/nop.c 
new/libiscsi-1.19.0+git.20200812/lib/nop.c
--- old/libiscsi-1.19.0+git.20200521/lib/nop.c  2020-05-22 03:39:49.000000000 
+0200
+++ new/libiscsi-1.19.0+git.20200812/lib/nop.c  2020-08-13 05:07:10.000000000 
+0200
@@ -64,7 +64,7 @@
        iscsi_pdu_set_lun(pdu, 0);
 
        /* cmdsn */
-       iscsi_pdu_set_cmdsn(pdu, iscsi->cmdsn++);
+       iscsi_pdu_set_cmdsn(pdu, iscsi->cmdsn);
 
        pdu->callback     = cb;
        pdu->private_data = private_data;
@@ -83,6 +83,7 @@
                return -1;
        }
 
+       iscsi->cmdsn++;
        iscsi->nops_in_flight++;
        ISCSI_LOG(iscsi, (iscsi->nops_in_flight > 1) ? 1 : 6,
                  "NOP Out Send (nops_in_flight: %d, pdu->cmdsn %08x, pdu->itt 
%08x, pdu->ttt %08x, iscsi->maxcmdsn %08x, iscsi->expcmdsn %08x)",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libiscsi-1.19.0+git.20200521/lib/pdu.c 
new/libiscsi-1.19.0+git.20200812/lib/pdu.c
--- old/libiscsi-1.19.0+git.20200521/lib/pdu.c  2020-05-22 03:39:49.000000000 
+0200
+++ new/libiscsi-1.19.0+git.20200812/lib/pdu.c  2020-08-13 05:07:10.000000000 
+0200
@@ -719,10 +719,14 @@
        struct iscsi_pdu *pdu;
        struct iscsi_pdu *next_pdu;
        time_t t = time(NULL);
+       uint32_t cmdsn_gap = 0;
 
        for (pdu = iscsi->outqueue; pdu; pdu = next_pdu) {
                next_pdu = pdu->next;
 
+                if (cmdsn_gap > 0) {
+                       iscsi_pdu_set_cmdsn(pdu, pdu->cmdsn - cmdsn_gap);
+                }
                if (pdu->scsi_timeout == 0) {
                        /* no timeout for this pdu */
                        continue;
@@ -731,6 +735,11 @@
                        /* not expired yet */
                        continue;
                }
+               if (!(pdu->outdata.data[0] & ISCSI_PDU_IMMEDIATE) &&
+                   (pdu->outdata.data[0] & 0x3f) != ISCSI_PDU_DATA_OUT) {
+                       iscsi->cmdsn--;
+                       cmdsn_gap++;
+               }
                ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu);
                iscsi_set_error(iscsi, "command timed out");
                iscsi_dump_pdu_header(iscsi, pdu->outdata.data);
@@ -775,21 +784,21 @@
 
        while ((pdu = iscsi->outqueue)) {
                ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu);
-               if (iscsi->is_loggedin && pdu->callback) {
-                       /* If an error happened during connect/login,
-                          we don't want to call any of the callbacks.
-                       */
+               if (pdu->callback) {
                        pdu->callback(iscsi, SCSI_STATUS_CANCELLED,
                                      NULL, pdu->private_data);
                }
                iscsi->drv->free_pdu(iscsi, pdu);
+               if (!(pdu->outdata.data[0] & ISCSI_PDU_IMMEDIATE) &&
+                   (pdu->outdata.data[0] & 0x3f) != ISCSI_PDU_DATA_OUT) {
+                       iscsi->cmdsn--;
+               }
+
+
        }
        while ((pdu = iscsi->waitpdu)) {
                ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu);
-               if (iscsi->is_loggedin && pdu->callback) {
-                       /* If an error happened during connect/login,
-                          we don't want to call any of the callbacks.
-                       */
+               if (pdu->callback) {
                        pdu->callback(iscsi, SCSI_STATUS_CANCELLED,
                                      NULL, pdu->private_data);
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libiscsi-1.19.0+git.20200521/lib/socket.c 
new/libiscsi-1.19.0+git.20200812/lib/socket.c
--- old/libiscsi-1.19.0+git.20200521/lib/socket.c       2020-05-22 
03:39:49.000000000 +0200
+++ new/libiscsi-1.19.0+git.20200812/lib/socket.c       2020-08-13 
05:07:10.000000000 +0200
@@ -913,7 +913,7 @@
                        return iscsi_reconnect(iscsi);
                } else {
                        if (iscsi->old_iscsi) {
-                               return 0;
+                               goto check_timeout;
                        }
                }
        }
@@ -999,8 +999,14 @@
                        return iscsi_service_reconnect_if_loggedin(iscsi);
                }
        }
+
+check_timeout:
        iscsi_timeout_scan(iscsi);
 
+       if (iscsi->old_iscsi) {
+               iscsi_timeout_scan(iscsi->old_iscsi);
+       }
+
        return 0;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libiscsi-1.19.0+git.20200521/packaging/RPM/libiscsi.spec.in 
new/libiscsi-1.19.0+git.20200812/packaging/RPM/libiscsi.spec.in
--- old/libiscsi-1.19.0+git.20200521/packaging/RPM/libiscsi.spec.in     
2020-05-22 03:39:49.000000000 +0200
+++ new/libiscsi-1.19.0+git.20200812/packaging/RPM/libiscsi.spec.in     
2020-08-13 05:07:10.000000000 +0200
@@ -70,7 +70,6 @@
 
 %files utils
 %doc COPYING LICENCE-GPL-2.txt LICENCE-LGPL-2.1.txt README TODO
-%{_bindir}/ld_iscsi.so
 %{_bindir}/iscsi-ls
 %{_bindir}/iscsi-inq
 %{_bindir}/iscsi-perf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libiscsi-1.19.0+git.20200521/test-tool/iscsi-support.c 
new/libiscsi-1.19.0+git.20200812/test-tool/iscsi-support.c
--- old/libiscsi-1.19.0+git.20200521/test-tool/iscsi-support.c  2020-05-22 
03:39:49.000000000 +0200
+++ new/libiscsi-1.19.0+git.20200812/test-tool/iscsi-support.c  2020-08-13 
05:07:10.000000000 +0200
@@ -1308,19 +1308,18 @@
 {
         struct scsi_task *task;
         const uint32_t lba = 1;
-        const int blksize = 512;
-        const uint32_t datalen = 1 * blksize;
+        const uint32_t datalen = 1 * block_size;
         int ret = 0;
 
 
         /*
-         * try to read the second 512-byte block
+         * try to read the second block
          */
 
         logging(LOG_VERBOSE, "Send READ10 to verify READ works init=%s",
                 sdev->iscsi_ctx ? sdev->iscsi_ctx->initiator_name : 
sdev->sgio_dev);
 
-        task = scsi_cdb_read10(lba, datalen, blksize, 0, 0, 0, 0, 0);
+        task = scsi_cdb_read10(lba, datalen, block_size, 0, 0, 0, 0, 0);
         assert(task != NULL);
 
         task = send_scsi_command(sdev, task, NULL);
@@ -1351,19 +1350,18 @@
         struct scsi_task *task;
         struct iscsi_data d;
         const uint32_t lba = 1;
-        const int blksize = 512;
-        const uint32_t datalen = 1 * blksize;
+        const uint32_t datalen = 1 * block_size;
         int ret = 0;
 
 
         /*
-         * try to write the second 512-byte block
+         * try to write the second block
          */
 
         logging(LOG_VERBOSE, "Send WRITE10 to verify WRITE works init=%s",
                 sdev->iscsi_ctx ? sdev->iscsi_ctx->initiator_name : 
sdev->sgio_dev);
 
-        task = scsi_cdb_write10(lba, datalen, blksize, 0, 0, 0, 0, 0);
+        task = scsi_cdb_write10(lba, datalen, block_size, 0, 0, 0, 0, 0);
         assert(task != NULL);
 
         d.data = buf;
@@ -1391,20 +1389,19 @@
 {
         struct scsi_task *task;
         const uint32_t lba = 1;
-        const int blksize = 512;
-        const uint32_t datalen = 1 * blksize;
+        const uint32_t datalen = 1 * block_size;
         int ret = 0;
 
 
         /*
-         * try to read the second 512-byte block -- should fail
+         * try to read the second block -- should fail
          */
 
         logging(LOG_VERBOSE,
                 "Send READ10 to verify READ does not work init=%s",
                 sdev->iscsi_ctx ? sdev->iscsi_ctx->initiator_name : 
sdev->sgio_dev);
 
-        task = scsi_cdb_read10(lba, datalen, blksize, 0, 0, 0, 0, 0);
+        task = scsi_cdb_read10(lba, datalen, block_size, 0, 0, 0, 0, 0);
         assert(task != NULL);
 
         task = send_scsi_command(sdev, task, NULL);
@@ -1438,20 +1435,19 @@
         struct scsi_task *task;
         struct iscsi_data d;
         const uint32_t lba = 1;
-        const int blksize = 512;
-        const uint32_t datalen = 1 * blksize;
+        const uint32_t datalen = 1 * block_size;
         int ret = 0;
 
 
         /*
-         * try to write the second 512-byte block
+         * try to write the second block
          */
 
         logging(LOG_VERBOSE,
                 "Send WRITE10 to verify WRITE does not work init=%s",
                 sdev->iscsi_ctx ? sdev->iscsi_ctx->initiator_name : 
sdev->sgio_dev);
 
-        task = scsi_cdb_write10(lba, datalen, blksize, 0, 0, 0, 0, 0);
+        task = scsi_cdb_write10(lba, datalen, block_size, 0, 0, 0, 0, 0);
         assert(task != NULL);
 
         d.data = buf;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libiscsi-1.19.0+git.20200521/test-tool/test_async_abort_simple.c 
new/libiscsi-1.19.0+git.20200812/test-tool/test_async_abort_simple.c
--- old/libiscsi-1.19.0+git.20200521/test-tool/test_async_abort_simple.c        
2020-05-22 03:39:49.000000000 +0200
+++ new/libiscsi-1.19.0+git.20200812/test-tool/test_async_abort_simple.c        
2020-08-13 05:07:10.000000000 +0200
@@ -92,7 +92,6 @@
 {
        int ret;
        struct tests_async_abort_state state = { NULL, 0, 0, 0, 0 };
-       int blocksize = 512;
        int blocks_per_io = 8;
        unsigned char *buf;
        uint64_t timeout_sec;
@@ -107,18 +106,18 @@
                return;
        }
 
-       buf = calloc(blocksize, blocks_per_io);
+       buf = calloc(block_size, blocks_per_io);
        CU_ASSERT(buf != NULL);
        if (!buf)
                return;
 
        /* queue and dispatch write before the abort */
-       state.wtask = scsi_cdb_write10(0, blocks_per_io * blocksize,
-                                blocksize, 0, 0, 0, 0, 0);
+       state.wtask = scsi_cdb_write10(0, blocks_per_io * block_size,
+                                block_size, 0, 0, 0, 0, 0);
        CU_ASSERT_PTR_NOT_NULL_FATAL(state.wtask);
 
        ret = scsi_task_add_data_out_buffer(state.wtask,
-                                           blocks_per_io * blocksize,
+                                           blocks_per_io * block_size,
                                            buf);
        CU_ASSERT_EQUAL(ret, 0);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libiscsi-1.19.0+git.20200521/test-tool/test_async_lu_reset_simple.c 
new/libiscsi-1.19.0+git.20200812/test-tool/test_async_lu_reset_simple.c
--- old/libiscsi-1.19.0+git.20200521/test-tool/test_async_lu_reset_simple.c     
2020-05-22 03:39:49.000000000 +0200
+++ new/libiscsi-1.19.0+git.20200812/test-tool/test_async_lu_reset_simple.c     
2020-08-13 05:07:10.000000000 +0200
@@ -91,7 +91,6 @@
 {
        int ret;
        struct tests_async_reset_state state = { NULL, 0, 0, 0, };
-       int blocksize = 512;
        int blocks_per_io = 8;
        unsigned char *buf;
        uint64_t timeout_sec;
@@ -106,18 +105,18 @@
                return;
        }
 
-       buf = calloc(blocksize, blocks_per_io);
+       buf = calloc(block_size, blocks_per_io);
        CU_ASSERT(buf != NULL);
        if (!buf)
                return;
 
        /* queue and dispatch write before the reset */
-       state.wtask = scsi_cdb_write10(0, blocks_per_io * blocksize,
-                                blocksize, 0, 0, 0, 0, 0);
+       state.wtask = scsi_cdb_write10(0, blocks_per_io * block_size,
+                                block_size, 0, 0, 0, 0, 0);
        CU_ASSERT_PTR_NOT_NULL_FATAL(state.wtask);
 
        ret = scsi_task_add_data_out_buffer(state.wtask,
-                                           blocks_per_io * blocksize,
+                                           blocks_per_io * block_size,
                                            buf);
        CU_ASSERT_EQUAL(ret, 0);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libiscsi-1.19.0+git.20200521/utils/iscsi-ls.c 
new/libiscsi-1.19.0+git.20200812/utils/iscsi-ls.c
--- old/libiscsi-1.19.0+git.20200521/utils/iscsi-ls.c   2020-05-22 
03:39:49.000000000 +0200
+++ new/libiscsi-1.19.0+git.20200812/utils/iscsi-ls.c   2020-08-13 
05:07:10.000000000 +0200
@@ -376,7 +376,8 @@
                 } else if (!strcmp(argv[i], "-U") ||
                            !strcmp(argv[i], "--url")) {
                        useurls = 1;
-                } else if (!strncmp("iscsi://", argv[i], 8)) {
+                } else if (!strncmp("iscsi://", argv[i], 8) ||
+                           !strncmp("iser://", argv[i], 7)) {
                         url = strdup(argv[i]);
                 }
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libiscsi-1.19.0+git.20200521/utils/iscsi-perf.c 
new/libiscsi-1.19.0+git.20200812/utils/iscsi-perf.c
--- old/libiscsi-1.19.0+git.20200521/utils/iscsi-perf.c 2020-05-22 
03:39:49.000000000 +0200
+++ new/libiscsi-1.19.0+git.20200812/utils/iscsi-perf.c 2020-08-13 
05:07:10.000000000 +0200
@@ -369,12 +369,12 @@
 
        scsi_free_scsi_task(task);
 
-       client.perf_iov.iov_base = malloc(blocks_per_io * client.blocksize);
+       client.perf_iov.iov_base = malloc((size_t)(blocks_per_io * 
client.blocksize));
        if (!client.perf_iov.iov_base) {
                fprintf(stderr, "Out of Memory\n");
                exit(10);
        }
-       client.perf_iov.iov_len = blocks_per_io * client.blocksize;
+       client.perf_iov.iov_len = (size_t)(blocks_per_io * client.blocksize);
 
        printf("capacity is %" PRIu64 " blocks or %" PRIu64 " byte (%" PRIu64 " 
MB)\n", client.num_blocks, client.num_blocks * client.blocksize,
                                                                
(client.num_blocks * client.blocksize) >> 20);

++++++ libiscsi.obsinfo ++++++
--- /var/tmp/diff_new_pack.1KEJck/_old  2020-08-15 21:19:01.967577191 +0200
+++ /var/tmp/diff_new_pack.1KEJck/_new  2020-08-15 21:19:01.971577193 +0200
@@ -1,5 +1,5 @@
 name: libiscsi
-version: 1.19.0+git.20200521
-mtime: 1590111589
-commit: 33c66f2c39a01b4e109270ffcc83e2e2daf73ecb
+version: 1.19.0+git.20200812
+mtime: 1597288030
+commit: e9cefe7e421b19f9b984ff3fc8e76856cb439d14
 


Reply via email to