git: 873881b7dbb7 - main - targ: fix compiling the example

From: Alan Somers <asomers_at_FreeBSD.org>
Date: Wed, 19 Jun 2024 00:18:59 UTC
The branch main has been updated by asomers:

URL: https://cgit.FreeBSD.org/src/commit/?id=873881b7dbb72077f3723f49a9f10a432231c532

commit 873881b7dbb72077f3723f49a9f10a432231c532
Author:     Alan Somers <asomers@FreeBSD.org>
AuthorDate: 2024-06-19 00:17:31 +0000
Commit:     Alan Somers <asomers@FreeBSD.org>
CommitDate: 2024-06-19 00:17:31 +0000

    targ: fix compiling the example
    
    The targ example program doesn't compile with current clang, and
    probably hasn't for multiple releases.  Fix the build.  I don't have the
    right hardware to test it, though.
    
    MFC after:      2 weeks
    Sponsored by:   Axcient
---
 share/examples/scsi_target/Makefile      |  6 +++++-
 share/examples/scsi_target/scsi_cmds.c   |  6 +-----
 share/examples/scsi_target/scsi_target.c | 32 ++++++++++++++++++--------------
 share/examples/scsi_target/scsi_target.h |  6 +++++-
 4 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/share/examples/scsi_target/Makefile b/share/examples/scsi_target/Makefile
index 39950b8c0ac1..1e2c076591bf 100644
--- a/share/examples/scsi_target/Makefile
+++ b/share/examples/scsi_target/Makefile
@@ -4,7 +4,11 @@ FILESDIR=${SHAREDIR}/examples/${PROG}
 PROG=	scsi_target
 SRCS=	scsi_target.h scsi_target.c scsi_cmds.c
 DPADD=	${LIBCAM} ${LIBSBUF}
-LDADD=	-lcam -lsbuf
+LIBADD+=	cam
+LIBADD+=	sbuf
+# cast-qual is triggered only in a code path where the volatile keyword doesn't
+# matter
+CFLAGS.scsi_cmds.c=	-Wno-cast-qual
 
 MAN=	scsi_target.8
 
diff --git a/share/examples/scsi_target/scsi_cmds.c b/share/examples/scsi_target/scsi_cmds.c
index 43217a562aba..122d4dec6287 100644
--- a/share/examples/scsi_target/scsi_cmds.c
+++ b/share/examples/scsi_target/scsi_cmds.c
@@ -102,10 +102,6 @@ static struct targ_cdb_handlers cdb_handlers[] = {
 
 static struct scsi_inquiry_data inq_data;
 static struct initiator_state istates[MAX_INITIATORS];
-extern int		debug;
-extern off_t		volume_size;
-extern u_int		sector_size;
-extern size_t		buf_size;
 
 cam_status
 tcmd_init(u_int16_t req_inq_flags, u_int16_t sim_inq_flags)
@@ -553,7 +549,7 @@ tcmd_rdwr_decode(struct ccb_accept_tio *atio, struct ccb_scsiio *ctio)
 		tcmd_illegal_req(atio, ctio);
 		return (0);
 	}
