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
This commit is contained in:
Alan Somers 2024-06-18 18:17:31 -06:00
parent bb95fbf634
commit 873881b7db
4 changed files with 29 additions and 21 deletions

View File

@ -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

View File

@ -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);

View File

@ -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"

View File

@ -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