lkml.org 
[lkml]   [2007]   [Jun]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: cannot set IP for ethernet
    Oliver Neukum wrote:
    > with 2.6.22-rc4-git2 I am getting errors when setting IP for ethernet
    > interfaces:
    >
    > ioctl(4, SIOCSIFADDR, 0x7fff94931600) = -1 ENOBUFS (No buffer space available)
    >
    > The error is independant of the interface. It happens to all interfaces.
    > There's nothing in the syslog.
    >
    > valisk:/home/oliver # uname -a
    > Linux valisk 2.6.22-rc4-git2-default #3 SMP Tue Jun 12 13:27:54 CEST 2007 x86_64 x86_64 x86_64 GNU/Linux


    This can happen if the initial inetdev allocation when the netdevice is
    registered fails. I think it would make sense to try to allocate again
    when adding addresses in that case, otherwise there is no way of
    recovery other than unregistering and registering the device again.

    diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
    index abf6352..dc77e91 100644
    --- a/net/ipv4/devinet.c
    +++ b/net/ipv4/devinet.c
    @@ -401,8 +401,11 @@ static int inet_set_ifa(struct net_device *dev, struct in_ifaddr *ifa)
    ASSERT_RTNL();

    if (!in_dev) {
    - inet_free_ifa(ifa);
    - return -ENOBUFS;
    + in_dev = inetdev_init(dev);
    + if (!in_dev) {
    + inet_free_ifa(ifa);
    + return -ENOBUFS;
    + }
    }
    ipv4_devconf_setall(in_dev);
    if (ifa->ifa_dev != in_dev) {
    @@ -514,8 +517,11 @@ static struct in_ifaddr *rtm_to_ifaddr(struct nlmsghdr *nlh)

    in_dev = __in_dev_get_rtnl(dev);
    if (in_dev == NULL) {
    - err = -ENOBUFS;
    - goto errout;
    + in_dev = inetdev_init(dev);
    + if (!in_dev) {
    + err = -ENOBUFS;
    + goto errout;
    + }
    }

    ipv4_devconf_setall(in_dev);
    \
     
     \ /
      Last update: 2007-06-12 16:11    [W:0.021 / U:0.576 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site