diff options
author | Artur Paszkiewicz <artur.paszkiewicz@intel.com> | 2017-04-04 14:13:58 +0300 |
---|---|---|
committer | Shaohua Li <shli@fb.com> | 2017-04-10 22:01:37 +0300 |
commit | ae1713e296449caf820635d384a99936ce281a71 (patch) | |
tree | 24e93bffe6c6cb527f282655ce4a447209629c6d /drivers/md/raid5.c | |
parent | 845b9e229fe0716ab6b4d94b4364c99069667b59 (diff) | |
download | linux-ae1713e296449caf820635d384a99936ce281a71.tar.xz |
raid5-ppl: partial parity calculation optimization
In case of read-modify-write, partial partity is the same as the result
of ops_run_prexor5(), so we can just copy sh->dev[pd_idx].page into
sh->ppl_page instead of calculating it again.
Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Diffstat (limited to 'drivers/md/raid5.c')
-rw-r--r-- | drivers/md/raid5.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index e04d7b11bc87..f3692ff4262b 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -2079,9 +2079,6 @@ static void raid_run_ops(struct stripe_head *sh, unsigned long ops_request) async_tx_ack(tx); } - if (test_bit(STRIPE_OP_PARTIAL_PARITY, &ops_request)) - tx = ops_run_partial_parity(sh, percpu, tx); - if (test_bit(STRIPE_OP_PREXOR, &ops_request)) { if (level < 6) tx = ops_run_prexor5(sh, percpu, tx); @@ -2089,6 +2086,9 @@ static void raid_run_ops(struct stripe_head *sh, unsigned long ops_request) tx = ops_run_prexor6(sh, percpu, tx); } + if (test_bit(STRIPE_OP_PARTIAL_PARITY, &ops_request)) + tx = ops_run_partial_parity(sh, percpu, tx); + if (test_bit(STRIPE_OP_BIODRAIN, &ops_request)) { tx = ops_run_biodrain(sh, tx); overlap_clear++; |