some code logic in diotest4.c likes below:
----
    ret = lseek(fd, offset, SEEK_SET);
    if ((ret >= 0) || (errno != EINVAL)) {
        tst_resm(TFAIL, "lseek allows negative offset. returns %d:%s", ret, 
strerror(errno));
        failed = TRUE;
        fail_count++;
    } else
        tst_resm(TPASS, "Negative Offset");

    ....
    ....

    ret = read(fd, buf, count);
    if (ret >= 0 || errno != errnum) {
        tst_resm(TFAIL, "read allows %s. returns %d: %s", msg, ret, 
strerror(errno));
        l_fail = TRUE;
    }
----

After lseek() return EINVAL, if read() return >= 0, the errno will not be 
setted to 0. The
errno will still be EINVAL.
The test failure message of read will be confusing in case that read() haven't 
failed as
expected but the errno is still set.

I hit this problem when test on nfs. In NFS, lseek() return EINVAL as excepted,
but the read() will return 1, when count = 1. But the errno is still EINVAL.
That's incorrect.

So I set errno = 0, before read() and all other functions which like this.

Signed-off-by: Zorro Lang <zl...@redhat.com>
---
 testcases/kernel/io/direct_io/diotest4.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/testcases/kernel/io/direct_io/diotest4.c 
b/testcases/kernel/io/direct_io/diotest4.c
index fa90a1e..82c5b33 100644
--- a/testcases/kernel/io/direct_io/diotest4.c
+++ b/testcases/kernel/io/direct_io/diotest4.c
@@ -107,6 +107,7 @@ runtest_f(int fd, char *buf, int offset, int count, int 
errnum, int testnum,
                        l_fail = TRUE;
                }
        } else {
+               errno = 0;
                ret = read(fd, buf, count);
                if (ret >= 0 || errno != errnum) {
                        tst_resm(TFAIL, "read allows %s. returns %d: %s",
@@ -121,6 +122,7 @@ runtest_f(int fd, char *buf, int offset, int count, int 
errnum, int testnum,
                        l_fail = TRUE;
                }
        } else {
+               errno = 0;
                ret = write(fd, buf, count);
                if (ret >= 0 || errno != errnum) {
                        tst_resm(TFAIL, "write allows %s.returns %d: %s",
@@ -247,6 +249,7 @@ int main(int argc, char *argv[])
        /* Test-1: Negative Offset */
        offset = -1;
        count = bufsize;
+       errno = 0;
        ret = lseek(fd, offset, SEEK_SET);
        if ((ret >= 0) || (errno != EINVAL)) {
                tst_resm(TFAIL, "lseek allows negative offset. returns %d:%s",
@@ -284,6 +287,7 @@ int main(int argc, char *argv[])
                fail_count++;
                tst_resm(TFAIL, "Read beyond the file size");
        } else {
+               errno = 0;
                ret = read(fd, buf2, count);
                if (ret > 0 || (ret < 0 && errno != EINVAL)) {
                        tst_resm(TFAIL,
@@ -392,6 +396,7 @@ int main(int argc, char *argv[])
                failed = TRUE;
                fail_count++;
        } else {
+               errno = 0;
                ret = read(fd, buf2, count);
                if (ret >= 0 || errno != EBADF) {
                        tst_resm(TFAIL,
@@ -417,6 +422,7 @@ int main(int argc, char *argv[])
                failed = TRUE;
                fail_count++;
        } else {
+               errno = 0;
                ret = write(fd, buf2, count);
                if (ret >= 0 || errno != EBADF) {
                        tst_resm(TFAIL,
@@ -460,6 +466,7 @@ int main(int argc, char *argv[])
                         strerror(errno));
                l_fail = TRUE;
        } else {
+               errno = 0;
                ret = read(fd, (char *)((ulong) ADDRESS_OF_MAIN & pagemask),
                         count);
                if (ret >= 0 || errno != EFAULT) {
-- 
1.9.3


------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to