Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
nsproxy.h
Go to the documentation of this file.
1
#ifndef _LINUX_NSPROXY_H
2
#define _LINUX_NSPROXY_H
3
4
#include <
linux/spinlock.h
>
5
#include <linux/sched.h>
6
7
struct
mnt_namespace
;
8
struct
uts_namespace
;
9
struct
ipc_namespace
;
10
struct
pid_namespace
;
11
struct
fs_struct
;
12
13
/*
14
* A structure to contain pointers to all per-process
15
* namespaces - fs (mount), uts, network, sysvipc, etc.
16
*
17
* 'count' is the number of tasks holding a reference.
18
* The count for each namespace, then, will be the number
19
* of nsproxies pointing to it, not the number of tasks.
20
*
21
* The nsproxy is shared by tasks which share all namespaces.
22
* As soon as a single namespace is cloned or unshared, the
23
* nsproxy is copied.
24
*/
25
struct
nsproxy
{
26
atomic_t
count
;
27
struct
uts_namespace
*
uts_ns
;
28
struct
ipc_namespace
*
ipc_ns
;
29
struct
mnt_namespace
*
mnt_ns
;
30
struct
pid_namespace
*
pid_ns
;
31
struct
net
*
net_ns
;
32
};
33
extern
struct
nsproxy
init_nsproxy
;
34
35
/*
36
* the namespaces access rules are:
37
*
38
* 1. only current task is allowed to change tsk->nsproxy pointer or
39
* any pointer on the nsproxy itself
40
*
41
* 2. when accessing (i.e. reading) current task's namespaces - no
42
* precautions should be taken - just dereference the pointers
43
*
44
* 3. the access to other task namespaces is performed like this
45
* rcu_read_lock();
46
* nsproxy = task_nsproxy(tsk);
47
* if (nsproxy != NULL) {
48
* / *
49
* * work with the namespaces here
50
* * e.g. get the reference on one of them
51
* * /
52
* } / *
53
* * NULL task_nsproxy() means that this task is
54
* * almost dead (zombie)
55
* * /
56
* rcu_read_unlock();
57
*
58
*/
59
60
static
inline
struct
nsproxy
*task_nsproxy(
struct
task_struct
*tsk)
61
{
62
return
rcu_dereference
(tsk->
nsproxy
);
63
}
64
65
int
copy_namespaces
(
unsigned
long
flags
,
struct
task_struct
*tsk);
66
void
exit_task_namespaces
(
struct
task_struct
*tsk);
67
void
switch_task_namespaces
(
struct
task_struct
*tsk,
struct
nsproxy
*
new
);
68
void
free_nsproxy
(
struct
nsproxy
*
ns
);
69
int
unshare_nsproxy_namespaces
(
unsigned
long
,
struct
nsproxy
**,
70
struct
fs_struct
*);
71
int
__init
nsproxy_cache_init
(
void
);
72
73
static
inline
void
put_nsproxy(
struct
nsproxy
*
ns
)
74
{
75
if
(
atomic_dec_and_test
(&ns->
count
)) {
76
free_nsproxy
(ns);
77
}
78
}
79
80
static
inline
void
get_nsproxy(
struct
nsproxy
*ns)
81
{
82
atomic_inc
(&ns->
count
);
83
}
84
85
#endif
Generated on Thu Jan 10 2013 14:52:14 for Linux Kernel by
1.8.2