Thank you for the review! You found a lot of real issues.
On Fri, Aug 09, 2013 at 04:34:08PM -0700, Alex Wang wrote:
> @@ -162,7 +160,7 @@ netdev_bsd_cast(const struct netdev *netdev)
> > static struct netdev_rx_bsd *
> > netdev_rx_bsd_cast(const struct netdev_rx *rx)
> > {
> > - netdev_rx_assert_class(rx, &netdev_rx_bsd_class);
> > + ovs_assert(is_netdev_bsd_class(netdev_get_class(rx->netdev)));
> > return CONTAINER_OF(rx, struct netdev_rx_bsd, up);
> > }
> >
>
>
>
> The "is_netdev_bsd_class()" function also requires modification, since
> there is no "init()" function.
Thanks. YAMAMOTO Takashi made a similar comment earlier (on a different
patch), so I had already fixed it.
> > @@ -269,12 +267,18 @@ cache_notifier_unref(void)
> > return 0;
> > }
> >
> > +static struct netdev *
> > +netdev_bsd_alloc(void)
> > +{
> > + struct netdev_bsd *netdev = xzalloc(sizeof *netdev);
> > + return &netdev->up;
> > +}
> > +
> > /* Allocate a netdev_bsd structure */
> > static int
> >
>
>
> Should we move this comment up to "netdev_bsd_alloc"? Seems more
> appropriate there.
Thanks for pointing this out. I decided that it was not an informative
comment in either place, so I just deleted it.
>
>
>
> > @@ -378,9 +373,7 @@ netdev_bsd_create_tap(const struct netdev_class
> > *class, const char *name,
> >
> > /* initialize the device structure and
> > * link the structure to its netdev */
> > - netdev_init(&netdev->up, name, class);
> > netdev->kernel_name = kernel_name;
> > - *netdevp = &netdev->up;
> >
> >
>
> The comment above is not applicable.
Thank you. I deleted it.
>
>
>
> > return 0;
> >
> > @@ -393,7 +386,7 @@ error:
> > }
> >
>
>
>
> > error:
>
> free(netdev);
>
>
>
> In the end there shouldn't be the "free(netdev)",
Thank you. I deleted it.
> > @@ -1385,8 +1390,6 @@ const struct netdev_class netdev_bsd_class = {
> > NULL, /* set_config */
> > NULL, /* get_tunnel_config */
> >
> > - netdev_bsd_rx_open,
> > -
> > netdev_bsd_send,
> > netdev_bsd_send_wait,
> >
>
>
>
> Miss the alloc/construct/destruct/dealloc functions.
Thanks. YAMAMOTO Takashi made a similar comment earlier (on a different
patch), so I had already fixed it.
> > const struct netdev_class netdev_tap_class = {
> > "tap",
> >
> > - netdev_bsd_init,
> > + NULL, /* init */
> > netdev_bsd_run,
> > netdev_bsd_wait,
> > netdev_bsd_create_tap,
> >
>
>
>
> Miss the alloc/construct/destruct/dealloc functions.
Thanks. YAMAMOTO Takashi made a similar comment earlier (on a different
patch), so I had already fixed it.
> > diff --git a/lib/netdev.c b/lib/netdev.c
> > index 30c44a2..0fdebe8 100644
> > --- a/lib/netdev.c
> > +++ b/lib/netdev.c
> > @@ -259,22 +259,36 @@ netdev_open(const char *name, const char
> > + }
> > + if (!error) {
> > + netdev->ref_cnt++;
> > }
> > - netdev->ref_cnt++;
> >
> > *netdevp = netdev;
> > - return 0;
> > + return error;
> > }
> >
> >
>
> Could we move "*netdevp = netdev;" into the "if" statement? So, in error,
> "netdevp = NULL".
Good spotting! I decided to delete the *netdevp = NULL; at the top of
the function and write
if (!error) {
netdev->ref_cnt++;
*netdevp = netdev;
} else {
*netdev = NULL;
}
return error;
at the end.
> > /* Returns a reference to 'netdev_' for the caller to own. Returns null if
> > @@ -348,7 +362,11 @@ netdev_unref(struct netdev *dev)
> > {
> > ovs_assert(dev->ref_cnt);
> > if (!--dev->ref_cnt) {
> > - netdev_uninit(dev, true);
> > + dev->netdev_class->destruct(dev);
> > +
> > + shash_delete(&netdev_shash, dev->node);
> > + free(dev->name);
> > + dev->netdev_class->dealloc(dev);
> > }
> > }
>
>
> In "netdev_open()" there is the "list_init(&netdev->saved_flags_list);".
>
> I didn't find the where we check and free the list elements.
I think that the list has to be empty here because each element in
saved_flags_list owns a ref_cnt, and the code in question runs only when
ref_cnt reaches 0.
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev