Re: DIRECT IO for ext3/ext2.

From: Andrew Morton
Date: Fri Nov 21 2003 - 12:36:04 EST


<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/