Thiru,

Earlier, you commented that this was problematic:

        mutex_enter(&ill->ill_lock);
        for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next)
                if (ipif->ipif_flags & IPIF_UP)
                        ip_rts_newaddrmsg(cmd, 0, ipif, RTSQ_NONIPMP);
        mutex_exit(&ill->ill_lock);

... and I agree.  I *think* the fix is to simply remove the ill_lock calls
since the function in question is writer on the ill.  However, before I do
that, I want to verify that being writer is indeed sufficient to walk all
of the ipifs.  Inspecting the code, this appears to be the case, but some
seem to grab ill_lock in addition to being writer.  Also, the
synchronization notes in ip.h say that only *ill_g_lock* is sufficient:

 *               Table of ipif_t members and their protection
 *
 * ipif_next            ill_g_lock              ill_g_lock
 * ...

Thanks,
-- 
meem

Reply via email to