diff options
author | Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp> | 2010-03-22 08:36:06 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-04-01 19:01:50 -0400 |
commit | d664e4acfdfedb7483d383c1198552299a0114c0 (patch) | |
tree | 0b0f1a432b3599e034cfa8d309e8f65df43d7bf5 | |
parent | 8147bcf0da9a74b7dbec29bb3e489967f91f3c94 (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.c | 3 |
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); |