aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>2010-03-22 08:36:06 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-04-01 19:01:50 -0400
commitd664e4acfdfedb7483d383c1198552299a0114c0 (patch)
tree0b0f1a432b3599e034cfa8d309e8f65df43d7bf5
parent8147bcf0da9a74b7dbec29bb3e489967f91f3c94 (diff)
nilfs2: fix hang-up of cleaner after log writer returned with error
commit 110d735a0ae69bdd11af9acb6ea3b979137eb118 upstream. According to the report from Andreas Beckmann (Message-ID: <4BA54677.3090902@abeckmann.de>), nilfs in 2.6.33 kernel got stuck after a disk full error. This turned out to be a regression by log writer updates merged at kernel 2.6.33. nilfs_segctor_abort_construction, which is a cleanup function for erroneous cases, was skipping writeback completion for some logs. This fixes the bug and would resolve the hang issue. Reported-by: Andreas Beckmann <debian@abeckmann.de> Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp> Tested-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--fs/nilfs2/segment.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
index 105b508b47a8..ddce17b31eb4 100644
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -1902,8 +1902,7 @@ static void nilfs_segctor_abort_construction(struct nilfs_sc_info *sci,
1902 1902
1903 list_splice_tail_init(&sci->sc_write_logs, &logs); 1903 list_splice_tail_init(&sci->sc_write_logs, &logs);
1904 ret = nilfs_wait_on_logs(&logs); 1904 ret = nilfs_wait_on_logs(&logs);
1905 if (ret) 1905 nilfs_abort_logs(&logs, NULL, sci->sc_super_root, ret ? : err);
1906 nilfs_abort_logs(&logs, NULL, sci->sc_super_root, ret);
1907 1906
1908 list_splice_tail_init(&sci->sc_segbufs, &logs); 1907 list_splice_tail_init(&sci->sc_segbufs, &logs);
1909 nilfs_cancel_segusage(&logs, nilfs->ns_sufile); 1908 nilfs_cancel_segusage(&logs, nilfs->ns_sufile);