diff mbox

[20/27] vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h

Message ID 20170823162004.27337-21-marcandre.lureau@redhat.com
State New
Headers show

Commit Message

Marc-André Lureau Aug. 23, 2017, 4:19 p.m. UTC
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 <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-scsi/vhost-user-scsi.c | 96 +++----------------------------
 1 file changed, 9 insertions(+), 87 deletions(-)

Comments

Philippe Mathieu-Daudé Sept. 12, 2017, 4:41 p.m. UTC | #1
On 08/23/2017 01:19 PM, Marc-André Lureau wrote:
> 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 <marcandre.lureau@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
>   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 2ab14f1a83..795799ec14 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>
>   
> @@ -161,90 +162,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;
> @@ -363,12 +285,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;
>           }
> @@ -376,10 +298,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;
>       }
>
diff mbox

Patch

diff --git a/contrib/vhost-user-scsi/vhost-user-scsi.c b/contrib/vhost-user-scsi/vhost-user-scsi.c
index 2ab14f1a83..795799ec14 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>
 
@@ -161,90 +162,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;
@@ -363,12 +285,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;
         }
@@ -376,10 +298,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;
     }