diff options
author | Joern Engel <joern@logfs.org> | 2010-05-03 20:54:34 +0200 |
---|---|---|
committer | Joern Engel <joern@logfs.org> | 2010-05-04 19:37:04 +0200 |
commit | 20503664b008e17976bff1fdbc693c77ebd6f6c9 (patch) | |
tree | 7cff886995e42d0b90dd3ebe86993f0277e9345c /fs/logfs/journal.c | |
parent | ccc0197b02178f7e1707e659cbc5242fc94b499a (diff) | |
download | linux-stable-20503664b008e17976bff1fdbc693c77ebd6f6c9.tar.gz linux-stable-20503664b008e17976bff1fdbc693c77ebd6f6c9.tar.bz2 linux-stable-20503664b008e17976bff1fdbc693c77ebd6f6c9.zip |
logfs: survive logfs_buf_recover read errors
Refusing to mount beats a kernel crash.
Signed-off-by: Joern Engel <joern@logfs.org>
Diffstat (limited to 'fs/logfs/journal.c')
-rw-r--r-- | fs/logfs/journal.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/fs/logfs/journal.c b/fs/logfs/journal.c index fb0a613f885b..4b0e0616b357 100644 --- a/fs/logfs/journal.c +++ b/fs/logfs/journal.c @@ -132,10 +132,9 @@ static int read_area(struct super_block *sb, struct logfs_je_area *a) ofs = dev_ofs(sb, area->a_segno, area->a_written_bytes); if (super->s_writesize > 1) - logfs_buf_recover(area, ofs, a + 1, super->s_writesize); + return logfs_buf_recover(area, ofs, a + 1, super->s_writesize); else - logfs_buf_recover(area, ofs, NULL, 0); - return 0; + return logfs_buf_recover(area, ofs, NULL, 0); } static void *unpack(void *from, void *to) @@ -245,7 +244,7 @@ static int read_je(struct super_block *sb, u64 ofs) read_erasecount(sb, unpack(jh, scratch)); break; case JE_AREA: - read_area(sb, unpack(jh, scratch)); + err = read_area(sb, unpack(jh, scratch)); break; case JE_OBJ_ALIAS: err = logfs_load_object_aliases(sb, unpack(jh, scratch), |