}
if (credits == 0) {
+ if (why == NewSpace)
+ /* FIXME This is really a bit too early - need to wait
+ * at least one checkpoint
+ */
+ set_bit(EmergencyClean, &fs->fsstate);
if (!test_bit(CleanerBlocks, &fs->fsstate) ||
fs->cleaner.need > watermark + fs->max_segment) {
fs->cleaner.need = watermark + fs->max_segment;
set_bit(CleanerBlocks, &fs->fsstate);
lafs_wake_cleaner(fs);
}
- }
+ } else if (why == NewSpace)
+ clear_bit(EmergencyClean, &fs->fsstate);
fs->allocated_blocks += credits;
BUG_ON(fs->free_blocks + fs->clean_reserved < fs->allocated_blocks);
segdelete(fs->segtrack, ss);
spin_unlock(&fs->lock);
- if (ss->usage < (fs->devs[ss->dev].segment_size - 4) * 126 / 128)
- /* weird heuristic ?? */
- clear_bit(EmergencyClean, &fs->fsstate);
- else if (ss->usage >= (fs->devs[ss->dev].segment_size - 4) * 127 / 128)
- set_bit(EmergencyClean, &fs->fsstate);
-
-
ssm = segsum_find(fs, ss->segment, ss->dev, 0);
putdref(ssm->ssblk, MKREF(intable));
putdref(ssm->youthblk, MKREF(intable));