diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2012-09-07 17:30:41 +0200 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2012-09-17 17:13:38 -0700 |
commit | e0de44573637ba43e43ae1af042e109bbf2b6dd0 (patch) | |
tree | 177deae38b8bf505a749247b04a90b6b0b0c8eca /drivers/target | |
parent | a50da144d048f9dbebed2b1441ed779d6bbbcd03 (diff) | |
download | op-kernel-dev-e0de44573637ba43e43ae1af042e109bbf2b6dd0.zip op-kernel-dev-e0de44573637ba43e43ae1af042e109bbf2b6dd0.tar.gz |
target: do not submit a zero-bio I/O request
scsi_setup_fs_cmnd does not like to receive requests with no
bios attached to it. Special-case zero-length reads and writes,
by not submitting any bio.
Testcase: sg_raw /dev/sdb 28 00 00 00 00 00 00 00 00 00
should not fail
panics with the rest of the series but not this patch
behaves correctly without or with this series
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target')
-rw-r--r-- | drivers/target/target_core_iblock.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/target/target_core_iblock.c b/drivers/target/target_core_iblock.c index 5b745bb..29408d4 100644 --- a/drivers/target/target_core_iblock.c +++ b/drivers/target/target_core_iblock.c @@ -654,6 +654,12 @@ static int iblock_execute_rw(struct se_cmd *cmd) goto fail; cmd->priv = ibr; + if (!sgl_nents) { + atomic_set(&ibr->pending, 1); + iblock_complete_cmd(cmd); + return 0; + } + bio = iblock_get_bio(cmd, block_lba, sgl_nents); if (!bio) goto fail_free_ibr; |