diff options
author | jeff <jeff@FreeBSD.org> | 2012-11-09 04:04:25 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2012-11-09 04:04:25 +0000 |
commit | ea9b139e45acf881b3bf7ba4a9c3a56223301388 (patch) | |
tree | 73898f6a5cb801113d6a7b9fb0857a326b6858e4 /sys/ufs | |
parent | 04e7b32045399a62e9b1bc8280b5cd0e2afb04b5 (diff) | |
download | FreeBSD-src-ea9b139e45acf881b3bf7ba4a9c3a56223301388.zip FreeBSD-src-ea9b139e45acf881b3bf7ba4a9c3a56223301388.tar.gz |
- Correct rev 242734, segments can sometimes get stuck. Be a bit more
defensive with segment state.
Reported by: b. f. <bf1783@googlemail.com>
Diffstat (limited to 'sys/ufs')
-rw-r--r-- | sys/ufs/ffs/ffs_softdep.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c index 7a5c3f7..55710a7 100644 --- a/sys/ufs/ffs/ffs_softdep.c +++ b/sys/ufs/ffs/ffs_softdep.c @@ -4291,13 +4291,16 @@ free_jsegs(jblocks) jblocks->jb_oldestseg = jseg; return; } + if ((jseg->js_state & ALLCOMPLETE) != ALLCOMPLETE) + break; if (jseg->js_seq > jblocks->jb_oldestwrseq) break; /* * We can free jsegs that didn't write entries when * oldestwrseq == js_seq. */ - if (jseg->js_cnt != 0) + if (jseg->js_seq == jblocks->jb_oldestwrseq && + jseg->js_cnt != 0) break; free_jseg(jseg, jblocks); } |