OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [linux/] [nsproxy.h] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
#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
 
12
/*
13
 * A structure to contain pointers to all per-process
14
 * namespaces - fs (mount), uts, network, sysvipc, etc.
15
 *
16
 * 'count' is the number of tasks holding a reference.
17
 * The count for each namespace, then, will be the number
18
 * of nsproxies pointing to it, not the number of tasks.
19
 *
20
 * The nsproxy is shared by tasks which share all namespaces.
21
 * As soon as a single namespace is cloned or unshared, the
22
 * nsproxy is copied.
23
 */
24
struct nsproxy {
25
        atomic_t count;
26
        struct uts_namespace *uts_ns;
27
        struct ipc_namespace *ipc_ns;
28
        struct mnt_namespace *mnt_ns;
29
        struct pid_namespace *pid_ns;
30
        struct user_namespace *user_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
 
72
static inline void put_nsproxy(struct nsproxy *ns)
73
{
74
        if (atomic_dec_and_test(&ns->count)) {
75
                free_nsproxy(ns);
76
        }
77
}
78
 
79
static inline void get_nsproxy(struct nsproxy *ns)
80
{
81
        atomic_inc(&ns->count);
82
}
83
 
84
#ifdef CONFIG_CGROUP_NS
85
int ns_cgroup_clone(struct task_struct *tsk);
86
#else
87
static inline int ns_cgroup_clone(struct task_struct *tsk) { return 0; }
88
#endif
89
 
90
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.