summaryrefslogtreecommitdiffstats
path: root/sys/ufs
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2012-11-09 04:04:25 +0000
committerjeff <jeff@FreeBSD.org>2012-11-09 04:04:25 +0000
commitea9b139e45acf881b3bf7ba4a9c3a56223301388 (patch)
tree73898f6a5cb801113d6a7b9fb0857a326b6858e4 /sys/ufs
parent04e7b32045399a62e9b1bc8280b5cd0e2afb04b5 (diff)
downloadFreeBSD-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.c5
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);
}
OpenPOWER on IntegriCloud