SCSI fixes on 20180905
A set of very minor fixes and a couple of reverts to fix a major problem (the attempt to change the busy count causes a hang when attempting to change the drive cache type). Signed-off-by: James E.J. Bottomley <jejb@linux.vnet.ibm.com> -----BEGIN PGP SIGNATURE----- iJwEABMIAEQWIQTnYEDbdso9F2cI+arnQslM7pishQUCW4+QYSYcamFtZXMuYm90 dG9tbGV5QGhhbnNlbnBhcnRuZXJzaGlwLmNvbQAKCRDnQslM7pishbWyAP9VjOlI 8VOvkoWvHxGzN9m3DXnv6CVbNcqXC+7g8BYQmgD9HhFKrhfQXtwL+VT4k4G2K6l0 cVDMH3cUMMFhRxKR5DM= =DYnk -----END PGP SIGNATURE----- Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi Pull SCSI fixes from James Bottomley: "A set of very minor fixes and a couple of reverts to fix a major problem (the attempt to change the busy count causes a hang when attempting to change the drive cache type)" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: aacraid: fix a signedness bug Revert "scsi: core: avoid host-wide host_busy counter for scsi_mq" Revert "scsi: core: fix scsi_host_queue_ready" scsi: libata: Add missing newline at end of file scsi: target: iscsi: cxgbit: use pr_debug() instead of pr_info() scsi: hpsa: limit transfer length to 1MB, not 512kB scsi: lpfc: Correct MDS diag and nvmet configuration scsi: lpfc: Default fdmi_on to on scsi: csiostor: fix incorrect port capabilities scsi: csiostor: add a check for NULL pointer after kmalloc() scsi: documentation: add scsi_mod.use_blk_mq to scsi-parameters scsi: core: Update SCSI_MQ_DEFAULT help text to match default
This commit is contained in:
commit
f4697d9a8a
|
@ -97,6 +97,11 @@ parameters may be changed at runtime by the command
|
||||||
allowing boot to proceed. none ignores them, expecting
|
allowing boot to proceed. none ignores them, expecting
|
||||||
user space to do the scan.
|
user space to do the scan.
|
||||||
|
|
||||||
|
scsi_mod.use_blk_mq=
|
||||||
|
[SCSI] use blk-mq I/O path by default
|
||||||
|
See SCSI_MQ_DEFAULT in drivers/scsi/Kconfig.
|
||||||
|
Format: <y/n>
|
||||||
|
|
||||||
sim710= [SCSI,HW]
|
sim710= [SCSI,HW]
|
||||||
See header of drivers/scsi/sim710.c.
|
See header of drivers/scsi/sim710.c.
|
||||||
|
|
||||||
|
|
|
@ -7394,4 +7394,4 @@ EXPORT_SYMBOL_GPL(ata_cable_unknown);
|
||||||
EXPORT_SYMBOL_GPL(ata_cable_ignore);
|
EXPORT_SYMBOL_GPL(ata_cable_ignore);
|
||||||
EXPORT_SYMBOL_GPL(ata_cable_sata);
|
EXPORT_SYMBOL_GPL(ata_cable_sata);
|
||||||
EXPORT_SYMBOL_GPL(ata_host_get);
|
EXPORT_SYMBOL_GPL(ata_host_get);
|
||||||
EXPORT_SYMBOL_GPL(ata_host_put);
|
EXPORT_SYMBOL_GPL(ata_host_put);
|
||||||
|
|
|
@ -52,12 +52,12 @@ config SCSI_MQ_DEFAULT
|
||||||
default y
|
default y
|
||||||
depends on SCSI
|
depends on SCSI
|
||||||
---help---
|
---help---
|
||||||
This option enables the new blk-mq based I/O path for SCSI
|
This option enables the blk-mq based I/O path for SCSI devices by
|
||||||
devices by default. With the option the scsi_mod.use_blk_mq
|
default. With this option the scsi_mod.use_blk_mq module/boot
|
||||||
module/boot option defaults to Y, without it to N, but it can
|
option defaults to Y, without it to N, but it can still be
|
||||||
still be overridden either way.
|
overridden either way.
|
||||||
|
|
||||||
If unsure say N.
|
If unsure say Y.
|
||||||
|
|
||||||
config SCSI_PROC_FS
|
config SCSI_PROC_FS
|
||||||
bool "legacy /proc/scsi/ support"
|
bool "legacy /proc/scsi/ support"
|
||||||
|
|
|
@ -1346,7 +1346,7 @@ struct fib {
|
||||||
struct aac_hba_map_info {
|
struct aac_hba_map_info {
|
||||||
__le32 rmw_nexus; /* nexus for native HBA devices */
|
__le32 rmw_nexus; /* nexus for native HBA devices */
|
||||||
u8 devtype; /* device type */
|
u8 devtype; /* device type */
|
||||||
u8 reset_state; /* 0 - no reset, 1..x - */
|
s8 reset_state; /* 0 - no reset, 1..x - */
|
||||||
/* after xth TM LUN reset */
|
/* after xth TM LUN reset */
|
||||||
u16 qd_limit;
|
u16 qd_limit;
|
||||||
u32 scan_counter;
|
u32 scan_counter;
|
||||||
|
|
|
@ -1601,6 +1601,46 @@ fw_port_cap32_t fwcaps16_to_caps32(fw_port_cap16_t caps16)
|
||||||
return caps32;
|
return caps32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fwcaps32_to_caps16 - convert 32-bit Port Capabilities to 16-bits
|
||||||
|
* @caps32: a 32-bit Port Capabilities value
|
||||||
|
*
|
||||||
|
* Returns the equivalent 16-bit Port Capabilities value. Note that
|
||||||
|
* not all 32-bit Port Capabilities can be represented in the 16-bit
|
||||||
|
* Port Capabilities and some fields/values may not make it.
|
||||||
|
*/
|
||||||
|
fw_port_cap16_t fwcaps32_to_caps16(fw_port_cap32_t caps32)
|
||||||
|
{
|
||||||
|
fw_port_cap16_t caps16 = 0;
|
||||||
|
|
||||||
|
#define CAP32_TO_CAP16(__cap) \
|
||||||
|
do { \
|
||||||
|
if (caps32 & FW_PORT_CAP32_##__cap) \
|
||||||
|
caps16 |= FW_PORT_CAP_##__cap; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
CAP32_TO_CAP16(SPEED_100M);
|
||||||
|
CAP32_TO_CAP16(SPEED_1G);
|
||||||
|
CAP32_TO_CAP16(SPEED_10G);
|
||||||
|
CAP32_TO_CAP16(SPEED_25G);
|
||||||
|
CAP32_TO_CAP16(SPEED_40G);
|
||||||
|
CAP32_TO_CAP16(SPEED_100G);
|
||||||
|
CAP32_TO_CAP16(FC_RX);
|
||||||
|
CAP32_TO_CAP16(FC_TX);
|
||||||
|
CAP32_TO_CAP16(802_3_PAUSE);
|
||||||
|
CAP32_TO_CAP16(802_3_ASM_DIR);
|
||||||
|
CAP32_TO_CAP16(ANEG);
|
||||||
|
CAP32_TO_CAP16(FORCE_PAUSE);
|
||||||
|
CAP32_TO_CAP16(MDIAUTO);
|
||||||
|
CAP32_TO_CAP16(MDISTRAIGHT);
|
||||||
|
CAP32_TO_CAP16(FEC_RS);
|
||||||
|
CAP32_TO_CAP16(FEC_BASER_RS);
|
||||||
|
|
||||||
|
#undef CAP32_TO_CAP16
|
||||||
|
|
||||||
|
return caps16;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lstatus_to_fwcap - translate old lstatus to 32-bit Port Capabilities
|
* lstatus_to_fwcap - translate old lstatus to 32-bit Port Capabilities
|
||||||
* @lstatus: old FW_PORT_ACTION_GET_PORT_INFO lstatus value
|
* @lstatus: old FW_PORT_ACTION_GET_PORT_INFO lstatus value
|
||||||
|
@ -1759,7 +1799,7 @@ csio_enable_ports(struct csio_hw *hw)
|
||||||
val = 1;
|
val = 1;
|
||||||
|
|
||||||
csio_mb_params(hw, mbp, CSIO_MB_DEFAULT_TMO,
|
csio_mb_params(hw, mbp, CSIO_MB_DEFAULT_TMO,
|
||||||
hw->pfn, 0, 1, ¶m, &val, false,
|
hw->pfn, 0, 1, ¶m, &val, true,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if (csio_mb_issue(hw, mbp)) {
|
if (csio_mb_issue(hw, mbp)) {
|
||||||
|
@ -1769,16 +1809,9 @@ csio_enable_ports(struct csio_hw *hw)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
csio_mb_process_read_params_rsp(hw, mbp, &retval, 1,
|
csio_mb_process_read_params_rsp(hw, mbp, &retval,
|
||||||
&val);
|
0, NULL);
|
||||||
if (retval != FW_SUCCESS) {
|
fw_caps = retval ? FW_CAPS16 : FW_CAPS32;
|
||||||
csio_err(hw, "FW_PARAMS_CMD(r) port:%d failed: 0x%x\n",
|
|
||||||
portid, retval);
|
|
||||||
mempool_free(mbp, hw->mb_mempool);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
fw_caps = val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read PORT information */
|
/* Read PORT information */
|
||||||
|
@ -2364,8 +2397,8 @@ bye:
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns -EINVAL if attempts to flash the firmware failed
|
* Returns -EINVAL if attempts to flash the firmware failed,
|
||||||
* else returns 0,
|
* -ENOMEM if memory allocation failed else returns 0,
|
||||||
* if flashing was not attempted because the card had the
|
* if flashing was not attempted because the card had the
|
||||||
* latest firmware ECANCELED is returned
|
* latest firmware ECANCELED is returned
|
||||||
*/
|
*/
|
||||||
|
@ -2393,6 +2426,13 @@ csio_hw_flash_fw(struct csio_hw *hw, int *reset)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* allocate memory to read the header of the firmware on the
|
||||||
|
* card
|
||||||
|
*/
|
||||||
|
card_fw = kmalloc(sizeof(*card_fw), GFP_KERNEL);
|
||||||
|
if (!card_fw)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
if (csio_is_t5(pci_dev->device & CSIO_HW_CHIP_MASK))
|
if (csio_is_t5(pci_dev->device & CSIO_HW_CHIP_MASK))
|
||||||
fw_bin_file = FW_FNAME_T5;
|
fw_bin_file = FW_FNAME_T5;
|
||||||
else
|
else
|
||||||
|
@ -2406,11 +2446,6 @@ csio_hw_flash_fw(struct csio_hw *hw, int *reset)
|
||||||
fw_size = fw->size;
|
fw_size = fw->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* allocate memory to read the header of the firmware on the
|
|
||||||
* card
|
|
||||||
*/
|
|
||||||
card_fw = kmalloc(sizeof(*card_fw), GFP_KERNEL);
|
|
||||||
|
|
||||||
/* upgrade FW logic */
|
/* upgrade FW logic */
|
||||||
ret = csio_hw_prep_fw(hw, fw_info, fw_data, fw_size, card_fw,
|
ret = csio_hw_prep_fw(hw, fw_info, fw_data, fw_size, card_fw,
|
||||||
hw->fw_state, reset);
|
hw->fw_state, reset);
|
||||||
|
|
|
@ -639,6 +639,7 @@ int csio_handle_intr_status(struct csio_hw *, unsigned int,
|
||||||
|
|
||||||
fw_port_cap32_t fwcap_to_fwspeed(fw_port_cap32_t acaps);
|
fw_port_cap32_t fwcap_to_fwspeed(fw_port_cap32_t acaps);
|
||||||
fw_port_cap32_t fwcaps16_to_caps32(fw_port_cap16_t caps16);
|
fw_port_cap32_t fwcaps16_to_caps32(fw_port_cap16_t caps16);
|
||||||
|
fw_port_cap16_t fwcaps32_to_caps16(fw_port_cap32_t caps32);
|
||||||
fw_port_cap32_t lstatus_to_fwcap(u32 lstatus);
|
fw_port_cap32_t lstatus_to_fwcap(u32 lstatus);
|
||||||
|
|
||||||
int csio_hw_start(struct csio_hw *);
|
int csio_hw_start(struct csio_hw *);
|
||||||
|
|
|
@ -368,7 +368,7 @@ csio_mb_port(struct csio_hw *hw, struct csio_mb *mbp, uint32_t tmo,
|
||||||
FW_CMD_LEN16_V(sizeof(*cmdp) / 16));
|
FW_CMD_LEN16_V(sizeof(*cmdp) / 16));
|
||||||
|
|
||||||
if (fw_caps == FW_CAPS16)
|
if (fw_caps == FW_CAPS16)
|
||||||
cmdp->u.l1cfg.rcap = cpu_to_be32(fc);
|
cmdp->u.l1cfg.rcap = cpu_to_be32(fwcaps32_to_caps16(fc));
|
||||||
else
|
else
|
||||||
cmdp->u.l1cfg32.rcap32 = cpu_to_be32(fc);
|
cmdp->u.l1cfg32.rcap32 = cpu_to_be32(fc);
|
||||||
}
|
}
|
||||||
|
@ -395,8 +395,8 @@ csio_mb_process_read_port_rsp(struct csio_hw *hw, struct csio_mb *mbp,
|
||||||
*pcaps = fwcaps16_to_caps32(ntohs(rsp->u.info.pcap));
|
*pcaps = fwcaps16_to_caps32(ntohs(rsp->u.info.pcap));
|
||||||
*acaps = fwcaps16_to_caps32(ntohs(rsp->u.info.acap));
|
*acaps = fwcaps16_to_caps32(ntohs(rsp->u.info.acap));
|
||||||
} else {
|
} else {
|
||||||
*pcaps = ntohs(rsp->u.info32.pcaps32);
|
*pcaps = be32_to_cpu(rsp->u.info32.pcaps32);
|
||||||
*acaps = ntohs(rsp->u.info32.acaps32);
|
*acaps = be32_to_cpu(rsp->u.info32.acaps32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -563,35 +563,13 @@ struct Scsi_Host *scsi_host_get(struct Scsi_Host *shost)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(scsi_host_get);
|
EXPORT_SYMBOL(scsi_host_get);
|
||||||
|
|
||||||
struct scsi_host_mq_in_flight {
|
|
||||||
int cnt;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void scsi_host_check_in_flight(struct request *rq, void *data,
|
|
||||||
bool reserved)
|
|
||||||
{
|
|
||||||
struct scsi_host_mq_in_flight *in_flight = data;
|
|
||||||
|
|
||||||
if (blk_mq_request_started(rq))
|
|
||||||
in_flight->cnt++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* scsi_host_busy - Return the host busy counter
|
* scsi_host_busy - Return the host busy counter
|
||||||
* @shost: Pointer to Scsi_Host to inc.
|
* @shost: Pointer to Scsi_Host to inc.
|
||||||
**/
|
**/
|
||||||
int scsi_host_busy(struct Scsi_Host *shost)
|
int scsi_host_busy(struct Scsi_Host *shost)
|
||||||
{
|
{
|
||||||
struct scsi_host_mq_in_flight in_flight = {
|
return atomic_read(&shost->host_busy);
|
||||||
.cnt = 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!shost->use_blk_mq)
|
|
||||||
return atomic_read(&shost->host_busy);
|
|
||||||
|
|
||||||
blk_mq_tagset_busy_iter(&shost->tag_set, scsi_host_check_in_flight,
|
|
||||||
&in_flight);
|
|
||||||
return in_flight.cnt;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(scsi_host_busy);
|
EXPORT_SYMBOL(scsi_host_busy);
|
||||||
|
|
||||||
|
|
|
@ -976,7 +976,7 @@ static struct scsi_host_template hpsa_driver_template = {
|
||||||
#endif
|
#endif
|
||||||
.sdev_attrs = hpsa_sdev_attrs,
|
.sdev_attrs = hpsa_sdev_attrs,
|
||||||
.shost_attrs = hpsa_shost_attrs,
|
.shost_attrs = hpsa_shost_attrs,
|
||||||
.max_sectors = 1024,
|
.max_sectors = 2048,
|
||||||
.no_write_same = 1,
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -672,7 +672,7 @@ struct lpfc_hba {
|
||||||
#define LS_NPIV_FAB_SUPPORTED 0x2 /* Fabric supports NPIV */
|
#define LS_NPIV_FAB_SUPPORTED 0x2 /* Fabric supports NPIV */
|
||||||
#define LS_IGNORE_ERATT 0x4 /* intr handler should ignore ERATT */
|
#define LS_IGNORE_ERATT 0x4 /* intr handler should ignore ERATT */
|
||||||
#define LS_MDS_LINK_DOWN 0x8 /* MDS Diagnostics Link Down */
|
#define LS_MDS_LINK_DOWN 0x8 /* MDS Diagnostics Link Down */
|
||||||
#define LS_MDS_LOOPBACK 0x16 /* MDS Diagnostics Link Up (Loopback) */
|
#define LS_MDS_LOOPBACK 0x10 /* MDS Diagnostics Link Up (Loopback) */
|
||||||
|
|
||||||
uint32_t hba_flag; /* hba generic flags */
|
uint32_t hba_flag; /* hba generic flags */
|
||||||
#define HBA_ERATT_HANDLED 0x1 /* This flag is set when eratt handled */
|
#define HBA_ERATT_HANDLED 0x1 /* This flag is set when eratt handled */
|
||||||
|
|
|
@ -5122,16 +5122,16 @@ LPFC_ATTR_R(enable_SmartSAN, 0, 0, 1, "Enable SmartSAN functionality");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
# lpfc_fdmi_on: Controls FDMI support.
|
# lpfc_fdmi_on: Controls FDMI support.
|
||||||
# 0 No FDMI support (default)
|
# 0 No FDMI support
|
||||||
# 1 Traditional FDMI support
|
# 1 Traditional FDMI support (default)
|
||||||
# Traditional FDMI support means the driver will assume FDMI-2 support;
|
# Traditional FDMI support means the driver will assume FDMI-2 support;
|
||||||
# however, if that fails, it will fallback to FDMI-1.
|
# however, if that fails, it will fallback to FDMI-1.
|
||||||
# If lpfc_enable_SmartSAN is set to 1, the driver ignores lpfc_fdmi_on.
|
# If lpfc_enable_SmartSAN is set to 1, the driver ignores lpfc_fdmi_on.
|
||||||
# If lpfc_enable_SmartSAN is set 0, the driver uses the current value of
|
# If lpfc_enable_SmartSAN is set 0, the driver uses the current value of
|
||||||
# lpfc_fdmi_on.
|
# lpfc_fdmi_on.
|
||||||
# Value range [0,1]. Default value is 0.
|
# Value range [0,1]. Default value is 1.
|
||||||
*/
|
*/
|
||||||
LPFC_ATTR_R(fdmi_on, 0, 0, 1, "Enable FDMI support");
|
LPFC_ATTR_R(fdmi_on, 1, 0, 1, "Enable FDMI support");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
# Specifies the maximum number of ELS cmds we can have outstanding (for
|
# Specifies the maximum number of ELS cmds we can have outstanding (for
|
||||||
|
|
|
@ -345,8 +345,7 @@ static void scsi_dec_host_busy(struct Scsi_Host *shost)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
if (!shost->use_blk_mq)
|
atomic_dec(&shost->host_busy);
|
||||||
atomic_dec(&shost->host_busy);
|
|
||||||
if (unlikely(scsi_host_in_recovery(shost))) {
|
if (unlikely(scsi_host_in_recovery(shost))) {
|
||||||
spin_lock_irqsave(shost->host_lock, flags);
|
spin_lock_irqsave(shost->host_lock, flags);
|
||||||
if (shost->host_failed || shost->host_eh_scheduled)
|
if (shost->host_failed || shost->host_eh_scheduled)
|
||||||
|
@ -445,12 +444,7 @@ static inline bool scsi_target_is_busy(struct scsi_target *starget)
|
||||||
|
|
||||||
static inline bool scsi_host_is_busy(struct Scsi_Host *shost)
|
static inline bool scsi_host_is_busy(struct Scsi_Host *shost)
|
||||||
{
|
{
|
||||||
/*
|
if (shost->can_queue > 0 &&
|
||||||
* blk-mq can handle host queue busy efficiently via host-wide driver
|
|
||||||
* tag allocation
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!shost->use_blk_mq && shost->can_queue > 0 &&
|
|
||||||
atomic_read(&shost->host_busy) >= shost->can_queue)
|
atomic_read(&shost->host_busy) >= shost->can_queue)
|
||||||
return true;
|
return true;
|
||||||
if (atomic_read(&shost->host_blocked) > 0)
|
if (atomic_read(&shost->host_blocked) > 0)
|
||||||
|
@ -1606,10 +1600,7 @@ static inline int scsi_host_queue_ready(struct request_queue *q,
|
||||||
if (scsi_host_in_recovery(shost))
|
if (scsi_host_in_recovery(shost))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!shost->use_blk_mq)
|
busy = atomic_inc_return(&shost->host_busy) - 1;
|
||||||
busy = atomic_inc_return(&shost->host_busy) - 1;
|
|
||||||
else
|
|
||||||
busy = 0;
|
|
||||||
if (atomic_read(&shost->host_blocked) > 0) {
|
if (atomic_read(&shost->host_blocked) > 0) {
|
||||||
if (busy)
|
if (busy)
|
||||||
goto starved;
|
goto starved;
|
||||||
|
@ -1625,7 +1616,7 @@ static inline int scsi_host_queue_ready(struct request_queue *q,
|
||||||
"unblocking host at zero depth\n"));
|
"unblocking host at zero depth\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!shost->use_blk_mq && shost->can_queue > 0 && busy >= shost->can_queue)
|
if (shost->can_queue > 0 && busy >= shost->can_queue)
|
||||||
goto starved;
|
goto starved;
|
||||||
if (shost->host_self_blocked)
|
if (shost->host_self_blocked)
|
||||||
goto starved;
|
goto starved;
|
||||||
|
@ -1711,9 +1702,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q)
|
||||||
* with the locks as normal issue path does.
|
* with the locks as normal issue path does.
|
||||||
*/
|
*/
|
||||||
atomic_inc(&sdev->device_busy);
|
atomic_inc(&sdev->device_busy);
|
||||||
|
atomic_inc(&shost->host_busy);
|
||||||
if (!shost->use_blk_mq)
|
|
||||||
atomic_inc(&shost->host_busy);
|
|
||||||
if (starget->can_queue > 0)
|
if (starget->can_queue > 0)
|
||||||
atomic_inc(&starget->target_busy);
|
atomic_inc(&starget->target_busy);
|
||||||
|
|
||||||
|
|
|
@ -207,8 +207,8 @@ cxgbit_ddp_reserve(struct cxgbit_sock *csk, struct cxgbi_task_tag_info *ttinfo,
|
||||||
ret = dma_map_sg(&ppm->pdev->dev, sgl, sgcnt, DMA_FROM_DEVICE);
|
ret = dma_map_sg(&ppm->pdev->dev, sgl, sgcnt, DMA_FROM_DEVICE);
|
||||||
sgl->offset = sg_offset;
|
sgl->offset = sg_offset;
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
pr_info("%s: 0x%x, xfer %u, sgl %u dma mapping err.\n",
|
pr_debug("%s: 0x%x, xfer %u, sgl %u dma mapping err.\n",
|
||||||
__func__, 0, xferlen, sgcnt);
|
__func__, 0, xferlen, sgcnt);
|
||||||
goto rel_ppods;
|
goto rel_ppods;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,8 +250,8 @@ cxgbit_get_r2t_ttt(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
|
||||||
|
|
||||||
ret = cxgbit_ddp_reserve(csk, ttinfo, cmd->se_cmd.data_length);
|
ret = cxgbit_ddp_reserve(csk, ttinfo, cmd->se_cmd.data_length);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
pr_info("csk 0x%p, cmd 0x%p, xfer len %u, sgcnt %u no ddp.\n",
|
pr_debug("csk 0x%p, cmd 0x%p, xfer len %u, sgcnt %u no ddp.\n",
|
||||||
csk, cmd, cmd->se_cmd.data_length, ttinfo->nents);
|
csk, cmd, cmd->se_cmd.data_length, ttinfo->nents);
|
||||||
|
|
||||||
ttinfo->sgl = NULL;
|
ttinfo->sgl = NULL;
|
||||||
ttinfo->nents = 0;
|
ttinfo->nents = 0;
|
||||||
|
|
Loading…
Reference in New Issue