Re: mmap-related questions

Jakob Oestergaard
2003-04-02T23:32:01Z

On Wed, Apr 02, 2003 at 10:10:06AM -0500, Benjamin LaHaise wrote:
> On Wed, Apr 02, 2003 at 11:30:50AM +0200, Jakob Oestergaard wrote:
> > make_dirty(big_map)
> > msync(first half of big_map)
> > msync(second half of big_map) { crash during this }
> >
> > Then I am guaranteed that (unless the server crashes), the first half of
> > big_map *will* have reached the server, but not that all of the second
> > half has. Right?
>
> Assuming you used MS_SYNC for the msync() flags. MS_ASYNC could still be
> proceeding to flush the pages out in the background. And the kernel may
> have triggered writeback of the second half -- it is free to do so as it
> sees fit.

Yes. MS_ASYNC is "advisory" only, as I understand it. (too bad it isn't
select()'able actually, I could use that to work wonders with a database
engine here...)

>
> > Like any local-disk backed file.
> >
> > Ignoring the case where the NFS *server* crashes, where could the write
> > ordering differ, compared to local disk files ?
>
> > In other words, what does Benjamin's "unexpected ways" refer to ?
>
> All local clients will see the mmap() being updated from the time it is
> dirtied, but there is no ordering of write()s with respect to the mmap
> unless you explicitely msync(..MS_SYNC..) as in your example.

Ok, so we're talking multiple processes reading/writing.

Now it makes a lot more sense - I was thinking one process only. Silly
simple-minded me ;)

Thanks,

--
................................................................
: jakob@unthought.net : And I see the elder races, :
:.........................: putrid forms of man :
: Jakob Østergaard : See him rise and claim the earth, :
: OZ9ABN : his downfall is at hand. :
:.........................:............{Konkhra}...............: