aboutsummaryrefslogtreecommitdiff
path: root/share/examples/scsi_target
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2024-06-19 00:17:31 +0000
committerAlan Somers <asomers@FreeBSD.org>2024-07-08 20:26:04 +0000
commitc1a5da044c6e692250bc5eddcb99c6e9f1ab4b78 (patch)
treec08c65ae264c7c5579f514ab6df8fab81e5c1d0b /share/examples/scsi_target
parent82c1ab4413e090f35870d471c97109299ad62fa8 (diff)
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. Sponsored by: Axcient (cherry picked from commit 873881b7dbb72077f3723f49a9f10a432231c532)
Diffstat (limited to 'share/examples/scsi_target')
-rw-r--r--share/examples/scsi_target/Makefile6
-rw-r--r--share/examples/scsi_target/scsi_cmds.c6
-rw-r--r--share/examples/scsi_target/scsi_target.c32
-rw-r--r--share/examples/scsi_target/scsi_target.h6
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