From 59d1b762a42c900c67f5e5ae76ff07f0dfd5b6f2 Mon Sep 17 00:00:00 2001 From: Roland Dreier Date: Mon, 16 Jul 2012 15:34:22 -0700 Subject: [PATCH] --- yaml --- r: 312695 b: refs/heads/master c: 2594e29865c291db162313187612cd9f14538f33 h: refs/heads/master i: 312693: 14a1894e4a04d64c1f27b9ba7c825cd463939965 312691: a0fdf169ab3c6a9ab1873b1b97c54fe5956a6bfc 312687: d8f74a32292a54e1d01d74ee632903b09d6609e1 v: v3 --- [refs] | 2 +- trunk/drivers/target/target_core_iblock.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index e89d78b9222d..678b3c88f4c1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e2397c704429025bc6b331a970f699e52f34283e +refs/heads/master: 2594e29865c291db162313187612cd9f14538f33 diff --git a/trunk/drivers/target/target_core_iblock.c b/trunk/drivers/target/target_core_iblock.c index 8a12e29009c1..8fb3822bad55 100644 --- a/trunk/drivers/target/target_core_iblock.c +++ b/trunk/drivers/target/target_core_iblock.c @@ -348,6 +348,18 @@ static int iblock_execute_unmap(struct se_cmd *cmd) pr_debug("UNMAP: Using lba: %llu and range: %u\n", (unsigned long long)lba, range); + if (range > dev->se_sub_dev->se_dev_attrib.max_unmap_lba_count) { + cmd->scsi_sense_reason = TCM_INVALID_PARAMETER_LIST; + ret = -EINVAL; + goto err; + } + + if (lba + range > dev->transport->get_blocks(dev) + 1) { + cmd->scsi_sense_reason = TCM_ADDRESS_OUT_OF_RANGE; + ret = -EINVAL; + goto err; + } + ret = blkdev_issue_discard(ibd->ibd_bd, lba, range, GFP_KERNEL, 0); if (ret < 0) {