X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=engines%2Fbinject.c;h=47d40fefbb3f6d8fd0a2037d22da60a5f21cbdfb;hb=ae38c0dcd570265aef09aa132ce27278d8909a1d;hp=44a3796c6782f30e69a3dae9b081fdebccadc7a9;hpb=1ef2b6be973eded12827990ae1a9eb28b7b20be7;p=fio.git diff --git a/engines/binject.c b/engines/binject.c index 44a3796c..47d40fef 100644 --- a/engines/binject.c +++ b/engines/binject.c @@ -12,6 +12,8 @@ #include #include #include +#include +#include #include "../fio.h" @@ -144,7 +146,7 @@ static int fio_binject_getevents(struct thread_data *td, unsigned int min, for (i = 0; i < events; i++) { struct b_user_cmd *buc = (struct b_user_cmd *) buf + i; - bd->events[ev_index] = (struct io_u *) buc->usr_ptr; + bd->events[ev_index] = (struct io_u *) (unsigned long) buc->usr_ptr; ev_index++; } } @@ -231,6 +233,17 @@ static struct io_u *fio_binject_event(struct thread_data *td, int event) return bd->events[event]; } +static int binject_open_ctl(struct thread_data *td) +{ + int fd; + + fd = open("/dev/binject-ctl", O_RDWR); + if (fd < 0) + td_verror(td, errno, "open binject-ctl"); + + return fd; +} + static void binject_unmap_dev(struct thread_data *td, struct binject_file *bf) { struct b_ioctl_cmd bic; @@ -241,19 +254,14 @@ static void binject_unmap_dev(struct thread_data *td, struct binject_file *bf) bf->fd = -1; } - fdb = open("/dev/binject-ctl", O_RDWR); - if (fdb < 0) { - td_verror(td, errno, "open binject-ctl"); + fdb = binject_open_ctl(td); + if (fdb < 0) return; - } bic.minor = bf->minor; - if (ioctl(fdb, 1, &bic) < 0) { + if (ioctl(fdb, B_IOCTL_DEL, &bic) < 0) td_verror(td, errno, "binject dev unmap"); - close(fdb); - return; - } close(fdb); } @@ -266,15 +274,13 @@ static int binject_map_dev(struct thread_data *td, struct binject_file *bf, struct stat sb; int fdb, dev_there, loops; - fdb = open("/dev/binject-ctl", O_RDWR); - if (fdb < 0) { - td_verror(td, errno, "binject ctl open"); + fdb = binject_open_ctl(td); + if (fdb < 0) return 1; - } bic.fd = fd; - if (ioctl(fdb, 0, &bic) < 0) { + if (ioctl(fdb, B_IOCTL_ADD, &bic) < 0) { td_verror(td, errno, "binject dev map"); close(fdb); return 1; @@ -410,7 +416,7 @@ static struct ioengine_ops ioengine = { .open_file = fio_binject_open_file, .close_file = fio_binject_close_file, .get_file_size = generic_get_file_size, - .flags = FIO_RAWIO | FIO_BARRIER, + .flags = FIO_RAWIO | FIO_BARRIER | FIO_MEMALIGN, }; #else /* FIO_HAVE_BINJECT */