Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package blktests for openSUSE:Factory 
checked in at 2026-07-01 16:39:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/blktests (Old)
 and      /work/SRC/openSUSE:Factory/.blktests.new.11887 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "blktests"

Wed Jul  1 16:39:45 2026 rev:15 rq:1362765 version:0+20260630.3494185

Changes:
--------
--- /work/SRC/openSUSE:Factory/blktests/blktests.changes        2026-06-25 
17:13:30.217740903 +0200
+++ /work/SRC/openSUSE:Factory/.blktests.new.11887/blktests.changes     
2026-07-01 16:39:48.999699354 +0200
@@ -1,0 +2,15 @@
+Wed Jul 01 04:51:55 UTC 2026 - Sebastian Chlad <[email protected]>
+
+- Update to version 0+20260630.3494185:
+  * src/Makefile: escape '#' in HAVE_C_DEF
+
+-------------------------------------------------------------------
+Sun Jun 28 11:57:22 UTC 2026 - Sebastian Chlad <[email protected]>
+
+- Update to version 0+20260628.dbff8ef:
+  * src/miniublk: fall back to legacy opcodes on older kernels
+  * src/miniublk: switch to ioctl-encoded ublk commands
+  * nvme/060: suppress "nvme connect" failure for rdma transport
+  * nvme/060: suppress state file write error
+
+-------------------------------------------------------------------

Old:
----
  blktests-0+20260623.5a62429.tar.xz

New:
----
  blktests-0+20260630.3494185.tar.xz

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

Other differences:
------------------
++++++ blktests.spec ++++++
--- /var/tmp/diff_new_pack.WebtJ4/_old  2026-07-01 16:39:49.567719124 +0200
+++ /var/tmp/diff_new_pack.WebtJ4/_new  2026-07-01 16:39:49.571719263 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           blktests
-Version:        0+20260623.5a62429
+Version:        0+20260630.3494185
 Release:        0
 Summary:        Linux kernel block layer testing framework
 License:        GPL-2.0-or-later

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.WebtJ4/_old  2026-07-01 16:39:49.623721074 +0200
+++ /var/tmp/diff_new_pack.WebtJ4/_new  2026-07-01 16:39:49.627721213 +0200
@@ -3,6 +3,6 @@
                 <param name="url">git://github.com/osandov/blktests</param>
               <param 
name="changesrevision">e10add032819db8f3abf0a9d53f160b7b10cfed8</param></service><service
 name="tar_scm">
                 <param 
name="url">https://github.com/osandov/blktests.git</param>
-              <param 
name="changesrevision">5a62429536b11c813b5fbbb8165066709bcee002</param></service></servicedata>
+              <param 
name="changesrevision">34941855abbfe363b7548559234046f26183f711</param></service></servicedata>
 (No newline at EOF)
 

++++++ blktests-0+20260623.5a62429.tar.xz -> blktests-0+20260630.3494185.tar.xz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/blktests-0+20260623.5a62429/src/Makefile 
new/blktests-0+20260630.3494185/src/Makefile
--- old/blktests-0+20260623.5a62429/src/Makefile        2026-06-22 
23:29:10.000000000 +0200
+++ new/blktests-0+20260630.3494185/src/Makefile        2026-06-30 
06:42:05.000000000 +0200
@@ -8,6 +8,10 @@
                $(CC) $(CFLAGS) -E - 2>&1 /dev/null | grep $(2) > /dev/null 
2>&1; \
                then echo 1;else echo 0; fi)
 
+HAVE_C_DEF = $(shell if echo -e "$(H)include <$(1)>\n$(H)ifdef 
$(2)\nHAVE_$(2)\n$(H)endif" | \
+               $(CC) $(CFLAGS) -E - 2>&1 /dev/null | grep HAVE_$(2) > 
/dev/null 2>&1; \
+               then echo 1;else echo 0; fi)
+
 C_TARGETS := \
        dio-offsets \
        loblksize \
@@ -27,6 +31,7 @@
 
 HAVE_LIBURING := $(call HAVE_C_MACRO,liburing.h,IORING_OP_URING_CMD)
 HAVE_UBLK_HEADER := $(call HAVE_C_HEADER,linux/ublk_cmd.h,1)
