lkml.org 
[lkml]   [2003]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRE: DIRECT IO for ext3/ext2.
Date
From
Hi Andrew,

Thanks for your reply. I looked into the boundary alignment issue.
Observed something strange happening;

I wrote my own kernel module and then;
1. retrieved the block size = 4096 using block_size(struct block_device
*bdev)
2. in the user application i did a lseek by 4906 (block size seek)
3. then found the address of the variable i wanted to read into, to be
block
size aligned.

However, the read still seems to fail with the O_DIRECT flag specified.
The same check _passes if i do not specify the flag in open of the
device.

Boundary issues seem to be not the cause of failure here.
Would have any more kind suggestions on something that i should do or
could be missing on?

Regards
Dhruv

>>-----Original Message-----
>>From: Andrew Morton [mailto:akpm@osdl.org]
>>Sent: Friday, November 21, 2003 11:11 PM
>>To: Dhruv Prem Anand (WT01 - EMBEDDED & PRODUCT ENGINEERING SOLUTIONS)
>>Cc: linux-kernel@vger.kernel.org; akpm@zip.com.au;
>>janetinc@us.ibm.com; pbadari@us.ibm.com; nathans@sgi.com
>>Subject: Re: DIRECT IO for ext3/ext2.
>>
>>
>><dhruv.anand@wipro.com> wrote:
>>>
>>>
>>> Hi,
>>> I am working on an application on linux-2.6 that needs to
>>bypass the
>>> buffer cache. In order to do so i use the direct IO functionality.
>>> Although open to the device succeeds with the DIRECT_IO flag, read
>>> from the device fails.
>>>
>>> Following is the exceprt fromt he code to open and read;
>>> --------------------------------------------------------
>>>
>>> if ((devf = open(dumpdev, O_RDONLY | O_DIRECT, 0)) < 0) {
>>> fprintf(KL_ERRORFP, "Error: open failed!\n");
>>> ...
>>> }
>>>
>>> if(err = read(devf, &magic_nr, sizeof(magic_nr)) !=
>>sizeof(magic_nr)) {
>>> fprintf(KL_ERRORFP, "Error: read() failed!\n");
>>> ...
>>> }
>>>
>>> ---------------------------------------------------------
>>> I am returned an errno=22, indicating 'Invalid argument'
>>>
>>
>>O_DIRECT reads must be aligned to the filesystem blocksize.
>>Both the memory address and the file offset must be thus aligned.
>>
>>
-
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/

\
 
 \ /
  Last update: 2005-03-22 13:58    [from the cache]
©2003-2014 Jasper Spaans. Advertise on this site