raid5-cache: switching to state machine for log disk cache flush
Before we write stripe data to raid disks, we must guarantee stripe data is settled down in log disk. To do this, we flush log disk cache and wait the flush finish. That wait introduces sleep time in raid5d thread and impact performance. This patch moves the log disk cache flush process to the stripe handling state machine, which can remove the wait in raid5d. Signed-off-by: Shaohua Li <shli@fb.com> Signed-off-by: NeilBrown <neilb@suse.com>
This commit is contained in:
@@ -5740,8 +5740,12 @@ static int handle_active_stripes(struct r5conf *conf, int group,
|
||||
for (i = 0; i < NR_STRIPE_HASH_LOCKS; i++)
|
||||
if (!list_empty(temp_inactive_list + i))
|
||||
break;
|
||||
if (i == NR_STRIPE_HASH_LOCKS)
|
||||
if (i == NR_STRIPE_HASH_LOCKS) {
|
||||
spin_unlock_irq(&conf->device_lock);
|
||||
r5l_flush_stripe_to_raid(conf->log);
|
||||
spin_lock_irq(&conf->device_lock);
|
||||
return batch_size;
|
||||
}
|
||||
release_inactive = true;
|
||||
}
|
||||
spin_unlock_irq(&conf->device_lock);
|
||||
@@ -5749,6 +5753,7 @@ static int handle_active_stripes(struct r5conf *conf, int group,
|
||||
release_inactive_stripe_list(conf, temp_inactive_list,
|
||||
NR_STRIPE_HASH_LOCKS);
|
||||
|
||||
r5l_flush_stripe_to_raid(conf->log);
|
||||
if (release_inactive) {
|
||||
spin_lock_irq(&conf->device_lock);
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user