+HAVE_NEW_UBLK_INTF := $(call HAVE_C_DEF,linux/ublk_cmd.h,UBLK_U_CMD_START_DEV)
 
 CXX_TARGETS := \
        discontiguous-io
@@ -37,8 +42,12 @@
 TARGETS := $(C_TARGETS) $(CXX_TARGETS) $(SYZKALLER_TARGETS)
 
 ifeq ($(HAVE_UBLK_HEADER), 1)
+ifeq ($(HAVE_NEW_UBLK_INTF), 1)
 C_URING_TARGETS += $(C_UBLK_TARGETS)
 else
+$(info Skip $(C_UBLK_TARGETS) build due to missing new ublk interface(v6.4+))
+endif
+else
 $(info Skip $(C_UBLK_TARGETS) build due to missing kernel header(v6.0+))
 endif
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/blktests-0+20260623.5a62429/src/miniublk.c 
new/blktests-0+20260630.3494185/src/miniublk.c
--- old/blktests-0+20260623.5a62429/src/miniublk.c      2026-06-22 
23:29:10.000000000 +0200
+++ new/blktests-0+20260630.3494185/src/miniublk.c      2026-06-30 
06:42:05.000000000 +0200
@@ -112,6 +112,7 @@
        int fds[2];     /* fds[0] points to /dev/ublkcN */
        int nr_fds;
        int ctrl_fd;
+       bool use_ioctl;
        struct io_uring ring;
 };
 
@@ -235,7 +236,7 @@
 
 static inline void ublk_ctrl_init_cmd(struct ublk_dev *dev,
                struct io_uring_sqe *sqe,
-               struct ublk_ctrl_cmd_data *data)
+               struct ublk_ctrl_cmd_data *data, __u32 cmd_op)
 {
        struct ublksrv_ctrl_dev_info *info = &dev->dev_info;
        struct ublksrv_ctrl_cmd *cmd = (struct ublksrv_ctrl_cmd 
*)ublk_get_sqe_cmd(sqe);
@@ -255,25 +256,34 @@
        cmd->dev_id = info->dev_id;
        cmd->queue_id = -1;
 
-       ublk_set_sqe_cmd_op(sqe, data->cmd_op);
+       ublk_set_sqe_cmd_op(sqe, cmd_op);
 
        io_uring_sqe_set_data(sqe, cmd);
 }
 
