summaryrefslogtreecommitdiffstats
path: root/drivers/target
diff options
context:
space:
mode:
authorMing Lei <ming.lei@redhat.com>2018-04-16 11:48:41 +0200
committerMartin K. Petersen <martin.petersen@oracle.com>2018-04-19 06:41:03 +0200
commit8e1ceafe50ec4d1bcfae154dd70e7cb6946a6177 (patch)
tree2fe1f5db06d2b1ab9358cf12187844968d96e174 /drivers/target
parentscsi: sd_zbc: Avoid that resetting a zone fails sporadically (diff)
downloadlinux-8e1ceafe50ec4d1bcfae154dd70e7cb6946a6177.tar.xz
linux-8e1ceafe50ec4d1bcfae154dd70e7cb6946a6177.zip
scsi: target: fix crash with iscsi target and dvd
When the current page can't be added to bio, one new bio should be created for adding this page again, instead of ignoring this page. This patch fixes kernel crash with iscsi target and dvd, as reported by Wakko. Cc: Wakko Warner <wakko@animx.eu.org> Cc: Bart Van Assche <Bart.VanAssche@wdc.com> Cc: target-devel@vger.kernel.org Cc: linux-scsi@vger.kernel.org Cc: "Nicholas A. Bellinger" <nab@linux-iscsi.org> Cc: Christoph Hellwig <hch@lst.de> Fixes: 84c8590646d5b35804 ("target: avoid accessing .bi_vcnt directly") Signed-off-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/target')
-rw-r--r--drivers/target/target_core_pscsi.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
index 0d99b242e82e..6cb933ecc084 100644
--- a/drivers/target/target_core_pscsi.c
+++ b/drivers/target/target_core_pscsi.c
@@ -890,6 +890,7 @@ pscsi_map_sg(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
bytes = min(bytes, data_len);
if (!bio) {
+new_bio:
nr_vecs = min_t(int, BIO_MAX_PAGES, nr_pages);
nr_pages -= nr_vecs;
/*
@@ -931,6 +932,7 @@ pscsi_map_sg(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
* be allocated with pscsi_get_bio() above.
*/
bio = NULL;
+ goto new_bio;
}
data_len -= bytes;