[<prev] [next>] [day] [month] [year] [list]
Message-ID: <87wt2n907x.fsf@sw.ru>
Date: Mon, 12 Feb 2007 12:47:14 +0300
From: Dmitriy Monakhov <dmonakhov@...ru>
To: Linux Kernel <linux-kernel@...r.kernel.org>
CC: Linux Filesystems <linux-fsdevel@...r.kernel.org>,
linux-ext4@...r.kernel.org, devel@...nvz.org
Subject: [PATCH 1/1][RFC] EXT34 retry loop issue V(2)
Patch depends on : "[PATCH 0/1][RFC] prepare_write positive return value V(2)"
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