/* fcoe_flogi_resp() - FCoE specific FLOGI and FDISC response handler @seq: active sequence in the FLOGI or FDISC exchange @fp: response frame, or error encoded in a pointer (timeout)  */
static void fcoe_flogi_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg)
/* fcoe_flogi_resp() - FCoE specific FLOGI and FDISC response handler @seq: active sequence in the FLOGI or FDISC exchange @fp: response frame, or error encoded in a pointer (timeout)  */
static void fcoe_flogi_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg)
{
	struct fcoe_ctlr *fip = arg;
	struct fc_exch *exch = fc_seq_exch(seq);
	struct fc_lport *lport = exch->lp;
	u8 *mac;
	if (IS_ERR(fp))
		goto done;
	mac = fr_cb(fp)->granted_mac;
	if (is_zero_ether_addr(mac)) {
		if (fcoe_ctlr_recv_flogi(fip, lport, fp)) {
			fc_frame_free(fp);
			return;
		}
	}
	fcoe_update_src_mac(lport, mac);
done:
	fc_lport_flogi_resp(seq, fp, lport);
}