Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b41848b6 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller
Browse files

netpoll setup error handling



The beast was not always healthy. When it was sick,
it tended to be laconic and not tell anyone the real problem.
A few small changes had it telling the world about its
problems, if they really wanted to hear.

Signed-off-by: default avatarStephen Hemminger <shemminger@osdl.org>
parent b6cd27ed
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -102,6 +102,8 @@ __setup("netconsole=", option_setup);

static int init_netconsole(void)
{
	int err;

	if(strlen(config))
		option_setup(config);

@@ -110,8 +112,9 @@ static int init_netconsole(void)
		return 0;
	}

	if(netpoll_setup(&np))
		return -EINVAL;
	err = netpoll_setup(&np);
	if (err)
		return err;

	register_console(&netconsole);
	printk(KERN_INFO "netconsole: network logging started\n");
+13 −7
Original line number Diff line number Diff line
@@ -611,20 +611,23 @@ int netpoll_setup(struct netpoll *np)
	struct in_device *in_dev;
	struct netpoll_info *npinfo;
	unsigned long flags;
	int err;

	if (np->dev_name)
		ndev = dev_get_by_name(np->dev_name);
	if (!ndev) {
		printk(KERN_ERR "%s: %s doesn't exist, aborting.\n",
		       np->name, np->dev_name);
		return -1;
		return -ENODEV;
	}

	np->dev = ndev;
	if (!ndev->npinfo) {
		npinfo = kmalloc(sizeof(*npinfo), GFP_KERNEL);
		if (!npinfo)
		if (!npinfo) {
			err = -ENOMEM;
			goto release;
		}

		npinfo->rx_flags = 0;
		npinfo->rx_np = NULL;
@@ -645,6 +648,7 @@ int netpoll_setup(struct netpoll *np)
	if (!ndev->poll_controller) {
		printk(KERN_ERR "%s: %s doesn't support polling, aborting.\n",
		       np->name, np->dev_name);
		err = -ENOTSUPP;
		goto release;
	}

@@ -655,13 +659,14 @@ int netpoll_setup(struct netpoll *np)
		       np->name, np->dev_name);

		rtnl_lock();
		if (dev_change_flags(ndev, ndev->flags | IFF_UP) < 0) {
			printk(KERN_ERR "%s: failed to open %s\n",
			       np->name, np->dev_name);
		err = dev_open(ndev);
		rtnl_unlock();

		if (err) {
			printk(KERN_ERR "%s: failed to open %s\n",
			       np->name, ndev->name);
			goto release;
		}
		rtnl_unlock();

		atleast = jiffies + HZ/10;
 		atmost = jiffies + 4*HZ;
@@ -699,6 +704,7 @@ int netpoll_setup(struct netpoll *np)
			rcu_read_unlock();
			printk(KERN_ERR "%s: no IP address for %s, aborting\n",
			       np->name, np->dev_name);
			err = -EDESTADDRREQ;
			goto release;
		}

@@ -731,7 +737,7 @@ int netpoll_setup(struct netpoll *np)
		kfree(npinfo);
	np->dev = NULL;
	dev_put(ndev);
	return -1;
	return err;
}

static int __init netpoll_init(void) {