[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] block/iscsi: use 16 byte CDBs also for big requests
From: |
Peter Lieven |
Subject: |
[Qemu-devel] [PATCH] block/iscsi: use 16 byte CDBs also for big requests |
Date: |
Tue, 17 Jun 2014 07:57:03 +0200 |
READ10, WRITE10, WRITESAME10 only support requests up to
65536 blocks. This is 32MB for 512-Byte sectors. Change
to READ16, WRITE16, WRITESAME16 just in case such a big
request is issued.
Signed-off-by: Peter Lieven <address@hidden>
---
block/iscsi.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/block/iscsi.c b/block/iscsi.c
index 2e56748..e93a02f 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -382,7 +382,7 @@ static int coroutine_fn iscsi_co_writev(BlockDriverState
*bs,
#endif
iscsi_co_init_iscsitask(iscsilun, &iTask);
retry:
- if (iscsilun->use_16_for_rw) {
+ if (iscsilun->use_16_for_rw || num_sectors > 0xffff) {
iTask.task = iscsi_write16_task(iscsilun->iscsi, iscsilun->lun, lba,
data, num_sectors *
iscsilun->block_size,
iscsilun->block_size, 0, 0, 0, 0, 0,
@@ -578,7 +578,7 @@ static int coroutine_fn iscsi_co_readv(BlockDriverState *bs,
iscsi_co_init_iscsitask(iscsilun, &iTask);
retry:
- if (iscsilun->use_16_for_rw) {
+ if (iscsilun->use_16_for_rw || num_sectors > 0xffff) {
iTask.task = iscsi_read16_task(iscsilun->iscsi, iscsilun->lun, lba,
num_sectors * iscsilun->block_size,
iscsilun->block_size, 0, 0, 0, 0, 0,
@@ -924,9 +924,9 @@ coroutine_fn iscsi_co_write_zeroes(BlockDriverState *bs,
int64_t sector_num,
{
IscsiLun *iscsilun = bs->opaque;
struct IscsiTask iTask;
- uint64_t lba;
- uint32_t nb_blocks;
- bool use_16_for_ws = iscsilun->use_16_for_rw;
+ uint64_t lba = sector_qemu2lun(sector_num, iscsilun);
+ uint32_t nb_blocks = sector_qemu2lun(nb_sectors, iscsilun);
+ bool use_16_for_ws = iscsilun->use_16_for_rw || nb_blocks > 0xffff;
if (!is_request_lun_aligned(sector_num, nb_sectors, iscsilun)) {
return -EINVAL;
@@ -950,9 +950,6 @@ coroutine_fn iscsi_co_write_zeroes(BlockDriverState *bs,
int64_t sector_num,
return -ENOTSUP;
}
- lba = sector_qemu2lun(sector_num, iscsilun);
- nb_blocks = sector_qemu2lun(nb_sectors, iscsilun);
-
if (iscsilun->zeroblock == NULL) {
iscsilun->zeroblock = g_malloc0(iscsilun->block_size);
}
--
1.7.9.5
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [PATCH] block/iscsi: use 16 byte CDBs also for big requests,
Peter Lieven <=