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 [ # # + + ]: 551983 : if (fput_needed)
[ # # - + ]
[ - + ][ - + ]
[ - ][ + + ]
[ - + ]
[ # # - ]
[ - + ][ + + ]
[ + + ][ - + ]
[ - + ]
26 : 1867 : fput(file);
27 : : }
28 : :
29 : : struct fd {
30 : : struct file *file;
31 : : unsigned int flags;
32 : : };
33 : : #define FDPUT_FPUT 1
34 : : #define FDPUT_POS_UNLOCK 2
35 : :
36 : : static inline void fdput(struct fd fd)
37 : : {
38 [ + + ][ + + ]: 38578351 : if (fd.flags & FDPUT_FPUT)
[ + + + + ]
[ - + ][ + + ]
[ - + ][ + + ]
[ + + ][ - + ]
[ - + ][ - + ]
[ - + ][ + + ]
[ + + ][ + + ]
[ + + ][ + + ]
[ + + ][ - + ]
[ + + ]
39 : 13148270 : fput(fd.file);
40 : : }
41 : :
42 : : extern struct file *fget(unsigned int fd);
43 : : extern struct file *fget_raw(unsigned int fd);
44 : : extern unsigned long __fdget(unsigned int fd);
45 : : extern unsigned long __fdget_raw(unsigned int fd);
46 : : extern unsigned long __fdget_pos(unsigned int fd);
47 : :
48 : : static inline struct fd __to_fd(unsigned long v)
49 : : {
50 : 28207095 : return (struct fd){(struct file *)(v & ~3),v & 3};
51 : : }
52 : :
53 : : static inline struct fd fdget(unsigned int fd)
54 : : {
55 : 1712709 : return __to_fd(__fdget(fd));
56 : : }
57 : :
58 : : static inline struct fd fdget_raw(unsigned int fd)
59 : : {
60 : 7232646 : return __to_fd(__fdget_raw(fd));
61 : : }
62 : :
63 : : extern int f_dupfd(unsigned int from, struct file *file, unsigned flags);
64 : : extern int replace_fd(unsigned fd, struct file *file, unsigned flags);
65 : : extern void set_close_on_exec(unsigned int fd, int flag);
66 : : extern bool get_close_on_exec(unsigned int fd);
67 : : extern void put_filp(struct file *);
68 : : extern int get_unused_fd_flags(unsigned flags);
69 : : #define get_unused_fd() get_unused_fd_flags(0)
70 : : extern void put_unused_fd(unsigned int fd);
71 : :
72 : : extern void fd_install(unsigned int fd, struct file *file);
73 : :
74 : : extern void flush_delayed_fput(void);
75 : : extern void __fput_sync(struct file *);
76 : :
77 : : #endif /* __LINUX_FILE_H */
|