X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=include%2Flinux%2Ffile.h;h=335a0a5c316e4b8fa66864af63059fa59c3ad506;hb=b962716b459505a8d83aea313fea0abe76749f42;hp=db372230848ed54aacc7841bd4ce289e464c9686;hpb=badf16621c1f9d1ac753be056fce11b43d6e0be5;p=safe%2Fjmp%2Flinux-2.6 diff --git a/include/linux/file.h b/include/linux/file.h index db37223..335a0a5 100644 --- a/include/linux/file.h +++ b/include/linux/file.h @@ -5,42 +5,24 @@ #ifndef __LINUX_FILE_H #define __LINUX_FILE_H -#include -#include #include -#include - -/* - * The default fd array needs to be at least BITS_PER_LONG, - * as this is the granularity returned by copy_fdset(). - */ -#define NR_OPEN_DEFAULT BITS_PER_LONG - -struct fdtable { - unsigned int max_fds; - int max_fdset; - int next_fd; - struct file ** fd; /* current fd array */ - fd_set *close_on_exec; - fd_set *open_fds; -}; +#include +#include -/* - * Open file table structure - */ -struct files_struct { - atomic_t count; - spinlock_t file_lock; /* Protects all the below members. Nests inside tsk->alloc_lock */ - struct fdtable fdtab; - fd_set close_on_exec_init; - fd_set open_fds_init; - struct file * fd_array[NR_OPEN_DEFAULT]; -}; +struct file; -#define files_fdtable(files) (&(files)->fdtab) +extern void __fput(struct file *); +extern void fput(struct file *); +extern void drop_file_write_access(struct file *file); -extern void FASTCALL(__fput(struct file *)); -extern void FASTCALL(fput(struct file *)); +struct file_operations; +struct vfsmount; +struct dentry; +extern int init_file(struct file *, struct vfsmount *mnt, + struct dentry *dentry, fmode_t mode, + const struct file_operations *fop); +extern struct file *alloc_file(struct vfsmount *, struct dentry *dentry, + fmode_t mode, const struct file_operations *fop); static inline void fput_light(struct file *file, int fput_needed) { @@ -48,44 +30,15 @@ static inline void fput_light(struct file *file, int fput_needed) fput(file); } -extern struct file * FASTCALL(fget(unsigned int fd)); -extern struct file * FASTCALL(fget_light(unsigned int fd, int *fput_needed)); -extern void FASTCALL(set_close_on_exec(unsigned int fd, int flag)); +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); -extern void FASTCALL(put_unused_fd(unsigned int fd)); -struct kmem_cache_s; -extern void filp_ctor(void * objp, struct kmem_cache_s *cachep, unsigned long cflags); -extern void filp_dtor(void * objp, struct kmem_cache_s *cachep, unsigned long dflags); - -extern struct file ** alloc_fd_array(int); -extern void free_fd_array(struct file **, int); - -extern fd_set *alloc_fdset(int); -extern void free_fdset(fd_set *, int); - -extern int expand_files(struct files_struct *, int nr); - -static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd) -{ - struct file * file = NULL; - struct fdtable *fdt = files_fdtable(files); - - if (fd < fdt->max_fds) - file = fdt->fd[fd]; - return file; -} - -/* - * Check whether the specified fd has an open file. - */ -#define fcheck(fd) fcheck_files(current->files, fd) - -extern void FASTCALL(fd_install(unsigned int fd, struct file * file)); - -struct task_struct; +#define get_unused_fd_flags(flags) alloc_fd(0, (flags)) +extern void put_unused_fd(unsigned int fd); -struct files_struct *get_files_struct(struct task_struct *); -void FASTCALL(put_files_struct(struct files_struct *fs)); +extern void fd_install(unsigned int fd, struct file *file); #endif /* __LINUX_FILE_H */