Branch data Line data Source code
1 : : /*
2 : : * Wrapper functions for accessing the file_struct fd array.
3 : : */
4 : :
5 : : #ifndef __LINUX_FILE_H
6 : : #define __LINUX_FILE_H
7 : :
8 : : #include <linux/compiler.h>
9 : : #include <linux/types.h>
10 : : #include <linux/posix_types.h>
11 : :
12 : : struct file;
13 : :
14 : : extern void fput(struct file *);
15 : :
16 : : struct file_operations;
17 : : struct vfsmount;
18 : : struct dentry;
19 : : struct path;
20 : : extern struct file *alloc_file(struct path *, fmode_t mode,
21 : : const struct file_operations *fop);
22 : :
23 : : static inline void fput_light(struct file *file, int fput_needed)
24 : : {
25 [ # # + + ]: 520262 : if (fput_needed)
[ - + - + ]
[ - + ][ - + ]
[ - ][ + + ]
[ - + ]
[ # # - ]
[ - + ][ + + ]
[ + + ][ - + ]
[ - + ][ + + ]
26 : 2004 : fput(file);
27 : : }
28 : :
29 : : struct fd {
30 : : struct file *file;
31 : : int need_put;
32 : : };
33 : :
34 : : static inline void fdput(struct fd fd)
35 : : {
36 [ + + ][ + + ]: 28049295 : if (fd.need_put)
[ + + + + ]
[ - + ][ + + ]
[ - + ][ + + ]
[ - + ][ - + ]
[ - + ][ - + ]
[ - + ][ + + ]
[ + + ][ + ]
[ + ][ + + ]
[ + + ][ - + ]
[ + + ]
37 : 1250439 : fput(fd.file);
38 : : }
39 : :
40 : : extern struct file *fget(unsigned int fd);
41 : : extern struct file *fget_light(unsigned int fd, int *fput_needed);
42 : :
43 : : static inline struct fd fdget(unsigned int fd)
44 : : {
45 : : int b;
46 : 21238449 : struct file *f = fget_light(fd, &b);
47 : 21251671 : return (struct fd){f,b};
48 : : }
49 : :
50 : : extern struct file *fget_raw(unsigned int fd);
51 : : extern struct file *fget_raw_light(unsigned int fd, int *fput_needed);
52 : :
53 : : static inline struct fd fdget_raw(unsigned int fd)
54 : : {
55 : : int b;
56 : 7291692 : struct file *f = fget_raw_light(fd, &b);
57 : 7291439 : return (struct fd){f,b};
58 : : }
59 : :
60 : : extern int f_dupfd(unsigned int from, struct file *file, unsigned flags);
61 : : extern int replace_fd(unsigned fd, struct file *file, unsigned flags);
62 : : extern void set_close_on_exec(unsigned int fd, int flag);
63 : : extern bool get_close_on_exec(unsigned int fd);
64 : : extern void put_filp(struct file *);
65 : : extern int get_unused_fd_flags(unsigned flags);
66 : : #define get_unused_fd() get_unused_fd_flags(0)
67 : : extern void put_unused_fd(unsigned int fd);
68 : :
69 : : extern void fd_install(unsigned int fd, struct file *file);
70 : :
71 : : extern void flush_delayed_fput(void);
72 : : extern void __fput_sync(struct file *);
73 : :
74 : : #endif /* __LINUX_FILE_H */
|