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:
parent
ec16ef2228
commit
daaba4fa17
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user