X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=engines%2Fsg.c;h=99c5856a5082d816863af2b693c3effb100edb48;hb=2dc1bbeb58edc85f2829eed6729862c438ea2353;hp=3a6a2486b758df41ea749482c88efa91b2378ae4;hpb=b5af82930ccfd7dda6a1b11794efb452eb76d8dc;p=fio.git diff --git a/engines/sg.c b/engines/sg.c index 3a6a2486..99c5856a 100644 --- a/engines/sg.c +++ b/engines/sg.c @@ -1,5 +1,7 @@ /* - * scsi generic sg v3 io engine + * sg engine + * + * IO engine that uses the Linux SG v3 interface to talk to SCSI devices * */ #include @@ -69,8 +71,9 @@ static int fio_sgio_getevents(struct thread_data *td, int min, int max, */ struct fio_file *f = &td->files[0]; struct sgio_data *sd = td->io_ops->data; - int left = max, ret, events, i, r = 0; + int left = max, ret, r = 0; void *buf = sd->sgbuf; + unsigned int i, events; /* * Fill in the file descriptors @@ -94,7 +97,7 @@ static int fio_sgio_getevents(struct thread_data *td, int min, int max, if (!min) break; - ret = poll(sd->pfds, td->nr_files, -1); + ret = poll(sd->pfds, td->o.nr_files, -1); if (ret < 0) { if (!r) r = -errno; @@ -103,7 +106,7 @@ static int fio_sgio_getevents(struct thread_data *td, int min, int max, } else if (!ret) continue; - if (pollin_events(sd->pfds, td->nr_files)) + if (pollin_events(sd->pfds, td->o.nr_files)) break; } while (1); @@ -191,7 +194,7 @@ static int fio_sgio_doio(struct thread_data *td, struct io_u *io_u, int sync) { struct fio_file *f = io_u->file; - if (td->filetype == FIO_TYPE_BD) + if (f->filetype == FIO_TYPE_BD) return fio_sgio_ioctl_doio(td, f, io_u); return fio_sgio_rw_doio(f, io_u, sync); @@ -322,23 +325,23 @@ static int fio_sgio_init(struct thread_data *td) sd = malloc(sizeof(*sd)); memset(sd, 0, sizeof(*sd)); - sd->cmds = malloc(td->iodepth * sizeof(struct sgio_cmd)); - memset(sd->cmds, 0, td->iodepth * sizeof(struct sgio_cmd)); - sd->events = malloc(td->iodepth * sizeof(struct io_u *)); - memset(sd->events, 0, td->iodepth * sizeof(struct io_u *)); - sd->pfds = malloc(sizeof(struct pollfd) * td->nr_files); - memset(sd->pfds, 0, sizeof(struct pollfd) * td->nr_files); - sd->fd_flags = malloc(sizeof(int) * td->nr_files); - memset(sd->fd_flags, 0, sizeof(int) * td->nr_files); - sd->sgbuf = malloc(sizeof(struct sg_io_hdr) * td->iodepth); - memset(sd->sgbuf, 0, sizeof(struct sg_io_hdr) * td->iodepth); + sd->cmds = malloc(td->o.iodepth * sizeof(struct sgio_cmd)); + memset(sd->cmds, 0, td->o.iodepth * sizeof(struct sgio_cmd)); + sd->events = malloc(td->o.iodepth * sizeof(struct io_u *)); + memset(sd->events, 0, td->o.iodepth * sizeof(struct io_u *)); + sd->pfds = malloc(sizeof(struct pollfd) * td->o.nr_files); + memset(sd->pfds, 0, sizeof(struct pollfd) * td->o.nr_files); + sd->fd_flags = malloc(sizeof(int) * td->o.nr_files); + memset(sd->fd_flags, 0, sizeof(int) * td->o.nr_files); + sd->sgbuf = malloc(sizeof(struct sg_io_hdr) * td->o.iodepth); + memset(sd->sgbuf, 0, sizeof(struct sg_io_hdr) * td->o.iodepth); td->io_ops->data = sd; /* * we want to do it, regardless of whether odirect is set or not */ - td->override_sync = 1; + td->o.override_sync = 1; return 0; } @@ -347,12 +350,12 @@ static int fio_sgio_type_check(struct thread_data *td, struct fio_file *f) struct sgio_data *sd = td->io_ops->data; unsigned int bs; - if (td->filetype == FIO_TYPE_BD) { + if (f->filetype == FIO_TYPE_BD) { if (ioctl(f->fd, BLKSSZGET, &bs) < 0) { td_verror(td, errno, "ioctl"); return 1; } - } else if (td->filetype == FIO_TYPE_CHAR) { + } else if (f->filetype == FIO_TYPE_CHAR) { int version, ret; if (ioctl(f->fd, SG_GET_VERSION_NUM, &version) < 0) { @@ -370,7 +373,7 @@ static int fio_sgio_type_check(struct thread_data *td, struct fio_file *f) sd->bs = bs; - if (td->filetype == FIO_TYPE_BD) { + if (f->filetype == FIO_TYPE_BD) { td->io_ops->getevents = NULL; td->io_ops->event = NULL; }