On Wed, Mar 7, 2012 at 10:17 AM, Ben Pfaff <b...@nicira.com> wrote:
> On Tue, Mar 06, 2012 at 02:37:08PM -0800, Pravin B Shelar wrote:
>> netdev linux devices uses mtu ioctl to get and set MTU for a device.
>> By caching error code from ioctl we can reduce number of ioctl calls
>> for device which is unregistered from system.
>> netdev notification is used to update mtu which saves get-mtu-ioctl.
>>
>> Signed-off-by: Pravin B Shelar <pshe...@nicira.com>
>
> Thanks.
>
> In netdev_dev_linux_changed(), I don't understand the distinction
> between
>    if (change->nlmsg_type == RTM_NEWLINK) {
> and
>    if (change->nlmsg_type != RTM_DELLINK) {
> I think that RTM_NEWLINK and RTM_DELLINK are the only two kinds of
> notifications that the kernel will send for the RTNLGRP_LINK group
> that rtnetlink-link.c monitors, so these seem equivalent.
ok, I was not sure these are only two events
>
> Maybe it has to do with the call to netdev_dev_linux_changed() in
> netdev_linux_caceh_cb() that uses a "synthesized"
> rtnetlink_link_change struct and sets nlmsg_type to 0?  Actually, the
> more I look at that usage, the more it worries me.  I think that it
> will, for example, always cause the MTU to be reset to zero.  The same
> goes for the similar usage in netdev_linux_miimon_run().
>
right.

> Here is one idea.  Break netdev_dev_linux_changed() into two
> functions, one that contains essentially this:
>
>    dev->change_seq++;
>    if (!dev->change_seq) {
>        dev->change_seq++;
>    }
>
>    if ((dev->ifi_flags ^ change->ifi_flags) & IFF_RUNNING) {
>        dev->carrier_resets++;
>    }
>    dev->ifi_flags = change->ifi_flags;
>
>    /* Always cache driver-info. */
>    dev->cache_valid &= VALID_DRVINFO;
>
> and another one that takes an rtnetlink_link_change struct (I think
> there's only one place where that is the case, so maybe the additional
> code could even be integrated into that place).  In other words, we'd
> end up with a function much like before patch 1/5 (and maybe a
> different structuring of the patch series might be good, then, but I
> won't insist on it).
>
ok. I will send updated patch.

> In case this change doesn't make sense to you, then: in OVS userspace, we
> do not usually write parentheses around the operand of "sizeof" when
> they are not required, as below.  Would you mind removing them in this
> case?  Thanks.
>> +        struct rtnetlink_link_change dev_change;
>> +
>> +        memset(&dev_change, 0, sizeof(dev_change));
>>
>>          shash_init(&device_shash);
>>          netdev_dev_get_devices(&netdev_linux_class, &device_shash);
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to