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

Commit 8345592b authored by Joe Eykholt's avatar Joe Eykholt Committed by James Bottomley
Browse files

[SCSI] libfc: change to make remote port callback optional



Since the rport list maintenance is now done in the rport module,
the callback (and ops) are usually not necessary.

Allow rdata->ops to be left NULL if nothing needs
to be done in an event callback.

Signed-off-by: default avatarJoe Eykholt <jeykholt@cisco.com>
Signed-off-by: default avatarRobert Love <robert.w.love@intel.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 19f97e3c
Loading
Loading
Loading
Loading
+3 −42
Original line number Original line Diff line number Diff line
@@ -91,37 +91,6 @@ void fc_disc_stop_rports(struct fc_disc *disc)
	mutex_unlock(&disc->disc_mutex);
	mutex_unlock(&disc->disc_mutex);
}
}


/**
 * fc_disc_rport_callback() - Event handler for rport events
 * @lport: The lport which is receiving the event
 * @rdata: private remote port data
 * @event: The event that occured
 *
 * Locking Note: The rport lock should not be held when calling
 *		 this function.
 */
static void fc_disc_rport_callback(struct fc_lport *lport,
				   struct fc_rport_priv *rdata,
				   enum fc_rport_event event)
{
	struct fc_disc *disc = &lport->disc;

	FC_DISC_DBG(disc, "Received a %d event for port (%6x)\n", event,
		    rdata->ids.port_id);

	switch (event) {
	case RPORT_EV_READY:
		break;
	case RPORT_EV_LOGO:
	case RPORT_EV_FAILED:
	case RPORT_EV_STOP:
		break;
	default:
		break;
	}

}

/**
/**
 * fc_disc_recv_rscn_req() - Handle Registered State Change Notification (RSCN)
 * fc_disc_recv_rscn_req() - Handle Registered State Change Notification (RSCN)
 * @sp: Current sequence of the RSCN exchange
 * @sp: Current sequence of the RSCN exchange
@@ -334,10 +303,6 @@ static void fc_disc_start(void (*disc_callback)(struct fc_lport *,
	mutex_unlock(&disc->disc_mutex);
	mutex_unlock(&disc->disc_mutex);
}
}


static struct fc_rport_operations fc_disc_rport_ops = {
	.event_callback = fc_disc_rport_callback,
};

/**
/**
 * fc_disc_new_target() - Handle new target found by discovery
 * fc_disc_new_target() - Handle new target found by discovery
 * @lport: FC local port
 * @lport: FC local port
@@ -381,11 +346,9 @@ static int fc_disc_new_target(struct fc_disc *disc,
			if (!rdata)
			if (!rdata)
				error = -ENOMEM;
				error = -ENOMEM;
		}
		}
		if (rdata) {
		if (rdata)
			rdata->ops = &fc_disc_rport_ops;
			lport->tt.rport_login(rdata);
			lport->tt.rport_login(rdata);
	}
	}
	}
	return error;
	return error;
}
}


@@ -551,10 +514,9 @@ static int fc_disc_gpn_ft_parse(struct fc_disc *disc, void *buf, size_t len)
		if (ids.port_id != fc_host_port_id(lport->host) &&
		if (ids.port_id != fc_host_port_id(lport->host) &&
		    ids.port_name != lport->wwpn) {
		    ids.port_name != lport->wwpn) {
			rdata = lport->tt.rport_create(lport, &ids);
			rdata = lport->tt.rport_create(lport, &ids);
			if (rdata) {
			if (rdata)
				rdata->ops = &fc_disc_rport_ops;
				lport->tt.rport_login(rdata);
				lport->tt.rport_login(rdata);
			} else
			else
				printk(KERN_WARNING "libfc: Failed to allocate "
				printk(KERN_WARNING "libfc: Failed to allocate "
				       "memory for the newly discovered port "
				       "memory for the newly discovered port "
				       "(%6x)\n", ids.port_id);
				       "(%6x)\n", ids.port_id);
@@ -697,7 +659,6 @@ static void fc_disc_single(struct fc_disc *disc, struct fc_disc_port *dp)


	rdata = lport->tt.rport_create(lport, &dp->ids);
	rdata = lport->tt.rport_create(lport, &dp->ids);
	if (rdata) {
	if (rdata) {
		rdata->ops = &fc_disc_rport_ops;
		kfree(dp);
		kfree(dp);
		lport->tt.rport_login(rdata);
		lport->tt.rport_login(rdata);
	}
	}
+2 −2
Original line number Original line Diff line number Diff line
@@ -250,7 +250,7 @@ static void fc_rport_work(struct work_struct *work)
		rp->r_a_tov = rdata->r_a_tov;
		rp->r_a_tov = rdata->r_a_tov;
		mutex_unlock(&rdata->rp_mutex);
		mutex_unlock(&rdata->rp_mutex);


		if (rport_ops->event_callback) {
		if (rport_ops && rport_ops->event_callback) {
			FC_RPORT_DBG(rdata, "callback ev %d\n", event);
			FC_RPORT_DBG(rdata, "callback ev %d\n", event);
			rport_ops->event_callback(lport, rdata, event);
			rport_ops->event_callback(lport, rdata, event);
		}
		}
@@ -269,7 +269,7 @@ static void fc_rport_work(struct work_struct *work)
			mutex_unlock(&lport->disc.disc_mutex);
			mutex_unlock(&lport->disc.disc_mutex);
		}
		}


		if (rport_ops->event_callback) {
		if (rport_ops && rport_ops->event_callback) {
			FC_RPORT_DBG(rdata, "callback ev %d\n", event);
			FC_RPORT_DBG(rdata, "callback ev %d\n", event);
			rport_ops->event_callback(lport, rdata, event);
			rport_ops->event_callback(lport, rdata, event);
		}
		}