Commit 9b9b8594 authored by Karan Tilak Kumar's avatar Karan Tilak Kumar Committed by Martin K. Petersen
Browse files

scsi: fnic: Add and improve logs in FDMI and FDMI ABTS paths

parent 74f46a05
Loading
Loading
Loading
Loading
+58 −7
Original line number Diff line number Diff line
@@ -791,6 +791,7 @@ static uint8_t *fdls_alloc_init_fdmi_abts_frame(struct fnic_iport_s *iport,
static void fdls_send_fdmi_abts(struct fnic_iport_s *iport)
{
	uint8_t *frame;
	struct fnic *fnic = iport->fnic;
	unsigned long fdmi_tov;
	uint16_t frame_size = FNIC_ETH_FCOE_HDRS_OFFSET +
			sizeof(struct fc_frame_header);
@@ -801,6 +802,9 @@ static void fdls_send_fdmi_abts(struct fnic_iport_s *iport)
		if (frame == NULL)
			return;

		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
			 "0x%x: FDLS send FDMI PLOGI abts. iport->fabric.state: %d oxid: 0x%x",
			 iport->fcid, iport->fabric.state, iport->active_oxid_fdmi_plogi);
		fnic_send_fcoe_frame(iport, frame, frame_size);
	} else {
		if (iport->fabric.fdmi_pending & FDLS_FDMI_REG_HBA_PENDING) {
@@ -809,6 +813,9 @@ static void fdls_send_fdmi_abts(struct fnic_iport_s *iport)
			if (frame == NULL)
				return;

			FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
				 "0x%x: FDLS send FDMI RHBA abts. iport->fabric.state: %d oxid: 0x%x",
				 iport->fcid, iport->fabric.state, iport->active_oxid_fdmi_rhba);
			fnic_send_fcoe_frame(iport, frame, frame_size);
		}
		if (iport->fabric.fdmi_pending & FDLS_FDMI_RPA_PENDING) {
@@ -821,6 +828,9 @@ static void fdls_send_fdmi_abts(struct fnic_iport_s *iport)
					return;
			}

			FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
				 "0x%x: FDLS send FDMI RPA abts. iport->fabric.state: %d oxid: 0x%x",
				 iport->fcid, iport->fabric.state, iport->active_oxid_fdmi_rpa);
			fnic_send_fcoe_frame(iport, frame, frame_size);
		}
	}
@@ -829,6 +839,10 @@ static void fdls_send_fdmi_abts(struct fnic_iport_s *iport)
	fdmi_tov = jiffies + msecs_to_jiffies(2 * iport->e_d_tov);
	mod_timer(&iport->fabric.fdmi_timer, round_jiffies(fdmi_tov));
	iport->fabric.fdmi_pending |= FDLS_FDMI_ABORT_PENDING;

	FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
		 "0x%x: iport->fabric.fdmi_pending: 0x%x",
		 iport->fcid, iport->fabric.fdmi_pending);
}

