diff options
author | Amit Pundir <amit.pundir@linaro.org> | 2017-08-01 10:52:52 +0530 |
---|---|---|
committer | Amit Pundir <amit.pundir@linaro.org> | 2017-08-01 11:26:49 +0530 |
commit | b43282fc74615c71e3a58fa92a4fe62f5374acd6 (patch) | |
tree | 54c3e0f148beedd088ddb8e40268cf1c07b3bc08 /net/ipv4/igmp.c | |
parent | f83fb557207250de93aa8882df19acfc7fe7ace7 (diff) | |
parent | 37f3f1536a86154b0c1cc2586fa6c513e79a440e (diff) |
Merge branch 'linux-linaro-lsk-v3.18' into linux-linaro-lsk-v3.18-androidlsk-v3.18-17.08-android
Conflicts:
arch/arm64/kernel/setup.c
AOSP Change-Id: I98624593273ae4c90ae299f063d26f35a39a0a31
(upstream commit 12d11817eaaf "arm64: Move /proc/cpuinfo handling code")
moved /proc/cpuinfo handling code from
arch/arm64/kernel/{setup.c to cpuinfo.c}.
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
Diffstat (limited to 'net/ipv4/igmp.c')
-rw-r--r-- | net/ipv4/igmp.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index bb15d0e03d4f..1ea62ccfa884 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c @@ -1080,6 +1080,7 @@ static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im) pmc = kzalloc(sizeof(*pmc), GFP_KERNEL); if (!pmc) return; + spin_lock_init(&pmc->lock); spin_lock_bh(&im->lock); pmc->interface = im->interface; in_dev_hold(in_dev); @@ -1832,21 +1833,26 @@ static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode, static void ip_mc_clear_src(struct ip_mc_list *pmc) { - struct ip_sf_list *psf, *nextpsf; + struct ip_sf_list *psf, *nextpsf, *tomb, *sources; - for (psf = pmc->tomb; psf; psf = nextpsf) { + spin_lock_bh(&pmc->lock); + tomb = pmc->tomb; + pmc->tomb = NULL; + sources = pmc->sources; + pmc->sources = NULL; + pmc->sfmode = MCAST_EXCLUDE; + pmc->sfcount[MCAST_INCLUDE] = 0; + pmc->sfcount[MCAST_EXCLUDE] = 1; + spin_unlock_bh(&pmc->lock); + + for (psf = tomb; psf; psf = nextpsf) { nextpsf = psf->sf_next; kfree(psf); } - pmc->tomb = NULL; - for (psf = pmc->sources; psf; psf = nextpsf) { + for (psf = sources; psf; psf = nextpsf) { nextpsf = psf->sf_next; kfree(psf); } - pmc->sources = NULL; - pmc->sfmode = MCAST_EXCLUDE; - pmc->sfcount[MCAST_INCLUDE] = 0; - pmc->sfcount[MCAST_EXCLUDE] = 1; } |