Commit c6986be4 authored by James Bottomley's avatar James Bottomley

Merge remote-tracking branch 'mkp-scsi/4.6/scsi-fixes' into misc

parents b86c75fd ba083116
...@@ -958,23 +958,22 @@ static void fnic_fcpio_icmnd_cmpl_handler(struct fnic *fnic, ...@@ -958,23 +958,22 @@ static void fnic_fcpio_icmnd_cmpl_handler(struct fnic *fnic,
case FCPIO_INVALID_PARAM: /* some parameter in request invalid */ case FCPIO_INVALID_PARAM: /* some parameter in request invalid */
case FCPIO_REQ_NOT_SUPPORTED:/* request type is not supported */ case FCPIO_REQ_NOT_SUPPORTED:/* request type is not supported */
default: default:
shost_printk(KERN_ERR, fnic->lport->host, "hdr status = %s\n",
fnic_fcpio_status_to_str(hdr_status));
sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status;
break; break;
} }
if (hdr_status != FCPIO_SUCCESS) {
atomic64_inc(&fnic_stats->io_stats.io_failures);
shost_printk(KERN_ERR, fnic->lport->host, "hdr status = %s\n",
fnic_fcpio_status_to_str(hdr_status));
}
/* Break link with the SCSI command */ /* Break link with the SCSI command */
CMD_SP(sc) = NULL; CMD_SP(sc) = NULL;
CMD_FLAGS(sc) |= FNIC_IO_DONE; CMD_FLAGS(sc) |= FNIC_IO_DONE;
spin_unlock_irqrestore(io_lock, flags); spin_unlock_irqrestore(io_lock, flags);
if (hdr_status != FCPIO_SUCCESS) {
atomic64_inc(&fnic_stats->io_stats.io_failures);
shost_printk(KERN_ERR, fnic->lport->host, "hdr status = %s\n",
fnic_fcpio_status_to_str(hdr_status));
}
fnic_release_ioreq_buf(fnic, io_req, sc); fnic_release_ioreq_buf(fnic, io_req, sc);
mempool_free(io_req, fnic->io_req_pool); mempool_free(io_req, fnic->io_req_pool);
......
...@@ -2860,7 +2860,7 @@ lpfc_online(struct lpfc_hba *phba) ...@@ -2860,7 +2860,7 @@ lpfc_online(struct lpfc_hba *phba)
} }
vports = lpfc_create_vport_work_array(phba); vports = lpfc_create_vport_work_array(phba);
if (vports != NULL) if (vports != NULL) {
for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) { for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) {
struct Scsi_Host *shost; struct Scsi_Host *shost;
shost = lpfc_shost_from_vport(vports[i]); shost = lpfc_shost_from_vport(vports[i]);
...@@ -2877,6 +2877,7 @@ lpfc_online(struct lpfc_hba *phba) ...@@ -2877,6 +2877,7 @@ lpfc_online(struct lpfc_hba *phba)
} }
spin_unlock_irq(shost->host_lock); spin_unlock_irq(shost->host_lock);
} }
}
lpfc_destroy_vport_work_array(phba, vports); lpfc_destroy_vport_work_array(phba, vports);
lpfc_unblock_mgmt_io(phba); lpfc_unblock_mgmt_io(phba);
......
...@@ -6656,13 +6656,14 @@ megasas_mgmt_fw_ioctl(struct megasas_instance *instance, ...@@ -6656,13 +6656,14 @@ megasas_mgmt_fw_ioctl(struct megasas_instance *instance,
} }
for (i = 0; i < ioc->sge_count; i++) { for (i = 0; i < ioc->sge_count; i++) {
if (kbuff_arr[i]) if (kbuff_arr[i]) {
dma_free_coherent(&instance->pdev->dev, dma_free_coherent(&instance->pdev->dev,
le32_to_cpu(kern_sge32[i].length), le32_to_cpu(kern_sge32[i].length),
kbuff_arr[i], kbuff_arr[i],
le32_to_cpu(kern_sge32[i].phys_addr)); le32_to_cpu(kern_sge32[i].phys_addr));
kbuff_arr[i] = NULL; kbuff_arr[i] = NULL;
} }
}
megasas_return_cmd(instance, cmd); megasas_return_cmd(instance, cmd);
return error; return error;
......
...@@ -1872,15 +1872,17 @@ static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, ...@@ -1872,15 +1872,17 @@ static int qlt_check_reserve_free_req(struct scsi_qla_host *vha,
else else
vha->req->cnt = vha->req->length - vha->req->cnt = vha->req->length -
(vha->req->ring_index - cnt); (vha->req->ring_index - cnt);
}
if (unlikely(vha->req->cnt < (req_cnt + 2))) { if (unlikely(vha->req->cnt < (req_cnt + 2))) {
ql_dbg(ql_dbg_io, vha, 0x305a, ql_dbg(ql_dbg_io, vha, 0x305a,
"qla_target(%d): There is no room in the request ring: vha->req->ring_index=%d, vha->req->cnt=%d, req_cnt=%d Req-out=%d Req-in=%d Req-Length=%d\n", "qla_target(%d): There is no room in the request ring: vha->req->ring_index=%d, vha->req->cnt=%d, req_cnt=%d Req-out=%d Req-in=%d Req-Length=%d\n",
vha->vp_idx, vha->req->ring_index, vha->vp_idx, vha->req->ring_index,
vha->req->cnt, req_cnt, cnt, cnt_in, vha->req->length); vha->req->cnt, req_cnt, cnt, cnt_in,
vha->req->length);
return -EAGAIN; return -EAGAIN;
} }
}
vha->req->cnt -= req_cnt; vha->req->cnt -= req_cnt;
return 0; return 0;
......
...@@ -278,8 +278,16 @@ int scsi_set_sense_information(u8 *buf, int buf_len, u64 info) ...@@ -278,8 +278,16 @@ int scsi_set_sense_information(u8 *buf, int buf_len, u64 info)
ucp[3] = 0; ucp[3] = 0;
put_unaligned_be64(info, &ucp[4]); put_unaligned_be64(info, &ucp[4]);
} else if ((buf[0] & 0x7f) == 0x70) { } else if ((buf[0] & 0x7f) == 0x70) {
/*
* Only set the 'VALID' bit if we can represent the value
* correctly; otherwise just fill out the lower bytes and
* clear the 'VALID' flag.
*/
if (info <= 0xffffffffUL)
buf[0] |= 0x80; buf[0] |= 0x80;
put_unaligned_be64(info, &buf[3]); else
buf[0] &= 0x7f;
put_unaligned_be32((u32)info, &buf[3]);
} }
return 0; return 0;
......
...@@ -37,6 +37,7 @@ config SCSI_UFSHCD ...@@ -37,6 +37,7 @@ config SCSI_UFSHCD
depends on SCSI && SCSI_DMA depends on SCSI && SCSI_DMA
select PM_DEVFREQ select PM_DEVFREQ
select DEVFREQ_GOV_SIMPLE_ONDEMAND select DEVFREQ_GOV_SIMPLE_ONDEMAND
select NLS
---help--- ---help---
This selects the support for UFS devices in Linux, say Y and make This selects the support for UFS devices in Linux, say Y and make
sure that you know the name of your UFS host adapter (the card sure that you know the name of your UFS host adapter (the card
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#define SCSI_TRANSPORT_FC_H #define SCSI_TRANSPORT_FC_H
#include <linux/sched.h> #include <linux/sched.h>
#include <asm/unaligned.h>
#include <scsi/scsi.h> #include <scsi/scsi.h>
#include <scsi/scsi_netlink.h> #include <scsi/scsi_netlink.h>
...@@ -797,22 +798,12 @@ fc_remote_port_chkready(struct fc_rport *rport) ...@@ -797,22 +798,12 @@ fc_remote_port_chkready(struct fc_rport *rport)
static inline u64 wwn_to_u64(u8 *wwn) static inline u64 wwn_to_u64(u8 *wwn)
{ {
return (u64)wwn[0] << 56 | (u64)wwn[1] << 48 | return get_unaligned_be64(wwn);
(u64)wwn[2] << 40 | (u64)wwn[3] << 32 |
(u64)wwn[4] << 24 | (u64)wwn[5] << 16 |
(u64)wwn[6] << 8 | (u64)wwn[7];
} }
static inline void u64_to_wwn(u64 inm, u8 *wwn) static inline void u64_to_wwn(u64 inm, u8 *wwn)
{ {
wwn[0] = (inm >> 56) & 0xff; put_unaligned_be64(inm, wwn);
wwn[1] = (inm >> 48) & 0xff;
wwn[2] = (inm >> 40) & 0xff;
wwn[3] = (inm >> 32) & 0xff;
wwn[4] = (inm >> 24) & 0xff;
wwn[5] = (inm >> 16) & 0xff;
wwn[6] = (inm >> 8) & 0xff;
wwn[7] = inm & 0xff;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment