mirror of https://gitee.com/openkylin/linux.git
SCSI fixes on 20190406
five small fixes. Four in three drivers: qedi, lpfc and storvsc. The final one is labelled core, but merely adds a dh rdac entry for Lenovo systems. Signed-off-by: James E.J. Bottomley <jejb@linux.ibm.com> -----BEGIN PGP SIGNATURE----- iJwEABMIAEQWIQTnYEDbdso9F2cI+arnQslM7pishQUCXKmCMiYcamFtZXMuYm90 dG9tbGV5QGhhbnNlbnBhcnRuZXJzaGlwLmNvbQAKCRDnQslM7pishVskAQCwHoh8 M95Dp83LOxHcrbdKlKshKJdeIqnNnmMGyqu9mAD+NI0TJfnRXIjTAKdesCuxw6M1 V8NVuWUuLBG2SOXYNXs= =207W -----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: "Five small fixes. Four in three drivers: qedi, lpfc and storvsc. The final one is labelled core, but merely adds a dh rdac entry for Lenovo systems" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: lpfc: Fix missing wakeups on abort threads scsi: storvsc: Reduce default ring buffer size to 128 Kbytes scsi: storvsc: Fix calculation of sub-channel count scsi: core: add new RDAC LENOVO/DE_Series device scsi: qedi: remove declaration of nvm_image from stack
This commit is contained in:
commit
eccc58cb10
|
@ -3878,10 +3878,9 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
|
|||
* wake up the thread.
|
||||
*/
|
||||
spin_lock(&lpfc_cmd->buf_lock);
|
||||
if (unlikely(lpfc_cmd->cur_iocbq.iocb_flag & LPFC_DRIVER_ABORTED)) {
|
||||
lpfc_cmd->cur_iocbq.iocb_flag &= ~LPFC_DRIVER_ABORTED;
|
||||
if (lpfc_cmd->waitq)
|
||||
wake_up(lpfc_cmd->waitq);
|
||||
lpfc_cmd->cur_iocbq.iocb_flag &= ~LPFC_DRIVER_ABORTED;
|
||||
if (lpfc_cmd->waitq) {
|
||||
wake_up(lpfc_cmd->waitq);
|
||||
lpfc_cmd->waitq = NULL;
|
||||
}
|
||||
spin_unlock(&lpfc_cmd->buf_lock);
|
||||
|
|
|
@ -1392,10 +1392,8 @@ static void qedi_free_nvm_iscsi_cfg(struct qedi_ctx *qedi)
|
|||
|
||||
static int qedi_alloc_nvm_iscsi_cfg(struct qedi_ctx *qedi)
|
||||
{
|
||||
struct qedi_nvm_iscsi_image nvm_image;
|
||||
|
||||
qedi->iscsi_image = dma_alloc_coherent(&qedi->pdev->dev,
|
||||
sizeof(nvm_image),
|
||||
sizeof(struct qedi_nvm_iscsi_image),
|
||||
&qedi->nvm_buf_dma, GFP_KERNEL);
|
||||
if (!qedi->iscsi_image) {
|
||||
QEDI_ERR(&qedi->dbg_ctx, "Could not allocate NVM BUF.\n");
|
||||
|
@ -2236,14 +2234,13 @@ static void qedi_boot_release(void *data)
|
|||
static int qedi_get_boot_info(struct qedi_ctx *qedi)
|
||||
{
|
||||
int ret = 1;
|
||||
struct qedi_nvm_iscsi_image nvm_image;
|
||||
|
||||
QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO,
|
||||
"Get NVM iSCSI CFG image\n");
|
||||
ret = qedi_ops->common->nvm_get_image(qedi->cdev,
|
||||
QED_NVM_IMAGE_ISCSI_CFG,
|
||||
(char *)qedi->iscsi_image,
|
||||
sizeof(nvm_image));
|
||||
sizeof(struct qedi_nvm_iscsi_image));
|
||||
if (ret)
|
||||
QEDI_ERR(&qedi->dbg_ctx,
|
||||
"Could not get NVM image. ret = %d\n", ret);
|
||||
|
|
|
@ -238,6 +238,7 @@ static struct {
|
|||
{"NETAPP", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
|
||||
{"LSI", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
|
||||
{"ENGENIO", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
|
||||
{"LENOVO", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
|
||||
{"SMSC", "USB 2 HS-CF", NULL, BLIST_SPARSELUN | BLIST_INQUIRY_36},
|
||||
{"SONY", "CD-ROM CDU-8001", NULL, BLIST_BORKEN},
|
||||
{"SONY", "TSL", NULL, BLIST_FORCELUN}, /* DDS3 & DDS4 autoloaders */
|
||||
|
|
|
@ -75,6 +75,7 @@ static const struct scsi_dh_blist scsi_dh_blist[] = {
|
|||
{"NETAPP", "INF-01-00", "rdac", },
|
||||
{"LSI", "INF-01-00", "rdac", },
|
||||
{"ENGENIO", "INF-01-00", "rdac", },
|
||||
{"LENOVO", "DE_Series", "rdac", },
|
||||
{NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
|
|
|
@ -385,7 +385,7 @@ enum storvsc_request_type {
|
|||
* This is the end of Protocol specific defines.
|
||||
*/
|
||||
|
||||
static int storvsc_ringbuffer_size = (256 * PAGE_SIZE);
|
||||
static int storvsc_ringbuffer_size = (128 * 1024);
|
||||
static u32 max_outstanding_req_per_channel;
|
||||
|
||||
static int storvsc_vcpus_per_sub_channel = 4;
|
||||
|
@ -668,13 +668,22 @@ static void handle_multichannel_storage(struct hv_device *device, int max_chns)
|
|||
{
|
||||
struct device *dev = &device->device;
|
||||
struct storvsc_device *stor_device;
|
||||
int num_cpus = num_online_cpus();
|
||||
int num_sc;
|
||||
struct storvsc_cmd_request *request;
|
||||
struct vstor_packet *vstor_packet;
|
||||
int ret, t;
|
||||
|
||||
num_sc = ((max_chns > num_cpus) ? num_cpus : max_chns);
|
||||
/*
|
||||
* If the number of CPUs is artificially restricted, such as
|
||||
* with maxcpus=1 on the kernel boot line, Hyper-V could offer
|
||||
* sub-channels >= the number of CPUs. These sub-channels
|
||||
* should not be created. The primary channel is already created
|
||||
* and assigned to one CPU, so check against # CPUs - 1.
|
||||
*/
|
||||
num_sc = min((int)(num_online_cpus() - 1), max_chns);
|
||||
if (!num_sc)
|
||||
return;
|
||||
|
||||
stor_device = get_out_stor_device(device);
|
||||
if (!stor_device)
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue