]> git.neil.brown.name Git - LaFS.git/commitdiff
Revise rules for setting EmergencyClean
authorNeilBrown <neilb@suse.de>
Sat, 3 Jul 2010 00:56:17 +0000 (10:56 +1000)
committerNeilBrown <neilb@suse.de>
Sat, 3 Jul 2010 00:56:17 +0000 (10:56 +1000)
This rule for clearing is good I think.

Setting is now a bit too early.

Signed-off-by: NeilBrown <neilb@suse.de>
segments.c

index c970305c7e1496a545ddbfef0bc29ec49a0ba8a5..d73033a1c2b92e0cce82aa6908de014f6fafc896 100644 (file)
@@ -640,13 +640,19 @@ int lafs_space_alloc(struct fs *fs, int credits, int why)
        }
 
        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);
@@ -1543,13 +1549,6 @@ retry:
        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));