vhost-user-scsi: don't copy iscsi/scsi-lowlevel.h
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>
This commit is contained in:
parent
ca853813f7
commit
49a4882438
@ -12,8 +12,9 @@
|
|||||||
|
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "contrib/libvhost-user/libvhost-user.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/iscsi.h"
|
||||||
|
#include "iscsi/scsi-lowlevel.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
@ -163,90 +164,11 @@ static void vus_gsrc_new(VusDev *vdev_scsi, int fd, GIOCondition cond,
|
|||||||
(gpointer)(uintptr_t)id);
|
(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 **/
|
/** 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)
|
static int vus_iscsi_add_lun(VusIscsiLun *lun, char *iscsi_uri)
|
||||||
{
|
{
|
||||||
struct iscsi_url *iscsi_url;
|
struct iscsi_url *iscsi_url;
|
||||||
@ -365,12 +287,12 @@ static int handle_cmd_sync(struct iscsi_context *ctx,
|
|||||||
if (!out_len && !in_len) {
|
if (!out_len && !in_len) {
|
||||||
dir = SCSI_XFER_NONE;
|
dir = SCSI_XFER_NONE;
|
||||||
} else if (out_len) {
|
} else if (out_len) {
|
||||||
dir = SCSI_XFER_TO_DEV;
|
dir = SCSI_XFER_WRITE;
|
||||||
for (i = 0; i < out_len; i++) {
|
for (i = 0; i < out_len; i++) {
|
||||||
len += out[i].iov_len;
|
len += out[i].iov_len;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dir = SCSI_XFER_FROM_DEV;
|
dir = SCSI_XFER_READ;
|
||||||
for (i = 0; i < in_len; i++) {
|
for (i = 0; i < in_len; i++) {
|
||||||
len += in[i].iov_len;
|
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);
|
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.iov = (struct scsi_iovec *)out;
|
||||||
task->iovector_out.niov = out_len;
|
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.iov = (struct scsi_iovec *)in;
|
||||||
task->iovector_in.niov = in_len;
|
task->iovector_in.niov = in_len;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user