[PATCH] xfstests: fix async io error handling in fsx
Felix Blyakher
felixb at sgi.com
Mon Mar 30 13:53:21 CDT 2009
On Mar 30, 2009, at 12:54 PM, Christoph Hellwig wrote:
> On Mon, Mar 30, 2009 at 12:30:50AM -0500, Felix Blyakher wrote:
>> --- a/ltp/fsx.c
>> +++ b/ltp/fsx.c
>> @@ -976,19 +976,41 @@ __aio_rw(int rw, int fd, char *buf, unsigned
>> len, unsigned offset)
>> fprintf(stderr, "errcode=%d\n", ret);
>> fprintf(stderr, "aio_rw: io_submit failed: %s\n",
>> strerror(ret));
>> - return(-1);
>> + errno = -ret;
>> + return -1;
>
> I think we'd be better off having all these places that set errno in
> one
> place and use goto labels. That way you can also add a small comment
> about it.
Makes sense, will do.
>
>
>> + /*
>> + * The b0rked libaio defines event.res as signed.
>> + * However the kernel strucuture has it unsigned,
>> + * and it's used to pass negated error value.
>> + * Till the library is fixed use the temp var.
>> + */
>
> This comment seems backwards to the patch description and the actual
> code.
Hmm, not really.
If the libaio library would be correct (do you know whom to talk
to and where to send a patch), the code would look like this:
if (event.res >= 0)
fprintf(stderr, "bad io length: %lu instead
of %u\n",
event.res, len);
else {
fprintf(stderr, "errcode=%d\n", -event.res);
fprintf(stderr, "aio_rw: async io failed: %s
\n",
strerror(-event.res));
errno = -event.res;
return -1;
}
and no need for the temp var of right type, as in a patch now.
The comments just explains the need for that "long res" var.
It does not really describe the need to check the error value,
that's just the part of interface, I assume.
Though, I think, it would be clearer if I state the need to
check the error first, and then note why it could not be
done as above.
I'll repost.
Thanks,
Felix
More information about the xfs
mailing list