[<prev] [next>] [day] [month] [year] [list]
Message-ID: <87d54n7kf1.fsf@sw.ru>
Date: Tue, 06 Feb 2007 11:35:46 +0300
From: Dmitriy Monakhov <dmonakhov@...ru>
To: Linux Kernel <linux-kernel@...r.kernel.org>
CC: Andrew Morton <akpm@...l.org>, Nick Piggin <npiggin@...e.de>,
Linux Filesystems <linux-fsdevel@...r.kernel.org>
Subject: [PATCH 1/1][RFC] mm: prepare_write positive return value
This patch solve ext3/4 retry loop issue
Issue description:
What we can do if block_prepare_write fail inside ext3_prepare_write ?
a) Stop transaction and do retry if possible, but what happend if
reboot comes after journal_force_commit, but before we exhaust
all retry attempts and generic_file_buffered_write call trancate?
We may get allocated blocks outside i_size. Witch is bad.
b) Commit newly allocated blocks. This approach was used after Andrey's patch.
But if reboot comes, or error happend, user will be surprised that i_size
increased but blocks are zero filed. This is internal write operation state
becames visiable to user. Witch is also bad.
c) Just return as match bytes as we can deal with rigth now back to
caller, and let's caller handles it and than call commit. In this scenario
we never stop journal in the midle of some internal fs operation.
If reboot comes before commit trunsaction was't closed so it will
be droped while journal replay.
Only (c) tend to garantie attomic data operation.
Also fix some issues introduced by
retries-in-ext3_prepare_write-violate-ordering-requirements:
i_size may increase after error happend.
possible data corruption caused commiting non uptodate bh.
Signed-off-by: Dmitriy Monakhov <dmonakhov@...nvz.org>
-------------
View attachment "diff-mm-ext34-retry-loop2" of type "text/plain" (4111 bytes)
Powered by blists - more mailing lists