projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net: Detect drivers that reschedule NAPI and exhaust budget
[firefly-linux-kernel-4.4.55.git]
/
net
/
core
/
net_namespace.c
diff --git
a/net/core/net_namespace.c
b/net/core/net_namespace.c
index 7c6b51a58968613010576f3bd35a3cb6c527db08..ce780c722e48ca2bf35534895ef0b7dc0a9541d5 100644
(file)
--- a/
net/core/net_namespace.c
+++ b/
net/core/net_namespace.c
@@
-224,7
+224,7
@@
static void net_free(struct net *net)
return;
}
#endif
return;
}
#endif
- kfree(
net->gen
);
+ kfree(
rcu_access_pointer(net->gen)
);
kmem_cache_free(net_cachep, net);
}
kmem_cache_free(net_cachep, net);
}
@@
-337,17
+337,17
@@
EXPORT_SYMBOL_GPL(__put_net);
struct net *get_net_ns_by_fd(int fd)
{
struct net *get_net_ns_by_fd(int fd)
{
- struct proc_ns *ei;
struct file *file;
struct file *file;
+ struct ns_common *ns;
struct net *net;
file = proc_ns_fget(fd);
if (IS_ERR(file))
return ERR_CAST(file);
struct net *net;
file = proc_ns_fget(fd);
if (IS_ERR(file))
return ERR_CAST(file);
-
ei
= get_proc_ns(file_inode(file));
- if (
ei->ns_
ops == &netns_operations)
- net = get_net(
ei->ns
);
+
ns
= get_proc_ns(file_inode(file));
+ if (
ns->
ops == &netns_operations)
+ net = get_net(
container_of(ns, struct net, ns)
);
else
net = ERR_PTR(-EINVAL);
else
net = ERR_PTR(-EINVAL);
@@
-386,12
+386,15
@@
EXPORT_SYMBOL_GPL(get_net_ns_by_pid);
static __net_init int net_ns_net_init(struct net *net)
{
static __net_init int net_ns_net_init(struct net *net)
{
- return proc_alloc_inum(&net->proc_inum);
+#ifdef CONFIG_NET_NS
+ net->ns.ops = &netns_operations;
+#endif
+ return ns_alloc_inum(&net->ns);
}
static __net_exit void net_ns_net_exit(struct net *net)
{
}
static __net_exit void net_ns_net_exit(struct net *net)
{
-
proc_free_inum(net->proc_inum
);
+
ns_free_inum(&net->ns
);
}
static struct pernet_operations __net_initdata net_ns_ops = {
}
static struct pernet_operations __net_initdata net_ns_ops = {
@@
-629,7
+632,7
@@
void unregister_pernet_device(struct pernet_operations *ops)
EXPORT_SYMBOL_GPL(unregister_pernet_device);
#ifdef CONFIG_NET_NS
EXPORT_SYMBOL_GPL(unregister_pernet_device);
#ifdef CONFIG_NET_NS
-static
void
*netns_get(struct task_struct *task)
+static
struct ns_common
*netns_get(struct task_struct *task)
{
struct net *net = NULL;
struct nsproxy *nsproxy;
{
struct net *net = NULL;
struct nsproxy *nsproxy;
@@
-640,17
+643,22
@@
static void *netns_get(struct task_struct *task)
net = get_net(nsproxy->net_ns);
task_unlock(task);
net = get_net(nsproxy->net_ns);
task_unlock(task);
- return net;
+ return net
? &net->ns : NULL
;
}
}
-static
void netns_put(void
*ns)
+static
inline struct net *to_net_ns(struct ns_common
*ns)
{
{
-
put_net(
ns);
+
return container_of(ns, struct net,
ns);
}
}
-static
int netns_install(struct nsproxy *nsproxy, void
*ns)
+static
void netns_put(struct ns_common
*ns)
{
{
- struct net *net = ns;
+ put_net(to_net_ns(ns));
+}
+
+static int netns_install(struct nsproxy *nsproxy, struct ns_common *ns)
+{
+ struct net *net = to_net_ns(ns);
if (!ns_capable(net->user_ns, CAP_SYS_ADMIN) ||
!ns_capable(current_user_ns(), CAP_SYS_ADMIN))
if (!ns_capable(net->user_ns, CAP_SYS_ADMIN) ||
!ns_capable(current_user_ns(), CAP_SYS_ADMIN))
@@
-661,18
+669,11
@@
static int netns_install(struct nsproxy *nsproxy, void *ns)
return 0;
}
return 0;
}
-static unsigned int netns_inum(void *ns)
-{
- struct net *net = ns;
- return net->proc_inum;
-}
-
const struct proc_ns_operations netns_operations = {
.name = "net",
.type = CLONE_NEWNET,
.get = netns_get,
.put = netns_put,
.install = netns_install,
const struct proc_ns_operations netns_operations = {
.name = "net",
.type = CLONE_NEWNET,
.get = netns_get,
.put = netns_put,
.install = netns_install,
- .inum = netns_inum,
};
#endif
};
#endif