Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13d2080d authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull SCSI target fixes from Nicholas Bellinger:
 "This includes the bug-fix for a >= v3.8-rc1 regression specific to
  iscsi-target persistent reservation conflict handling (CC'ed to
  stable), and a tcm_vhost patch to drop VIRTIO_RING_F_EVENT_IDX usage
  so that in-flight qemu vhost-scsi-pci device code can detect the
  proper vhost feature bits.

  Also, there are two more tcm_vhost patches still being discussed by
  MST and Asias for v3.9 that will be required for the in-flight qemu
  vhost-scsi-pci device patch to function properly, and that should
  (hopefully) be the last target fixes for this round."

* git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending:
  target: Fix RESERVATION_CONFLICT status regression for iscsi-target special case
  tcm_vhost: Avoid VIRTIO_RING_F_EVENT_IDX feature bit
parents 46a1f21a f85eda8d
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -1139,8 +1139,10 @@ target_setup_cmd_from_cdb(struct se_cmd *cmd, unsigned char *cdb)
		return ret;
		return ret;


	ret = target_check_reservation(cmd);
	ret = target_check_reservation(cmd);
	if (ret)
	if (ret) {
		cmd->scsi_status = SAM_STAT_RESERVATION_CONFLICT;
		return ret;
		return ret;
	}


	ret = dev->transport->parse_cdb(cmd);
	ret = dev->transport->parse_cdb(cmd);
	if (ret)
	if (ret)
+11 −2
Original line number Original line Diff line number Diff line
@@ -60,6 +60,15 @@ enum {
	VHOST_SCSI_VQ_IO = 2,
	VHOST_SCSI_VQ_IO = 2,
};
};


/*
 * VIRTIO_RING_F_EVENT_IDX seems broken. Not sure the bug is in
 * kernel but disabling it helps.
 * TODO: debug and remove the workaround.
 */
enum {
	VHOST_SCSI_FEATURES = VHOST_FEATURES & (~VIRTIO_RING_F_EVENT_IDX)
};

#define VHOST_SCSI_MAX_TARGET	256
#define VHOST_SCSI_MAX_TARGET	256
#define VHOST_SCSI_MAX_VQ	128
#define VHOST_SCSI_MAX_VQ	128


@@ -946,7 +955,7 @@ static void vhost_scsi_flush(struct vhost_scsi *vs)


static int vhost_scsi_set_features(struct vhost_scsi *vs, u64 features)
static int vhost_scsi_set_features(struct vhost_scsi *vs, u64 features)
{
{
	if (features & ~VHOST_FEATURES)
	if (features & ~VHOST_SCSI_FEATURES)
		return -EOPNOTSUPP;
		return -EOPNOTSUPP;


	mutex_lock(&vs->dev.mutex);
	mutex_lock(&vs->dev.mutex);
@@ -992,7 +1001,7 @@ static long vhost_scsi_ioctl(struct file *f, unsigned int ioctl,
			return -EFAULT;
			return -EFAULT;
		return 0;
		return 0;
	case VHOST_GET_FEATURES:
	case VHOST_GET_FEATURES:
		features = VHOST_FEATURES;
		features = VHOST_SCSI_FEATURES;
		if (copy_to_user(featurep, &features, sizeof features))
		if (copy_to_user(featurep, &features, sizeof features))
			return -EFAULT;
			return -EFAULT;
		return 0;
		return 0;