diff options
Diffstat (limited to 'net/core/netprio_cgroup.c')
| -rw-r--r-- | net/core/netprio_cgroup.c | 66 | 
1 files changed, 17 insertions, 49 deletions
diff --git a/net/core/netprio_cgroup.c b/net/core/netprio_cgroup.c index d9cd627e6a1..2f385b9bccc 100644 --- a/net/core/netprio_cgroup.c +++ b/net/core/netprio_cgroup.c @@ -30,7 +30,7 @@  #define PRIOMAP_MIN_SZ		128  /* - * Extend @dev->priomap so that it's large enough to accomodate + * Extend @dev->priomap so that it's large enough to accommodate   * @target_idx.  @dev->priomap.priomap_len > @target_idx after successful   * return.  Must be called under rtnl lock.   */ @@ -140,7 +140,7 @@ cgrp_css_alloc(struct cgroup_subsys_state *parent_css)  static int cgrp_css_online(struct cgroup_subsys_state *css)  { -	struct cgroup_subsys_state *parent_css = css_parent(css); +	struct cgroup_subsys_state *parent_css = css->parent;  	struct net_device *dev;  	int ret = 0; @@ -173,27 +173,27 @@ static u64 read_prioidx(struct cgroup_subsys_state *css, struct cftype *cft)  	return css->cgroup->id;  } -static int read_priomap(struct cgroup_subsys_state *css, struct cftype *cft, -			struct cgroup_map_cb *cb) +static int read_priomap(struct seq_file *sf, void *v)  {  	struct net_device *dev;  	rcu_read_lock();  	for_each_netdev_rcu(&init_net, dev) -		cb->fill(cb, dev->name, netprio_prio(css, dev)); +		seq_printf(sf, "%s %u\n", dev->name, +			   netprio_prio(seq_css(sf), dev));  	rcu_read_unlock();  	return 0;  } -static int write_priomap(struct cgroup_subsys_state *css, struct cftype *cft, -			 const char *buffer) +static ssize_t write_priomap(struct kernfs_open_file *of, +			     char *buf, size_t nbytes, loff_t off)  {  	char devname[IFNAMSIZ + 1];  	struct net_device *dev;  	u32 prio;  	int ret; -	if (sscanf(buffer, "%"__stringify(IFNAMSIZ)"s %u", devname, &prio) != 2) +	if (sscanf(buf, "%"__stringify(IFNAMSIZ)"s %u", devname, &prio) != 2)  		return -EINVAL;  	dev = dev_get_by_name(&init_net, devname); @@ -202,11 +202,11 @@ static int write_priomap(struct cgroup_subsys_state *css, struct cftype *cft,  	rtnl_lock(); -	ret = netprio_set_prio(css, dev, prio); +	ret = netprio_set_prio(of_css(of), dev, prio);  	rtnl_unlock();  	dev_put(dev); -	return ret; +	return ret ?: nbytes;  }  static int update_netprio(const void *v, struct file *file, unsigned n) @@ -222,11 +222,10 @@ static void net_prio_attach(struct cgroup_subsys_state *css,  			    struct cgroup_taskset *tset)  {  	struct task_struct *p; -	void *v; +	void *v = (void *)(unsigned long)css->cgroup->id; -	cgroup_taskset_for_each(p, css, tset) { +	cgroup_taskset_for_each(p, tset) {  		task_lock(p); -		v = (void *)(unsigned long)task_netprioidx(p);  		iterate_fd(p->files, 0, update_netprio, v);  		task_unlock(p);  	} @@ -239,21 +238,18 @@ static struct cftype ss_files[] = {  	},  	{  		.name = "ifpriomap", -		.read_map = read_priomap, -		.write_string = write_priomap, +		.seq_show = read_priomap, +		.write = write_priomap,  	},  	{ }	/* terminate */  }; -struct cgroup_subsys net_prio_subsys = { -	.name		= "net_prio", +struct cgroup_subsys net_prio_cgrp_subsys = {  	.css_alloc	= cgrp_css_alloc,  	.css_online	= cgrp_css_online,  	.css_free	= cgrp_css_free,  	.attach		= net_prio_attach, -	.subsys_id	= net_prio_subsys_id,  	.base_cftypes	= ss_files, -	.module		= THIS_MODULE,  };  static int netprio_device_event(struct notifier_block *unused, @@ -284,37 +280,9 @@ static struct notifier_block netprio_device_notifier = {  static int __init init_cgroup_netprio(void)  { -	int ret; - -	ret = cgroup_load_subsys(&net_prio_subsys); -	if (ret) -		goto out; -  	register_netdevice_notifier(&netprio_device_notifier); - -out: -	return ret; -} - -static void __exit exit_cgroup_netprio(void) -{ -	struct netprio_map *old; -	struct net_device *dev; - -	unregister_netdevice_notifier(&netprio_device_notifier); - -	cgroup_unload_subsys(&net_prio_subsys); - -	rtnl_lock(); -	for_each_netdev(&init_net, dev) { -		old = rtnl_dereference(dev->priomap); -		RCU_INIT_POINTER(dev->priomap, NULL); -		if (old) -			kfree_rcu(old, rcu); -	} -	rtnl_unlock(); +	return 0;  } -module_init(init_cgroup_netprio); -module_exit(exit_cgroup_netprio); +subsys_initcall(init_cgroup_netprio);  MODULE_LICENSE("GPL v2");  | 
