[patch 11/41] fs: fix data-loss on error
flat view
STALE7085d
From: <hidden>
Date: 2007-05-14 08:23:55
Also in:
linux-fsdevel
New buffers against uptodate pages are simply be marked uptodate, while the buffer_new bit remains set. This causes error-case code to zero out parts of those buffers because it thinks they contain stale data: wrong, they are actually uptodate so this is a data loss situation. Fix this by actually clearning buffer_new and marking the buffer dirty. It makes sense to always clear buffer_new before setting a buffer uptodate. Cc: Linux Memory Management <redacted> Cc: Linux Filesystems <redacted> Signed-off-by: Nick Piggin <redacted> fs/buffer.c | 2 ++ 1 file changed, 2 insertions(+) Index: linux-2.6/fs/buffer.c ===================================================================
--- linux-2.6.orig/fs/buffer.c
+++ linux-2.6/fs/buffer.c@@ -1793,7 +1793,9 @@ static int __block_prepare_write(struct unmap_underlying_metadata(bh->b_bdev, bh->b_blocknr); if (PageUptodate(page)) { + clear_buffer_new(bh); set_buffer_uptodate(bh); + mark_buffer_dirty(bh); continue; } if (block_end > to || block_start < from) {
--
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>