Re: mmap-related questions

Jakob Oestergaard (jakob@unthought.net)
Thu, 3 Apr 2003 01:43:23 +0200


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}...............:
-
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/