/* Locking Note: This function expects that the disc_mutex is locked before it is called. On failure, an error code is returned.  */
static int fc_disc_gpn_id_req(struct fc_lport *lport, struct fc_rport_priv *rdata)
/* Locking Note: This function expects that the disc_mutex is locked before it is called. On failure, an error code is returned.  */
static int fc_disc_gpn_id_req(struct fc_lport *lport, struct fc_rport_priv *rdata)
{
	struct fc_frame *fp;
	fp = fc_frame_alloc(lport, sizeof(struct fc_ct_hdr) +
			    sizeof(struct fc_ns_fid));
	if (!fp)
		return -ENOMEM;
	if (!lport->tt.elsct_send(lport, rdata->ids.port_id, fp, FC_NS_GPN_ID,
				  fc_disc_gpn_id_resp, rdata,
				  3 * lport->r_a_tov))
		return -ENOMEM;
	kref_get(&rdata->kref);
	return 0;
}