bonding: add slave_dev field for bond_opt_value
Currently, bond_opt_value are mostly used for bonding option settings. If we want to set a value for slave, we need to re-alloc a string to store both slave name and vlaue, like bond_option_queue_id_set() does, which is complex and dumb. As Jon suggested, let's add a union field slave_dev for bond_opt_value, which will be benefit for future slave option setting. In function __bond_opt_init(), we will always check the extra field and set it if it's not NULL. Suggested-by: Jonathan Toppins <jtoppins@redhat.com> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Acked-by: Jonathan Toppins <jtoppins@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7747de17f7
commit
f2b3b28ce5
@ -83,7 +83,10 @@ struct bond_opt_value {
|
||||
char *string;
|
||||
u64 value;
|
||||
u32 flags;
|
||||
char extra[BOND_OPT_EXTRA_MAXLEN];
|
||||
union {
|
||||
char extra[BOND_OPT_EXTRA_MAXLEN];
|
||||
struct net_device *slave_dev;
|
||||
};
|
||||
};
|
||||
|
||||
struct bonding;
|
||||
@ -133,13 +136,16 @@ static inline void __bond_opt_init(struct bond_opt_value *optval,
|
||||
optval->value = value;
|
||||
else if (string)
|
||||
optval->string = string;
|
||||
else if (extra_len <= BOND_OPT_EXTRA_MAXLEN)
|
||||
|
||||
if (extra && extra_len <= BOND_OPT_EXTRA_MAXLEN)
|
||||
memcpy(optval->extra, extra, extra_len);
|
||||
}
|
||||
#define bond_opt_initval(optval, value) __bond_opt_init(optval, NULL, value, NULL, 0)
|
||||
#define bond_opt_initstr(optval, str) __bond_opt_init(optval, str, ULLONG_MAX, NULL, 0)
|
||||
#define bond_opt_initextra(optval, extra, extra_len) \
|
||||
__bond_opt_init(optval, NULL, ULLONG_MAX, extra, extra_len)
|
||||
#define bond_opt_slave_initval(optval, slave_dev, value) \
|
||||
__bond_opt_init(optval, NULL, value, slave_dev, sizeof(struct net_device *))
|
||||
|
||||
void bond_option_arp_ip_targets_clear(struct bonding *bond);
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
|
Loading…
x
Reference in New Issue
Block a user