c2b3e74b78
In fput_light(), there's an unlikely(fput_needed), which running on my normal desktop doing firefox, xchat, evolution and part of my distcc farm, and running the annotate branch profiler shows that the unlikely is not very unlikely. correct incorrect % Function File Line ------- --------- - -------- ---- ---- 0 48 100 fput_light file.h 26 115828710 897415279 88 fput_light file.h 26 865271179 5286128445 85 fput_light file.h 26 19568539 8923664 31 fput_light file.h 26 12353677 3562279 22 fput_light file.h 26 267691 67062 20 fput_light file.h 26 15014853 348172 2 fput_light file.h 26 209258 205 0 fput_light file.h 26 1364164 0 0 fput_light file.h 26 Which gives 1032903812 times it was correct and 6203351846 times it was incorrect, or 85% incorrect. Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
42 lines
1.0 KiB
C
42 lines
1.0 KiB
C
/*
|
|
* Wrapper functions for accessing the file_struct fd array.
|
|
*/
|
|
|
|
#ifndef __LINUX_FILE_H
|
|
#define __LINUX_FILE_H
|
|
|
|
#include <linux/compiler.h>
|
|
#include <linux/types.h>
|
|
#include <linux/posix_types.h>
|
|
|
|
struct file;
|
|
|
|
extern void fput(struct file *);
|
|
extern void drop_file_write_access(struct file *file);
|
|
|
|
struct file_operations;
|
|
struct vfsmount;
|
|
struct dentry;
|
|
struct path;
|
|
extern struct file *alloc_file(struct path *, fmode_t mode,
|
|
const struct file_operations *fop);
|
|
|
|
static inline void fput_light(struct file *file, int fput_needed)
|
|
{
|
|
if (fput_needed)
|
|
fput(file);
|
|
}
|
|
|
|
extern struct file *fget(unsigned int fd);
|
|
extern struct file *fget_light(unsigned int fd, int *fput_needed);
|
|
extern void set_close_on_exec(unsigned int fd, int flag);
|
|
extern void put_filp(struct file *);
|
|
extern int alloc_fd(unsigned start, unsigned flags);
|
|
extern int get_unused_fd(void);
|
|
#define get_unused_fd_flags(flags) alloc_fd(0, (flags))
|
|
extern void put_unused_fd(unsigned int fd);
|
|
|
|
extern void fd_install(unsigned int fd, struct file *file);
|
|
|
|
#endif /* __LINUX_FILE_H */
|