> -----Original Message-----
> From: Richard Cochran [mailto:richardcoch...@gmail.com]
> Sent: Tuesday, July 18, 2017 10:52 PM
> To: Hangbin Liu <liuhang...@gmail.com>
> Cc: Keller, Jacob E <jacob.e.kel...@intel.com>; Sushil Kulkarni
> <sukul...@redhat.com>; linuxptp-devel@lists.sourceforge.net; Jiri Benc
> <jb...@redhat.com>
> Subject: Re: [Linuxptp-devel] [PATCHv2 4/9] rtnl: add function rtnl_link_info
> 
> 
> You should return early when there are no resources to free:
> 
> +int rtnl_link_info(struct interface *iface)
> +{
> +     int fd, index;
>       int err, fd, index;  (See below for 'err')
> 
> +     index = if_nametoindex(iface->name);
> +
> +     if (index == 0) {
> +             pr_err("failed to get interface %s index: %m", iface->name);
>               return -1;
> +     }
> +
> +     fd = rtnl_open();
> +     if (fd < 0)
>               return fd;
> 
> +     if (rtnl_link_query(fd, index))
> +             goto no_info;
> +     if (rtnl_link_status(fd, NULL, iface->ts_iface))
> +             goto no_info;
> 
> Here you want to let the error code propagate:
> 
>       err = rtnl_link_query(fd, index);
>       if (err) {
>               goto no_info;
>       }
>       err = rtnl_link_status(fd, NULL, iface->ts_iface);
>       if (err) {
>               goto no_info;
>       }
> 
> +     /* If we do not have a slave, then use our own interface name
> +      * as ts_iface
> +      */
> +     if (iface->ts_iface[0] == '\0')
> +             strncpy(iface->ts_iface, iface->name, MAX_IFNAME_SIZE);
> 
> Move these two lines to the call site.  They could be place in a
> helper function in order to make the purpose clear without a comment.
> See below...
> 
> no_info:
>       rtnl_close(fd);
>       return err;
> }
> 
> 
> clock.c
> ~~~~~~~
> 
> /*
>  * If we do not have a slave or the rtnl query failed, then use our
>  * own interface name as the time stamping interface name.
>  */
> static void ensure_ts_iface(iface)
> {
>       if (iface->ts_iface[0] == '\0')
>               strncpy(iface->ts_iface, iface->name, MAX_IFNAME_SIZE);
> }
> 
> clock_create()
> {
>       STAILQ_FOREACH(iface, &config->interfaces, list) {
>               rtnl_link_info(iface);
>               ensure_ts_iface(iface);
>               ...
>       }
> }

Richard's solution is even better.

Thanks,
Jake
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to