2005-03-02 05:34:48

by Junfeng Yang

[permalink] [raw]
Subject: O_DIRECT on 2.4 ext3


Hi,

I tried to read from a regular ext3 file opened as O_DIRECT, but got the
"Invalid argument" error. Running the same test program on a block device
succeeded.

uname -a shows
Linux ******* 2.4.27-2-686-smp #1 SMP Thu Jan 20 11:02:39 JST 2005 i686
GNU/Linux

My test case is
#include <sys/types.h>
#include <sys/stat.h>
#include <asm/fcntl.h>
#include <stdio.h>
#include <assert.h>

#define BLK (4096U)
main()
{
char buf[BLK * 2];
char *p = (char*)((((unsigned)buf) + (BLK-1)) & ~(BLK-1));
int fd, l;

fprintf(stderr, "buf = %p, p = %p\n", buf, p);
if((fd=open("sbd0", O_RDONLY|O_DIRECT)) < 0) {
perror("open");
assert(0);
}
if((l=pread(fd, p, BLK, 0)) < 0) {
perror("pread");
assert(0);
}
fprintf(stderr, "pread returns %d\n", l);
close (fd);
}

Does anyone know what's going on?

Thanks,
-Junfeng


2005-03-02 06:42:21

by Andreas Dilger

[permalink] [raw]
Subject: Re: O_DIRECT on 2.4 ext3

On Mar 01, 2005 21:34 -0800, Junfeng Yang wrote:
> I tried to read from a regular ext3 file opened as O_DIRECT, but got the
> "Invalid argument" error. Running the same test program on a block device
> succeeded.

ext3 doesn't support the direct_IO method in 2.4 kernels, though there
was a patch at one time.

Cheers, Andreas
--
Andreas Dilger
http://sourceforge.net/projects/ext2resize/
http://members.shaw.ca/adilger/ http://members.shaw.ca/golinux/


Attachments:
(No filename) (468.00 B)
(No filename) (189.00 B)
Download all attachments