Messages in this thread | | | Date | Mon, 22 Nov 2004 23:30:01 +0000 (GMT) | From | Anton Altaparmakov <> | Subject | Re: [RFC][PATCH] problem of cont_prepare_write() |
| |
On Mon, 22 Nov 2004, Andrew Morton wrote: > Anton Altaparmakov <aia21@cam.ac.uk> wrote: > > > > Would it be ok to modify i_size from prepare_write? > > I think so - I seem to recall seeing that done somewhere else...
Great.
> One thing to watch out for is when to bring the page uptodate. If the > page is uptodate then the read() code just won't try to lock it at all. > If you increase i_size AND set PG_uptodate too early you could open a > window which allows read() to peek at uninitialised data. > > But if you set the page uptodate only when its contents really are sane > then things should work OK.
Yes, I would never set PG_Uptodate without having sane page contents first.
In fact all the metadata writing code in NTFS actually clears PG_Uptodate on a locked page because it mangles the page contents, writes them out, and then demangles them again, before finally setting PG_Uptodate again to protect against read_cache_page() getting hold of pages with i/o in flight which for NTFS metadata would cause corruption.
> If you end up doing > > memset(page, 0, N); > SetPageUptodate(page); > > then I think you'll need an smb_wmb() in between so the read() code sees the > above two writes in the correct order.
Thanks. I always have a flush_dcache_page(page) between the memset() and the SetPageUptodate() so I don't need the barrier, right? Or does the flush_dcache_page() not imply ordering? (I naively thought it did...)
Best regards,
Anton -- Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @) Unix Support, Computing Service, University of Cambridge, CB2 3QH, UK Linux NTFS maintainer / IRC: #ntfs on irc.freenode.net WWW: http://linux-ntfs.sf.net/ & http://www-stu.christs.cam.ac.uk/~aia21/ - 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/
| |