> > If we're called with an underlying interface, then we will always try to
 > > set ilw_ipmp_ill via ipmp_ill_hold_ipmp_ill().  That call *could* fail if
 > > e.g.  the IPMP ill was changing or somesuch.  In that case though, we
 > > won't walk to the IPMP ill because ilw_ipmp_ill wil be NULL, and therefore
 > > we won't set ilw_walk_ill() to it.  In other words, the code is written
 > > such that we always acquire holds on all of the ills that we will walk
 > > over (but there could be a bug.)
 > 
 > My concern wasn't that we're not holding a reference to the ill (I see
 > that ipmp_ill_hold_ipmp_ill() does that), but rather we're not bumping
 > ill_ilm_walker_cnt for the IPMP interface.  Is that not required?

We bump ill_ilm_walker_cnt via ill_ilm_walker_hold() in ilm_walker_start():

-->     ill_ilm_walker_hold(ill);
        if (ilw->ilw_ipmp_ill != NULL)
-->             ill_ilm_walker_hold(ilw->ilw_ipmp_ill);

-- 
meem

Reply via email to