xfs
[Top] [All Lists]

[PATCH] xfstests: posix_memalign and io_submit do not set errno

To: xfs@xxxxxxxxxxx
Subject: [PATCH] xfstests: posix_memalign and io_submit do not set errno
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Thu, 7 Nov 2013 09:00:45 -0800
Delivered-to: xfs@xxxxxxxxxxx
User-agent: Mutt/1.5.21 (2010-09-15)
posix_memalign and io_submit do not set errno, but rather return the
error respectively the negated error directly.

Found this out while figuring out why 240 reported an impossible error
from io_submit when run on NFS.


Signed-off-by: Christoph Hellwig <hch@xxxxxx>

diff --git a/src/aio-dio-regress/aiodio_sparse2.c 
b/src/aio-dio-regress/aiodio_sparse2.c
index 79aa924..51ede5b 100644
--- a/src/aio-dio-regress/aiodio_sparse2.c
+++ b/src/aio-dio-regress/aiodio_sparse2.c
@@ -117,8 +117,10 @@ void aiodio_sparse(char *filename, int align, int 
writesize, int startoffset, in
        for (i = 0; i < num_aio; i++) {
                void *bufptr;
 
-               if (posix_memalign(&bufptr, align, writesize)) {
-                       perror("cannot malloc aligned memory");
+               w = posix_memalign(&bufptr, align, writesize);
+               if (w) {
+                       fprintf(stderr, "cannot malloc aligned memory: %s\n",
+                               strerror(w));
                        close(fd);
                        unlink(filename);
                        return;
@@ -131,8 +133,10 @@ void aiodio_sparse(char *filename, int align, int 
writesize, int startoffset, in
        /*
         * start the 1st num_aio write requests
         */
-       if ((w = io_submit(myctx, num_aio, iocbs)) < 0) {
-               perror("io_submit failed");
+       w = io_submit(myctx, num_aio, iocbs);
+       if (w < 0) {
+               fprintf(stderr, "io_submit failed: %s\n",
+                       strerror(-w));
                close(fd);
                unlink(filename);
                return;
@@ -182,10 +186,11 @@ void aiodio_sparse(char *filename, int align, int 
writesize, int startoffset, in
                /* start next write */
                io_prep_pwrite(iocbp, fd, iocbp->u.c.buf, writesize, offset);
                offset += step;
-               if ((w = io_submit(myctx, 1, &iocbp)) < 0) {
-                       fprintf(stderr, "io_submit failed at offset %lld\n",
-                               (long long)offset);
-                       perror("");
+               w = io_submit(myctx, 1, &iocbp);
+               if (w < 0) {
+                       fprintf(stderr, "io_submit failed at offset %lld: %s\n",
+                               (long long)offset,
+                               strerror(-w));
                        break;
                }
                if (debug)
@@ -200,8 +205,10 @@ void aiodio_sparse(char *filename, int align, int 
writesize, int startoffset, in
                int n;
                struct iocb *iocbp;
 
-               if ((n = io_getevents(myctx, 1, 1, &event, 0)) != 1) {
-                       perror("io_getevents failed");
+               n = io_getevents(myctx, 1, 1, &event, 0);
+               if (n != 1) {
+                       fprintf(stderr, "io_getevents failed: %s\n",
+                                strerror(-n));
                        break;
                }
                aio_inflight--;
diff --git a/src/fsync-tester.c b/src/fsync-tester.c
index 1c03ed0..657e00f 100644
--- a/src/fsync-tester.c
+++ b/src/fsync-tester.c
@@ -437,15 +437,16 @@ int main(int argc, char **argv)
        if (direct_io) {
                flags |= O_DIRECT;
                ret = posix_memalign((void **)&buf, getpagesize(), 4096);
-               if (ret)
-                       buf = NULL;
+               if (ret) {
+                       fprintf(stderr, "Error allocating buf: %d\n", ret);
+                       return 1;
+               }
        } else {
                buf = malloc(4096);
-       }
-
-       if (!buf) {
-               fprintf(stderr, "Error allocating buf: %d\n", errno);
-               return 1;
+               if (!buf) {
+                       fprintf(stderr, "Error allocating buf: %d\n", errno);
+                       return 1;
+               }
        }
 
        test_fd = open(fname, flags, 0644);
diff --git a/src/randholes.c b/src/randholes.c
index 545ee8e..5ad602e 100644
--- a/src/randholes.c
+++ b/src/randholes.c
@@ -193,11 +193,13 @@ writeblks(char *fname, int fd, size_t alignment)
        __uint64_t offset;
        char *buffer = NULL;
        int block;
+       int ret;
        struct flock64 fl;
 
        if (!test) {
-               if (posix_memalign((void **) &buffer, alignment, blocksize)) {
-                       perror("malloc");
+               ret = posix_memalign((void **) &buffer, alignment, blocksize);
+               if (ret) {
+                       fprintf(stderr, "posix_memalign: %s\n", strerror(ret));
                        exit(1);
                }
                memset(buffer, 0, blocksize);
@@ -279,8 +281,9 @@ readblks(int fd, size_t alignment)
        if (alloconly)
                return 0;
        xfer = READ_XFER*blocksize;
-       if (posix_memalign((void **) &buffer, alignment, xfer)) {
-               perror("malloc");
+       err = posix_memalign((void **) &buffer, alignment, xfer);
+       if (err) {
+               fprintf(stderr, "posix_memalign: %s\n", strerror(err));
                exit(1);
        }
        memset(buffer, 0, xfer);
diff --git a/src/trunc.c b/src/trunc.c
index 38fb21f..c609852 100644
--- a/src/trunc.c
+++ b/src/trunc.c
@@ -69,10 +69,12 @@ while((c=getopt(argc,argv,"f:"))!=EOF) {
        }
 
        err = posix_memalign((void **)&buf, ALIGNMENT, BUFSIZE);
-       if (err < 0) perror("posix_memalign failed");
+       if (err)
+               fprintf(stderr, "posix_memalign failed: %s\n", strerror(err));
 
        err = posix_memalign((void **)&goodbuf, ALIGNMENT, BUFSIZE);
-       if (err < 0) perror("posix_memalign failed");
+       if (err)
+               fprintf(stderr, "posix_memalign failed: %s\n", strerror(err));
 
        err = unlink(filename);
 /*     if (err < 0) perror("unlink failed");*/

<Prev in Thread] Current Thread [Next in Thread>