Hi, Unloading rose module issue due to unmatched dev_put() had also been previously reported here :
http://marc.info/?l=linux-netdev&m=143389465602786&w=2 and here by f6bvp : http://marc.info/?l=linux-hams&m=148837252410913&w=4 Bernard >> Hi, >> >> I want to acknowledge here a set of very usefull ROSE patches provided >> by richard Stearn. >> >> Since years, it has not been possible to set rose0 device down without >> creating an endless loop of kernel waiting for rose to become free. >> >> Richard found that a number of dev_put(dev) were missing. >> >> Applying the following patch subset cured the issue and allowed a clean >> rose module removal. >> >> The following patches are part of a larger series committed by Richard >> but rejected by Dave Miller mostly for format reasons. >> >> I selected and checked the minimal changes necessary to cure the >> refcount issue. >> >> See : >> >> http://marc.info/?l=linux-hams&m=146873255413533&w=2 >> >> Richard does not want to jump in again. >> >> So I would appreciate if someone could help us by confirming that this >> patch is extremely convenient. >> >> Then someone could submit this subset to linux-hams and linux-netdev >> referees. >> >> 73 de Bernard, f6bvp >> >> ---------------------------------------- >> >> >> diff -ruN a/net/rose/af_rose.c b/net/rose/af_rose.c >> --- a/net/rose/af_rose.c 2017-04-03 19:02:14.205800053 +0200 >> +++ b/net/rose/af_rose.c 2017-04-03 12:18:02.290052819 +0200 >> @@ -688,8 +688,10 @@ >> rose->source_call = user->call; >> ax25_uid_put(user); >> } else { >> - if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) >> + if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) { >> + dev_put(dev); >> return -EACCES; >> + } >> rose->source_call = *source; >> } >> >> @@ -710,6 +712,7 @@ >> rose_insert_socket(sk); >> >> sock_reset_flag(sk, SOCK_ZAPPED); >> + dev_put(dev); >> >> return 0; >> } >> diff -ruN a/net/rose/rose_loopback.c b/net/rose/rose_loopback.c >> --- a/net/rose/rose_loopback.c 2017-04-03 19:02:14.206800010 +0200 >> +++ b/net/rose/rose_loopback.c 2017-04-03 12:18:02.291052777 +0200 >> @@ -102,6 +102,7 @@ >> if ((dev = rose_dev_get(dest)) != NULL) { >> if (rose_rx_call_request(skb, dev, >> rose_loopback_neigh, lci_o) == 0) >> kfree_skb(skb); >> + dev_put(dev); >> } else { >> kfree_skb(skb); >> } -- To unsubscribe from this list: send the line "unsubscribe linux-hams" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
