diff --git a/transport_tcp.c b/transport_tcp.c index 81d1c7ff..688d78f6 100644 --- a/transport_tcp.c +++ b/transport_tcp.c @@ -544,14 +544,14 @@ static int create_socket(struct interface *iface) return ret; } -bool ksmbd_find_netdev_name_iface_list(char *netdev_name) +struct interface *ksmbd_find_netdev_name_iface_list(char *netdev_name) { struct interface *iface; list_for_each_entry(iface, &iface_list, entry) if (!strcmp(iface->name, netdev_name)) - return true; - return false; + return iface; + return NULL; } static int ksmbd_netdev_event(struct notifier_block *nb, unsigned long event, @@ -560,22 +560,21 @@ static int ksmbd_netdev_event(struct notifier_block *nb, unsigned long event, struct net_device *netdev = netdev_notifier_info_to_dev(ptr); struct interface *iface; int ret; - bool found = false; switch (event) { case NETDEV_UP: if (netdev->priv_flags & IFF_BRIDGE_PORT) return NOTIFY_OK; - found = ksmbd_find_netdev_name_iface_list(netdev->name); - if (found == true && iface->state == IFACE_STATE_DOWN) { + iface = ksmbd_find_netdev_name_iface_list(netdev->name); + if (iface && iface->state == IFACE_STATE_DOWN) { ksmbd_debug(CONN, "netdev-up event: netdev(%s) is going up\n", iface->name); ret = create_socket(iface); if (ret) return NOTIFY_OK; } - if (found == false && bind_additional_ifaces) { + if (!iface && bind_additional_ifaces) { iface = alloc_iface(kstrdup(netdev->name, KSMBD_DEFAULT_GFP)); if (!iface) return NOTIFY_OK; @@ -587,21 +586,19 @@ static int ksmbd_netdev_event(struct notifier_block *nb, unsigned long event, } break; case NETDEV_DOWN: - list_for_each_entry(iface, &iface_list, entry) { - if (!strcmp(iface->name, netdev->name) && - iface->state == IFACE_STATE_CONFIGURED) { - ksmbd_debug(CONN, "netdev-down event: netdev(%s) is going down\n", - iface->name); - tcp_stop_kthread(iface->ksmbd_kthread); - iface->ksmbd_kthread = NULL; - mutex_lock(&iface->sock_release_lock); - tcp_destroy_socket(iface->ksmbd_socket); - iface->ksmbd_socket = NULL; - mutex_unlock(&iface->sock_release_lock); - - iface->state = IFACE_STATE_DOWN; - break; - } + iface = ksmbd_find_netdev_name_iface_list(netdev->name); + if (iface && iface->state == IFACE_STATE_CONFIGURED) { + ksmbd_debug(CONN, "netdev-down event: netdev(%s) is going down\n", + iface->name); + tcp_stop_kthread(iface->ksmbd_kthread); + iface->ksmbd_kthread = NULL; + mutex_lock(&iface->sock_release_lock); + tcp_destroy_socket(iface->ksmbd_socket); + iface->ksmbd_socket = NULL; + mutex_unlock(&iface->sock_release_lock); + + iface->state = IFACE_STATE_DOWN; + break; } break; } diff --git a/transport_tcp.h b/transport_tcp.h index 4a36ba5c..8c9aa624 100644 --- a/transport_tcp.h +++ b/transport_tcp.h @@ -7,7 +7,7 @@ #define __KSMBD_TRANSPORT_TCP_H__ int ksmbd_tcp_set_interfaces(char *ifc_list, int ifc_list_sz); -bool ksmbd_find_netdev_name_iface_list(char *netdev_name); +struct interface *ksmbd_find_netdev_name_iface_list(char *netdev_name); int ksmbd_tcp_init(void); void ksmbd_tcp_destroy(void);