Fix race in create_empty_buffers() vs __set_page_dirty_buffers()
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 19 Mar 2009 18:32:05 +0000 (11:32 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 19 Mar 2009 18:32:05 +0000 (11:32 -0700)
commita8e7d49aa7be728c4ae241a75a2a124cdcabc0c5
treefec49351496b886d8aa0e7b55e58c2f1394b051a
parent68df3755e383e6fecf2354a67b08f92f18536594
Fix race in create_empty_buffers() vs __set_page_dirty_buffers()

Nick Piggin noticed this (very unlikely) race between setting a page
dirty and creating the buffers for it - we need to hold the mapping
private_lock until we've set the page dirty bit in order to make sure
that create_empty_buffers() might not build up a set of buffers without
the dirty bits set when the page is dirty.

I doubt anybody has ever hit this race (and it didn't solve the issue
Nick was looking at), but as Nick says: "Still, it does appear to solve
a real race, which we should close."

Acked-by: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/buffer.c