diff options
author | Christoph Hellwig <hch@infradead.org> | 2012-10-07 14:55:51 (GMT) |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2012-11-07 04:55:44 (GMT) |
commit | d1b1f8053401aaf1dfe636afa6d361301e3ae8b7 (patch) | |
tree | 52a04af8a2383ce291105b4b5d01bb869802f33c /drivers/target/target_core_device.c | |
parent | 9e999a6c51fe74a41a76038c64ce038ff9243bfb (diff) | |
download | linux-fsl-qoriq-d1b1f8053401aaf1dfe636afa6d361301e3ae8b7.tar.xz |
target: move REPORT LUNS emulation to target_core_spc.c
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target/target_core_device.c')
-rw-r--r-- | drivers/target/target_core_device.c | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c index b27c75a..e45a709 100644 --- a/drivers/target/target_core_device.c +++ b/drivers/target/target_core_device.c @@ -646,69 +646,6 @@ void core_dev_unexport( lun->lun_se_dev = NULL; } -int target_report_luns(struct se_cmd *se_cmd) -{ - struct se_dev_entry *deve; - struct se_session *se_sess = se_cmd->se_sess; - unsigned char *buf; - u32 lun_count = 0, offset = 8, i; - - if (se_cmd->data_length < 16) { - pr_warn("REPORT LUNS allocation length %u too small\n", - se_cmd->data_length); - se_cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD; - return -EINVAL; - } - - buf = transport_kmap_data_sg(se_cmd); - if (!buf) - return -ENOMEM; - - /* - * If no struct se_session pointer is present, this struct se_cmd is - * coming via a target_core_mod PASSTHROUGH op, and not through - * a $FABRIC_MOD. In that case, report LUN=0 only. - */ - if (!se_sess) { - int_to_scsilun(0, (struct scsi_lun *)&buf[offset]); - lun_count = 1; - goto done; - } - - spin_lock_irq(&se_sess->se_node_acl->device_list_lock); - for (i = 0; i < TRANSPORT_MAX_LUNS_PER_TPG; i++) { - deve = se_sess->se_node_acl->device_list[i]; - if (!(deve->lun_flags & TRANSPORT_LUNFLAGS_INITIATOR_ACCESS)) - continue; - /* - * We determine the correct LUN LIST LENGTH even once we - * have reached the initial allocation length. - * See SPC2-R20 7.19. - */ - lun_count++; - if ((offset + 8) > se_cmd->data_length) - continue; - - int_to_scsilun(deve->mapped_lun, (struct scsi_lun *)&buf[offset]); - offset += 8; - } - spin_unlock_irq(&se_sess->se_node_acl->device_list_lock); - - /* - * See SPC3 r07, page 159. - */ -done: - lun_count *= 8; - buf[0] = ((lun_count >> 24) & 0xff); - buf[1] = ((lun_count >> 16) & 0xff); - buf[2] = ((lun_count >> 8) & 0xff); - buf[3] = (lun_count & 0xff); - transport_kunmap_data_sg(se_cmd); - - target_complete_cmd(se_cmd, GOOD); - return 0; -} - static void se_release_vpd_for_dev(struct se_device *dev) { struct t10_vpd *vpd, *vpd_tmp; |