diff options
Diffstat (limited to 'drivers/target/target_core_pr.c')
| -rw-r--r-- | drivers/target/target_core_pr.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c index d56f2aaba9af..283cf786ef98 100644 --- a/drivers/target/target_core_pr.c +++ b/drivers/target/target_core_pr.c | |||
| @@ -528,6 +528,18 @@ static int core_scsi3_pr_seq_non_holder( | |||
| 528 | 528 | ||
| 529 | return 0; | 529 | return 0; |
| 530 | } | 530 | } |
| 531 | } else if (we && registered_nexus) { | ||
| 532 | /* | ||
| 533 | * Reads are allowed for Write Exclusive locks | ||
| 534 | * from all registrants. | ||
| 535 | */ | ||
| 536 | if (cmd->data_direction == DMA_FROM_DEVICE) { | ||
| 537 | pr_debug("Allowing READ CDB: 0x%02x for %s" | ||
| 538 | " reservation\n", cdb[0], | ||
| 539 | core_scsi3_pr_dump_type(pr_reg_type)); | ||
| 540 | |||
| 541 | return 0; | ||
| 542 | } | ||
| 531 | } | 543 | } |
| 532 | pr_debug("%s Conflict for %sregistered nexus %s CDB: 0x%2x" | 544 | pr_debug("%s Conflict for %sregistered nexus %s CDB: 0x%2x" |
| 533 | " for %s reservation\n", transport_dump_cmd_direction(cmd), | 545 | " for %s reservation\n", transport_dump_cmd_direction(cmd), |