-	if (blkno + count > volume_size) {
+	if (((off_t)(blkno + count)) > volume_size) {
 		warnx("Attempt to access past end of volume");
 		tcmd_sense(ctio->init_id, ctio,
 			   SSD_KEY_ILLEGAL_REQUEST, 0x21, 0);
diff --git a/share/examples/scsi_target/scsi_target.c b/share/examples/scsi_target/scsi_target.c
index b8f3ed6a8a81..ee0a94e7a2a0 100644
--- a/share/examples/scsi_target/scsi_target.c
+++ b/share/examples/scsi_target/scsi_target.c
@@ -77,7 +77,9 @@ static struct ccb_queue		work_queue;
 static struct ioc_enable_lun	ioc_enlun = {
 	CAM_BUS_WILDCARD,
 	CAM_TARGET_WILDCARD,
-	CAM_LUN_WILDCARD
+	CAM_LUN_WILDCARD,
+	0,
+	0
 };
 
 /* Local functions */
@@ -208,7 +210,7 @@ main(int argc, char *argv[])
 	if (argc != 2)
 		usage();
 
-	sscanf(argv[0], "%u:%u:%u", &ioc_enlun.path_id, &ioc_enlun.target_id,
+	sscanf(argv[0], "%u:%u:%ju", &ioc_enlun.path_id, &ioc_enlun.target_id,
 	       &ioc_enlun.lun_id);
 	file_name = argv[1];
 
@@ -258,10 +260,12 @@ main(int argc, char *argv[])
 
 	if (notaio == 0) {
 		struct aiocb aio, *aiop;
+		void *aio_buf;
 		
 		/* See if we have we have working AIO support */
 		memset(&aio, 0, sizeof(aio));
-		aio.aio_buf = malloc(sector_size);
+		aio_buf = malloc(sector_size);
+		aio.aio_buf = aio_buf;
 		if (aio.aio_buf == NULL)
 			err(1, "malloc");
 		aio.aio_fildes = file_fd;
@@ -278,7 +282,7 @@ main(int argc, char *argv[])
 			assert(aiop == &aio);
 			signal(SIGSYS, SIG_DFL);
 		}
-		free((void *)aio.aio_buf);
+		free(aio_buf);
 		if (debug && notaio == 0)
 			warnx("aio support tested ok");
 	}
@@ -331,7 +335,7 @@ main(int argc, char *argv[])
 }
 
 static void
-cleanup()
+cleanup(void)
 {
 	struct ccb_hdr *ccb_h;
 
@@ -358,7 +362,7 @@ cleanup()
 
 /* Allocate ATIOs/INOTs and queue on HBA */
 static int
-init_ccbs()
+init_ccbs(void)
 {
 	int i;
 
@@ -395,7 +399,7 @@ init_ccbs()
 }
 
 static void
-request_loop()
+request_loop(void)
 {
 	struct kevent events[MAX_EVENTS];
 	struct timespec ts, *tptr;
@@ -535,10 +539,10 @@ request_loop()
 
 /* CCBs are ready from the kernel */
 static void
-handle_read()
+handle_read(void)
 {
 	union ccb *ccb_array[MAX_INITIATORS], *ccb;
-	int ccb_count, i, oo;
+	int ccb_count, i;
 
 	ccb_count = read(targ_fd, ccb_array, sizeof(ccb_array));
 	if (ccb_count <= 0) {
@@ -590,7 +594,7 @@ handle_read()
 			/* Queue on the appropriate ATIO */
 			queue_io(ctio);
 			/* Process any queued completions. */
-			oo += run_queue(c_descr->atio);
+			run_queue(c_descr->atio);
 			break;
 		}
 		case XPT_IMMEDIATE_NOTIFY:
@@ -840,7 +844,7 @@ send_ccb(union ccb *ccb, int priority)
 
 /* Return a CTIO/descr/buf combo from the freelist or malloc one */
 static struct ccb_scsiio *
-get_ctio()
+get_ctio(void)
 {
 	struct ccb_scsiio *ctio;
 	struct ctio_descr *c_descr;
@@ -938,7 +942,7 @@ get_sim_flags(u_int16_t *flags)
 }
 
 static void
-rel_simq()
+rel_simq(void)
 {
 	struct ccb_relsim crs;
 
@@ -953,7 +957,7 @@ rel_simq()
 
 /* Cancel all pending CCBs. */
 static void
-abort_all_pending()
+abort_all_pending(void)
 {
 	struct ccb_abort	 cab;
 	struct ccb_hdr		*ccb_h;
@@ -976,7 +980,7 @@ abort_all_pending()
 }
 
 static void
-usage()
+usage(void)
 {
 	fprintf(stderr,
 		"Usage: scsi_target [-AdSTY] [-b bufsize] [-c sectorsize]\n"
diff --git a/share/examples/scsi_target/scsi_target.h b/share/examples/scsi_target/scsi_target.h
index a873c050b7c6..57b6696d2e77 100644
--- a/share/examples/scsi_target/scsi_target.h
+++ b/share/examples/scsi_target/scsi_target.h
@@ -115,7 +115,11 @@ extern void		free_ccb(union ccb *ccb);
 static __inline u_int	min(u_int a, u_int b) { return (a < b ? a : b); }
 
 /* Global Data */
-extern int notaio;
+extern int	notaio;
+extern int	debug;
+extern off_t	volume_size;
+extern u_int	sector_size;
+extern size_t	buf_size;
 
 /*
  * Compat Defines