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 */
