Commit dbc21c5abbeb4419da5a54157c4b7a0ec0dee185
Committed by
Nicholas Bellinger
1 parent
43f55bbb14
Exists in
master
and in
20 other branches
target/iblock: Add iblock_do_unmap() helper
Add helper iblock_do_unmap() to remove duplicated code in iblock_execute_write_same_unmap() and iblock_execute_unmap(). Cc: Christoph Hellwig <hch@lst.de> Cc: Martin K. Petersen <martin.petersen@oracle.com> Cc: Nicholas Bellinger <nab@linux-iscsi.org> Signed-off-by: Asias He <asias@redhat.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Showing 1 changed file with 26 additions and 17 deletions Side-by-side Diff
drivers/target/target_core_iblock.c
... | ... | @@ -380,6 +380,21 @@ |
380 | 380 | } |
381 | 381 | |
382 | 382 | static sense_reason_t |
383 | +iblock_do_unmap(struct se_cmd *cmd, struct block_device *bdev, | |
384 | + sector_t lba, sector_t nolb) | |
385 | +{ | |
386 | + int ret; | |
387 | + | |
388 | + ret = blkdev_issue_discard(bdev, lba, nolb, GFP_KERNEL, 0); | |
389 | + if (ret < 0) { | |
390 | + pr_err("blkdev_issue_discard() failed: %d\n", ret); | |
391 | + return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; | |
392 | + } | |
393 | + | |
394 | + return 0; | |
395 | +} | |
396 | + | |
397 | +static sense_reason_t | |
383 | 398 | iblock_execute_unmap(struct se_cmd *cmd) |
384 | 399 | { |
385 | 400 | struct se_device *dev = cmd->se_dev; |
... | ... | @@ -389,7 +404,7 @@ |
389 | 404 | int size; |
390 | 405 | u32 range; |
391 | 406 | sense_reason_t ret = 0; |
392 | - int dl, bd_dl, err; | |
407 | + int dl, bd_dl; | |
393 | 408 | |
394 | 409 | /* We never set ANC_SUP */ |
395 | 410 | if (cmd->t_task_cdb[1]) |
396 | 411 | |
... | ... | @@ -446,14 +461,9 @@ |
446 | 461 | goto err; |
447 | 462 | } |
448 | 463 | |
449 | - err = blkdev_issue_discard(ib_dev->ibd_bd, lba, range, | |
450 | - GFP_KERNEL, 0); | |
451 | - if (err < 0) { | |
452 | - pr_err("blkdev_issue_discard() failed: %d\n", | |
453 | - err); | |
454 | - ret = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; | |
464 | + ret = iblock_do_unmap(cmd, ib_dev->ibd_bd, lba, range); | |
465 | + if (ret) | |
455 | 466 | goto err; |
456 | - } | |
457 | 467 | |
458 | 468 | ptr += 16; |
459 | 469 | size -= 16; |
460 | 470 | |
... | ... | @@ -469,15 +479,14 @@ |
469 | 479 | static sense_reason_t |
470 | 480 | iblock_execute_write_same_unmap(struct se_cmd *cmd) |
471 | 481 | { |
472 | - struct iblock_dev *ib_dev = IBLOCK_DEV(cmd->se_dev); | |
473 | - int rc; | |
482 | + struct block_device *bdev = IBLOCK_DEV(cmd->se_dev)->ibd_bd; | |
483 | + sector_t lba = cmd->t_task_lba; | |
484 | + sector_t nolb = sbc_get_write_same_sectors(cmd); | |
485 | + int ret; | |
474 | 486 | |
475 | - rc = blkdev_issue_discard(ib_dev->ibd_bd, cmd->t_task_lba, | |
476 | - sbc_get_write_same_sectors(cmd), GFP_KERNEL, 0); | |
477 | - if (rc < 0) { | |
478 | - pr_warn("blkdev_issue_discard() failed: %d\n", rc); | |
479 | - return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; | |
480 | - } | |
487 | + ret = iblock_do_unmap(cmd, bdev, lba, nolb); | |
488 | + if (ret) | |
489 | + return ret; | |
481 | 490 | |
482 | 491 | target_complete_cmd(cmd, GOOD); |
483 | 492 | return 0; |