Messages in this thread | | | Subject | Re: [parisc-linux] Re: Problems with kernel mmap (failing tst-mmap-eofsync in glibc on parisc) | From | James Bottomley <> | Date | 22 Aug 2003 17:27:33 -0500 |
| |
On Fri, 2003-08-22 at 14:19, David S. Miller wrote: > Sparc64's alias'able caches are 1) write-through and 2) quite small. > > I think I begin to see the issue clearly now. > > But you cannot do the VM_SHARED change without an audit first. > Lots of code thinks that VM_SHARED means someone maybe wrote > to the page through a mmap(). For example look at how filemap > sync interprets this flag bit.
Yes, the issue seems to be that the flush_dcache_page() was implemented with the thought that the caches of the shared mappings may contain modified data that needs to be flushed to the aliased page.
The opposite property: that the caches of the aliased page need to be invalidated because someone else changed data in the aliased page seems to work as a byproduct of the above implementation.
But some of the checks for !list_empty(&mapping->i_shared) are going to prevent the necessary invalidations on read only shared mappings...which was the initial problem.
The only issue I can see with not dropping VM_SHARED for read only shared mappings is that we do spurious (but harmless) flushe_dcache_page() on reads.
There also appears to be a lurking prob lem in do_mremap, where it keys off the VM_SHARED flag to set the MAP_SHARED flag for get_unmapped_area. That's going to cause us a problem on parisc because SHARED pages need to obey slightly stricter alignment constraints
All in all, I think not dropping VM_SHARED on read only shared mappings is the right thing to do.
Do you need a more detailed audit?
James
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |