@@ -504,32 +504,37 @@ static int create_socket(struct interface *iface)
504504 return ret ;
505505}
506506
507+ struct interface * ksmbd_find_netdev_name_iface_list (char * netdev_name )
508+ {
509+ struct interface * iface ;
510+
511+ list_for_each_entry (iface , & iface_list , entry )
512+ if (!strcmp (iface -> name , netdev_name ))
513+ return iface ;
514+ return NULL ;
515+ }
516+
507517static int ksmbd_netdev_event (struct notifier_block * nb , unsigned long event ,
508518 void * ptr )
509519{
510520 struct net_device * netdev = netdev_notifier_info_to_dev (ptr );
511521 struct interface * iface ;
512- int ret , found = 0 ;
522+ int ret ;
513523
514524 switch (event ) {
515525 case NETDEV_UP :
516526 if (netif_is_bridge_port (netdev ))
517527 return NOTIFY_OK ;
518528
519- list_for_each_entry (iface , & iface_list , entry ) {
520- if (!strcmp (iface -> name , netdev -> name )) {
521- found = 1 ;
522- if (iface -> state != IFACE_STATE_DOWN )
523- break ;
524- ksmbd_debug (CONN , "netdev-up event: netdev(%s) is going up\n" ,
525- iface -> name );
526- ret = create_socket (iface );
527- if (ret )
528- return NOTIFY_OK ;
529- break ;
530- }
529+ iface = ksmbd_find_netdev_name_iface_list (netdev -> name );
530+ if (iface && iface -> state == IFACE_STATE_DOWN ) {
531+ ksmbd_debug (CONN , "netdev-up event: netdev(%s) is going up\n" ,
532+ iface -> name );
533+ ret = create_socket (iface );
534+ if (ret )
535+ return NOTIFY_OK ;
531536 }
532- if (!found && bind_additional_ifaces ) {
537+ if (!iface && bind_additional_ifaces ) {
533538 iface = alloc_iface (kstrdup (netdev -> name , KSMBD_DEFAULT_GFP ));
534539 if (!iface )
535540 return NOTIFY_OK ;
@@ -541,21 +546,19 @@ static int ksmbd_netdev_event(struct notifier_block *nb, unsigned long event,
541546 }
542547 break ;
543548 case NETDEV_DOWN :
544- list_for_each_entry (iface , & iface_list , entry ) {
545- if (!strcmp (iface -> name , netdev -> name ) &&
546- iface -> state == IFACE_STATE_CONFIGURED ) {
547- ksmbd_debug (CONN , "netdev-down event: netdev(%s) is going down\n" ,
548- iface -> name );
549- tcp_stop_kthread (iface -> ksmbd_kthread );
550- iface -> ksmbd_kthread = NULL ;
551- mutex_lock (& iface -> sock_release_lock );
552- tcp_destroy_socket (iface -> ksmbd_socket );
553- iface -> ksmbd_socket = NULL ;
554- mutex_unlock (& iface -> sock_release_lock );
555-
556- iface -> state = IFACE_STATE_DOWN ;
557- break ;
558- }
549+ iface = ksmbd_find_netdev_name_iface_list (netdev -> name );
550+ if (iface && iface -> state == IFACE_STATE_CONFIGURED ) {
551+ ksmbd_debug (CONN , "netdev-down event: netdev(%s) is going down\n" ,
552+ iface -> name );
553+ tcp_stop_kthread (iface -> ksmbd_kthread );
554+ iface -> ksmbd_kthread = NULL ;
555+ mutex_lock (& iface -> sock_release_lock );
556+ tcp_destroy_socket (iface -> ksmbd_socket );
557+ iface -> ksmbd_socket = NULL ;
558+ mutex_unlock (& iface -> sock_release_lock );
559+
560+ iface -> state = IFACE_STATE_DOWN ;
561+ break ;
559562 }
560563 break ;
561564 }
@@ -624,18 +627,6 @@ int ksmbd_tcp_set_interfaces(char *ifc_list, int ifc_list_sz)
624627 int sz = 0 ;
625628
626629 if (!ifc_list_sz ) {
627- struct net_device * netdev ;
628-
629- rtnl_lock ();
630- for_each_netdev (& init_net , netdev ) {
631- if (netif_is_bridge_port (netdev ))
632- continue ;
633- if (!alloc_iface (kstrdup (netdev -> name , KSMBD_DEFAULT_GFP ))) {
634- rtnl_unlock ();
635- return - ENOMEM ;
636- }
637- }
638- rtnl_unlock ();
639630 bind_additional_ifaces = 1 ;
640631 return 0 ;
641632 }
0 commit comments