> -----Original Message-----
> From: Garrett Cooper [mailto:[email protected]]
> Sent: Thursday, October 21, 2010 9:00 PM
> To: Mitani
> Cc: [email protected]
> Subject: Re: [LTP] POSIX "aio_return/2-1" failed.
>
> On Thu, Oct 21, 2010 at 4:50 AM, Mitani <[email protected]> wrote:
> >> -----Original Message-----
> >> From: Garrett Cooper [mailto:[email protected]]
> >> Sent: Thursday, October 21, 2010 6:42 PM
> >> To: Mitani
> >> Cc: [email protected]
> >> Subject: Re: [LTP] POSIX "aio_return/2-1" failed.
> >>
> >> On Mon, Oct 18, 2010 at 5:00 AM, Garrett Cooper <[email protected]>
> >> wrote:
> >> > On Thu, Oct 7, 2010 at 10:29 PM, Mitani <[email protected]> wrote:
> >> >> Hi,
> >> >>
> >> >>
> >> >> "conformance/interfaces/aio_return/2-1" failed with following
> >> message:
> >> >> ------------
> >> >> conformance/interfaces/aio_return/2-1: execution: FAILED:
> Output:
> >> >> aio_return/2-1.c Second call to aio_return() should return -1 :
> 111
> >> >> ------------
> >> >>
> >> >> Same problem occurs in "aio_return/3-2.c" and "aio_return/4-1".
> >> >>
> >> >> Environment is as follows:
> >> >> - RHEL5.5 --- (x86, x86_64, ia64)
> >> >> - RHEL4.8 --- (x86, x86_64, ia64)
> >> >>
> >> >>
> >> >> This testset seems to be the error root test for "aio_return()".
> >> >>
> >> >> First "aio_return()" returned with 111. This return value is the
> >> >> length of buffer of "aio_write()".
> >> >> But second "aio_return()" returned with 111, too. It's unexpected
> >> >> result for this test set.
> >> >> Therefore, this test failed.
> >> >>
> >> >> Man page says that
> >> >> "This function should be called only once for any given request,
> >> >> after
> >> >> aio_error(2) returns something other than EINPROGRESS.":
> >> >> ------------
> >> >> # LANG=C man 3 aio_return
> >> >>
> >> >> AIO_RETURN(3) Linux Programmer's Manual
> >> >> AIO_RETURN(3)
> >> >>
> >> >> NAME
> >> >> aio_return - get return status of asynchronous I/O
> operation
> >> >>
> >> >> SYNOPSIS
> >> >> #include <aio.h>
> >> >>
> >> >> ssize_t aio_return(struct aiocb *aiocbp);
> >> >>
> >> >> DESCRIPTION
> >> >> The aio_return function returns the final return status
> for
> >> the
> >> >> asynchronous I/O
> >> >> request with control block pointed to by aiocbp.
> >> >>
> >>
> >> This function should be called only once for an
> >> y given
> >> >> request, after
> >> >> aio_error(2) returns something other than EINPROGRESS.
> >> >>
> >> >> RETURN VALUE
> >> >> If the asynchronous I/O operation has completed, this
> >> function
> >> >> returns the value
> >> >> that would have been returned in case of a
> >> synchronous read,
> >> >> write, or fsync
> >> >> request. Otherwise the return value is undefined. On
> >> error,
> >> >> the error value is
> >> >> returned.
> >> >>
> >> >> ERRORS
> >> >> EINVAL aiocbp does not point at a control block for an
> >> >> asynchronous I/O request
> >> >> of which the return status has not been retrieved
> >> yet.
> >> >>
> >> >> CONFORMING TO
> >> >> POSIX 1003.1-2003
> >> >>
> >> >> SEE ALSO
> >>
> >> aio_cancel(3), aio_error(3), aio_fsync(3), aio_r
> >> ead(3),
> >> >> aio_suspend(3),
> >> >> aio_write(3)
> >> >>
> >> >> 2003-11-14
> >> >> AIO_RETURN(3)
> >> >> #
> >> >> ------------
> >> >>
> >> >> And, it says that
> >> >> "If the asynchronous I/O operation has completed, this function
> >> >> returns the value that would have been returned in case of a
> >> >> synchronous read, write, or fsync request. Otherwise the return
> >> >> value is undefined. On error, the error value is returned.".
> >> >>
> >> >>
> >> >> It can be supposed that the return value of second "aio_return()"
> >> is
> >> >> undefined.
> >> >> Therefore, it is not mistake that return value of the second
> >> "aio_return()"
> >> >> is one at success, I think.
> >> >> And, I think that "UNTESTED" or "UNRESOLVED" may be is more
> >> >> appropriate for this test.
> >> >
> >> > No. POSIX clearly states:
> >> >
> >> > "If the asynchronous I/O operation has completed, then the return
> >> > status, as described for read(), write(), and fsync(), shall be
> >> > returned. If the asynchronous I/O operation has not yet completed,
> >> the
> >> > results of aio_return() are undefined.
> >> >
> >> > If the aio_return() function fails, it shall return -1 and set
> errno
> >> > to indicate the error."
> >> >
> >> > ERRORS
> >> >
> >> > "The aio_return() function may fail if:
> >> >
> >> > [EINVAL]
> >> > The aiocbp argument does not refer to an asynchronous
> operation
> >> > whose return status has not yet been retrieved."
> >> >
> >> > What the test implementers were looking to do was test out
> that
> >> -1
> >> > / EINVAL were returned, and maybe that fact that they were testing
> >> was
> >> > in fact implementation defined, as opposed to what's stated in
> the
> >> > standard, as the spec doesn't state that the behavior for
> aio_return
> >> > would be s.t. the state of the AIO stream is reset when aio_return
> >> is
> >> > called.
> >> > So yes, I agree this should be fixed, but let me check with
> the
> >> > POSIX folks what the best course of action is.
> >>
> >> I've read into this a bit more, and I think that the aio_return
> >> testcases were written incorrectly. Please try out this testcase...
> >> if it works for you, then I'll apply necessary logic to other
> testcases
> >> as well.
> >> It worked for me at least on FreeBSD.
> >> Thanks,
> >> -Garrett
> >
> >
> > I confirmed that your revision worked in my environment.
> > I also look forward to other testcases (2-1, 3-2, 4-1) being revised.
>
> Please update your git, rebuild, and test :).
> Let me know if you run into any issues.
> Cheers,
> -Garrett
I tried to run "aio_return" tests, but some of them failed with following
message:
------------
conformance/interfaces/aio_return/3-2: execution: FAILED: Output:
aio_return/3-2.c aio_return() should fail with (-1, 22); failed with (4096,
0) instead
conformance/interfaces/aio_return/2-1: execution: FAILED: Output:
aio_return/2-1.c Second call to aio_return() should return -1; aio_return()
returned 111
------------
Environment is as follows:
- RHEL4.8 --- (x86, x86_64, ia64)
- RHEL5.5 --- (x86, x86_64, ia64)
- kernel --- kernel-2.6.9-89.EL
- glibc --- glibc-2.3.4-2.43
The reason of above failures is that second "aio_return()" doesn't return
"-1".
The manpage of "aio_return()" of "FreeBSD 9-current" says:
--------------------
RETURN VALUES
If the asynchronous I/O request has completed, the status is returned
as
described in read(2), write(2), or fsync(2). Otherwise, aio_return()
returns -1 and sets errno to indicate the error condition.
--------------------
http://www.freebsd.org/cgi/man.cgi?query=aio_return&apropos=0&sektion=0&manp
ath=FreeBSD+9-current&format=html
On the other hand, the manpage of RHEL4.8/RHEL5.5 says:
--------------------
RETURN VALUE
If the asynchronous I/O operation has completed, this function
returns
the value that would have been returned in case of a synchronous
read,
write, or fsync request. Otherwise the return value is undefined.
On
error, the error value is returned.
--------------------
According to this manual, the return value may not be "-1" in Redhat
systems.
Perhaps "aio_return()" doesn't have guarantee to return "-1" even in
other Linux systems, I think.
Regards--
-Tomonori Mitani
------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store
http://p.sf.net/sfu/nokia-dev2dev
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list