Message ID | 20231026174153.1133-4-mwilck@suse.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Delegated to: | christophe varoqui |
Headers | show |
Series | multipath: aio, systemd, and documentation improvements | expand |
On Thu, Oct 26, 2023 at 07:41:42PM +0200, mwilck@suse.com wrote: > From: Martin Wilck <mwilck@suse.com> > > libaio uses a different error return convention than glibc. The error code is > not returned in errno, but as the negated return value of the function. > Adapt the directio checker code. > > Signed-off-by: Martin Wilck <mwilck@suse.com> Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com> > --- > libmultipath/checkers/directio.c | 13 ++++++------- > 1 file changed, 6 insertions(+), 7 deletions(-) > > diff --git a/libmultipath/checkers/directio.c b/libmultipath/checkers/directio.c > index 83ab29f..12b8be4 100644 > --- a/libmultipath/checkers/directio.c > +++ b/libmultipath/checkers/directio.c > @@ -70,6 +70,7 @@ static struct aio_group * > add_aio_group(void) > { > struct aio_group *aio_grp; > + int rc; > > aio_grp = malloc(sizeof(struct aio_group)); > if (!aio_grp) > @@ -77,9 +78,9 @@ add_aio_group(void) > memset(aio_grp, 0, sizeof(struct aio_group)); > INIT_LIST_HEAD(&aio_grp->orphans); > > - if (io_setup(AIO_GROUP_SIZE, &aio_grp->ioctx) != 0) { > + if ((rc = io_setup(AIO_GROUP_SIZE, &aio_grp->ioctx)) != 0) { > LOG(1, "io_setup failed"); > - if (errno == EAGAIN) > + if (rc == -EAGAIN) > LOG(1, "global number of io events too small. Increase fs.aio-max-nr with sysctl"); > free(aio_grp); > return NULL; > @@ -259,7 +260,6 @@ get_events(struct aio_group *aio_grp, struct timespec *timeout) > struct timespec *timep = timeout; > > do { > - errno = 0; > nr = io_getevents(aio_grp->ioctx, 1, 128, events, timep); > got_events |= (nr > 0); > > @@ -283,8 +283,7 @@ get_events(struct aio_group *aio_grp, struct timespec *timeout) > } while (nr == 128); /* assume there are more events and try again */ > > if (nr < 0) > - LOG(4, "async io getevents returned %i (errno=%s)", > - nr, strerror(errno)); > + LOG(4, "async io getevents returned %s", strerror(-nr)); > > return got_events; > } > @@ -320,8 +319,8 @@ check_state(int fd, struct directio_context *ct, int sync, int timeout_secs) > io_prep_pread(&ct->req->io, fd, ct->req->buf, > ct->req->blksize, 0); > ct->req->state = PATH_PENDING; > - if (io_submit(ct->aio_grp->ioctx, 1, ios) != 1) { > - LOG(3, "io_submit error %i", errno); > + if ((rc = io_submit(ct->aio_grp->ioctx, 1, ios)) != 1) { > + LOG(3, "io_submit error %i", -rc); > return PATH_UNCHECKED; > } > } > -- > 2.42.0
diff --git a/libmultipath/checkers/directio.c b/libmultipath/checkers/directio.c index 83ab29f..12b8be4 100644 --- a/libmultipath/checkers/directio.c +++ b/libmultipath/checkers/directio.c @@ -70,6 +70,7 @@ static struct aio_group * add_aio_group(void) { struct aio_group *aio_grp; + int rc; aio_grp = malloc(sizeof(struct aio_group)); if (!aio_grp) @@ -77,9 +78,9 @@ add_aio_group(void) memset(aio_grp, 0, sizeof(struct aio_group)); INIT_LIST_HEAD(&aio_grp->orphans); - if (io_setup(AIO_GROUP_SIZE, &aio_grp->ioctx) != 0) { + if ((rc = io_setup(AIO_GROUP_SIZE, &aio_grp->ioctx)) != 0) { LOG(1, "io_setup failed"); - if (errno == EAGAIN) + if (rc == -EAGAIN) LOG(1, "global number of io events too small. Increase fs.aio-max-nr with sysctl"); free(aio_grp); return NULL; @@ -259,7 +260,6 @@ get_events(struct aio_group *aio_grp, struct timespec *timeout) struct timespec *timep = timeout; do { - errno = 0; nr = io_getevents(aio_grp->ioctx, 1, 128, events, timep); got_events |= (nr > 0); @@ -283,8 +283,7 @@ get_events(struct aio_group *aio_grp, struct timespec *timeout) } while (nr == 128); /* assume there are more events and try again */ if (nr < 0) - LOG(4, "async io getevents returned %i (errno=%s)", - nr, strerror(errno)); + LOG(4, "async io getevents returned %s", strerror(-nr)); return got_events; } @@ -320,8 +319,8 @@ check_state(int fd, struct directio_context *ct, int sync, int timeout_secs) io_prep_pread(&ct->req->io, fd, ct->req->buf, ct->req->blksize, 0); ct->req->state = PATH_PENDING; - if (io_submit(ct->aio_grp->ioctx, 1, ios) != 1) { - LOG(3, "io_submit error %i", errno); + if ((rc = io_submit(ct->aio_grp->ioctx, 1, ios)) != 1) { + LOG(3, "io_submit error %i", -rc); return PATH_UNCHECKED; } }