+static void ublk_update_ioctl_encoding(struct ublk_dev *dev)
+{
+       dev->use_ioctl = !!(dev->dev_info.flags & UBLK_F_CMD_IOCTL_ENCODE);
+}
+
 static int __ublk_ctrl_cmd(struct ublk_dev *dev,
                struct ublk_ctrl_cmd_data *data)
 {
        struct io_uring_sqe *sqe;
        struct io_uring_cqe *cqe;
+       __u32 cmd_op = data->cmd_op;
        int ret = -EINVAL;
 
+       if (!dev->use_ioctl)
+               cmd_op = _IOC_NR(cmd_op);
+
        sqe = io_uring_get_sqe(&dev->ring);
        if (!sqe) {
                ublk_err("%s: can't get sqe ret %d\n", __func__, ret);
                return ret;
        }
 
-       ublk_ctrl_init_cmd(dev, sqe, data);
+       ublk_ctrl_init_cmd(dev, sqe, data, cmd_op);
 
        ret = io_uring_submit(&dev->ring);
        if (ret < 0) {
@@ -294,7 +304,7 @@
 int ublk_ctrl_stop_dev(struct ublk_dev *dev)
 {
        struct ublk_ctrl_cmd_data data = {
-               .cmd_op = UBLK_CMD_STOP_DEV,
+               .cmd_op = UBLK_U_CMD_STOP_DEV,
        };
 
        return __ublk_ctrl_cmd(dev, &data);
@@ -304,7 +314,7 @@
                int daemon_pid)
 {
        struct ublk_ctrl_cmd_data data = {
-               .cmd_op = UBLK_CMD_START_DEV,
+               .cmd_op = UBLK_U_CMD_START_DEV,
                .flags  = CTRL_CMD_HAS_DATA,
        };
 
@@ -316,19 +326,30 @@
 int ublk_ctrl_add_dev(struct ublk_dev *dev)
 {
        struct ublk_ctrl_cmd_data data = {
-               .cmd_op = UBLK_CMD_ADD_DEV,
+               .cmd_op = UBLK_U_CMD_ADD_DEV,
                .flags  = CTRL_CMD_HAS_BUF,
                .addr = (__u64)&dev->dev_info,
                .len = sizeof(struct ublksrv_ctrl_dev_info),
        };
+       int ret;
 
-       return __ublk_ctrl_cmd(dev, &data);
+       ret = __ublk_ctrl_cmd(dev, &data);
+       if (ret < 0) {
+               /* retry with legacy opcode on older kernels */
+               dev->use_ioctl = false;
+               ret = __ublk_ctrl_cmd(dev, &data);
+       }
+
+       if (ret >= 0)
+               ublk_update_ioctl_encoding(dev);
+
+       return ret;
 }
 
 int ublk_ctrl_del_dev(struct ublk_dev *dev)
 {
        struct ublk_ctrl_cmd_data data = {
-               .cmd_op = UBLK_CMD_DEL_DEV,
+               .cmd_op = UBLK_U_CMD_DEL_DEV,
                .flags = 0,
        };
 
@@ -338,20 +359,31 @@
 int ublk_ctrl_get_info(struct ublk_dev *dev)
 {
        struct ublk_ctrl_cmd_data data = {
-               .cmd_op = UBLK_CMD_GET_DEV_INFO,
+               .cmd_op = UBLK_U_CMD_GET_DEV_INFO,
                .flags  = CTRL_CMD_HAS_BUF,
                .addr = (__u64)&dev->dev_info,
                .len = sizeof(struct ublksrv_ctrl_dev_info),
        };
+       int ret;
 
-       return __ublk_ctrl_cmd(dev, &data);
+       ret = __ublk_ctrl_cmd(dev, &data);
+       if (ret < 0 && dev->use_ioctl) {
+               /* retry with legacy opcode on older kernels */
+               dev->use_ioctl = false;
+               ret = __ublk_ctrl_cmd(dev, &data);
+       }
+
+       if (ret >= 0)
+               ublk_update_ioctl_encoding(dev);
+
+       return ret;
 }
 
 int ublk_ctrl_set_params(struct ublk_dev *dev,
                struct ublk_params *params)
 {
        struct ublk_ctrl_cmd_data data = {
-               .cmd_op = UBLK_CMD_SET_PARAMS,
+               .cmd_op = UBLK_U_CMD_SET_PARAMS,
                .flags  = CTRL_CMD_HAS_BUF,
                .addr = (__u64)params,
                .len = sizeof(*params),
@@ -364,7 +396,7 @@
                struct ublk_params *params)
 {
        struct ublk_ctrl_cmd_data data = {
-               .cmd_op = UBLK_CMD_GET_PARAMS,
+               .cmd_op = UBLK_U_CMD_GET_PARAMS,
                .flags  = CTRL_CMD_HAS_BUF,
                .addr = (__u64)params,
                .len = sizeof(*params),
@@ -378,7 +410,7 @@
 static int ublk_ctrl_start_user_recover(struct ublk_dev *dev)
 {
        struct ublk_ctrl_cmd_data data = {
-               .cmd_op = UBLK_CMD_START_USER_RECOVERY,
+               .cmd_op = UBLK_U_CMD_START_USER_RECOVERY,
                .flags  = 0,
        };
 
@@ -389,7 +421,7 @@
                int daemon_pid)
 {
        struct ublk_ctrl_cmd_data data = {
-               .cmd_op = UBLK_CMD_END_USER_RECOVERY,
+               .cmd_op = UBLK_U_CMD_END_USER_RECOVERY,
                .flags  = CTRL_CMD_HAS_DATA,
        };
 
@@ -453,6 +485,8 @@
        struct ublksrv_ctrl_dev_info *info = &dev->dev_info;
        int ret;
 
+       dev->use_ioctl = true; /* use ioctl opcodes by default */
+
        dev->ctrl_fd = open(CTRL_DEV, O_RDWR);
        if (dev->ctrl_fd < 0) {
                ublk_err("control dev %s can't be opened: %m %d\n", CTRL_DEV, 
errno);
@@ -624,9 +658,12 @@
                return 0;
 
        if (io->flags & UBLKSRV_NEED_COMMIT_RQ_COMP)
-               cmd_op = UBLK_IO_COMMIT_AND_FETCH_REQ;
+               cmd_op = UBLK_U_IO_COMMIT_AND_FETCH_REQ;
        else if (io->flags & UBLKSRV_NEED_FETCH_RQ)
-               cmd_op = UBLK_IO_FETCH_REQ;
+               cmd_op = UBLK_U_IO_FETCH_REQ;
+
+       if (!q->dev->use_ioctl)
+               cmd_op = _IOC_NR(cmd_op);
 
        sqe = io_uring_get_sqe(&q->ring);
        if (!sqe) {
@@ -637,7 +674,7 @@
 
        cmd = (struct ublksrv_io_cmd *)ublk_get_sqe_cmd(sqe);
 
-       if (cmd_op == UBLK_IO_COMMIT_AND_FETCH_REQ)
+       if (io->flags & UBLKSRV_NEED_COMMIT_RQ_COMP)
                cmd->result = io->result;
 
        /* These fields should be written once, never change */
@@ -650,7 +687,7 @@
        cmd->addr       = (__u64)io->buf_addr;
        cmd->q_id       = q->q_id;
 
-       user_data = build_user_data(tag, cmd_op, 0, 0);
+       user_data = build_user_data(tag, _IOC_NR(cmd_op), 0, 0);
        io_uring_sqe_set_data64(sqe, user_data);
 
        io->flags = 0;
@@ -658,7 +695,7 @@
        q->cmd_inflight += 1;
 
        ublk_dbg(UBLK_DBG_IO_CMD, "%s: (qid %d tag %u cmd_op %u) iof %x 
stopping %d\n",
-                       __func__, q->q_id, tag, cmd_op,
+                       __func__, q->q_id, tag, _IOC_NR(cmd_op),
                        io->flags, !!(q->state & UBLKSRV_QUEUE_STOPPING));
        return 1;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/blktests-0+20260623.5a62429/tests/nvme/060 
new/blktests-0+20260630.3494185/tests/nvme/060
--- old/blktests-0+20260623.5a62429/tests/nvme/060      2026-06-22 
23:29:10.000000000 +0200
+++ new/blktests-0+20260630.3494185/tests/nvme/060      2026-06-30 
06:42:05.000000000 +0200
@@ -19,11 +19,22 @@
        _set_nvme_trtype "$@"
 }
 
+filter_connect_msg() {
+       if [[ ${nvme_trtype} == rdma ]]; then
+               grep --invert-match "nvme connect return error code"
+       fi
+}
+
+filter_state_write_msg() {
+       grep --invert-match "state: No such file or directory"
+}
+
 nvmet_debug_trigger_reset() {
        local nvmet_subsystem="$1"
        local dfs_path="${NVMET_DFS}/${nvmet_subsystem}"
 
-       find "${dfs_path}" -maxdepth 1 -type d -name 'ctrl*' -exec sh -c 'echo 
"fatal" > "$1/state"' _ {} \;
+       find "${dfs_path}" -maxdepth 1 -type d -name 'ctrl*' -exec sh -c \
+            'echo "fatal" > "$1/state" ' _ {} \; |& filter_state_write_msg
 }
 
 nvmet_reset_loop() {
@@ -51,7 +62,8 @@
        # The target reset is triggered with an even number timeout, while the
        # host reconnects with an odd number timeout.
        for ((i = 0; i <= 5; i++)); do
-               _nvme_connect_subsys --keep-alive-tmo 1 --reconnect-delay 1 
--no-wait-ns
+               _nvme_connect_subsys --keep-alive-tmo 1 --reconnect-delay 1 \
+                                    --no-wait-ns | filter_connect_msg
                sleep 3
                _nvme_disconnect_subsys >> "$FULL" 2>&1
        done

Reply via email to