Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 Apr 2004 19:42:24 -0700 (PDT)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Stephan Uphoff <ups@tree.com>
Cc:        Julian Elischer <julian@elischer.org>
Subject:   Re: how to flush out cache.? 
Message-ID:  <200404230242.i3N2gOMg004349@apollo.backplane.com>
References:  <200404230103.VAA18066@stups.com>

next in thread | previous in thread | raw e-mail | index | archive | help

    Ok... I've done some more testing.  

    Ahh!  I finally was able to reproduce the problem with PROT_READ, and
    I now see the code bit you were talking about.  That's definitely a bug.

    Here's the test program that reproduces the problem.  This is definitely
    a serious bug.

						-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 *ptr1;
    char *ptr2;

    fd = open("test.dat", O_RDWR|O_CREAT|O_TRUNC, 0666);
    ftruncate(fd, 4096);
    ptr1 = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
    *ptr1 = 'A';
    ptr2 = mmap(NULL, 4096, PROT_READ, MAP_SHARED, fd, 0);
    if (msync(ptr2, 4096, MS_INVALIDATE | MS_SYNC) < 0)
	perror("msync");
    printf("contents of *ptr1 is %d\n", *ptr1);
    printf("contents of *ptr2 is %d\n", *ptr2);
    return(0);
}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200404230242.i3N2gOMg004349>