From: Jeff Mahoney <jeffm@suse.com>
To: Alex Zarochentsev <zam@namesys.com>
Cc: ReiserFS List <reiserfs-list@namesys.com>
Subject: Re: [PATCH] ReiserFS v3 I/O error handling
Date: Wed, 15 Sep 2004 09:47:45 -0400 [thread overview]
Message-ID: <41484801.2000204@suse.com> (raw)
In-Reply-To: <20040915131133.GD5137@backtop.namesys.com>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Alex Zarochentsev wrote:
| * reiserfs-io-error-handling.diff
| - Allows ReiserFS to gracefully handle I/O errors in critical
| code paths. The admin has the option to go read-only or panic.
| Since ReiserFS has no option to ignore the use of the journal,
| the "continue" method is not enabled.
|
|
|> What reiserfs will do with already dirty blocks on the R/O fs. Those
blocks
|> remain dirty, yes?
|
|> The whole patch is enough complex, one look is not enough :) I think
Elena may
|> do additional testing to be sure that nothing is broken while
improving i/o
|> handling.
Yes, blocks that are already dirty will remain dirty. This is safe.
Here are the cases:
* Transaction hasn't started yet, and the journal has aborted
~ - Deny the transaction start in do_journal_begin_r, returning -EROFS
* Transaction has started, journal was aborted in the meantime
~ - Finish cleaning up, don't write the commit block, return -EIO
~ from do_journal_end
* Transaction has completed, and aborts during flush_commit_list()
~ - Finish writing, but don't write commit block
* Transaction has completed, and aborts during flush_journal_list()
~ - Finish writing, but don't update journal header
Since this is an error path for I/O errors, NOT internal
inconsistencies, it's safe to continue writing to the disk so long as we
do so with the expectation that whatever we write there will be handled
elsewhere.
One of the tenets of journaling filesystems is that if the transaction
isn't commited, it never existed. The I/O error handling code takes
advantage of this by completing whatever I/O is outstanding, which makes
the code *far* less intrusive. My initial implementation tried cleaning
stuff up, and it's extremely involved for very little gain. Once the
journal has aborted, updates to the journal's state just don't happen.
Yes, blocks get written into it -- but the commit block doesn't. The
transaction isn't commited: It never existed. Outstanding journal
flushes can still flush to the disk, but it won't update the journal
header. The transaction can be replayed the next time the filesystem is
mounted.
I view it like this: An aborted filesystem is no different than one on a
system which has lost power. The journal protects us here. Nothing after
reiserfs_abort() exists, since the journal operations aren't commited.
There will be incomplete transactions and incomplete flushes, but that's
what the journal is there to handle in the first place.
The admin will be able to perform the normal operations before umounting
a filesystem (closing open files, chdir'ing out of it), and the
filesystem will be umountable. The admin can check it, and remount if
they choose.
- -Jeff
- --
Jeff Mahoney
SuSE Labs
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
iD8DBQFBSEgBLPWxlyuTD7IRAvyBAJ0XJW7eP6eThwSK6YT9K3hdxlTT0ACfTLxY
LIJEucE1EisIn9VQPXon/dw=
=cQx8
-----END PGP SIGNATURE-----
next prev parent reply other threads:[~2004-09-15 13:47 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-09-13 22:11 [PATCH] ReiserFS v3 I/O error handling Jeff Mahoney
2004-09-15 13:11 ` Alex Zarochentsev
2004-09-15 13:47 ` Jeff Mahoney [this message]
2004-09-15 14:12 ` Alex Zarochentsev
2004-09-15 14:30 ` Jeff Mahoney
2004-09-15 14:31 ` Hans Reiser
2004-09-21 17:46 ` Chris Mason
2004-09-22 15:39 ` Hans Reiser
2004-09-22 16:52 ` Alex Zarochentsev
-- strict thread matches above, loose matches on Subject: below --
2004-09-14 15:39 Jeff Mahoney
2004-09-15 1:26 ` Hans Reiser
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=41484801.2000204@suse.com \
--to=jeffm@suse.com \
--cc=reiserfs-list@namesys.com \
--cc=zam@namesys.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.