diff options
| author | James Bottomley <JBottomley@Parallels.com> | 2013-06-26 23:07:53 -0700 | 
|---|---|---|
| committer | James Bottomley <JBottomley@Parallels.com> | 2013-06-26 23:07:53 -0700 | 
| commit | 36a279686bc02d340eb213a9f2a0b67e50de64b4 (patch) | |
| tree | df6ab1cc69d4ce937471b33ca7d8c4ce9f55da05 | |
| parent | 222ab5946860e1d77870ffbfebebff2bcb1f4215 (diff) | |
| parent | f4aaea6d5106f6092a80a648b5a12d31b6cb3335 (diff) | |
| download | olio-linux-3.10-36a279686bc02d340eb213a9f2a0b67e50de64b4.tar.xz olio-linux-3.10-36a279686bc02d340eb213a9f2a0b67e50de64b4.zip  | |
Merge tag 'fcoe' into fixes
3.10 fixes
| -rw-r--r-- | MAINTAINERS | 2 | ||||
| -rw-r--r-- | drivers/scsi/fcoe/fcoe_ctlr.c | 15 | ||||
| -rw-r--r-- | drivers/scsi/libfc/fc_exch.c | 37 | ||||
| -rw-r--r-- | drivers/scsi/libfc/fc_rport.c | 2 | 
4 files changed, 31 insertions, 25 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 3d7782b9f90..778fceac27e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3220,7 +3220,7 @@ F:	lib/fault-inject.c  FCOE SUBSYSTEM (libfc, libfcoe, fcoe)  M:	Robert Love <robert.w.love@intel.com> -L:	devel@open-fcoe.org +L:	fcoe-devel@open-fcoe.org  W:	www.Open-FCoE.org  S:	Supported  F:	drivers/scsi/libfc/ diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c index cd743c545ce..795843dde8e 100644 --- a/drivers/scsi/fcoe/fcoe_ctlr.c +++ b/drivers/scsi/fcoe/fcoe_ctlr.c @@ -1548,9 +1548,6 @@ static struct fcoe_fcf *fcoe_ctlr_select(struct fcoe_ctlr *fip)  {  	struct fcoe_fcf *fcf;  	struct fcoe_fcf *best = fip->sel_fcf; -	struct fcoe_fcf *first; - -	first = list_first_entry(&fip->fcfs, struct fcoe_fcf, list);  	list_for_each_entry(fcf, &fip->fcfs, list) {  		LIBFCOE_FIP_DBG(fip, "consider FCF fab %16.16llx " @@ -1568,17 +1565,15 @@ static struct fcoe_fcf *fcoe_ctlr_select(struct fcoe_ctlr *fip)  					"" : "un");  			continue;  		} -		if (fcf->fabric_name != first->fabric_name || -		    fcf->vfid != first->vfid || -		    fcf->fc_map != first->fc_map) { +		if (!best || fcf->pri < best->pri || best->flogi_sent) +			best = fcf; +		if (fcf->fabric_name != best->fabric_name || +		    fcf->vfid != best->vfid || +		    fcf->fc_map != best->fc_map) {  			LIBFCOE_FIP_DBG(fip, "Conflicting fabric, VFID, "  					"or FC-MAP\n");  			return NULL;  		} -		if (fcf->flogi_sent) -			continue; -		if (!best || fcf->pri < best->pri || best->flogi_sent) -			best = fcf;  	}  	fip->sel_fcf = best;  	if (best) { diff --git a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c index c772d8d2715..8b928c67e4b 100644 --- a/drivers/scsi/libfc/fc_exch.c +++ b/drivers/scsi/libfc/fc_exch.c @@ -463,13 +463,7 @@ static void fc_exch_delete(struct fc_exch *ep)  	fc_exch_release(ep);	/* drop hold for exch in mp */  } -/** - * fc_seq_send() - Send a frame using existing sequence/exchange pair - * @lport: The local port that the exchange will be sent on - * @sp:	   The sequence to be sent - * @fp:	   The frame to be sent on the exchange - */ -static int fc_seq_send(struct fc_lport *lport, struct fc_seq *sp, +static int fc_seq_send_locked(struct fc_lport *lport, struct fc_seq *sp,  		       struct fc_frame *fp)  {  	struct fc_exch *ep; @@ -479,7 +473,7 @@ static int fc_seq_send(struct fc_lport *lport, struct fc_seq *sp,  	u8 fh_type = fh->fh_type;  	ep = fc_seq_exch(sp); -	WARN_ON((ep->esb_stat & ESB_ST_SEQ_INIT) != ESB_ST_SEQ_INIT); +	WARN_ON(!(ep->esb_stat & ESB_ST_SEQ_INIT));  	f_ctl = ntoh24(fh->fh_f_ctl);  	fc_exch_setup_hdr(ep, fp, f_ctl); @@ -502,17 +496,34 @@ static int fc_seq_send(struct fc_lport *lport, struct fc_seq *sp,  	error = lport->tt.frame_send(lport, fp);  	if (fh_type == FC_TYPE_BLS) -		return error; +		goto out;  	/*  	 * Update the exchange and sequence flags,  	 * assuming all frames for the sequence have been sent.  	 * We can only be called to send once for each sequence.  	 */ -	spin_lock_bh(&ep->ex_lock);  	ep->f_ctl = f_ctl & ~FC_FC_FIRST_SEQ;	/* not first seq */  	if (f_ctl & FC_FC_SEQ_INIT)  		ep->esb_stat &= ~ESB_ST_SEQ_INIT; +out: +	return error; +} + +/** + * fc_seq_send() - Send a frame using existing sequence/exchange pair + * @lport: The local port that the exchange will be sent on + * @sp:	   The sequence to be sent + * @fp:	   The frame to be sent on the exchange + */ +static int fc_seq_send(struct fc_lport *lport, struct fc_seq *sp, +		       struct fc_frame *fp) +{ +	struct fc_exch *ep; +	int error; +	ep = fc_seq_exch(sp); +	spin_lock_bh(&ep->ex_lock); +	error = fc_seq_send_locked(lport, sp, fp);  	spin_unlock_bh(&ep->ex_lock);  	return error;  } @@ -629,7 +640,7 @@ static int fc_exch_abort_locked(struct fc_exch *ep,  	if (fp) {  		fc_fill_fc_hdr(fp, FC_RCTL_BA_ABTS, ep->did, ep->sid,  			       FC_TYPE_BLS, FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0); -		error = fc_seq_send(ep->lp, sp, fp); +		error = fc_seq_send_locked(ep->lp, sp, fp);  	} else  		error = -ENOBUFS;  	return error; @@ -1132,7 +1143,7 @@ static void fc_seq_send_last(struct fc_seq *sp, struct fc_frame *fp,  	f_ctl = FC_FC_LAST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT;  	f_ctl |= ep->f_ctl;  	fc_fill_fc_hdr(fp, rctl, ep->did, ep->sid, fh_type, f_ctl, 0); -	fc_seq_send(ep->lp, sp, fp); +	fc_seq_send_locked(ep->lp, sp, fp);  }  /** @@ -1307,8 +1318,8 @@ static void fc_exch_recv_abts(struct fc_exch *ep, struct fc_frame *rx_fp)  		ap->ba_low_seq_cnt = htons(sp->cnt);  	}  	sp = fc_seq_start_next_locked(sp); -	spin_unlock_bh(&ep->ex_lock);  	fc_seq_send_last(sp, fp, FC_RCTL_BA_ACC, FC_TYPE_BLS); +	spin_unlock_bh(&ep->ex_lock);  	fc_frame_free(rx_fp);  	return; diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c index d518d17e940..6bbb9447b75 100644 --- a/drivers/scsi/libfc/fc_rport.c +++ b/drivers/scsi/libfc/fc_rport.c @@ -1962,7 +1962,7 @@ static int fc_rport_fcp_prli(struct fc_rport_priv *rdata, u32 spp_len,  		rdata->flags |= FC_RP_FLAGS_RETRY;  	rdata->supported_classes = FC_COS_CLASS3; -	if (!(lport->service_params & FC_RPORT_ROLE_FCP_INITIATOR)) +	if (!(lport->service_params & FCP_SPPF_INIT_FCN))  		return 0;  	spp->spp_flags |= rspp->spp_flags & FC_SPP_EST_IMG_PAIR;  |