Re: Having problem with io_getevents with o_direct flag

Bobby Singh (bobbysingh22@hotmail.com)
Wed, 30 Apr 2003 01:13:05 -0700


Steve .. The problem was requesting min requests as 0. I changed to 1 and
now its working fine.

Thanks,
Bobby
P.S.: I was passing struct event * , wrote it wrong here while stating the
problem;-)

>From: Steven Pratt <slpratt@austin.ibm.com>
>To: Bobby Singh <bobbysingh22@hotmail.com>
>CC: linux-kernel@vger.kernel.org, linux-aio@kvack.org
>Subject: Re: Having problem with io_getevents with o_direct flag
>Date: Tue, 29 Apr 2003 08:09:00 -0500
>
>Well a couple of possibilities. First, are you opening a block device
>(like /dev/sdb) ? If you are, this is still broken in 2.5.67. A patch for
>this has been submitted to the aio list and is also available in the 2.5
>bugtraker (http://bugme.osdl.org) attached to bug 626.
>
>Also, as far as your code goes, the res from io_get_events only tells you
>that the io_get_events succeeded. To see if the IO actually succeeded you
>always need to check event.res. Be careful for event.res as there is a bug
>in libaio where event.res is defined as unsigned but it is really signed
>(negative=error, positive=bytesread/written).
>
>Also I see that you are setting the minimum number of events requested to
>0, not sure what this will do. Might want to set that to 1.
>
>Hmm, also see that you are passing in just a struct event where the API
>calls for a struct event * (actually an array of event structs). Not sure
>why this ever works.
>
>Hope this helps,
>Steve
>
>Bobby Singh wrote:
>
>>Hi,
>>
>> I am having problems with using io_getevents ? Is the o_direct aio
>>support stable in 2.5.67? Following is the scenario:
>>
>>Machine: Dell 500SC 1.13Gz
>>Original Kernel : 2.4.18-3 ( redhat 7.3)
>>Downloaded kernel 2.5.67 and compiled it.
>>Installed libaio-0.3.92 aio library.
>>
>>I am writing an io intensive application and want to leverage the o_direct
>>aio support. I am using in following way (borrowed from testcase in
>>libaio)
>>
>>struct iocb **pAiocb;
>>struct io_event event;
>>if(io_submit(io_ctx,numAiocb, pAiocb) <0)
>>{
>> perror("Error in io_submit");
>> return(-1);
>>}
>>for(i=0;i<numAiocb;i++)
>>{
>> if((res=io_getevents(io_ctx,0,1,event,NULL)) && (res != 1))
>> {
>> perror("Error in getevents");
>> return(-1);
>> }
>> printf("%d\n",event.res);
>>}
>>
>>
>>PROBLEM is : THe code doesn't print an ERROR but in "event.res" the amount
>>of data read is not same as requested. Sometimes the return size is ZERO
>>and event is returned.
>>
>>THE CODE WORKS fine if the file is opened WITHOUT O_DIRECT.
>>
>>Thanks,
>>Bobby
>>
>>_________________________________________________________________
>>Protect your PC - get McAfee.com VirusScan Online
>>http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963
>>
>>--
>>To unsubscribe, send a message with 'unsubscribe linux-aio' in
>>the body to majordomo@kvack.org. For more info on Linux AIO,
>>see: http://www.kvack.org/aio/
>>Don't email: <a href=mailto:"aart@kvack.org">aart@kvack.org</a>
>
>
>

_________________________________________________________________
The new MSN 8: smart spam protection and 2 months FREE*
http://join.msn.com/?page=features/junkmail

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/