On 2009?01?16? 13:16, Sebastien Roy wrote:
> Hi Crossbow team,
> 
> I have a question on the modifications made to dls_devnet_destroy():
> 
> int
> dls_devnet_destroy(mac_handle_t mh, datalink_id_t *idp, boolean_t wait)
> {
>       int                     err;
>       mac_perim_handle_t      mph;
> 
>       *idp = DATALINK_INVALID_LINKID;
>       err = dls_devnet_unset(mac_name(mh), idp, wait);
>       if (err != 0 && err != ENOENT)
>               return (err);
> 
>       mac_perim_enter_by_mh(mh, &mph);
>       err = dls_link_rele_by_name(mac_name(mh));
>       mac_perim_exit(mph);
> 
>       if (err != 0)
>               (void) dls_devnet_set(mac_name(mh), *idp, NULL);
>       return (err);
> }
> 
> Once the call to dls_devnet_unset() has succeeded, is it possible for
> dls_link_rele_by_name() to fail?  I ask because the subsequent call to
> dls_devnet_set() upon dls_link_rele_by_name() failure is problematic.
> It this dls_devnet_set() call fails, the system is rendered hosed until
> rebooted.
> 
It looks possible. As long as there are still subflows added on this link, 
it would fail.

Thanks
- Cathy

> The Clearview iptun project is adding some code in dls_devnet_set() to
> automatically set the zoneid of the link if it is created from within a
> non-global zone, and I cannot assert that this code will always succeed.
> 
> It would be good to understand what the semantics of this function are
> in all possible failure scenarios.  It would be great if
> dls_link_rele_by_name() couldn't fail in this case, and there should
> thus be an ASSERT() that err == 0 below it.  The call to
> dls_devnet_set() could then be removed.
> 
> I don't know enough about what dls_link_rele_by_name() does with flows
> to be able to assert that myself though.  Input would be appreciated.
> 
> Thanks,
> -Seb
> 
> 
> _______________________________________________
> crossbow-discuss mailing list
> crossbow-discuss at opensolaris.org
> http://mail.opensolaris.org/mailman/listinfo/crossbow-discuss


Reply via email to