Commit c1529fa25e20f4c5d92d82165a8ff5fe27eae974
Committed by
James Bottomley
1 parent
5738f99643
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
[SCSI] megaraid_sas: Add fpRead/WriteCapable, fpRead/WriteAcrossStripe checks
The following patch for megaraid_sas fixes the fastpath code decision logic to use fpRead/WriteCapable, fpRead/WriteAcrossStripe flags instead of the old logic. This fixes a bug where fastpath writes could be sent to a read only LD. Signed-off-by: Adam Radford <aradford@gmail.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Showing 1 changed file with 13 additions and 8 deletions Side-by-side Diff
drivers/scsi/megaraid/megaraid_sas_fp.c
... | ... | @@ -362,15 +362,20 @@ |
362 | 362 | /* assume this IO needs the full row - we'll adjust if not true */ |
363 | 363 | regSize = stripSize; |
364 | 364 | |
365 | - /* If IO spans more than 1 strip, fp is not possible | |
366 | - FP is not possible for writes on non-0 raid levels | |
367 | - FP is not possible if LD is not capable */ | |
368 | - if (num_strips > 1 || (!isRead && raid->level != 0) || | |
369 | - !raid->capability.fpCapable) { | |
365 | + /* Check if we can send this I/O via FastPath */ | |
366 | + if (raid->capability.fpCapable) { | |
367 | + if (isRead) | |
368 | + io_info->fpOkForIo = (raid->capability.fpReadCapable && | |
369 | + ((num_strips == 1) || | |
370 | + raid->capability. | |
371 | + fpReadAcrossStripe)); | |
372 | + else | |
373 | + io_info->fpOkForIo = (raid->capability.fpWriteCapable && | |
374 | + ((num_strips == 1) || | |
375 | + raid->capability. | |
376 | + fpWriteAcrossStripe)); | |
377 | + } else | |
370 | 378 | io_info->fpOkForIo = FALSE; |
371 | - } else { | |
372 | - io_info->fpOkForIo = TRUE; | |
373 | - } | |
374 | 379 | |
375 | 380 | if (numRows == 1) { |
376 | 381 | /* single-strip IOs can always lock only the data needed */ |