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