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