dm raid1: wake kmirrord when requeueing delayed bios after remote recovery
authorMikulas Patocka <mpatocka@redhat.com>
Thu, 23 Jul 2009 19:30:37 +0000 (20:30 +0100)
committerAlasdair G Kergon <agk@redhat.com>
Thu, 23 Jul 2009 19:30:37 +0000 (20:30 +0100)
The recent commit 7513c2a761d69d2a93f17146b3563527d3618ba0 (dm raid1:
add is_remote_recovering hook for clusters) changed do_writes() to
update the ms->writes list but forgot to wake up kmirrord to process it.

The rule is that when anything is being added on ms->reads, ms->writes
or ms->failures and the list was empty before we must call
wakeup_mirrord (for immediate processing) or delayed_wake (for delayed
processing).  Otherwise the bios could sit on the list indefinitely.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
CC: stable@kernel.org
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
drivers/md/dm-raid1.c

index ce8868c768cce1c411d3ba76d4eae5b9011bee64..42a3e4341d60347f5abfaa57af0e6456879b347c 100644 (file)
@@ -638,6 +638,7 @@ static void do_writes(struct mirror_set *ms, struct bio_list *writes)
                spin_lock_irq(&ms->lock);
                bio_list_merge(&ms->writes, &requeue);
                spin_unlock_irq(&ms->lock);
+               delayed_wake(ms);
        }
 
        /*