Merge branch 'for-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
Pull cgroup updates from Tejun Heo: - xattr support added. The implementation is shared with tmpfs. The usage is restricted and intended to be used to manage per-cgroup metadata by system software. tmpfs changes are routed through this branch with Hugh's permission. - cgroup subsystem ID handling simplified. * 'for-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: cgroup: Define CGROUP_SUBSYS_COUNT according the configuration cgroup: Assign subsystem IDs during compile time cgroup: Do not depend on a given order when populating the subsys array cgroup: Wrap subsystem selection macro cgroup: Remove CGROUP_BUILTIN_SUBSYS_COUNT cgroup: net_prio: Do not define task_netpioidx() when not selected cgroup: net_cls: Do not define task_cls_classid() when not selected cgroup: net_cls: Move sock_update_classid() declaration to cls_cgroup.h cgroup: trivial fixes for Documentation/cgroups/cgroups.txt xattr: mark variable as uninitialized to make both gcc and smatch happy fs: add missing documentation to simple_xattr functions cgroup: add documentation on extended attributes usage cgroup: rename subsys_bits to subsys_mask cgroup: add xattr support cgroup: revise how we re-populate root directory xattr: extract simple_xattr code from tmpfs
This commit is contained in:
@@ -17,14 +17,16 @@
|
||||
#include <linux/hardirq.h>
|
||||
#include <linux/rcupdate.h>
|
||||
|
||||
#ifdef CONFIG_CGROUPS
|
||||
#if IS_ENABLED(CONFIG_NET_CLS_CGROUP)
|
||||
struct cgroup_cls_state
|
||||
{
|
||||
struct cgroup_subsys_state css;
|
||||
u32 classid;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_NET_CLS_CGROUP
|
||||
extern void sock_update_classid(struct sock *sk);
|
||||
|
||||
#if IS_BUILTIN(CONFIG_NET_CLS_CGROUP)
|
||||
static inline u32 task_cls_classid(struct task_struct *p)
|
||||
{
|
||||
int classid;
|
||||
@@ -39,32 +41,33 @@ static inline u32 task_cls_classid(struct task_struct *p)
|
||||
|
||||
return classid;
|
||||
}
|
||||
#else
|
||||
extern int net_cls_subsys_id;
|
||||
|
||||
#elif IS_MODULE(CONFIG_NET_CLS_CGROUP)
|
||||
static inline u32 task_cls_classid(struct task_struct *p)
|
||||
{
|
||||
int id;
|
||||
struct cgroup_subsys_state *css;
|
||||
u32 classid = 0;
|
||||
|
||||
if (in_interrupt())
|
||||
return 0;
|
||||
|
||||
rcu_read_lock();
|
||||
id = rcu_dereference_index_check(net_cls_subsys_id,
|
||||
rcu_read_lock_held());
|
||||
if (id >= 0)
|
||||
classid = container_of(task_subsys_state(p, id),
|
||||
css = task_subsys_state(p, net_cls_subsys_id);
|
||||
if (css)
|
||||
classid = container_of(css,
|
||||
struct cgroup_cls_state, css)->classid;
|
||||
rcu_read_unlock();
|
||||
|
||||
return classid;
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
#else /* !CGROUP_NET_CLS_CGROUP */
|
||||
static inline void sock_update_classid(struct sock *sk)
|
||||
{
|
||||
}
|
||||
|
||||
static inline u32 task_cls_classid(struct task_struct *p)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif /* CGROUP_NET_CLS_CGROUP */
|
||||
#endif /* _NET_CLS_CGROUP_H */
|
||||
|
||||
@@ -18,23 +18,18 @@
|
||||
#include <linux/rcupdate.h>
|
||||
|
||||
|
||||
#if IS_ENABLED(CONFIG_NETPRIO_CGROUP)
|
||||
struct netprio_map {
|
||||
struct rcu_head rcu;
|
||||
u32 priomap_len;
|
||||
u32 priomap[];
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CGROUPS
|
||||
|
||||
struct cgroup_netprio_state {
|
||||
struct cgroup_subsys_state css;
|
||||
u32 prioidx;
|
||||
};
|
||||
|
||||
#ifndef CONFIG_NETPRIO_CGROUP
|
||||
extern int net_prio_subsys_id;
|
||||
#endif
|
||||
|
||||
extern void sock_update_netprioidx(struct sock *sk, struct task_struct *task);
|
||||
|
||||
#if IS_BUILTIN(CONFIG_NETPRIO_CGROUP)
|
||||
@@ -56,33 +51,28 @@ static inline u32 task_netprioidx(struct task_struct *p)
|
||||
|
||||
static inline u32 task_netprioidx(struct task_struct *p)
|
||||
{
|
||||
struct cgroup_netprio_state *state;
|
||||
int subsys_id;
|
||||
struct cgroup_subsys_state *css;
|
||||
u32 idx = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
subsys_id = rcu_dereference_index_check(net_prio_subsys_id,
|
||||
rcu_read_lock_held());
|
||||
if (subsys_id >= 0) {
|
||||
state = container_of(task_subsys_state(p, subsys_id),
|
||||
struct cgroup_netprio_state, css);
|
||||
idx = state->prioidx;
|
||||
}
|
||||
css = task_subsys_state(p, net_prio_subsys_id);
|
||||
if (css)
|
||||
idx = container_of(css,
|
||||
struct cgroup_netprio_state, css)->prioidx;
|
||||
rcu_read_unlock();
|
||||
return idx;
|
||||
}
|
||||
#endif
|
||||
|
||||
#else
|
||||
#else /* !CONFIG_NETPRIO_CGROUP */
|
||||
|
||||
static inline u32 task_netprioidx(struct task_struct *p)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define sock_update_netprioidx(sk, task)
|
||||
|
||||
#endif /* CONFIG_NETPRIO_CGROUP */
|
||||
|
||||
#else
|
||||
#define sock_update_netprioidx(sk, task)
|
||||
#endif
|
||||
|
||||
#endif /* _NET_CLS_CGROUP_H */
|
||||
|
||||
@@ -1486,14 +1486,6 @@ extern void *sock_kmalloc(struct sock *sk, int size,
|
||||
extern void sock_kfree_s(struct sock *sk, void *mem, int size);
|
||||
extern void sk_send_sigurg(struct sock *sk);
|
||||
|
||||
#ifdef CONFIG_CGROUPS
|
||||
extern void sock_update_classid(struct sock *sk);
|
||||
#else
|
||||
static inline void sock_update_classid(struct sock *sk)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Functions to fill in entries in struct proto_ops when a protocol
|
||||
* does not implement a particular function.
|
||||
|
||||
Reference in New Issue
Block a user