[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 21/27] vhost-user-scsi: don't copy iscsi/scsi-lowleve
From: |
Marc-André Lureau |
Subject: |
[Qemu-devel] [PULL 21/27] vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h |
Date: |
Tue, 10 Oct 2017 19:11:16 +0200 |
There is no need to include hw/virtio/virtio-scsi.h, then the conflict
with SCSI_XFER enum goes away.
Signed-off-by: Marc-André Lureau <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
---
contrib/vhost-user-scsi/vhost-user-scsi.c | 96 +++----------------------------
1 file changed, 9 insertions(+), 87 deletions(-)
diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c
b/contrib/vhost-user-scsi/vhost-user-scsi.c
index c7f9d82142..cfac1ce1fe 100644
--- a/contrib/vhost-user-scsi/vhost-user-scsi.c
+++ b/contrib/vhost-user-scsi/vhost-user-scsi.c
@@ -12,8 +12,9 @@
#include "qemu/osdep.h"
#include "contrib/libvhost-user/libvhost-user.h"
-#include "hw/virtio/virtio-scsi.h"
+#include "standard-headers/linux/virtio_scsi.h"
#include "iscsi/iscsi.h"
+#include "iscsi/scsi-lowlevel.h"
#include <glib.h>
@@ -163,90 +164,11 @@ static void vus_gsrc_new(VusDev *vdev_scsi, int fd,
GIOCondition cond,
(gpointer)(uintptr_t)id);
}
-/* from libiscsi's scsi-lowlevel.h **
- *
- * nb. We can't directly include scsi-lowlevel.h due to a namespace conflict:
- * QEMU's scsi.h also defines "SCSI_XFER_NONE".
- */
-
-#define SCSI_CDB_MAX_SIZE 16
-
-struct scsi_iovector {
- struct scsi_iovec *iov;
- int niov;
- int nalloc;
- size_t offset;
- int consumed;
-};
-
-struct scsi_allocated_memory {
- struct scsi_allocated_memory *next;
- char buf[0];
-};
-
-struct scsi_data {
- int size;
- unsigned char *data;
-};
-
-enum scsi_sense_key {
- SCSI_SENSE_NO_SENSE = 0x00,
- SCSI_SENSE_RECOVERED_ERROR = 0x01,
- SCSI_SENSE_NOT_READY = 0x02,
- SCSI_SENSE_MEDIUM_ERROR = 0x03,
- SCSI_SENSE_HARDWARE_ERROR = 0x04,
- SCSI_SENSE_ILLEGAL_REQUEST = 0x05,
- SCSI_SENSE_UNIT_ATTENTION = 0x06,
- SCSI_SENSE_DATA_PROTECTION = 0x07,
- SCSI_SENSE_BLANK_CHECK = 0x08,
- SCSI_SENSE_VENDOR_SPECIFIC = 0x09,
- SCSI_SENSE_COPY_ABORTED = 0x0a,
- SCSI_SENSE_COMMAND_ABORTED = 0x0b,
- SCSI_SENSE_OBSOLETE_ERROR_CODE = 0x0c,
- SCSI_SENSE_OVERFLOW_COMMAND = 0x0d,
- SCSI_SENSE_MISCOMPARE = 0x0e
-};
-
-struct scsi_sense {
- unsigned char error_type;
- enum scsi_sense_key key;
- int ascq;
- unsigned sense_specific:1;
- unsigned ill_param_in_cdb:1;
- unsigned bit_pointer_valid:1;
- unsigned char bit_pointer;
- uint16_t field_pointer;
-};
-
-enum scsi_residual {
- SCSI_RESIDUAL_NO_RESIDUAL = 0,
- SCSI_RESIDUAL_UNDERFLOW,
- SCSI_RESIDUAL_OVERFLOW
-};
-
-struct scsi_task {
- int status;
- int cdb_size;
- int xfer_dir;
- int expxferlen;
- unsigned char cdb[SCSI_CDB_MAX_SIZE];
- enum scsi_residual residual_status;
- size_t residual;
- struct scsi_sense sense;
- struct scsi_data datain;
- struct scsi_allocated_memory *mem;
- void *ptr;
-
- uint32_t itt;
- uint32_t cmdsn;
- uint32_t lun;
-
- struct scsi_iovector iovector_in;
- struct scsi_iovector iovector_out;
-};
-
/** libiscsi integration **/
+typedef struct virtio_scsi_cmd_req VirtIOSCSICmdReq;
+typedef struct virtio_scsi_cmd_resp VirtIOSCSICmdResp;
+
static int vus_iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri)
{
struct iscsi_url *iscsi_url;
@@ -365,12 +287,12 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
if (!out_len && !in_len) {
dir = SCSI_XFER_NONE;
} else if (out_len) {
- dir = SCSI_XFER_TO_DEV;
+ dir = SCSI_XFER_WRITE;
for (i = 0; i < out_len; i++) {
len += out[i].iov_len;
}
} else {
- dir = SCSI_XFER_FROM_DEV;
+ dir = SCSI_XFER_READ;
for (i = 0; i < in_len; i++) {
len += in[i].iov_len;
}
@@ -378,10 +300,10 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
task = scsi_task_new(cdb_len, req->cdb, dir, len);
- if (dir == SCSI_XFER_TO_DEV) {
+ if (dir == SCSI_XFER_WRITE) {
task->iovector_out.iov = (struct scsi_iovec *)out;
task->iovector_out.niov = out_len;
- } else if (dir == SCSI_XFER_FROM_DEV) {
+ } else if (dir == SCSI_XFER_READ) {
task->iovector_in.iov = (struct scsi_iovec *)in;
task->iovector_in.niov = in_len;
}
--
2.15.0.rc0.40.gaefcc5f6f
- [Qemu-devel] [PULL 11/27] vhost-user-scsi: also free the gtree, (continued)
- [Qemu-devel] [PULL 11/27] vhost-user-scsi: also free the gtree, Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 12/27] vhost-user-scsi: remove vdev_scsi_find_by_vu(), Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 13/27] vhost-user-scsi: simplify unix path cleanup, Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 14/27] vhost-user-scsi: use NULL pointer, Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 16/27] vhost-user-scsi: remove vdev_scsi_add_iscsi_lun(), Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 17/27] vhost-user-scsi: remove VUS_MAX_LUNS, Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 15/27] vhost-user-scsi: assert() in iscsi_add_lun(), Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 19/27] vhost-user-scsi: rename VUS types, Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 18/27] vhost-user-scsi: remove unimplemented functions, Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 22/27] vhost-user-scsi: drop extra callback pointer, Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 21/27] vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h,
Marc-André Lureau <=
- [Qemu-devel] [PULL 20/27] vhost-user-scsi: avoid use of iscsi_ namespace, Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 23/27] vhost-user-scsi: simplify source handling, Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 24/27] vhost-user-scsi: use glib logging, Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 25/27] libvhost-user: add glib source helper, Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 26/27] vhost-user-scsi: use libvhost-user glib helper, Marc-André Lureau, 2017/10/10
- [Qemu-devel] [PULL 27/27] vhost-user-scsi: remove server_sock from VusDev, Marc-André Lureau, 2017/10/10
- Re: [Qemu-devel] [PULL 00/27] vhost-user patches, Peter Maydell, 2017/10/10