static void fdls_send_fabric_flogi(struct fnic_iport_s *iport)
@@ -2294,7 +2308,7 @@ void fdls_fdmi_timer_callback(struct timer_list *t)
	spin_lock_irqsave(&fnic->fnic_lock, flags);

	FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
		"fdmi timer callback : 0x%x\n", iport->fabric.fdmi_pending);
		"iport->fabric.fdmi_pending: 0x%x\n", iport->fabric.fdmi_pending);

	if (!iport->fabric.fdmi_pending) {
		/* timer expired after fdmi responses received. */
@@ -2302,7 +2316,7 @@ void fdls_fdmi_timer_callback(struct timer_list *t)
		return;
	}
	FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
		"fdmi timer callback : 0x%x\n", iport->fabric.fdmi_pending);
		"iport->fabric.fdmi_pending: 0x%x\n", iport->fabric.fdmi_pending);

	/* if not abort pending, send an abort */
	if (!(iport->fabric.fdmi_pending & FDLS_FDMI_ABORT_PENDING)) {
@@ -2311,26 +2325,37 @@ void fdls_fdmi_timer_callback(struct timer_list *t)
		return;
	}
	FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
		"fdmi timer callback : 0x%x\n", iport->fabric.fdmi_pending);
		"iport->fabric.fdmi_pending: 0x%x\n", iport->fabric.fdmi_pending);

	/* ABTS pending for an active fdmi request that is pending.
	 * That means FDMI ABTS timed out
	 * Schedule to free the OXID after 2*r_a_tov and proceed
	 */
	if (iport->fabric.fdmi_pending & FDLS_FDMI_PLOGI_PENDING) {
		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
			"FDMI PLOGI ABTS timed out. Schedule oxid free: 0x%x\n",
			iport->active_oxid_fdmi_plogi);
		fdls_schedule_oxid_free(iport, &iport->active_oxid_fdmi_plogi);
	} else {
		if (iport->fabric.fdmi_pending & FDLS_FDMI_REG_HBA_PENDING)
		if (iport->fabric.fdmi_pending & FDLS_FDMI_REG_HBA_PENDING) {
			FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
						"FDMI RHBA ABTS timed out. Schedule oxid free: 0x%x\n",
						iport->active_oxid_fdmi_rhba);
			fdls_schedule_oxid_free(iport, &iport->active_oxid_fdmi_rhba);
		if (iport->fabric.fdmi_pending & FDLS_FDMI_RPA_PENDING)
		}
		if (iport->fabric.fdmi_pending & FDLS_FDMI_RPA_PENDING) {
			FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
						"FDMI RPA ABTS timed out. Schedule oxid free: 0x%x\n",
						iport->active_oxid_fdmi_rpa);
			fdls_schedule_oxid_free(iport, &iport->active_oxid_fdmi_rpa);
		}
	}
	FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
		"fdmi timer callback : 0x%x\n", iport->fabric.fdmi_pending);
		"iport->fabric.fdmi_pending: 0x%x\n", iport->fabric.fdmi_pending);

	fdls_fdmi_retry_plogi(iport);
	FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
		"fdmi timer callback : 0x%x\n", iport->fabric.fdmi_pending);
		"iport->fabric.fdmi_pending: 0x%x\n", iport->fabric.fdmi_pending);
	spin_unlock_irqrestore(&fnic->fnic_lock, flags);
}

@@ -3745,12 +3770,26 @@ static void fdls_process_fdmi_abts_rsp(struct fnic_iport_s *iport,

	switch (FNIC_FRAME_TYPE(oxid)) {
	case FNIC_FRAME_TYPE_FDMI_PLOGI:
		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
			"Received FDMI PLOGI ABTS rsp with oxid: 0x%x", oxid);
		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
			 "0x%x: iport->fabric.fdmi_pending: 0x%x",
			 iport->fcid, iport->fabric.fdmi_pending);
		fdls_free_oxid(iport, oxid, &iport->active_oxid_fdmi_plogi);

		iport->fabric.fdmi_pending &= ~FDLS_FDMI_PLOGI_PENDING;
		iport->fabric.fdmi_pending &= ~FDLS_FDMI_ABORT_PENDING;
		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
			 "0x%x: iport->fabric.fdmi_pending: 0x%x",
			 iport->fcid, iport->fabric.fdmi_pending);
		break;
	case FNIC_FRAME_TYPE_FDMI_RHBA:
		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
			"Received FDMI RHBA ABTS rsp with oxid: 0x%x", oxid);
		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
			 "0x%x: iport->fabric.fdmi_pending: 0x%x",
			 iport->fcid, iport->fabric.fdmi_pending);

		iport->fabric.fdmi_pending &= ~FDLS_FDMI_REG_HBA_PENDING;

		/* If RPA is still pending, don't turn off ABORT PENDING.
@@ -3761,8 +3800,17 @@ static void fdls_process_fdmi_abts_rsp(struct fnic_iport_s *iport,
			iport->fabric.fdmi_pending &= ~FDLS_FDMI_ABORT_PENDING;

		fdls_free_oxid(iport, oxid, &iport->active_oxid_fdmi_rhba);
		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
			 "0x%x: iport->fabric.fdmi_pending: 0x%x",
			 iport->fcid, iport->fabric.fdmi_pending);
		break;
	case FNIC_FRAME_TYPE_FDMI_RPA:
		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
			"Received FDMI RPA ABTS rsp with oxid: 0x%x", oxid);
		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
			 "0x%x: iport->fabric.fdmi_pending: 0x%x",
			 iport->fcid, iport->fabric.fdmi_pending);

		iport->fabric.fdmi_pending &= ~FDLS_FDMI_RPA_PENDING;

		/* If RHBA is still pending, don't turn off ABORT PENDING.
@@ -3773,6 +3821,9 @@ static void fdls_process_fdmi_abts_rsp(struct fnic_iport_s *iport,
			iport->fabric.fdmi_pending &= ~FDLS_FDMI_ABORT_PENDING;

		fdls_free_oxid(iport, oxid, &iport->active_oxid_fdmi_rpa);
		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,
			 "0x%x: iport->fabric.fdmi_pending: 0x%x",
			 iport->fcid, iport->fabric.fdmi_pending);
		break;
	default:
		FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num,