From: gregkh@suse.de
To: linux-kernel@vger.kernel.org, stable@kernel.org,
openib-general@openib.org, Adrian Bunk <bunk@stusta.de>
Cc: Justin Forbes <jmforbes@linuxtx.org>,
Zwane Mwaikambo <zwane@arm.linux.org.uk>,
"Theodore Ts'o" <tytso@mit.edu>,
Randy Dunlap <rdunlap@xenotime.net>,
Dave Jones <davej@redhat.com>,
Chuck Wolber <chuckw@quantumlinux.com>,
torvalds@osdl.org, akpm@osdl.org, alan@lxorguk.ukuu.org.uk,
Michael Tsirkin <mst@mellanox.co.il>,
Roland Dreier <rolandd@cisco.com>,
Greg Kroah-Hartman <gregkh@suse.de>
Subject: [patch 11/26] IPOB: Move destructor from neigh->ops to neigh_param
Date: Tue, 4 Apr 2006 17:00:30 -0700 [thread overview]
Message-ID: <20060405000030.GL27049@kroah.com> (raw)
In-Reply-To: <20060404235927.GA27049@kroah.com>
[-- Attachment #1: move-destructor-from-neigh-ops-to.patch --]
[-- Type: text/plain, Size: 4380 bytes --]
From: Michael Tsirkin <mst@mellanox.co.il>
struct neigh_ops currently has a destructor field, but not a constructor field.
The infiniband/ulp/ipoib in-tree driver stashes some info in the neighbour
structure (the results of the second-stage lookup from ARP results to real
link-level path), and it uses neigh->ops->destructor to get a callback so it can
clean up this extra info when a neighbour is freed. We've run into problems
with this: since the destructor is in an ops field that is shared between
neighbours that may belong to different net devices, there's no way to set/clear
it safely.
The following patch moves this field to neigh_parms where it can be safely set,
together with its twin neigh_setup, and switches the only two in-kernel users
(ipoib and clip) to this interface.
Signed-off-by: Michael Tsirkin <mst@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/infiniband/ulp/ipoib/ipoib_main.c | 16 +---------------
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 1 -
include/net/neighbour.h | 2 +-
net/atm/clip.c | 2 +-
net/core/neighbour.c | 4 ++--
5 files changed, 5 insertions(+), 20 deletions(-)
--- linux-2.6.16.1.orig/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ linux-2.6.16.1/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -247,7 +247,6 @@ static void path_free(struct net_device
if (neigh->ah)
ipoib_put_ah(neigh->ah);
*to_ipoib_neigh(neigh->neighbour) = NULL;
- neigh->neighbour->ops->destructor = NULL;
kfree(neigh);
}
@@ -530,7 +529,6 @@ static void neigh_add_path(struct sk_buf
err:
*to_ipoib_neigh(skb->dst->neighbour) = NULL;
list_del(&neigh->list);
- neigh->neighbour->ops->destructor = NULL;
kfree(neigh);
++priv->stats.tx_dropped;
@@ -769,21 +767,9 @@ static void ipoib_neigh_destructor(struc
ipoib_put_ah(ah);
}
-static int ipoib_neigh_setup(struct neighbour *neigh)
-{
- /*
- * Is this kosher? I can't find anybody in the kernel that
- * sets neigh->destructor, so we should be able to set it here
- * without trouble.
- */
- neigh->ops->destructor = ipoib_neigh_destructor;
-
- return 0;
-}
-
static int ipoib_neigh_setup_dev(struct net_device *dev, struct neigh_parms *parms)
{
- parms->neigh_setup = ipoib_neigh_setup;
+ parms->neigh_destructor = ipoib_neigh_destructor;
return 0;
}
--- linux-2.6.16.1.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ linux-2.6.16.1/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -115,7 +115,6 @@ static void ipoib_mcast_free(struct ipoi
if (neigh->ah)
ipoib_put_ah(neigh->ah);
*to_ipoib_neigh(neigh->neighbour) = NULL;
- neigh->neighbour->ops->destructor = NULL;
kfree(neigh);
}
--- linux-2.6.16.1.orig/include/net/neighbour.h
+++ linux-2.6.16.1/include/net/neighbour.h
@@ -68,6 +68,7 @@ struct neigh_parms
struct net_device *dev;
struct neigh_parms *next;
int (*neigh_setup)(struct neighbour *);
+ void (*neigh_destructor)(struct neighbour *);
struct neigh_table *tbl;
void *sysctl_table;
@@ -145,7 +146,6 @@ struct neighbour
struct neigh_ops
{
int family;
- void (*destructor)(struct neighbour *);
void (*solicit)(struct neighbour *, struct sk_buff*);
void (*error_report)(struct neighbour *, struct sk_buff*);
int (*output)(struct sk_buff*);
--- linux-2.6.16.1.orig/net/atm/clip.c
+++ linux-2.6.16.1/net/atm/clip.c
@@ -289,7 +289,6 @@ static void clip_neigh_error(struct neig
static struct neigh_ops clip_neigh_ops = {
.family = AF_INET,
- .destructor = clip_neigh_destroy,
.solicit = clip_neigh_solicit,
.error_report = clip_neigh_error,
.output = dev_queue_xmit,
@@ -346,6 +345,7 @@ static struct neigh_table clip_tbl = {
/* parameters are copied from ARP ... */
.parms = {
+ .neigh_destructor = clip_neigh_destroy,
.tbl = &clip_tbl,
.base_reachable_time = 30 * HZ,
.retrans_time = 1 * HZ,
--- linux-2.6.16.1.orig/net/core/neighbour.c
+++ linux-2.6.16.1/net/core/neighbour.c
@@ -586,8 +586,8 @@ void neigh_destroy(struct neighbour *nei
kfree(hh);
}
- if (neigh->ops && neigh->ops->destructor)
- (neigh->ops->destructor)(neigh);
+ if (neigh->parms->neigh_destructor)
+ (neigh->parms->neigh_destructor)(neigh);
skb_queue_purge(&neigh->arp_queue);
--
next prev parent reply other threads:[~2006-04-05 0:02 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20060404235634.696852000@quad.kroah.org>
2006-04-04 23:59 ` [patch 00/26] 2.6.16.2 -stable review gregkh
2006-04-04 23:59 ` [patch 01/26] tlclk: fix handling of device major gregkh
2006-04-04 23:59 ` [patch 02/26] USB: Fix irda-usb use after use gregkh
2006-04-05 0:16 ` David S. Miller
2006-04-06 0:55 ` [stable] " Greg KH
2006-04-05 0:22 ` Randy.Dunlap
2006-04-04 23:59 ` [patch 03/26] sysfs: zero terminate sysfs write buffers (CVE-2006-1055) gregkh
2006-04-05 15:09 ` Sergey Vlasov
2006-04-05 15:21 ` Al Viro
2006-04-05 15:38 ` Jon Smirl
2006-04-05 15:39 ` Al Viro
2006-04-05 15:43 ` Jon Smirl
2006-04-05 15:46 ` Al Viro
2006-04-05 16:18 ` Jon Smirl
2006-04-05 17:04 ` Al Viro
2006-04-05 19:58 ` Valdis.Kletnieks
2006-04-05 20:07 ` Greg KH
2006-04-06 1:05 ` Al Viro
2006-04-05 16:34 ` Jon Smirl
2006-04-05 17:02 ` Al Viro
2006-04-05 17:06 ` Jon Smirl
2006-04-05 17:27 ` Al Viro
2006-04-05 15:30 ` Jon Smirl
2006-04-05 18:52 ` [stable] " Greg KH
2006-04-04 23:59 ` [patch 04/26] USB: EHCI full speed ISO bugfixes gregkh
2006-04-04 23:59 ` [patch 05/26] USB: usbcore: usb_set_configuration oops (NULL ptr dereference) gregkh
2006-04-05 0:00 ` [patch 06/26] sbp2: fix spinlock recursion gregkh
2006-04-05 0:00 ` [patch 07/26] powerpc: make ISA floppies work again gregkh
2006-04-05 0:00 ` [patch 08/26] PCMCIA_SPECTRUM must select FW_LOADER gregkh
2006-04-05 0:00 ` [patch 09/26] pcmcia: permit single-character-identifiers gregkh
2006-04-05 0:00 ` [patch 10/26] opti9x - Fix compile without CONFIG_PNP gregkh
2006-04-05 0:00 ` gregkh [this message]
2006-04-05 0:07 ` [patch 11/26] IPOB: Move destructor from neigh->ops to neigh_param David S. Miller
2006-04-05 0:12 ` [stable] " Greg KH
2006-04-05 0:14 ` Roland Dreier
2006-04-05 0:17 ` David S. Miller
2006-04-05 0:42 ` Roland Dreier
2006-04-05 0:47 ` David S. Miller
2006-04-05 1:08 ` Roland Dreier
2006-04-05 7:58 ` Michael S. Tsirkin
2006-04-05 0:00 ` [patch 12/26] Mark longhaul driver as broken gregkh
2006-04-05 0:00 ` [patch 13/26] isicom must select FW_LOADER gregkh
2006-04-05 0:00 ` [patch 14/26] {ip, nf}_conntrack_netlink: fix expectation notifier unregistration gregkh
2006-04-05 0:00 ` [patch 15/26] wrong error path in dup_fd() leading to oopses in RCU gregkh
2006-04-05 0:00 ` [patch 16/26] Fix the p4-clockmod N60 errata workaround gregkh
2006-04-05 0:00 ` [patch 17/26] Fix module refcount leak in __set_personality() gregkh
2006-04-05 0:00 ` [patch 18/26] fib_trie.c node freeing fix gregkh
2006-04-05 0:01 ` [patch 19/26] fbcon: Fix big-endian bogosity in slow_imageblit() gregkh
2006-04-05 0:01 ` [patch 20/26] drivers/net/wireless/ipw2200.c: fix an array overun gregkh
2006-04-05 0:01 ` [patch 21/26] Fix NULL pointer dereference in node_read_numastat() gregkh
2006-04-05 0:01 ` [patch 22/26] AIRO{,_CS} <-> CRYPTO fixes gregkh
2006-04-05 0:01 ` [patch 23/26] Add default entry for CTL Travel Master U553W gregkh
2006-04-05 0:01 ` [patch 24/26] hostap: Fix EAPOL frame encryption gregkh
2006-04-05 0:01 ` [patch 25/26] knfsd: Correct reserved reply space for read requests gregkh
2006-04-05 0:01 ` [patch 26/26] kdump proc vmcore size oveflow fix gregkh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060405000030.GL27049@kroah.com \
--to=gregkh@suse.de \
--cc=akpm@osdl.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=bunk@stusta.de \
--cc=chuckw@quantumlinux.com \
--cc=davej@redhat.com \
--cc=jmforbes@linuxtx.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@mellanox.co.il \
--cc=openib-general@openib.org \
--cc=rdunlap@xenotime.net \
--cc=rolandd@cisco.com \
--cc=stable@kernel.org \
--cc=torvalds@osdl.org \
--cc=tytso@mit.edu \
--cc=zwane@arm.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.