From d1729339946a0b584030e64fae6e45c0c5934278 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 28 Nov 2012 00:46:45 +0000 Subject: [PATCH] --- yaml --- r: 341707 b: refs/heads/master c: d71ffeb12378243babb2227acfed0c8d263e237e h: refs/heads/master i: 341705: 800d283568aa98e6791fc6bd4d8dba58098d1929 341703: 6755ff1326bf57fab5ba26921c004e452b27be04 v: v3 --- [refs] | 2 +- trunk/net/atm/br2684.c | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index b2eca5ba91b6..34ba4641275c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0e56d99a5b557c760394d6941d7d1fc8d279eff3 +refs/heads/master: d71ffeb12378243babb2227acfed0c8d263e237e diff --git a/trunk/net/atm/br2684.c b/trunk/net/atm/br2684.c index 4de3ae7bc3e2..6dc383c90262 100644 --- a/trunk/net/atm/br2684.c +++ b/trunk/net/atm/br2684.c @@ -69,6 +69,7 @@ struct br2684_vcc { void (*old_push)(struct atm_vcc *vcc, struct sk_buff *skb); void (*old_pop)(struct atm_vcc *vcc, struct sk_buff *skb); void (*old_release_cb)(struct atm_vcc *vcc); + struct module *old_owner; enum br2684_encaps encaps; struct list_head brvccs; #ifdef CONFIG_ATM_BR2684_IPFILTER @@ -414,8 +415,8 @@ static void br2684_close_vcc(struct br2684_vcc *brvcc) brvcc->atmvcc->user_back = NULL; /* what about vcc->recvq ??? */ brvcc->atmvcc->release_cb = brvcc->old_release_cb; brvcc->old_push(brvcc->atmvcc, NULL); /* pass on the bad news */ + module_put(brvcc->old_owner); kfree(brvcc); - module_put(THIS_MODULE); } /* when AAL5 PDU comes in: */ @@ -590,10 +591,12 @@ static int br2684_regvcc(struct atm_vcc *atmvcc, void __user * arg) brvcc->old_push = atmvcc->push; brvcc->old_pop = atmvcc->pop; brvcc->old_release_cb = atmvcc->release_cb; + brvcc->old_owner = atmvcc->owner; barrier(); atmvcc->push = br2684_push; atmvcc->pop = br2684_pop; atmvcc->release_cb = br2684_release_cb; + atmvcc->owner = THIS_MODULE; /* initialize netdev carrier state */ if (atmvcc->dev->signal == ATM_PHY_SIG_LOST)