diff options
Diffstat (limited to 'drivers/md/md.c')
| -rw-r--r-- | drivers/md/md.c | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index e575e74aabf5..aff9118ff697 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -8087,7 +8087,8 @@ void md_wakeup_thread(struct md_thread __rcu *thread)  	if (t) {  		pr_debug("md: waking up MD thread %s.\n", t->tsk->comm);  		set_bit(THREAD_WAKEUP, &t->flags); -		wake_up(&t->wqueue); +		if (wq_has_sleeper(&t->wqueue)) +			wake_up(&t->wqueue);  	}  	rcu_read_unlock();  } @@ -8582,6 +8583,10 @@ static int is_mddev_idle(struct mddev *mddev, int init)  	rcu_read_lock();  	rdev_for_each_rcu(rdev, mddev) {  		struct gendisk *disk = rdev->bdev->bd_disk; + +		if (!init && !blk_queue_io_stat(disk->queue)) +			continue; +  		curr_events = (int)part_stat_read_accum(disk->part0, sectors) -  			      atomic_read(&disk->sync_io);  		/* sync IO will cause sync_io to increase before the disk_stats  |