提交 f7b9d6f7 编写于 作者: M Michal Privoznik

storage_backend_iscsi_direct: Simplify vol zeroing

So far we have two branches: either we zero BLOCK_PER_PACKET
(currently 128) block at once, or if we're close to the last block
then we zero out one block at the time. This is very suboptimal.
We know how many block are there left. Might as well just write
them all at once.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
Reviewed-by: NPavel Hrdina <phrdina@redhat.com>
上级 61d1abd5
......@@ -638,21 +638,23 @@ virStorageBackendISCSIDirectVolWipeZero(virStorageVolDefPtr vol,
return ret;
while (lba < nb_block) {
if (nb_block - lba > block_size * BLOCK_PER_PACKET) {
const uint64_t to_write = MIN(nb_block - lba + 1, BLOCK_PER_PACKET);
if (!(task = iscsi_write16_sync(iscsi, lun, lba, data,
block_size * BLOCK_PER_PACKET,
block_size, 0, 0, 0, 0, 0)))
return -1;
scsi_free_scsi_task(task);
lba += BLOCK_PER_PACKET;
} else {
if (!(task = iscsi_write16_sync(iscsi, lun, lba, data, block_size,
block_size, 0, 0, 0, 0, 0)))
return -1;
task = iscsi_write16_sync(iscsi, lun, lba, data,
block_size * to_write,
block_size, 0, 0, 0, 0, 0);
if (!task ||
task->status != SCSI_STATUS_GOOD) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("failed to write to LUN %d: %s"),
lun, iscsi_get_error(iscsi));
scsi_free_scsi_task(task);
lba++;
return -1;
}
scsi_free_scsi_task(task);
lba += to_write;
}
return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册