Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aac9e28d authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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
parents 9f259cc5 3c887e8a
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -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
+14 −5
Original line number Original line Diff line number Diff line
@@ -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,6 +640,7 @@ 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);
	if (request_status != -1)
		atomic_inc(&hostdata->request_limit);
		atomic_inc(&hostdata->request_limit);
	return SCSI_MLQUEUE_HOST_BUSY;
	return SCSI_MLQUEUE_HOST_BUSY;


@@ -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);
+3 −2
Original line number Original line Diff line number Diff line
@@ -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;
+4 −2
Original line number Original line Diff line number Diff line
@@ -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) {