Blame view

include/linux/nsproxy.h 2.25 KB
ab516013a   Serge E. Hallyn   [PATCH] namespace...
1
2
3
4
5
  #ifndef _LINUX_NSPROXY_H
  #define _LINUX_NSPROXY_H
  
  #include <linux/spinlock.h>
  #include <linux/sched.h>
6b3286ed1   Kirill Korotaev   [PATCH] rename st...
6
  struct mnt_namespace;
4865ecf13   Serge E. Hallyn   [PATCH] namespace...
7
  struct uts_namespace;
25b21cb2f   Kirill Korotaev   [PATCH] IPC names...
8
  struct ipc_namespace;
9a575a92d   Cedric Le Goater   [PATCH] to nsproxy
9
  struct pid_namespace;
5ad4e53bd   Al Viro   Get rid of indire...
10
  struct fs_struct;
1651e14e2   Serge E. Hallyn   [PATCH] namespace...
11

ab516013a   Serge E. Hallyn   [PATCH] namespace...
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  /*
   * A structure to contain pointers to all per-process
   * namespaces - fs (mount), uts, network, sysvipc, etc.
   *
   * 'count' is the number of tasks holding a reference.
   * The count for each namespace, then, will be the number
   * of nsproxies pointing to it, not the number of tasks.
   *
   * The nsproxy is shared by tasks which share all namespaces.
   * As soon as a single namespace is cloned or unshared, the
   * nsproxy is copied.
   */
  struct nsproxy {
  	atomic_t count;
4865ecf13   Serge E. Hallyn   [PATCH] namespace...
26
  	struct uts_namespace *uts_ns;
25b21cb2f   Kirill Korotaev   [PATCH] IPC names...
27
  	struct ipc_namespace *ipc_ns;
6b3286ed1   Kirill Korotaev   [PATCH] rename st...
28
  	struct mnt_namespace *mnt_ns;
9a575a92d   Cedric Le Goater   [PATCH] to nsproxy
29
  	struct pid_namespace *pid_ns;
772698f63   Eric W. Biederman   [NET]: Add a netw...
30
  	struct net 	     *net_ns;
ab516013a   Serge E. Hallyn   [PATCH] namespace...
31
32
  };
  extern struct nsproxy init_nsproxy;
cf7b708c8   Pavel Emelyanov   Make access to ta...
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  /*
   * the namespaces access rules are:
   *
   *  1. only current task is allowed to change tsk->nsproxy pointer or
   *     any pointer on the nsproxy itself
   *
   *  2. when accessing (i.e. reading) current task's namespaces - no
   *     precautions should be taken - just dereference the pointers
   *
   *  3. the access to other task namespaces is performed like this
   *     rcu_read_lock();
   *     nsproxy = task_nsproxy(tsk);
   *     if (nsproxy != NULL) {
   *             / *
   *               * work with the namespaces here
   *               * e.g. get the reference on one of them
   *               * /
   *     } / *
   *         * NULL task_nsproxy() means that this task is
   *         * almost dead (zombie)
   *         * /
   *     rcu_read_unlock();
   *
   */
  
  static inline struct nsproxy *task_nsproxy(struct task_struct *tsk)
  {
  	return rcu_dereference(tsk->nsproxy);
  }
213dd266d   Eric W. Biederman   namespace: ensure...
62
  int copy_namespaces(unsigned long flags, struct task_struct *tsk);
cf7b708c8   Pavel Emelyanov   Make access to ta...
63
64
  void exit_task_namespaces(struct task_struct *tsk);
  void switch_task_namespaces(struct task_struct *tsk, struct nsproxy *new);
ab516013a   Serge E. Hallyn   [PATCH] namespace...
65
  void free_nsproxy(struct nsproxy *ns);
e3222c4ec   Badari Pulavarty   Merge sys_clone()...
66
67
  int unshare_nsproxy_namespaces(unsigned long, struct nsproxy **,
  	struct fs_struct *);
665771939   Al Viro   make sure that ns...
68
  int __init nsproxy_cache_init(void);
ab516013a   Serge E. Hallyn   [PATCH] namespace...
69

444f378b2   Linus Torvalds   Revert "[PATCH] n...
70
  static inline void put_nsproxy(struct nsproxy *ns)
ab516013a   Serge E. Hallyn   [PATCH] namespace...
71
  {
444f378b2   Linus Torvalds   Revert "[PATCH] n...
72
  	if (atomic_dec_and_test(&ns->count)) {
ab516013a   Serge E. Hallyn   [PATCH] namespace...
73
  		free_nsproxy(ns);
444f378b2   Linus Torvalds   Revert "[PATCH] n...
74
  	}
ab516013a   Serge E. Hallyn   [PATCH] namespace...
75
  }
cf7b708c8   Pavel Emelyanov   Make access to ta...
76
  static inline void get_nsproxy(struct nsproxy *ns)
ab516013a   Serge E. Hallyn   [PATCH] namespace...
77
  {
cf7b708c8   Pavel Emelyanov   Make access to ta...
78
  	atomic_inc(&ns->count);
ab516013a   Serge E. Hallyn   [PATCH] namespace...
79
  }
858d72ead   Serge E. Hallyn   cgroups: implemen...
80

ab516013a   Serge E. Hallyn   [PATCH] namespace...
81
  #endif