Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 339352
b: refs/heads/master
c: 6d5759d
h: refs/heads/master
v: v3
  • Loading branch information
Tejun Heo committed Nov 22, 2012
1 parent 563da2d commit fdb54af
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 46 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0ba18f7a5e268e095f79e32b7b47e8ce4fbabbe2
refs/heads/master: 6d5759dd02af5307e71ca928be11005c08f8f967
56 changes: 11 additions & 45 deletions trunk/net/core/netprio_cgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,66 +176,32 @@ static int read_priomap(struct cgroup *cont, struct cftype *cft,
static int write_priomap(struct cgroup *cgrp, struct cftype *cft,
const char *buffer)
{
char *devname = kstrdup(buffer, GFP_KERNEL);
int ret = -EINVAL;
u32 prioidx = cgrp_netprio_state(cgrp)->prioidx;
unsigned long priority;
char *priostr;
char devname[IFNAMSIZ + 1];
struct net_device *dev;
struct netprio_map *map;
u32 prio;
int ret;

if (!devname)
return -ENOMEM;

/*
* Minimally sized valid priomap string
*/
if (strlen(devname) < 3)
goto out_free_devname;

priostr = strstr(devname, " ");
if (!priostr)
goto out_free_devname;

/*
*Separate the devname from the associated priority
*and advance the priostr pointer to the priority value
*/
*priostr = '\0';
priostr++;

/*
* If the priostr points to NULL, we're at the end of the passed
* in string, and its not a valid write
*/
if (*priostr == '\0')
goto out_free_devname;

ret = kstrtoul(priostr, 10, &priority);
if (ret < 0)
goto out_free_devname;

ret = -ENODEV;
if (sscanf(buffer, "%"__stringify(IFNAMSIZ)"s %u", devname, &prio) != 2)
return -EINVAL;

dev = dev_get_by_name(&init_net, devname);
if (!dev)
goto out_free_devname;
return -ENODEV;

rtnl_lock();

ret = write_update_netdev_table(dev);
if (ret < 0)
goto out_put_dev;
if (ret)
goto out_unlock;

map = rtnl_dereference(dev->priomap);
if (map)
map->priomap[prioidx] = priority;

out_put_dev:
map->priomap[prioidx] = prio;
out_unlock:
rtnl_unlock();
dev_put(dev);

out_free_devname:
kfree(devname);
return ret;
}

Expand Down

0 comments on commit fdb54af

Please sign in to comment.