net neighbour, decnet: Ensure to align device private data on preferred alignment.

To allow both of protocol-specific data and device-specific data
attached with neighbour entry, and to eliminate size calculation
cost when allocating entry, sizeof protocol-speicic data must be
multiple of NEIGH_PRIV_ALIGN.  On 64bit archs,
sizeof(struct dn_neigh) is multiple of NEIGH_PRIV_ALIGN, but on
32bit archs, it was not.

Introduce NEIGH_ENTRY_SPACE() macro to ensure that protocol-specific
entry-size meets our requirement.

Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
YOSHIFUJI Hideaki / 吉藤英明 2013-02-09 07:00:59 +00:00 committed by David S. Miller
parent ec16ef2228
commit daaba4fa17
2 changed files with 2 additions and 1 deletions

View File

@ -181,6 +181,7 @@ struct neigh_table {
}; };
#define NEIGH_PRIV_ALIGN sizeof(long long) #define NEIGH_PRIV_ALIGN sizeof(long long)
#define NEIGH_ENTRY_SIZE(size) ALIGN((size), NEIGH_PRIV_ALIGN)
static inline void *neighbour_priv(const struct neighbour *n) static inline void *neighbour_priv(const struct neighbour *n)
{ {

View File

@ -95,7 +95,7 @@ static u32 dn_neigh_hash(const void *pkey,
struct neigh_table dn_neigh_table = { struct neigh_table dn_neigh_table = {
.family = PF_DECnet, .family = PF_DECnet,
.entry_size = sizeof(struct dn_neigh), .entry_size = NEIGH_ENTRY_SIZE(sizeof(struct dn_neigh)),
.key_len = sizeof(__le16), .key_len = sizeof(__le16),
.hash = dn_neigh_hash, .hash = dn_neigh_hash,
.constructor = dn_neigh_construct, .constructor = dn_neigh_construct,