git: 8a2b0aa31bea - stable/14 - ctl: Add CTL_IO_ASSERT wrapper macro
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 29 Jan 2026 00:03:28 UTC
The branch stable/14 has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=8a2b0aa31beaaa01b33034551e6dbd5cd6dc9786
commit 8a2b0aa31beaaa01b33034551e6dbd5cd6dc9786
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2024-05-02 23:30:44 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2026-01-29 00:01:15 +0000
ctl: Add CTL_IO_ASSERT wrapper macro
Currently, this pattern is commonly used to assert that a union ctl_io
is a SCSI request. In the future it will be used to assert other
types.
Suggested by: imp
Reviewed by: imp
Sponsored by: Chelsio Communications
Differential Revision: https://reviews.freebsd.org/D44844
(cherry picked from commit ac7a514e20f394ffed0126c0c356aa9107821880)
---
sys/cam/ctl/ctl.c | 12 ++++--------
sys/cam/ctl/ctl_backend_block.c | 3 +--
sys/cam/ctl/ctl_io.h | 15 +++++++++++++++
sys/cam/ctl/scsi_ctl.c | 3 +--
4 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/sys/cam/ctl/ctl.c b/sys/cam/ctl/ctl.c
index 7f703b42e0b3..09c6b26f0414 100644
--- a/sys/cam/ctl/ctl.c
+++ b/sys/cam/ctl/ctl.c
@@ -5112,8 +5112,7 @@ ctl_config_move_done(union ctl_io *io, bool samethr)
int retval;
CTL_DEBUG_PRINT(("ctl_config_move_done\n"));
- KASSERT(io->io_hdr.io_type == CTL_IO_SCSI,
- ("%s: unexpected I/O type %x", __func__, io->io_hdr.io_type));
+ CTL_IO_ASSERT(io, SCSI);
if (ctl_debug & CTL_DEBUG_CDB_DATA)
ctl_data_print(io);
@@ -10754,8 +10753,7 @@ static int
ctl_get_lba_len(union ctl_io *io, uint64_t *lba, uint64_t *len)
{
- KASSERT(io->io_hdr.io_type == CTL_IO_SCSI,
- ("%s: unexpected I/O type %x", __func__, io->io_hdr.io_type));
+ CTL_IO_ASSERT(io, SCSI);
switch (io->scsiio.cdb[0]) {
case COMPARE_AND_WRITE: {
@@ -10935,8 +10933,7 @@ ctl_extent_check_unmap(union ctl_io *io, uint64_t lba2, uint64_t len2)
uint64_t lba;
uint32_t len;
- KASSERT(io->io_hdr.io_type == CTL_IO_SCSI,
- ("%s: unexpected I/O type %x", __func__, io->io_hdr.io_type));
+ CTL_IO_ASSERT(io, SCSI);
/* If not UNMAP -- go other way. */
if (io->scsiio.cdb[0] != UNMAP)
@@ -12517,8 +12514,7 @@ ctl_datamove_done_process(union ctl_io *io)
struct bintime cur_bt;
#endif
- KASSERT(io->io_hdr.io_type == CTL_IO_SCSI,
- ("%s: unexpected I/O type %x", __func__, io->io_hdr.io_type));
+ CTL_IO_ASSERT(io, SCSI);
#ifdef CTL_TIME_IO
getbinuptime(&cur_bt);
diff --git a/sys/cam/ctl/ctl_backend_block.c b/sys/cam/ctl/ctl_backend_block.c
index dd6511295dc4..a5ec2533f4d7 100644
--- a/sys/cam/ctl/ctl_backend_block.c
+++ b/sys/cam/ctl/ctl_backend_block.c
@@ -1820,8 +1820,7 @@ ctl_be_block_submit(union ctl_io *io)
be_lun = (struct ctl_be_block_lun *)CTL_BACKEND_LUN(io);
- KASSERT(io->io_hdr.io_type == CTL_IO_SCSI,
- ("%s: unexpected I/O type %x", __func__, io->io_hdr.io_type));
+ CTL_IO_ASSERT(io, SCSI);
PRIV(io)->len = 0;
diff --git a/sys/cam/ctl/ctl_io.h b/sys/cam/ctl/ctl_io.h
index aa7a9c35c876..62ac05713b47 100644
--- a/sys/cam/ctl/ctl_io.h
+++ b/sys/cam/ctl/ctl_io.h
@@ -592,6 +592,21 @@ union ctl_io {
};
#ifdef _KERNEL
+#define _CTL_IO_ASSERT_1(io, _1) \
+ KASSERT((io)->io_hdr.io_type == CTL_IO_##_1, \
+ ("%s: unexpected I/O type %x", __func__, (io)->io_hdr.io_type))
+
+#define _CTL_IO_ASSERT_2(io, _1, _2) \
+ KASSERT((io)->io_hdr.io_type == CTL_IO_##_1 || \
+ (io)->io_hdr.io_type == CTL_IO_##_2, \
+ ("%s: unexpected I/O type %x", __func__, (io)->io_hdr.io_type))
+
+#define _CTL_IO_ASSERT_MACRO(io, _1, _2, NAME, ...) \
+ NAME
+
+#define CTL_IO_ASSERT(...) \
+ _CTL_IO_ASSERT_MACRO(__VA_ARGS__, _CTL_IO_ASSERT_2, \
+ _CTL_IO_ASSERT_1)(__VA_ARGS__)
union ctl_io *ctl_alloc_io(void *pool_ref);
union ctl_io *ctl_alloc_io_nowait(void *pool_ref);
diff --git a/sys/cam/ctl/scsi_ctl.c b/sys/cam/ctl/scsi_ctl.c
index 590631fc4326..8041ba9d0a76 100644
--- a/sys/cam/ctl/scsi_ctl.c
+++ b/sys/cam/ctl/scsi_ctl.c
@@ -1909,8 +1909,7 @@ ctlfe_datamove(union ctl_io *io)
struct cam_periph *periph;
struct ctlfe_lun_softc *softc;
- KASSERT(io->io_hdr.io_type == CTL_IO_SCSI,
- ("%s: unexpected I/O type %x", __func__, io->io_hdr.io_type));
+ CTL_IO_ASSERT(io, SCSI);
io->scsiio.ext_data_filled = 0;
ccb = PRIV_CCB(io);