diff -Naur linux-2.4.25-1um/arch/um/drivers/ubd_user.c linux-2.4.25-1um-odirect/arch/um/drivers/ubd_user.c --- linux-2.4.25-1um/arch/um/drivers/ubd_user.c 2004-03-04 10:06:25.000000000 -0600 +++ linux-2.4.25-1um-odirect/arch/um/drivers/ubd_user.c 2004-03-04 10:18:42.000000000 -0600 @@ -15,6 +15,7 @@ #include #include #include +#include #include "asm/types.h" #include "user_util.h" #include "kern_util.h" @@ -26,6 +27,8 @@ #include #include +char *directbuf; + static int same_backing_files(char *from_cmdline, char *from_cow, char *cow) { struct uml_stat buf1, buf2; @@ -269,11 +272,15 @@ return; } if(req->op == UBD_READ){ + printk("Reading..\n"); n = 0; do { buf = &buf[n]; len -= n; - n = os_read_file(req->fds[bit], buf, len); +// n = os_read_file(req->fds[bit], buf, len); +// n = os_read_file(req->fds[bit], directbuf, getpagesize()); + n = read(req->fds[bit], directbuf, getpagesize()); + memcpy (buf, directbuf, len); if (n < 0) { printk("do_io - read failed, err = %d " "fd = %d\n", -n, req->fds[bit]); @@ -284,7 +291,10 @@ if (n < len) memset(&buf[n], 0, len - n); } else { + printk("Writing..\n"); n = os_write_file(req->fds[bit], buf, len); +// memcpy(directbuf, buf, sizeof(buf)); +// n = write(req->fds[bit], directbuf, getpagesize()); if(n != len){ printk("do_io - write failed err = %d " "fd = %d\n", -n, req->fds[bit]); @@ -338,6 +348,7 @@ { int pid, fds[2], err; + directbuf = memalign(getpagesize(), getpagesize()); err = os_pipe(fds, 1, 1); if(err < 0){ printk("start_io_thread - os_pipe failed, err = %d\n", -err); diff -Naur linux-2.4.25-1um/arch/um/os/file.c linux-2.4.25-1um-odirect/arch/um/os/file.c --- linux-2.4.25-1um/arch/um/os/file.c 2004-03-04 10:06:25.000000000 -0600 +++ linux-2.4.25-1um-odirect/arch/um/os/file.c 2004-03-03 21:20:16.000000000 -0600 @@ -265,6 +265,10 @@ if(flags.c) f |= O_CREAT; if(flags.t) f |= O_TRUNC; if(flags.e) f |= O_EXCL; + if (strstr(file,"rootfs") || strstr(file,"swapfs")) { + f |= O_DIRECT; + printk("%s\n", file); + } fd = open64(file, f, mode); if(fd < 0) diff -Naur linux-2.4.25-1um/arch/um/os-Linux/file.c linux-2.4.25-1um-odirect/arch/um/os-Linux/file.c --- linux-2.4.25-1um/arch/um/os-Linux/file.c 2004-03-04 10:06:25.000000000 -0600 +++ linux-2.4.25-1um-odirect/arch/um/os-Linux/file.c 2004-03-03 21:20:16.000000000 -0600 @@ -265,6 +265,10 @@ if(flags.c) f |= O_CREAT; if(flags.t) f |= O_TRUNC; if(flags.e) f |= O_EXCL; + if (strstr(file,"rootfs") || strstr(file,"swapfs")) { + f |= O_DIRECT; + printk("%s\n", file); + } fd = open64(file, f, mode); if(fd < 0)