On Wed, 2009-08-12 at 11:28 -0700, Robert Love wrote:
> On Mon, 2009-08-10 at 10:17 -0700, Joe Eykholt wrote:
> > Allow a struct fc_rport_priv to have no fc_rport associated with it.
> > This sets up to remove the need for "rogue" rports.
> >
> > Add a few fields to fc_rport_priv that are needed before the fc_rport
> > is created. These are the ids, maxframe_size, classes, and rport pointer.
> >
> > Remove the macro PRIV_TO_RPORT(). Just use rdata->rport where appropriate.
> >
> > To take the place of the get_device()/put_device ops that were used to
> > hold both the rport and rdata, add a reference count to rdata structures
> > using kref. When kref_get decrements the refcount to zero, a new template
> > function releasing the rdata should be called. This will take care of
> > freeing the rdata and releasing the hold on the rport (for now). After
> > subsequent patches make the rport truly optional, this release function
> > will simply free the rdata.
> >
> > Remove the simple inline function fc_rport_set_name(), which becomes
> > semanticly ambiguous otherwise. The caller will set the port_name and
> > node_name in the rdata->Ids, which will later be copied to the rport
> > when it its created.
> >
> > Signed-off-by: Joe Eykholt <[email protected]>
>
> Hi Joe, I put Chris' latest NPIV prep work patches on and then started
> applying and testing your patches. I get a NULL pointer exception when
> the link comes up. At this point I don't know what it is.
>
The problem is that when there is no rport associated with the initial
rdata. When the rdata becomes ready the rdata gets added to the
rport_event_queue. In fc_rport_work we allocate a new rport and copy any
relevant information from the rogue rport to the real rport.
This patch's intent is to make the rport optional for a rdata. However,
after this patch the rport is still required for the rogue-to-real
transition. The NULL pointer exception occurs here-
rport = rdata->rport;
...
new_rport = fc_remote_port_add(lport->host, 0, &ids);
if (new_rport) {
/*
* Switch from the rogue rport to the
rport
* returned by the FC
class.
*/
new_rport->maxframe_size = rport->maxframe_size;
_______________________________________________
devel mailing list
[email protected]
http://www.open-fcoe.org/mailman/listinfo/devel