Updated from Linux LTS 3.10.25 to 3.10.26
This commit is contained in:
@@ -838,24 +838,22 @@ int iscsit_setup_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
|
||||
if (((hdr->flags & ISCSI_FLAG_CMD_READ) ||
|
||||
(hdr->flags & ISCSI_FLAG_CMD_WRITE)) && !hdr->data_length) {
|
||||
/*
|
||||
* Vmware ESX v3.0 uses a modified Cisco Initiator (v3.4.2)
|
||||
* that adds support for RESERVE/RELEASE. There is a bug
|
||||
* add with this new functionality that sets R/W bits when
|
||||
* neither CDB carries any READ or WRITE datapayloads.
|
||||
* From RFC-3720 Section 10.3.1:
|
||||
*
|
||||
* "Either or both of R and W MAY be 1 when either the
|
||||
* Expected Data Transfer Length and/or Bidirectional Read
|
||||
* Expected Data Transfer Length are 0"
|
||||
*
|
||||
* For this case, go ahead and clear the unnecssary bits
|
||||
* to avoid any confusion with ->data_direction.
|
||||
*/
|
||||
if ((hdr->cdb[0] == 0x16) || (hdr->cdb[0] == 0x17)) {
|
||||
hdr->flags &= ~ISCSI_FLAG_CMD_READ;
|
||||
hdr->flags &= ~ISCSI_FLAG_CMD_WRITE;
|
||||
goto done;
|
||||
}
|
||||
hdr->flags &= ~ISCSI_FLAG_CMD_READ;
|
||||
hdr->flags &= ~ISCSI_FLAG_CMD_WRITE;
|
||||
|
||||
pr_err("ISCSI_FLAG_CMD_READ or ISCSI_FLAG_CMD_WRITE"
|
||||
pr_warn("ISCSI_FLAG_CMD_READ or ISCSI_FLAG_CMD_WRITE"
|
||||
" set when Expected Data Transfer Length is 0 for"
|
||||
" CDB: 0x%02x. Bad iSCSI Initiator.\n", hdr->cdb[0]);
|
||||
return iscsit_add_reject_cmd(cmd,
|
||||
ISCSI_REASON_BOOKMARK_INVALID, buf);
|
||||
" CDB: 0x%02x, Fixing up flags\n", hdr->cdb[0]);
|
||||
}
|
||||
done:
|
||||
|
||||
if (!(hdr->flags & ISCSI_FLAG_CMD_READ) &&
|
||||
!(hdr->flags & ISCSI_FLAG_CMD_WRITE) && (hdr->data_length != 0)) {
|
||||
|
||||
@@ -1078,6 +1078,11 @@ int se_dev_set_block_size(struct se_device *dev, u32 block_size)
|
||||
dev->dev_attrib.block_size = block_size;
|
||||
pr_debug("dev[%p]: SE Device block_size changed to %u\n",
|
||||
dev, block_size);
|
||||
|
||||
if (dev->dev_attrib.max_bytes_per_io)
|
||||
dev->dev_attrib.hw_max_sectors =
|
||||
dev->dev_attrib.max_bytes_per_io / block_size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,9 +66,8 @@ static int fd_attach_hba(struct se_hba *hba, u32 host_id)
|
||||
pr_debug("CORE_HBA[%d] - TCM FILEIO HBA Driver %s on Generic"
|
||||
" Target Core Stack %s\n", hba->hba_id, FD_VERSION,
|
||||
TARGET_CORE_MOD_VERSION);
|
||||
pr_debug("CORE_HBA[%d] - Attached FILEIO HBA: %u to Generic"
|
||||
" MaxSectors: %u\n",
|
||||
hba->hba_id, fd_host->fd_host_id, FD_MAX_SECTORS);
|
||||
pr_debug("CORE_HBA[%d] - Attached FILEIO HBA: %u to Generic\n",
|
||||
hba->hba_id, fd_host->fd_host_id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -220,7 +219,8 @@ static int fd_configure_device(struct se_device *dev)
|
||||
}
|
||||
|
||||
dev->dev_attrib.hw_block_size = fd_dev->fd_block_size;
|
||||
dev->dev_attrib.hw_max_sectors = FD_MAX_SECTORS;
|
||||
dev->dev_attrib.max_bytes_per_io = FD_MAX_BYTES;
|
||||
dev->dev_attrib.hw_max_sectors = FD_MAX_BYTES / fd_dev->fd_block_size;
|
||||
dev->dev_attrib.hw_queue_depth = FD_MAX_DEVICE_QUEUE_DEPTH;
|
||||
|
||||
if (fd_dev->fbd_flags & FDBD_HAS_BUFFERED_IO_WCE) {
|
||||
|
||||
@@ -7,7 +7,10 @@
|
||||
#define FD_DEVICE_QUEUE_DEPTH 32
|
||||
#define FD_MAX_DEVICE_QUEUE_DEPTH 128
|
||||
#define FD_BLOCKSIZE 512
|
||||
#define FD_MAX_SECTORS 2048
|
||||
/*
|
||||
* Limited by the number of iovecs (2048) per vfs_[writev,readv] call
|
||||
*/
|
||||
#define FD_MAX_BYTES 8388608
|
||||
|
||||
#define RRF_EMULATE_CDB 0x01
|
||||
#define RRF_GOT_LBA 0x02
|
||||
|
||||
Reference in New Issue
Block a user