I'm trying to implement a completely synchronous mmap in my
filesystem, but am running into some difficulty and was wondering if
someone could give me some insight/clue.
I want all my file system's operations to be complete uncached and
synchronous, but I also want to support mmap. The problem is that
mmap writes don't seem to register right away. If I have a test app:
start = mmap(0, 8192, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if((int)start==-1) {
perror("mmap:");
exit(-1);
}
memcpy(buffer, start, 10);
buffer[10] = 0;
printf("reply: (%s)\n", buffer);
sprintf(start, "hello world\n");
memcpy(buffer, start, 10);
buffer[10] = 0;
printf("reply2: (%s)\n", buffer);
munmap(start, 8192);
close(fd);
I get the right results (because the read is also an mmap through the
buffer, but it looks like I don't see the file's set_page_dirty method
called until after I see the second read. If I do use normal reads
(instead of mmap reads) I get the wrong results because my normal file
read method doesn't go through the page cache.
What am I doing wrong? Is what I'm trying to do impossible, and if
so, how can I get as close as possible?
Thanks in advance for any help.
-eric
-
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html