diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-24 11:38:51 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-24 11:38:51 -0400 |
commit | 7a1f7b3d68174f99d01d52b585088b2eaee758a6 (patch) | |
tree | a525ac647cbb567505116ef7c013a2f6b4faee37 /drivers/target/loopback/tcm_loop.c | |
parent | 12f1ba5a7dac4caf8b4e6ccd6453f0a095e74c7c (diff) | |
parent | 95efa2863996b643083957079b9304fb3c01130f (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/scsi-post-merge-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/scsi-post-merge-2.6:
tcm_fc: Fix conversion spec warning
tcm_fc: Fix possible lock to unlock type deadlock
tcm_fc: Fix ft_send_tm LUN lookup OOPs
target: Fix incorrect strlen() NULL terminator checks
target: Drop bogus ERR_PTR usage in target_fabric_configfs_init
target: Fix ERR_PTR dereferencing bugs
target: Convert transport_deregister_session_configfs nacl_sess_lock to save irq state
target: Fix transport_get_lun_for_tmr failure cases
[SCSI] target: Convert TASK_ATTR to scsi_tcq.h definitions
[SCSI] target: Convert REPORT_LUNs to use int_to_scsilun
[SCSI] target: Fix task->task_execute_queue=1 clear bug + LUN_RESET OOPs
[SCSI] target: Fix bug with task_sg chained transport_free_dev_tasks release
[SCSI] target: Fix interrupt context bug with stats_lock and core_tmr_alloc_req
[SCSI] target: Fix multi task->task_sg[] chaining logic bug
Diffstat (limited to 'drivers/target/loopback/tcm_loop.c')
-rw-r--r-- | drivers/target/loopback/tcm_loop.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c index dee2a2c909f5..70c2e7fa6664 100644 --- a/drivers/target/loopback/tcm_loop.c +++ b/drivers/target/loopback/tcm_loop.c | |||
@@ -386,7 +386,7 @@ static int tcm_loop_device_reset(struct scsi_cmnd *sc) | |||
386 | */ | 386 | */ |
387 | se_cmd->se_tmr_req = core_tmr_alloc_req(se_cmd, (void *)tl_tmr, | 387 | se_cmd->se_tmr_req = core_tmr_alloc_req(se_cmd, (void *)tl_tmr, |
388 | TMR_LUN_RESET); | 388 | TMR_LUN_RESET); |
389 | if (!se_cmd->se_tmr_req) | 389 | if (IS_ERR(se_cmd->se_tmr_req)) |
390 | goto release; | 390 | goto release; |
391 | /* | 391 | /* |
392 | * Locate the underlying TCM struct se_lun from sc->device->lun | 392 | * Locate the underlying TCM struct se_lun from sc->device->lun |
@@ -1017,6 +1017,7 @@ static int tcm_loop_make_nexus( | |||
1017 | struct se_portal_group *se_tpg; | 1017 | struct se_portal_group *se_tpg; |
1018 | struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba; | 1018 | struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba; |
1019 | struct tcm_loop_nexus *tl_nexus; | 1019 | struct tcm_loop_nexus *tl_nexus; |
1020 | int ret = -ENOMEM; | ||
1020 | 1021 | ||
1021 | if (tl_tpg->tl_hba->tl_nexus) { | 1022 | if (tl_tpg->tl_hba->tl_nexus) { |
1022 | printk(KERN_INFO "tl_tpg->tl_hba->tl_nexus already exists\n"); | 1023 | printk(KERN_INFO "tl_tpg->tl_hba->tl_nexus already exists\n"); |
@@ -1033,8 +1034,10 @@ static int tcm_loop_make_nexus( | |||
1033 | * Initialize the struct se_session pointer | 1034 | * Initialize the struct se_session pointer |
1034 | */ | 1035 | */ |
1035 | tl_nexus->se_sess = transport_init_session(); | 1036 | tl_nexus->se_sess = transport_init_session(); |
1036 | if (!tl_nexus->se_sess) | 1037 | if (IS_ERR(tl_nexus->se_sess)) { |
1038 | ret = PTR_ERR(tl_nexus->se_sess); | ||
1037 | goto out; | 1039 | goto out; |
1040 | } | ||
1038 | /* | 1041 | /* |
1039 | * Since we are running in 'demo mode' this call with generate a | 1042 | * Since we are running in 'demo mode' this call with generate a |
1040 | * struct se_node_acl for the tcm_loop struct se_portal_group with the SCSI | 1043 | * struct se_node_acl for the tcm_loop struct se_portal_group with the SCSI |
@@ -1060,7 +1063,7 @@ static int tcm_loop_make_nexus( | |||
1060 | 1063 | ||
1061 | out: | 1064 | out: |
1062 | kfree(tl_nexus); | 1065 | kfree(tl_nexus); |
1063 | return -ENOMEM; | 1066 | return ret; |
1064 | } | 1067 | } |
1065 | 1068 | ||
1066 | static int tcm_loop_drop_nexus( | 1069 | static int tcm_loop_drop_nexus( |
@@ -1140,7 +1143,7 @@ static ssize_t tcm_loop_tpg_store_nexus( | |||
1140 | * the fabric protocol_id set in tcm_loop_make_scsi_hba(), and call | 1143 | * the fabric protocol_id set in tcm_loop_make_scsi_hba(), and call |
1141 | * tcm_loop_make_nexus() | 1144 | * tcm_loop_make_nexus() |
1142 | */ | 1145 | */ |
1143 | if (strlen(page) > TL_WWN_ADDR_LEN) { | 1146 | if (strlen(page) >= TL_WWN_ADDR_LEN) { |
1144 | printk(KERN_ERR "Emulated NAA Sas Address: %s, exceeds" | 1147 | printk(KERN_ERR "Emulated NAA Sas Address: %s, exceeds" |
1145 | " max: %d\n", page, TL_WWN_ADDR_LEN); | 1148 | " max: %d\n", page, TL_WWN_ADDR_LEN); |
1146 | return -EINVAL; | 1149 | return -EINVAL; |
@@ -1321,7 +1324,7 @@ struct se_wwn *tcm_loop_make_scsi_hba( | |||
1321 | return ERR_PTR(-EINVAL); | 1324 | return ERR_PTR(-EINVAL); |
1322 | 1325 | ||
1323 | check_len: | 1326 | check_len: |
1324 | if (strlen(name) > TL_WWN_ADDR_LEN) { | 1327 | if (strlen(name) >= TL_WWN_ADDR_LEN) { |
1325 | printk(KERN_ERR "Emulated NAA %s Address: %s, exceeds" | 1328 | printk(KERN_ERR "Emulated NAA %s Address: %s, exceeds" |
1326 | " max: %d\n", name, tcm_loop_dump_proto_id(tl_hba), | 1329 | " max: %d\n", name, tcm_loop_dump_proto_id(tl_hba), |
1327 | TL_WWN_ADDR_LEN); | 1330 | TL_WWN_ADDR_LEN); |