mirror of https://gitee.com/openkylin/linux.git
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6: [SCSI] ibmvscsi: Prevent IO during partner login [SCSI] lpfc : Correct queue tag handling [SCSI] Update MAINTAINER email address and trees [SCSI] osst: fix if (...) \n #if... cases missing semicolons when false
This commit is contained in:
commit
aac9e28d2f
|
@ -2549,7 +2549,7 @@ S: Supported
|
||||||
|
|
||||||
MISCELLANEOUS MCA-SUPPORT
|
MISCELLANEOUS MCA-SUPPORT
|
||||||
P: James Bottomley
|
P: James Bottomley
|
||||||
M: jejb@steeleye.com
|
M: James.Bottomley@HansenPartnership.com
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
@ -3301,9 +3301,11 @@ S: Maintained
|
||||||
|
|
||||||
SCSI SUBSYSTEM
|
SCSI SUBSYSTEM
|
||||||
P: James E.J. Bottomley
|
P: James E.J. Bottomley
|
||||||
M: James.Bottomley@SteelEye.com
|
M: James.Bottomley@HansenPartnership.com
|
||||||
L: linux-scsi@vger.kernel.org
|
L: linux-scsi@vger.kernel.org
|
||||||
T: git kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
|
T: git kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
|
||||||
|
T: git kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git
|
||||||
|
T: git kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-pending-2.6.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
SCSI TAPE DRIVER
|
SCSI TAPE DRIVER
|
||||||
|
|
|
@ -556,7 +556,7 @@ static int ibmvscsi_send_srp_event(struct srp_event_struct *evt_struct,
|
||||||
unsigned long timeout)
|
unsigned long timeout)
|
||||||
{
|
{
|
||||||
u64 *crq_as_u64 = (u64 *) &evt_struct->crq;
|
u64 *crq_as_u64 = (u64 *) &evt_struct->crq;
|
||||||
int request_status;
|
int request_status = 0;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
/* If we have exhausted our request limit, just fail this request,
|
/* If we have exhausted our request limit, just fail this request,
|
||||||
|
@ -574,6 +574,13 @@ static int ibmvscsi_send_srp_event(struct srp_event_struct *evt_struct,
|
||||||
if (request_status < -1)
|
if (request_status < -1)
|
||||||
goto send_error;
|
goto send_error;
|
||||||
/* Otherwise, we may have run out of requests. */
|
/* Otherwise, we may have run out of requests. */
|
||||||
|
/* If request limit was 0 when we started the adapter is in the
|
||||||
|
* process of performing a login with the server adapter, or
|
||||||
|
* we may have run out of requests.
|
||||||
|
*/
|
||||||
|
else if (request_status == -1 &&
|
||||||
|
evt_struct->iu.srp.login_req.opcode != SRP_LOGIN_REQ)
|
||||||
|
goto send_busy;
|
||||||
/* Abort and reset calls should make it through.
|
/* Abort and reset calls should make it through.
|
||||||
* Nothing except abort and reset should use the last two
|
* Nothing except abort and reset should use the last two
|
||||||
* slots unless we had two or less to begin with.
|
* slots unless we had two or less to begin with.
|
||||||
|
@ -633,7 +640,8 @@ static int ibmvscsi_send_srp_event(struct srp_event_struct *evt_struct,
|
||||||
unmap_cmd_data(&evt_struct->iu.srp.cmd, evt_struct, hostdata->dev);
|
unmap_cmd_data(&evt_struct->iu.srp.cmd, evt_struct, hostdata->dev);
|
||||||
|
|
||||||
free_event_struct(&hostdata->pool, evt_struct);
|
free_event_struct(&hostdata->pool, evt_struct);
|
||||||
atomic_inc(&hostdata->request_limit);
|
if (request_status != -1)
|
||||||
|
atomic_inc(&hostdata->request_limit);
|
||||||
return SCSI_MLQUEUE_HOST_BUSY;
|
return SCSI_MLQUEUE_HOST_BUSY;
|
||||||
|
|
||||||
send_error:
|
send_error:
|
||||||
|
@ -927,10 +935,11 @@ static int send_srp_login(struct ibmvscsi_host_data *hostdata)
|
||||||
login->req_buf_fmt = SRP_BUF_FORMAT_DIRECT | SRP_BUF_FORMAT_INDIRECT;
|
login->req_buf_fmt = SRP_BUF_FORMAT_DIRECT | SRP_BUF_FORMAT_INDIRECT;
|
||||||
|
|
||||||
spin_lock_irqsave(hostdata->host->host_lock, flags);
|
spin_lock_irqsave(hostdata->host->host_lock, flags);
|
||||||
/* Start out with a request limit of 1, since this is negotiated in
|
/* Start out with a request limit of 0, since this is negotiated in
|
||||||
* the login request we are just sending
|
* the login request we are just sending and login requests always
|
||||||
|
* get sent by the driver regardless of request_limit.
|
||||||
*/
|
*/
|
||||||
atomic_set(&hostdata->request_limit, 1);
|
atomic_set(&hostdata->request_limit, 0);
|
||||||
|
|
||||||
rc = ibmvscsi_send_srp_event(evt_struct, hostdata, init_timeout * 2);
|
rc = ibmvscsi_send_srp_event(evt_struct, hostdata, init_timeout * 2);
|
||||||
spin_unlock_irqrestore(hostdata->host->host_lock, flags);
|
spin_unlock_irqrestore(hostdata->host->host_lock, flags);
|
||||||
|
|
|
@ -682,6 +682,7 @@ lpfc_scsi_prep_cmnd(struct lpfc_vport *vport, struct lpfc_scsi_buf *lpfc_cmd,
|
||||||
IOCB_t *iocb_cmd = &lpfc_cmd->cur_iocbq.iocb;
|
IOCB_t *iocb_cmd = &lpfc_cmd->cur_iocbq.iocb;
|
||||||
struct lpfc_iocbq *piocbq = &(lpfc_cmd->cur_iocbq);
|
struct lpfc_iocbq *piocbq = &(lpfc_cmd->cur_iocbq);
|
||||||
int datadir = scsi_cmnd->sc_data_direction;
|
int datadir = scsi_cmnd->sc_data_direction;
|
||||||
|
char tag[2];
|
||||||
|
|
||||||
lpfc_cmd->fcp_rsp->rspSnsLen = 0;
|
lpfc_cmd->fcp_rsp->rspSnsLen = 0;
|
||||||
/* clear task management bits */
|
/* clear task management bits */
|
||||||
|
@ -692,8 +693,8 @@ lpfc_scsi_prep_cmnd(struct lpfc_vport *vport, struct lpfc_scsi_buf *lpfc_cmd,
|
||||||
|
|
||||||
memcpy(&fcp_cmnd->fcpCdb[0], scsi_cmnd->cmnd, 16);
|
memcpy(&fcp_cmnd->fcpCdb[0], scsi_cmnd->cmnd, 16);
|
||||||
|
|
||||||
if (scsi_cmnd->device->tagged_supported) {
|
if (scsi_populate_tag_msg(scsi_cmnd, tag)) {
|
||||||
switch (scsi_cmnd->tag) {
|
switch (tag[0]) {
|
||||||
case HEAD_OF_QUEUE_TAG:
|
case HEAD_OF_QUEUE_TAG:
|
||||||
fcp_cmnd->fcpCntl1 = HEAD_OF_Q;
|
fcp_cmnd->fcpCntl1 = HEAD_OF_Q;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -593,10 +593,11 @@ static int osst_verify_frame(struct osst_tape * STp, int frame_seq_number, int q
|
||||||
if (aux->frame_type != OS_FRAME_TYPE_DATA &&
|
if (aux->frame_type != OS_FRAME_TYPE_DATA &&
|
||||||
aux->frame_type != OS_FRAME_TYPE_EOD &&
|
aux->frame_type != OS_FRAME_TYPE_EOD &&
|
||||||
aux->frame_type != OS_FRAME_TYPE_MARKER) {
|
aux->frame_type != OS_FRAME_TYPE_MARKER) {
|
||||||
if (!quiet)
|
if (!quiet) {
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
printk(OSST_DEB_MSG "%s:D: Skipping frame, frame type %x\n", name, aux->frame_type);
|
printk(OSST_DEB_MSG "%s:D: Skipping frame, frame type %x\n", name, aux->frame_type);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
if (aux->frame_type == OS_FRAME_TYPE_EOD &&
|
if (aux->frame_type == OS_FRAME_TYPE_EOD &&
|
||||||
|
@ -606,11 +607,12 @@ static int osst_verify_frame(struct osst_tape * STp, int frame_seq_number, int q
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
if (frame_seq_number != -1 && ntohl(aux->frame_seq_num) != frame_seq_number) {
|
if (frame_seq_number != -1 && ntohl(aux->frame_seq_num) != frame_seq_number) {
|
||||||
if (!quiet)
|
if (!quiet) {
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
printk(OSST_DEB_MSG "%s:D: Skipping frame, sequence number %u (expected %d)\n",
|
printk(OSST_DEB_MSG "%s:D: Skipping frame, sequence number %u (expected %d)\n",
|
||||||
name, ntohl(aux->frame_seq_num), frame_seq_number);
|
name, ntohl(aux->frame_seq_num), frame_seq_number);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
if (aux->frame_type == OS_FRAME_TYPE_MARKER) {
|
if (aux->frame_type == OS_FRAME_TYPE_MARKER) {
|
||||||
|
|
Loading…
Reference in New Issue