diff options
author | Christoph Hellwig <hch@infradead.org> | 2012-05-20 11:59:15 -0400 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2012-06-12 21:38:41 -0700 |
commit | e05d46b92677434d6ea28ed16172f1a892585e47 (patch) | |
tree | aac9da1255e03c983d81d1327be917f20a79cb40 /drivers/target/target_core_transport.c | |
parent | 366e815ef199da797cab52566016e692442b5c60 (diff) | |
download | linux-e05d46b92677434d6ea28ed16172f1a892585e47.tar.gz linux-e05d46b92677434d6ea28ed16172f1a892585e47.tar.xz linux-e05d46b92677434d6ea28ed16172f1a892585e47.zip |
target: move code for CDB emulation
Move the existing code in target_core_cdb.c into the files for the command
sets that the emulations implement.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target/target_core_transport.c')
-rw-r--r-- | drivers/target/target_core_transport.c | 47 |
1 files changed, 2 insertions, 45 deletions
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 28a46a2e85c2..bdb93a74e9ba 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -1337,7 +1337,7 @@ static inline void transport_generic_prepare_cdb( } } -static int target_cmd_size_check(struct se_cmd *cmd, unsigned int size) +int target_cmd_size_check(struct se_cmd *cmd, unsigned int size) { struct se_device *dev = cmd->se_dev; @@ -1463,7 +1463,6 @@ int target_setup_cmd_from_cdb( u32 pr_reg_type = 0; u8 alua_ascq = 0; unsigned long flags; - unsigned int size; int ret; transport_generic_prepare_cdb(cdb); @@ -1555,11 +1554,7 @@ int target_setup_cmd_from_cdb( */ } - ret = cmd->se_dev->transport->parse_cdb(cmd, &size); - if (ret < 0) - return ret; - - ret = target_cmd_size_check(cmd, size); + ret = cmd->se_dev->transport->parse_cdb(cmd); if (ret < 0) return ret; @@ -2157,32 +2152,6 @@ out: return -1; } -static inline long long transport_dev_end_lba(struct se_device *dev) -{ - return dev->transport->get_blocks(dev) + 1; -} - -static int transport_cmd_get_valid_sectors(struct se_cmd *cmd) -{ - struct se_device *dev = cmd->se_dev; - u32 sectors; - - if (dev->transport->get_device_type(dev) != TYPE_DISK) - return 0; - - sectors = (cmd->data_length / dev->se_sub_dev->se_dev_attrib.block_size); - - if ((cmd->t_task_lba + sectors) > transport_dev_end_lba(dev)) { - pr_err("LBA: %llu Sectors: %u exceeds" - " transport_dev_end_lba(): %llu\n", - cmd->t_task_lba, sectors, - transport_dev_end_lba(dev)); - return -EINVAL; - } - - return 0; -} - /* * Called from I/O completion to determine which dormant/delayed * and ordered cmds need to have their tasks added to the execution queue. @@ -2626,7 +2595,6 @@ out: */ int transport_generic_new_cmd(struct se_cmd *cmd) { - struct se_device *dev = cmd->se_dev; int ret = 0; /* @@ -2660,17 +2628,6 @@ int transport_generic_new_cmd(struct se_cmd *cmd) return 0; } - if (cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) { - struct se_dev_attrib *attr = &dev->se_sub_dev->se_dev_attrib; - - if (transport_cmd_get_valid_sectors(cmd) < 0) - return -EINVAL; - - BUG_ON(cmd->data_length % attr->block_size); - BUG_ON(DIV_ROUND_UP(cmd->data_length, attr->block_size) > - attr->hw_max_sectors); - } - atomic_inc(&cmd->t_fe_count); /* |