From: Yu Watanabe Date: Fri, 21 May 2021 19:07:01 +0000 (+0900) Subject: ethtool-util: make ethtool_connect() open fd only when it is not opened X-Git-Tag: v249-rc1~169^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4f5040313dd9ac737816c992e0d7e4e94dca36b4;p=thirdparty%2Fsystemd.git ethtool-util: make ethtool_connect() open fd only when it is not opened --- diff --git a/src/shared/ethtool-util.c b/src/shared/ethtool-util.c index e6e7da66ae9..da47aff7201 100644 --- a/src/shared/ethtool-util.c +++ b/src/shared/ethtool-util.c @@ -158,17 +158,20 @@ assert_cc((ELEMENTSOF(ethtool_link_mode_bit_table)-1) / 32 < N_ADVERTISE); DEFINE_STRING_TABLE_LOOKUP(ethtool_link_mode_bit, enum ethtool_link_mode_bit_indices); -static int ethtool_connect(int *ret) { +static int ethtool_connect(int *ethtool_fd) { int fd; - assert_return(ret, -EINVAL); + assert(ethtool_fd); + + /* This does nothing if already connected. */ + if (*ethtool_fd >= 0) + return 0; fd = socket_ioctl_fd(); if (fd < 0) return log_debug_errno(fd, "ethtool: could not create control socket: %m"); - *ret = fd; - + *ethtool_fd = fd; return 0; } @@ -186,11 +189,9 @@ int ethtool_get_driver(int *ethtool_fd, const char *ifname, char **ret) { assert(ifname); assert(ret); - if (*ethtool_fd < 0) { - r = ethtool_connect(ethtool_fd); - if (r < 0) - return r; - } + r = ethtool_connect(ethtool_fd); + if (r < 0) + return r; strscpy(ifr.ifr_name, IFNAMSIZ, ifname); @@ -228,11 +229,9 @@ int ethtool_get_link_info( assert(ethtool_fd); assert(ifname); - if (*ethtool_fd < 0) { - r = ethtool_connect(ethtool_fd); - if (r < 0) - return r; - } + r = ethtool_connect(ethtool_fd); + if (r < 0) + return r; strscpy(ifr.ifr_name, IFNAMSIZ, ifname); @@ -279,12 +278,9 @@ int ethtool_get_permanent_macaddr(int *ethtool_fd, const char *ifname, struct et if (!ethtool_fd) ethtool_fd = &fd; - - if (*ethtool_fd < 0) { - r = ethtool_connect(ethtool_fd); - if (r < 0) - return r; - } + r = ethtool_connect(ethtool_fd); + if (r < 0) + return r; strscpy(ifr.ifr_name, IFNAMSIZ, ifname); @@ -322,11 +318,9 @@ int ethtool_set_speed(int *ethtool_fd, const char *ifname, unsigned speed, Duple if (speed == 0 && duplex == _DUP_INVALID) return 0; - if (*ethtool_fd < 0) { - r = ethtool_connect(ethtool_fd); - if (r < 0) - return r; - } + r = ethtool_connect(ethtool_fd); + if (r < 0) + return r; strscpy(ifr.ifr_name, IFNAMSIZ, ifname); @@ -383,11 +377,9 @@ int ethtool_set_wol(int *ethtool_fd, const char *ifname, WakeOnLan wol) { if (wol == _WOL_INVALID) return 0; - if (*ethtool_fd < 0) { - r = ethtool_connect(ethtool_fd); - if (r < 0) - return r; - } + r = ethtool_connect(ethtool_fd); + if (r < 0) + return r; strscpy(ifr.ifr_name, IFNAMSIZ, ifname); @@ -473,11 +465,9 @@ int ethtool_set_nic_buffer_size(int *ethtool_fd, const char *ifname, const netde assert(ifname); assert(ring); - if (*ethtool_fd < 0) { - r = ethtool_connect(ethtool_fd); - if (r < 0) - return r; - } + r = ethtool_connect(ethtool_fd); + if (r < 0) + return r; strscpy(ifr.ifr_name, IFNAMSIZ, ifname); @@ -606,11 +596,9 @@ int ethtool_set_features(int *ethtool_fd, const char *ifname, const int *feature assert(ifname); assert(features); - if (*ethtool_fd < 0) { - r = ethtool_connect(ethtool_fd); - if (r < 0) - return r; - } + r = ethtool_connect(ethtool_fd); + if (r < 0) + return r; strscpy(ifr.ifr_name, IFNAMSIZ, ifname); @@ -845,11 +833,9 @@ int ethtool_set_glinksettings( return 0; } - if (*fd < 0) { - r = ethtool_connect(fd); - if (r < 0) - return r; - } + r = ethtool_connect(fd); + if (r < 0) + return r; strscpy(ifr.ifr_name, IFNAMSIZ, ifname); @@ -903,11 +889,9 @@ int ethtool_set_channels(int *fd, const char *ifname, const netdev_channels *cha assert(ifname); assert(channels); - if (*fd < 0) { - r = ethtool_connect(fd); - if (r < 0) - return r; - } + r = ethtool_connect(fd); + if (r < 0) + return r; strscpy(ifr.ifr_name, IFNAMSIZ, ifname); @@ -959,11 +943,9 @@ int ethtool_set_flow_control(int *fd, const char *ifname, int rx, int tx, int au assert(fd); assert(ifname); - if (*fd < 0) { - r = ethtool_connect(fd); - if (r < 0) - return r; - } + r = ethtool_connect(fd); + if (r < 0) + return r; strscpy(ifr.ifr_name, IFNAMSIZ, ifname);