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
proc_fs.h
Go to the documentation of this file.
1
#ifndef _LINUX_PROC_FS_H
2
#define _LINUX_PROC_FS_H
3
4
#include <linux/slab.h>
5
#include <linux/fs.h>
6
#include <
linux/spinlock.h
>
7
#include <linux/magic.h>
8
#include <
linux/atomic.h
>
9
10
struct
net
;
11
struct
completion
;
12
struct
mm_struct
;
13
14
/*
15
* The proc filesystem constants/structures
16
*/
17
18
/*
19
* Offset of the first process in the /proc root directory..
20
*/
21
#define FIRST_PROCESS_ENTRY 256
22
23
/* Worst case buffer size needed for holding an integer. */
24
#define PROC_NUMBUF 13
25
26
/*
27
* We always define these enumerators
28
*/
29
30
enum
{
31
PROC_ROOT_INO
= 1,
32
};
33
34
/*
35
* This is not completely implemented yet. The idea is to
36
* create an in-memory tree (like the actual /proc filesystem
37
* tree) of these proc_dir_entries, so that we can dynamically
38
* add new files to /proc.
39
*
40
* The "next" pointer creates a linked list of one /proc directory,
41
* while parent/subdir create the directory structure (every
42
* /proc file has a parent, but "subdir" is NULL for all
43
* non-directory entries).
44
*/
45
46
typedef
int
(
read_proc_t
)(
char
*
page
,
char
**
start
,
off_t
off,
47
int
count
,
int
*eof,
void
*
data
);
48
typedef
int
(
write_proc_t
)(
struct
file
*
file
,
const
char
__user
*
buffer
,
49
unsigned
long
count
,
void
*
data
);
50
51
struct
proc_dir_entry
{
52
unsigned
int
low_ino
;
53
umode_t
mode
;
54
nlink_t
nlink
;
55
kuid_t
uid
;
56
kgid_t
gid
;
57
loff_t
size
;
58
const
struct
inode_operations
*
proc_iops
;
59
/*
60
* NULL ->proc_fops means "PDE is going away RSN" or
61
* "PDE is just created". In either case, e.g. ->read_proc won't be
62
* called because it's too late or too early, respectively.
63
*
64
* If you're allocating ->proc_fops dynamically, save a pointer
65
* somewhere.
66
*/
67
const
struct
file_operations
*
proc_fops
;
68
struct
proc_dir_entry
*
next
, *
parent
, *
subdir
;
69
void
*
data
;
70
read_proc_t
*
read_proc
;
71
write_proc_t
*
write_proc
;
72
atomic_t
count
;
/* use count */
73
int
pde_users
;
/* number of callers into module in progress */
74
struct
completion
*
pde_unload_completion
;
75
struct
list_head
pde_openers
;
/* who did ->open, but not ->release */
76
spinlock_t
pde_unload_lock
;
/* proc_fops checks and pde_users bumps */
77
u8
namelen
;
78
char
name
[];
79
};
80
81
enum
kcore_type
{
82
KCORE_TEXT
,
83
KCORE_VMALLOC
,
84
KCORE_RAM
,
85
KCORE_VMEMMAP
,
86
KCORE_OTHER
,
87
};
88
89
struct
kcore_list
{
90
struct
list_head
list
;
91
unsigned
long
addr
;
92
size_t
size
;
93
int
type
;
94
};
95
96
struct
vmcore
{
97
struct
list_head
list
;
98
unsigned
long
long
paddr
;
99
unsigned
long
long
size
;
100
loff_t
offset
;
101
};
102
103
#ifdef CONFIG_PROC_FS
104
105
extern
void
proc_root_init
(
void
);
106
107
void
proc_flush_task
(
struct
task_struct
*
task
);
108
109
extern
struct
proc_dir_entry
*
create_proc_entry
(
const
char
*
name
,
umode_t
mode
,
110
struct
proc_dir_entry
*
parent
);
111
struct
proc_dir_entry
*
proc_create_data
(
const
char
*
name
,
umode_t
mode
,
112
struct
proc_dir_entry
*
parent
,
113
const
struct
file_operations
*
proc_fops
,
114
void
*
data
);
115
extern
void
remove_proc_entry
(
const
char
*
name
,
struct
proc_dir_entry
*
parent
);
116
117
struct
pid_namespace
;
118
119
extern
int
pid_ns_prepare_proc
(
struct
pid_namespace
*
ns
);
120
extern
void
pid_ns_release_proc
(
struct
pid_namespace
*
ns
);
121
122
/*
123
* proc_tty.c
124
*/
125
struct
tty_driver
;
126
extern
void
proc_tty_init
(
void
);
127
extern
void
proc_tty_register_driver
(
struct
tty_driver
*
driver
);
128
extern
void
proc_tty_unregister_driver
(
struct
tty_driver
*
driver
);
129
130
/*
131
* proc_devtree.c
132
*/
133
#ifdef CONFIG_PROC_DEVICETREE
134
struct
device_node
;
135
struct
property
;
136
extern
void
proc_device_tree_init
(
void
);
137
extern
void
proc_device_tree_add_node
(
struct
device_node
*,
struct
proc_dir_entry
*);
138
extern
void
proc_device_tree_add_prop
(
struct
proc_dir_entry
*pde,
struct
property
*prop);
139
extern
void
proc_device_tree_remove_prop
(
struct
proc_dir_entry
*pde,
140
struct
property
*prop);
141
extern
void
proc_device_tree_update_prop
(
struct
proc_dir_entry
*pde,
142
struct
property
*newprop,
143
struct
property
*oldprop);
144
#endif
/* CONFIG_PROC_DEVICETREE */
145
146
extern
struct
proc_dir_entry
*
proc_symlink
(
const
char
*,
147
struct
proc_dir_entry
*,
const
char
*);
148
extern
struct
proc_dir_entry
*
proc_mkdir
(
const
char
*,
struct
proc_dir_entry
*);
149
extern
struct
proc_dir_entry
*
proc_mkdir_mode
(
const
char
*
name
,
umode_t
mode
,
150
struct
proc_dir_entry
*
parent
);
151
152
static
inline
struct
proc_dir_entry
*proc_create(
const
char
*
name
,
umode_t
mode
,
153
struct
proc_dir_entry
*
parent
,
const
struct
file_operations
*
proc_fops
)
154
{
155
return
proc_create_data
(name, mode, parent, proc_fops,
NULL
);
156
}
157
158
static
inline
struct
proc_dir_entry
*create_proc_read_entry(
const
char
*
name
,
159
umode_t
mode
,
struct
proc_dir_entry
*base,
160
read_proc_t
*
read_proc
,
void
*
data
)
161
{
162
struct
proc_dir_entry
*
res
=
create_proc_entry
(name,mode,base);
163
if
(res) {
164
res->
read_proc
=
read_proc
;
165
res->
data
=
data
;
166
}
167
return
res
;
168
}
169
170
extern
struct
proc_dir_entry
*
proc_net_fops_create
(
struct
net
*
net
,
171
const
char
*name,
umode_t
mode,
const
struct
file_operations
*
fops
);
172
extern
void
proc_net_remove
(
struct
net
*
net
,
const
char
*name);
173
extern
struct
proc_dir_entry
*
proc_net_mkdir
(
struct
net
*
net
,
const
char
*name,
174
struct
proc_dir_entry
*
parent
);
175
176
extern
struct
file *
proc_ns_fget
(
int
fd
);
177
178
#else
179
180
#define proc_net_fops_create(net, name, mode, fops) ({ (void)(mode), NULL; })
181
static
inline
void
proc_net_remove
(
struct
net
*
net
,
const
char
*name) {}
182
183
static
inline
void
proc_flush_task
(
struct
task_struct
*
task
)
184
{
185
}
186
187
static
inline
struct
proc_dir_entry
*
create_proc_entry
(
const
char
*name,
188
umode_t
mode,
struct
proc_dir_entry
*
parent
) {
return
NULL
; }
189
static
inline
struct
proc_dir_entry
*proc_create(
const
char
*name,
190
umode_t
mode,
struct
proc_dir_entry
*
parent
,
191
const
struct
file_operations
*
proc_fops
)
192
{
193
return
NULL
;
194
}
195
static
inline
struct
proc_dir_entry
*
proc_create_data
(
const
char
*name,
196
umode_t
mode,
struct
proc_dir_entry
*
parent
,
197
const
struct
file_operations
*
proc_fops
,
void
*data)
198
{
199
return
NULL
;
200
}
201
#define remove_proc_entry(name, parent) do {} while (0)
202
203
static
inline
struct
proc_dir_entry
*
proc_symlink
(
const
char
*name,
204
struct
proc_dir_entry
*
parent
,
const
char
*
dest
) {
return
NULL
;}
205
static
inline
struct
proc_dir_entry
*
proc_mkdir
(
const
char
*name,
206
struct
proc_dir_entry
*
parent
) {
return
NULL
;}
207
static
inline
struct
proc_dir_entry
*
proc_mkdir_mode
(
const
char
*name,
208
umode_t
mode,
struct
proc_dir_entry
*
parent
) {
return
NULL
; }
209
210
static
inline
struct
proc_dir_entry
*create_proc_read_entry(
const
char
*name,
211
umode_t
mode,
struct
proc_dir_entry
*base,
212
read_proc_t
*read_proc,
void
* data) {
return
NULL
; }
213
214
struct
tty_driver
;
215
static
inline
void
proc_tty_register_driver
(
struct
tty_driver
*
driver
) {};
216
static
inline
void
proc_tty_unregister_driver
(
struct
tty_driver
*
driver
) {};
217
218
static
inline
int
pid_ns_prepare_proc
(
struct
pid_namespace
*
ns
)
219
{
220
return
0;
221
}
222
223
static
inline
void
pid_ns_release_proc
(
struct
pid_namespace
*
ns
)
224
{
225
}
226
227
static
inline
struct
file *
proc_ns_fget
(
int
fd
)
228
{
229
return
ERR_PTR(-
EINVAL
);
230
}
231
232
#endif
/* CONFIG_PROC_FS */
233
234
#if !defined(CONFIG_PROC_KCORE)
235
static
inline
void
236
kclist_add
(
struct
kcore_list
*
new
,
void
*
addr
,
size_t
size
,
int
type
)
237
{
238
}
239
#else
240
extern
void
kclist_add
(
struct
kcore_list
*,
void
*,
size_t
,
int
type
);
241
#endif
242
243
struct
nsproxy
;
244
struct
proc_ns_operations
{
245
const
char
*
name
;
246
int
type
;
247
void
*(*get)(
struct
task_struct
*
task
);
248
void
(*
put
)(
void
*
ns
);
249
int
(*
install
)(
struct
nsproxy
*
nsproxy
,
void
*
ns
);
250
};
251
extern
const
struct
proc_ns_operations
netns_operations
;
252
extern
const
struct
proc_ns_operations
utsns_operations
;
253
extern
const
struct
proc_ns_operations
ipcns_operations
;
254
255
union
proc_op
{
256
int
(*
proc_get_link
)(
struct
dentry
*,
struct
path
*);
257
int
(*
proc_read
)(
struct
task_struct
*
task
,
char
*
page
);
258
int
(*
proc_show
)(
struct
seq_file
*
m
,
259
struct
pid_namespace
*
ns
,
struct
pid
*
pid
,
260
struct
task_struct
*
task
);
261
};
262
263
struct
ctl_table_header
;
264
struct
ctl_table
;
265
266
struct
proc_inode
{
267
struct
pid
*
pid
;
268
int
fd
;
269
union
proc_op
op
;
270
struct
proc_dir_entry
*
pde
;
271
struct
ctl_table_header
*
sysctl
;
272
struct
ctl_table
*
sysctl_entry
;
273
void
*
ns
;
274
const
struct
proc_ns_operations
*
ns_ops
;
275
struct
inode
vfs_inode
;
276
};
277
278
static
inline
struct
proc_inode
*PROC_I(
const
struct
inode
*
inode
)
279
{
280
return
container_of
(inode,
struct
proc_inode
,
vfs_inode
);
281
}
282
283
static
inline
struct
proc_dir_entry
*PDE(
const
struct
inode
*
inode
)
284
{
285
return
PROC_I(inode)->pde;
286
}
287
288
static
inline
struct
net
*PDE_NET(
struct
proc_dir_entry
*pde)
289
{
290
return
pde->
parent
->data;
291
}
292
293
#endif
/* _LINUX_PROC_FS_H */
Generated on Thu Jan 10 2013 14:52:24 for Linux Kernel by
1.8.2