On Thu, 2012-06-28 at 16:10 +0200, Jiri Pirko wrote: > Introduce IFF_LIFE_ADDR_CHANGE priv_flag and use it to disable > netif_running() check in eth_mac_addr() > > Signed-off-by: Jiri Pirko <jpirko@xxxxxxxxxx> > --- > include/linux/if.h | 2 ++ > net/ethernet/eth.c | 2 +- > 2 files changed, 3 insertions(+), 1 deletion(-) > > diff --git a/include/linux/if.h b/include/linux/if.h > index f995c66..fd9ee7c 100644 > --- a/include/linux/if.h > +++ b/include/linux/if.h > @@ -81,6 +81,8 @@ > #define IFF_UNICAST_FLT 0x20000 /* Supports unicast filtering */ > #define IFF_TEAM_PORT 0x40000 /* device used as team port */ > #define IFF_SUPP_NOFCS 0x80000 /* device supports sending custom FCS */ > +#define IFF_LIFE_ADDR_CHANGE 0x100000 /* device supports hardware address > + * change when it's running */ > > > #define IF_GET_IFACE 0x0001 /* for querying only */ > diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c > index 36e5880..8f8ded4 100644 > --- a/net/ethernet/eth.c > +++ b/net/ethernet/eth.c > @@ -283,7 +283,7 @@ int eth_mac_addr(struct net_device *dev, void *p) > { > struct sockaddr *addr = p; > > - if (netif_running(dev)) > + if (!(dev->priv_flags & IFF_LIFE_ADDR_CHANGE) && netif_running(dev)) > return -EBUSY; > if (!is_valid_ether_addr(addr->sa_data)) > return -EADDRNOTAVAIL; Since the memcpy() is not atomic, there is a small window where a reader could get a half-changed mac address. I guess its a detail. _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization