RE: DIRECT IO for ext3/ext2.

From: dhruv.anand
Date: Fri Nov 21 2003 - 14:35:30 EST


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@xxxxxxxx]
>>Sent: Friday, November 21, 2003 11:11 PM
>>To: Dhruv Prem Anand (WT01 - EMBEDDED & PRODUCT ENGINEERING SOLUTIONS)
>>Cc: linux-kernel@xxxxxxxxxxxxxxx; akpm@xxxxxxxxxx;
>>janetinc@xxxxxxxxxx; pbadari@xxxxxxxxxx; nathans@xxxxxxx
>>Subject: Re: DIRECT IO for ext3/ext2.
>>
>>
>><dhruv.anand@xxxxxxxxx> 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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/