3.10 fixes
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJRm7ALAAoJEEajxTw9cn4Hv0wP/2N8BJUYhzPguRS+d0GrFDD6 Zdhwyul+uZobqFVgqM9yZR/zF2R49vmd9cWfM+PKVXZkm1mPD2HNmCHsoj74MfTH NFellPnDtr2WPLeIEYSwhuSws01UvahZM8nAJlU988U1TgU6Ztr70xy3u0I7Duw9 07ou4Dw8+BLh1nMVbXHzKP02h0pu4oyB01e1EponGpDBvsEMjgi0gMd4IH4LboUz hkvsmHcjTh13W4Byx3xp7aSDxSI7bTU7iss7UAnqI8G59d7y6GFMD82ar/mwVp8T TilJzYEGO1cQaIq7yYhcH5ZoqLPYXvoi6uVWkXG7Kex5/kt6woi6SN8as9XoQ3cg stl83VLbnNXQl68xWvRyfFXTsvukVqqk3ZDpOLYvWai7OyBOjjPeTwHU4tjZWCva d/uq3LF9zf+BDZFin3Iw4VY6J/qLARamUXi8b6TMYO3ScCnFk9rmMhJ7Av9b7for sQSeeIVmbxEn+8hRSqXQAEUGJ3mchEkcX6s3h2aNz/cGtWCweNe05ykROtLRDggK JrnHicsDZyKpv5g+UWX5qQQrL4xLc2VV2F6wtgcmNkyhc9M9/OS/RgIvXfv3j5bh TRrEymsQ/99R/XYnVy/OVPNSCyfa3FIWrrW2cD4/RjgIJnD326IgKzp42bYJIeBj u0sNqarvvO0BBbjsuij3 =+dRk -----END PGP SIGNATURE----- Merge tag 'fcoe' into fixes 3.10 fixes
This commit is contained in:
Коммит
36a279686b
|
@ -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/
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче