Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package tcmu-runner for openSUSE:Factory 
checked in at 2021-09-26 21:48:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/tcmu-runner (Old)
 and      /work/SRC/openSUSE:Factory/.tcmu-runner.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "tcmu-runner"

Sun Sep 26 21:48:20 2021 rev:13 rq:920892 version:1.5.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/tcmu-runner/tcmu-runner.changes  2021-02-04 
20:21:59.190635551 +0100
+++ /work/SRC/openSUSE:Factory/.tcmu-runner.new.1899/tcmu-runner.changes        
2021-09-26 21:48:56.786796426 +0200
@@ -1,0 +2,35 @@
+Tue Sep 21 20:12:35 UTC 2021 - [email protected]
+
+- Updated to latest upstream (jsc#SLE-17360). Added file:
+  * tcmu-runner-updates-since-v1.5.4.xz
+  with latest upstream changes since v1.5.4:
+  * rbd: switch strtok to strtok_r
+  * tcmur_device: rename the state_lock to rdev_lock
+  * tcmur_device: rename lock to cmds_list_lock
+  * rbd: fix and add more debug logs
+  * rbd: fix the possible warning of incorrect return value type
+  * rbd: remove the reduntant logs
+  * rbd: fix memory leak when fails to get the address
+  * Revert "Create codeql-analysis.yml"
+  * rbd: fix use-after-free of addr
+  * Create codeql-analysis.yml
+  * main: fix g_object_unref: assertion 'G_IS_OBJECT (object)' failed
+  * remove pthread_getname_np calls
+  * implicitly cast pthread_t to long unsigned int
+  * add missing pthread.h include
+  * replace assert_perror with assert
+  * cast time_t to intmax_t when printing
+  * spec: make dist tag optional (#659)
+  * install-dep.sh: do not install multiple packages in one single line (#657)
+  * tcmu_read_config() check read() return value. (#656)
+
+  And added these changes in v1.5.4 from v1.5.3:
+  * Bump version to 1.5.4 (#652)
+  * handler: add writesame/caw hooks support
+  * tcmur: fall back to writesame without unmap if not aligned
+  * tcmur: clean up the code
+  * rbd: fix the unmap align and granularity size
+  * rbd: use the new format of the daemon name
+  * file_zbc: Remove unnecessary zone boundary check
+
+-------------------------------------------------------------------

Old:
----
  tcmu-runner-1.5.3.tar.xz

New:
----
  tcmu-runner-1.5.4.tar.xz

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

Other differences:
------------------
++++++ tcmu-runner.spec ++++++
--- /var/tmp/diff_new_pack.RT1vti/_old  2021-09-26 21:48:57.362797069 +0200
+++ /var/tmp/diff_new_pack.RT1vti/_new  2021-09-26 21:48:57.366797073 +0200
@@ -35,7 +35,7 @@
 %bcond_with tcmalloc
 
 Name:           tcmu-runner
-Version:        1.5.3
+Version:        1.5.4
 Release:        0
 Summary:        A userspace daemon that handles the LIO TCM-User backstore
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.RT1vti/_old  2021-09-26 21:48:57.390797100 +0200
+++ /var/tmp/diff_new_pack.RT1vti/_new  2021-09-26 21:48:57.394797104 +0200
@@ -4,8 +4,8 @@
     <param name="url">https://github.com/open-iscsi/tcmu-runner.git</param>
     <param name="subdir"></param>
     <param name="filename">tcmu-runner</param>
-    <param name="versionformat">1.5.3</param>
-    <param name="revision">v1.5.3</param>
+    <param name="versionformat">1.5.4</param>
+    <param name="revision">v1.5.4</param>
     <param name="changesgenerate">enable</param>
   </service>
   <service name="recompress" mode="disabled">

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.RT1vti/_old  2021-09-26 21:48:57.410797122 +0200
+++ /var/tmp/diff_new_pack.RT1vti/_new  2021-09-26 21:48:57.410797122 +0200
@@ -1,4 +1,4 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/open-iscsi/tcmu-runner.git</param>
-              <param 
name="changesrevision">01685b2ab8c430c0fb9ce397e7e76b60fe6cbde5</param></service></servicedata>
\ No newline at end of file
+              <param 
name="changesrevision">06d64ab78c2898c032fe5be93f9ae6f64b199d5b</param></service></servicedata>
\ No newline at end of file

++++++ tcmu-runner-1.5.3.tar.xz -> tcmu-runner-1.5.4.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tcmu-runner-1.5.3/CMakeLists.txt 
new/tcmu-runner-1.5.4/CMakeLists.txt
--- old/tcmu-runner-1.5.3/CMakeLists.txt        2021-01-13 16:15:57.000000000 
+0100
+++ new/tcmu-runner-1.5.4/CMakeLists.txt        2021-03-19 04:24:59.000000000 
+0100
@@ -1,6 +1,6 @@
 cmake_minimum_required (VERSION 2.8 FATAL_ERROR)
 project (tcmu-runner C)
-set(VERSION 1.5.2)
+set(VERSION 1.5.4)
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall 
-Wdeclaration-after-statement -std=c99")
 
 include(GNUInstallDirs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tcmu-runner-1.5.3/file_zbc.c 
new/tcmu-runner-1.5.4/file_zbc.c
--- old/tcmu-runner-1.5.3/file_zbc.c    2021-01-13 16:15:57.000000000 +0100
+++ new/tcmu-runner-1.5.4/file_zbc.c    2021-03-19 04:24:59.000000000 +0100
@@ -2129,14 +2129,6 @@
 
                /* Get the zone of the current LBA */
                zone = zbc_get_zone(zdev, lba, false);
-               if (lba + nr_lbas > zone->start + zone->len) {
-                       tcmu_dev_err(dev,
-                                    "Write boundary violation lba %"PRIu64", 
xfer len %zu\n",
-                                    lba, nr_lbas);
-                       return tcmu_sense_set_data(cmd->sense_buf,
-                                                  ILLEGAL_REQUEST,
-                                                  
ASC_WRITE_BOUNDARY_VIOLATION);
-               }
 
                /* If the zone is not open, implicitly open it */
                if (zbc_zone_seq(zone) && !zbc_zone_is_open(zone)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tcmu-runner-1.5.3/glfs.c new/tcmu-runner-1.5.4/glfs.c
--- old/tcmu-runner-1.5.3/glfs.c        2021-01-13 16:15:57.000000000 +0100
+++ new/tcmu-runner-1.5.4/glfs.c        2021-03-19 04:24:59.000000000 +0100
@@ -886,29 +886,6 @@
        return TCMU_STS_NO_RESOURCE;
 }
 
-/*
- * Return scsi status or TCMU_STS_NOT_HANDLED
- */
-static int tcmu_glfs_handle_cmd(struct tcmu_device *dev,
-                               struct tcmur_cmd *tcmur_cmd)
-{
-       struct tcmulib_cmd *cmd = tcmur_cmd->lib_cmd;
-       uint8_t *cdb = cmd->cdb;
-       int ret;
-
-       switch(cdb[0]) {
-       case WRITE_SAME:
-       case WRITE_SAME_16:
-               ret = tcmur_handle_writesame(dev, tcmur_cmd,
-                                            tcmu_glfs_writesame);
-               break;
-       default:
-               ret = TCMU_STS_NOT_HANDLED;
-       }
-
-       return ret;
-}
-
 #if GFAPI_VERSION766
 static int tcmu_glfs_to_sts(int rc)
 {
@@ -1008,7 +985,7 @@
        .reconfig       = tcmu_glfs_reconfig,
        .flush          = tcmu_glfs_flush,
        .unmap          = tcmu_glfs_discard,
-       .handle_cmd     = tcmu_glfs_handle_cmd,
+       .writesame      = tcmu_glfs_writesame,
 
        .update_logdir  = tcmu_glfs_update_logdir,
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tcmu-runner-1.5.3/rbd.c new/tcmu-runner-1.5.4/rbd.c
--- old/tcmu-runner-1.5.3/rbd.c 2021-01-13 16:15:57.000000000 +0100
+++ new/tcmu-runner-1.5.4/rbd.c 2021-03-19 04:24:59.000000000 +0100
@@ -195,10 +195,12 @@
                goto free_image_id_buf;
        }
 
-       ret = asprintf(&metadata_buf, "%s%c%s%c%s%c%s%c%s%c%s%c",
+       ret = asprintf(&metadata_buf, 
"%s%c%s%c%s%c%s%c%s%c%s%c%s%c%s%c%s%c%s%c",
                       "pool_name", '\0', state->pool_name, '\0',
                       "image_name", '\0', state->image_name, '\0',
-                      "image_id", '\0', image_id_buf, '\0');
+                      "image_id", '\0', image_id_buf, '\0',
+                      "daemon_type", '\0', "portal", '\0',
+                      "daemon_prefix", '\0', u.nodename, '\0');
        if (ret < 0) {
                tcmu_dev_err(dev, "Could not allocate metadata buf.\n");
                ret = -ENOMEM;
@@ -1022,8 +1024,9 @@
        char *pool, *name, *next_opt;
        char *config, *dev_cfg_dup;
        struct tcmu_rbd_state *state;
-       uint32_t max_blocks;
+       uint32_t max_blocks, unmap_gran;
        int ret;
+       char buf[128];
 
        state = calloc(1, sizeof(*state));
        if (!state)
@@ -1133,8 +1136,20 @@
        max_blocks = (image_info.obj_size * 4) / tcmu_dev_get_block_size(dev);
        tcmu_dev_set_opt_xcopy_rw_len(dev, max_blocks);
        tcmu_dev_set_max_unmap_len(dev, max_blocks);
-       tcmu_dev_set_opt_unmap_gran(dev, image_info.obj_size /
-                                   tcmu_dev_get_block_size(dev), false);
+       ret = rados_conf_get(state->cluster, "rbd_discard_granularity_bytes", 
buf,
+                            sizeof(buf));
+       if (!ret) {
+               tcmu_dev_dbg(dev, "rbd_discard_granularity_bytes: %s\n", buf);
+               unmap_gran = atoi(buf) / tcmu_dev_get_block_size(dev);
+       } else {
+               tcmu_dev_warn(dev,
+                             "Failed to get 'rbd_discard_granularity_bytes', 
%d\n",
+                             ret);
+               unmap_gran = image_info.obj_size / tcmu_dev_get_block_size(dev);
+       }
+       tcmu_dev_dbg(dev, "unmap_gran: %d\n", unmap_gran);
+       tcmu_dev_set_opt_unmap_gran(dev, unmap_gran, false);
+       tcmu_dev_set_unmap_gran_align(dev, unmap_gran);
        tcmu_dev_set_write_cache_enabled(dev, 0);
 
 #if defined LIBRADOS_SUPPORTS_GETADDRS || defined RBD_LOCK_ACQUIRE_SUPPORT
@@ -1616,36 +1631,6 @@
 }
 #endif /* RBD_COMPARE_AND_WRITE_SUPPORT */
 
-/*
- * Return scsi status or TCMU_STS_NOT_HANDLED
- */
-static int tcmu_rbd_handle_cmd(struct tcmu_device *dev,
-                              struct tcmur_cmd *tcmur_cmd)
-{
-       struct tcmulib_cmd *cmd = tcmur_cmd->lib_cmd;
-       uint8_t *cdb = cmd->cdb;
-       int ret;
-
-       switch(cdb[0]) {
-#ifdef RBD_WRITE_SAME_SUPPORT
-       case WRITE_SAME:
-       case WRITE_SAME_16:
-               ret = tcmur_handle_writesame(dev, tcmur_cmd,
-                                            tcmu_rbd_aio_writesame);
-               break;
-#endif
-#ifdef RBD_COMPARE_AND_WRITE_SUPPORT
-       case COMPARE_AND_WRITE:
-               ret = tcmur_handle_caw(dev, tcmur_cmd, tcmu_rbd_aio_caw);
-               break;
-#endif
-       default:
-               ret = TCMU_STS_NOT_HANDLED;
-       }
-
-       return ret;
-}
-
 static int tcmu_rbd_reconfig(struct tcmu_device *dev,
                             struct tcmulib_cfg_info *cfg)
 {
@@ -1728,7 +1713,12 @@
 #ifdef RBD_DISCARD_SUPPORT
        .unmap         = tcmu_rbd_unmap,
 #endif
-       .handle_cmd    = tcmu_rbd_handle_cmd,
+#ifdef RBD_WRITE_SAME_SUPPORT
+       .writesame     = tcmu_rbd_aio_writesame,
+#endif
+#ifdef RBD_COMPARE_AND_WRITE_SUPPORT
+       .caw           = tcmu_rbd_aio_caw,
+#endif
 #ifdef RBD_LOCK_ACQUIRE_SUPPORT
        .lock          = tcmu_rbd_lock,
        .unlock        = tcmu_rbd_unlock,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tcmu-runner-1.5.3/tcmu-runner.h 
new/tcmu-runner-1.5.4/tcmu-runner.h
--- old/tcmu-runner-1.5.3/tcmu-runner.h 2021-01-13 16:15:57.000000000 +0100
+++ new/tcmu-runner-1.5.4/tcmu-runner.h 2021-03-19 04:24:59.000000000 +0100
@@ -151,6 +151,10 @@
        int (*flush)(struct tcmu_device *dev, struct tcmur_cmd *cmd);
        int (*unmap)(struct tcmu_device *dev, struct tcmur_cmd *cmd,
                     uint64_t off, uint64_t len);
+       int (*writesame)(struct tcmu_device *dev, struct tcmur_cmd *cmd, 
uint64_t off,
+                        uint64_t len, struct iovec *iovec, size_t iov_cnt);
+       int (*caw)(struct tcmu_device *dev, struct tcmur_cmd *cmd, uint64_t off,
+                  uint64_t len, struct iovec *iovec, size_t iov_cnt);
 
        /*
         * Notify the handler of an event.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tcmu-runner-1.5.3/tcmu-runner.spec 
new/tcmu-runner-1.5.4/tcmu-runner.spec
--- old/tcmu-runner-1.5.3/tcmu-runner.spec      2021-01-13 16:15:57.000000000 
+0100
+++ new/tcmu-runner-1.5.4/tcmu-runner.spec      2021-03-19 04:24:59.000000000 
+0100
@@ -35,7 +35,7 @@
 Summary:       A daemon that handles the userspace side of the LIO TCM-User 
backstore
 Group:         System Environment/Daemons
 License:       ASL 2.0 or LGPLv2+
-Version:       1.5.2
+Version:       1.5.4
 URL:           https://github.com/open-iscsi/tcmu-runner
 
 #%define _RC
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tcmu-runner-1.5.3/tcmur_cmd_handler.c 
new/tcmu-runner-1.5.4/tcmur_cmd_handler.c
--- old/tcmu-runner-1.5.3/tcmur_cmd_handler.c   2021-01-13 16:15:57.000000000 
+0100
+++ new/tcmu-runner-1.5.4/tcmur_cmd_handler.c   2021-03-19 04:24:59.000000000 
+0100
@@ -365,7 +365,7 @@
                pthread_mutex_lock(&state->lock);
                state->refcount++;
                pthread_mutex_unlock(&state->lock);
-       
+
                ret = aio_request_schedule(dev, tcmur_ucmd, unmap_work_fn,
                                           tcmur_cmd_complete);
                if (ret != TCMU_STS_ASYNC_HANDLED)
@@ -373,9 +373,7 @@
 
                nlbas -= lbas;
                lba += lbas;
-
                lbas = min(opt_unmap_gran, nlbas);
-
        }
 
        return ret;
@@ -682,9 +680,19 @@
        uint8_t *cdb = cmd->cdb;
        uint64_t lba = tcmu_cdb_get_lba(cdb);
        uint64_t nlbas = tcmu_cdb_get_xfer_length(cdb);
+       uint32_t align = tcmu_dev_get_unmap_gran_align(dev);
        struct unmap_state *state;
        int ret;
 
+       /* If not aligned then falls back to the writesame without unmap */
+       if (lba % align || nlbas % align) {
+               tcmu_dev_dbg(dev,
+                            "Start lba: %"PRIu64" or nlbas: %"PRIu64" not 
aligned to %"PRIu32"\n",
+                            lba, nlbas, align);
+               tcmu_dev_dbg(dev, "Falls back to writesame without unmap!\n");
+               return TCMU_STS_NOT_HANDLED;
+       }
+
        tcmu_dev_dbg(dev, "Do UNMAP in WRITE_SAME cmd!\n");
 
        ret = unmap_init(dev, cmd);
@@ -703,6 +711,23 @@
        return TCMU_STS_ASYNC_HANDLED;
 }
 
+static int tcmur_writesame_work_fn(struct tcmu_device *dev, void *data)
+{
+       struct tcmur_cmd *tcmur_cmd = data;
+       struct tcmulib_cmd *cmd = tcmur_cmd->lib_cmd;
+       tcmur_writesame_fn_t write_same_fn = tcmur_cmd->cmd_state;
+       uint8_t *cdb = cmd->cdb;
+       uint64_t off = tcmu_cdb_to_byte(dev, cdb);
+       uint64_t len = tcmu_lba_to_byte(dev, tcmu_cdb_get_xfer_length(cdb));
+
+       /*
+        * Write contents of the logical block data(from the Data-Out Buffer)
+        * to each LBA in the specified LBA range.
+        */
+       return write_same_fn(dev, tcmur_cmd, off, len, cmd->iovec,
+                            cmd->iov_cnt);
+}
+
 static int handle_writesame(struct tcmu_device *dev, struct tcmulib_cmd *cmd)
 {
        struct tcmur_handler *rhandler = tcmu_get_runner_handler(dev);
@@ -716,12 +741,30 @@
        struct write_same *write_same;
        int i, ret;
 
+       if (tcmu_dev_in_recovery(dev))
+               return TCMU_STS_BUSY;
+
+       ret = alua_check_state(dev, cmd, false);
+       if (ret)
+               return ret;
+
        ret = handle_writesame_check(dev, cmd);
        if (ret)
                return ret;
 
-       if (rhandler->unmap && (cmd->cdb[1] & 0x08))
-               return handle_unmap_in_writesame(dev, cmd);
+       if (rhandler->unmap && (cmd->cdb[1] & 0x08)) {
+               ret = handle_unmap_in_writesame(dev, cmd);
+               if (ret != TCMU_STS_NOT_HANDLED)
+                       return ret;
+       }
+
+       if (rhandler->writesame) {
+               tcmur_cmd->cmd_state = rhandler->writesame;
+               tcmur_cmd->done = handle_generic_cbk;
+               return aio_request_schedule(dev, tcmur_cmd,
+                                           tcmur_writesame_work_fn,
+                                           tcmur_cmd_complete);
+       }
 
        max_xfer_length = tcmu_dev_get_max_xfer_len(dev) * block_size;
        length = round_up(length, max_xfer_length);
@@ -749,51 +792,6 @@
                                    tcmur_cmd_complete);
 }
 
-static int tcmur_writesame_work_fn(struct tcmu_device *dev, void *data)
-{
-       struct tcmur_cmd *tcmur_cmd = data;
-       struct tcmulib_cmd *cmd = tcmur_cmd->lib_cmd;
-       tcmur_writesame_fn_t write_same_fn = tcmur_cmd->cmd_state;
-       uint8_t *cdb = cmd->cdb;
-       uint64_t off = tcmu_cdb_to_byte(dev, cdb);
-       uint64_t len = tcmu_lba_to_byte(dev, tcmu_cdb_get_xfer_length(cdb));
-
-       /*
-        * Write contents of the logical block data(from the Data-Out Buffer)
-        * to each LBA in the specified LBA range.
-        */
-       return write_same_fn(dev, tcmur_cmd, off, len, cmd->iovec,
-                            cmd->iov_cnt);
-}
-
-int tcmur_handle_writesame(struct tcmu_device *dev, struct tcmur_cmd 
*tcmur_cmd,
-                          tcmur_writesame_fn_t write_same_fn)
-{
-       struct tcmur_handler *rhandler = tcmu_get_runner_handler(dev);
-       struct tcmulib_cmd *cmd = tcmur_cmd->lib_cmd;
-       int ret;
-
-       if (tcmu_dev_in_recovery(dev))
-               return TCMU_STS_BUSY;
-
-       ret = alua_check_state(dev, cmd, false);
-       if (ret)
-               return ret;
-
-       ret = handle_writesame_check(dev, cmd);
-       if (ret)
-               return ret;
-
-       if (rhandler->unmap && (cmd->cdb[1] & 0x08))
-               return handle_unmap_in_writesame(dev, cmd);
-
-       tcmur_cmd->cmd_state = write_same_fn;
-       tcmur_cmd->done = handle_generic_cbk;
-
-       return aio_request_schedule(dev, tcmur_cmd, tcmur_writesame_work_fn,
-                                   tcmur_cmd_complete);
-}
-
 /* async write verify */
 struct write_verify_state {
        struct iovec *w_iovec;
@@ -1675,14 +1673,33 @@
        return TCMU_STS_OK;
 }
 
+static int tcmur_caw_fn(struct tcmu_device *dev, void *data)
+{
+       struct tcmur_cmd *tcmur_cmd = data;
+       struct tcmulib_cmd *cmd = tcmur_cmd->lib_cmd;
+       tcmur_caw_fn_t caw_fn = tcmur_cmd->cmd_state;
+       uint64_t off = tcmu_cdb_to_byte(dev, cmd->cdb);
+       size_t half = (tcmu_iovec_length(cmd->iovec, cmd->iov_cnt)) / 2;
+
+       return caw_fn(dev, tcmur_cmd, off, half, cmd->iovec, cmd->iov_cnt);
+}
+
 static int handle_caw(struct tcmu_device *dev, struct tcmulib_cmd *cmd)
 {
+       struct tcmur_handler *rhandler = tcmu_get_runner_handler(dev);
        struct tcmur_cmd *tcmur_cmd = cmd->hm_private;
        size_t half = (tcmu_iovec_length(cmd->iovec, cmd->iov_cnt)) / 2;
        struct tcmur_device *rdev = tcmu_dev_get_private(dev);
        uint8_t sectors = cmd->cdb[13];
        int ret;
 
+       if (tcmu_dev_in_recovery(dev))
+               return TCMU_STS_BUSY;
+
+       ret = alua_check_state(dev, cmd, false);
+       if (ret)
+               return ret;
+
        /* From sbc4r12a section 5.3 COMPARE AND WRITE command
         * A NUMBER OF LOGICAL BLOCKS field set to zero specifies that no
         * read operations shall be performed, no logical block data shall
@@ -1699,6 +1716,13 @@
        if (ret)
                return ret;
 
+       if (rhandler->caw) {
+               tcmur_cmd->cmd_state = rhandler->caw;
+               tcmur_cmd->done = handle_generic_cbk;
+               return aio_request_schedule(dev, tcmur_cmd, tcmur_caw_fn,
+                                           tcmur_cmd_complete);
+       }
+
        if (tcmur_cmd_state_init(tcmur_cmd, 0, half))
                return TCMU_STS_NO_RESOURCE;
 
@@ -1716,54 +1740,6 @@
        return ret;
 }
 
-static int tcmur_caw_fn(struct tcmu_device *dev, void *data)
-{
-       struct tcmur_cmd *tcmur_cmd = data;
-       struct tcmulib_cmd *cmd = tcmur_cmd->lib_cmd;
-       tcmur_caw_fn_t caw_fn = tcmur_cmd->cmd_state;
-       uint64_t off = tcmu_cdb_to_byte(dev, cmd->cdb);
-       size_t half = (tcmu_iovec_length(cmd->iovec, cmd->iov_cnt)) / 2;
-
-       return caw_fn(dev, tcmur_cmd, off, half, cmd->iovec, cmd->iov_cnt);
-}
-
-int tcmur_handle_caw(struct tcmu_device *dev, struct tcmur_cmd *tcmur_cmd,
-                    tcmur_caw_fn_t caw_fn)
-{
-       struct tcmulib_cmd *cmd = tcmur_cmd->lib_cmd;
-       uint8_t sectors = cmd->cdb[13];
-       int ret;
-
-       if (tcmu_dev_in_recovery(dev))
-               return TCMU_STS_BUSY;
-
-       /* From sbc4r12a section 5.3 COMPARE AND WRITE command
-        * A NUMBER OF LOGICAL BLOCKS field set to zero specifies that no
-        * read operations shall be performed, no logical block data shall
-        * be transferred from the Data-Out Buffer, no compare operations
-        * shall be performed, and no write operations shall be performed.
-        * This condition shall not be considered an error.
-        */
-       if (!sectors) {
-               tcmu_dev_dbg(dev, "NUMBER OF LOGICAL BLOCKS is zero, just 
return ok.\n");
-               return TCMU_STS_OK;
-       }
-
-       ret = alua_check_state(dev, cmd, false);
-       if (ret)
-               return ret;
-
-       ret = handle_caw_check(dev, cmd);
-       if (ret)
-               return ret;
-
-       tcmur_cmd->cmd_state = caw_fn;
-       tcmur_cmd->done = handle_generic_cbk;
-
-       return aio_request_schedule(dev, tcmur_cmd, tcmur_caw_fn,
-                                   tcmur_cmd_complete);
-}
-
 /* async flush */
 static int flush_work_fn(struct tcmu_device *dev, void *data)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tcmu-runner-1.5.3/tcmur_cmd_handler.h 
new/tcmu-runner-1.5.4/tcmur_cmd_handler.h
--- old/tcmu-runner-1.5.3/tcmur_cmd_handler.h   2021-01-13 16:15:57.000000000 
+0100
+++ new/tcmu-runner-1.5.4/tcmur_cmd_handler.h   2021-03-19 04:24:59.000000000 
+0100
@@ -24,17 +24,14 @@
 bool tcmur_handler_is_passthrough_only(struct tcmur_handler *rhandler);
 void tcmur_tcmulib_cmd_complete(struct tcmu_device *dev,
                                struct tcmulib_cmd *cmd, int ret);
+
 typedef int (*tcmur_writesame_fn_t)(struct tcmu_device *dev,
                                    struct tcmur_cmd *tcmur_cmd, uint64_t off,
                                    uint64_t len, struct iovec *iov,
                                    size_t iov_cnt);
-int tcmur_handle_writesame(struct tcmu_device *dev, struct tcmur_cmd 
*tcmur_cmd,
-                          tcmur_writesame_fn_t write_same_fn);
 
 typedef int (*tcmur_caw_fn_t)(struct tcmu_device *dev,
                              struct tcmur_cmd *tcmur_cmd, uint64_t off,
                              uint64_t len, struct iovec *iov, size_t iov_cnt);
-int tcmur_handle_caw(struct tcmu_device *dev, struct tcmur_cmd *tcmur_cmd,
-                     tcmur_caw_fn_t caw_fn);
 
 #endif /* __TCMUR_CMD_HANDLER_H */

Reply via email to