On Thu, 22 Apr 2004, Matthew Dillon wrote:
>     Sigh.  Run this program.  Note that the file contains an 'A' in the
>     first byte after you run it (hexdump -C test.dat).  Thus, msync()
>     is not destroying the page until AFTER it finishes flushing it to
>     disk.
> 
> /*
>  * x.c
>  */
> #include <sys/types.h>
> #include <sys/mman.h>
> #include <stdio.h>
> #include <unistd.h>
> #include <fcntl.h>
> 
> int
> main(int ac, char **av)
> {
>     int fd;
>     char *ptr;
> 
>     fd = open("test.dat", O_RDWR|O_CREAT|O_TRUNC, 0666);
>     ftruncate(fd, 4096);
>     ptr = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
>     *ptr = 'A';
>     msync(ptr, 4096, MS_INVALIDATE);
>     return(0);
> }
> 
>     Now run this program.  Note that the file still contains an 'A'
>     after you run it.  Thus, again, msync() is not destroying the page
>     until after it has been synchronized with the file.
> 
>     I also added some additional code to re-read *ptr after the msync
>     and observed the I/O go through to the disk, so it does appear to
>     be destroying the page.  But it is definitely flushing it to disk
>     first.
> 
>     If you can demonstrate a case where the page is being destroying
>     when it shouldn't be, then there's a bug that needs fixing.  Right
>     now though it seems to operate as expected.

But this is exactly what I want..

I want any unwrittendata to be written out, and pages containing written
out data to be discarded so that a reread is forced to go to disk.


> 
>                                               -Matt
> 
> /*
>  * y.c
>  */
> #include <sys/types.h>
> #include <sys/mman.h>
> #include <stdio.h>
> #include <unistd.h>
> #include <fcntl.h>
> 
> int
> main(int ac, char **av)
> {
>     int fd;
>     char *ptr;
> 
>     fd = open("test.dat", O_RDWR|O_CREAT|O_TRUNC, 0666);
>     ftruncate(fd, 4096);
>     ptr = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
>     *ptr = 'A';
>     munmap(ptr, 4096);
>     ptr = mmap(NULL, 4096, PROT_READ, MAP_SHARED, fd, 0);
>     msync(ptr, 4096, MS_INVALIDATE);
>     return(0);
> }
> 
> 
> 

_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to