summaryrefslogtreecommitdiffstats
path: root/include/target
diff options
context:
space:
mode:
authorAleksandr Miloserdov <a.miloserdov@yadro.com>2021-02-09 10:22:01 +0300
committerMartin K. Petersen <martin.petersen@oracle.com>2021-02-22 22:21:29 -0500
commit1c73e0c5e54d5f7d77f422a10b03ebe61eaed5ad (patch)
tree5bd664dd5b431e3e94380a219201b4fee7b218b8 /include/target
parentd39bfd0686fd2b21f857c61bb2753db3a932cb24 (diff)
downloadlinux-stable-1c73e0c5e54d5f7d77f422a10b03ebe61eaed5ad.tar.gz
linux-stable-1c73e0c5e54d5f7d77f422a10b03ebe61eaed5ad.tar.bz2
linux-stable-1c73e0c5e54d5f7d77f422a10b03ebe61eaed5ad.zip
scsi: target: core: Add cmd length set before cmd complete
TCM doesn't properly handle underflow case for service actions. One way to prevent it is to always complete command with target_complete_cmd_with_length(), however it requires access to data_sg, which is not always available. This change introduces target_set_cmd_data_length() function which allows to set command data length before completing it. Link: https://lore.kernel.org/r/20210209072202.41154-2-a.miloserdov@yadro.com Reviewed-by: Roman Bolshakov <r.bolshakov@yadro.com> Reviewed-by: Bodo Stroesser <bostroesser@gmail.com> Signed-off-by: Aleksandr Miloserdov <a.miloserdov@yadro.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'include/target')
-rw-r--r--include/target/target_core_backend.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/target/target_core_backend.h b/include/target/target_core_backend.h
index 6336780d83a7..ce2fba49c95d 100644
--- a/include/target/target_core_backend.h
+++ b/include/target/target_core_backend.h
@@ -72,6 +72,7 @@ int transport_backend_register(const struct target_backend_ops *);
void target_backend_unregister(const struct target_backend_ops *);
void target_complete_cmd(struct se_cmd *, u8);
+void target_set_cmd_data_length(struct se_cmd *, int);
void target_complete_cmd_with_length(struct se_cmd *, u8, int);
void transport_copy_sense_to_cmd(struct se_cmd *, unsigned char *);