> > 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