]> git.neil.brown.name Git - LaFS.git/commitdiff
Be more careful about waking cleaner in cluster_end_io.
authorNeilBrown <neilb@suse.de>
Mon, 9 Aug 2010 10:20:16 +0000 (20:20 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 9 Aug 2010 10:20:16 +0000 (20:20 +1000)
If done was set as well as wake, we didn't wake the cleaner
so *FlushNeeded wouldn't necessarily be effective.

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

index da9643ab0a172d1a77c5ab0ca790520a50eb4d64..2cdc2a467165b35d37849f80a53afa9477374f29 100644 (file)
--- a/cluster.c
+++ b/cluster.c
@@ -1430,10 +1430,9 @@ static void cluster_end_io(struct bio *bio, int err,
        if (atomic_read(&wc->pending_cnt[which]) == 1)
                wake = 1;
 
-       if (done) {
+       if (done)
                schedule_work(&fs->done_work);
-               wake_up(&wc->pending_wait);
-       } else if (wake) {
+       if (done || wake) {
                wake_up(&wc->pending_wait);
                if (test_bit(FlushNeeded, &fs->fsstate) ||
                    test_bit(SecondFlushNeeded, &fs->fsstate))