cregit-Linux how code gets into the kernel

Release 4.7 include/linux/fdtable.h

Directory: include/linux
/*
 * descriptor table internals; you almost certainly want file.h instead.
 */

#ifndef __LINUX_FDTABLE_H

#define __LINUX_FDTABLE_H

#include <linux/posix_types.h>
#include <linux/compiler.h>
#include <linux/spinlock.h>
#include <linux/rcupdate.h>
#include <linux/types.h>
#include <linux/init.h>
#include <linux/fs.h>

#include <linux/atomic.h>

/*
 * 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;
	
struct file __rcu **fd;      /* current fd array */
	
unsigned long *close_on_exec;
	
unsigned long *open_fds;
	
unsigned long *full_fds_bits;
	
struct rcu_head rcu;
};


static inline bool close_on_exec(int fd, const struct fdtable *fdt) { return test_bit(fd, fdt->close_on_exec); }

Contributors

PersonTokensPropCommitsCommitProp
david howellsdavid howells26100.00%2100.00%
Total26100.00%2100.00%


static inline bool fd_is_open(int fd, const struct fdtable *fdt) { return test_bit(fd, fdt->open_fds); }

Contributors

PersonTokensPropCommitsCommitProp
david howellsdavid howells26100.00%2100.00%
Total26100.00%2100.00%

/* * Open file table structure */ struct files_struct { /* * read mostly part */ atomic_t count; bool resize_in_progress; wait_queue_head_t resize_wait; struct fdtable __rcu *fdt; struct fdtable fdtab; /* * written part on a separate cache line in SMP */ spinlock_t file_lock ____cacheline_aligned_in_smp; int next_fd; unsigned long close_on_exec_init[1]; unsigned long open_fds_init[1]; unsigned long full_fds_bits_init[1]; struct file __rcu * fd_array[NR_OPEN_DEFAULT]; }; struct file_operations; struct vfsmount; struct dentry; #define rcu_dereference_check_fdtable(files, fdtfd) \ rcu_dereference_check((fdtfd), lockdep_is_held(&(files)->file_lock)) #define files_fdtable(files) \ rcu_dereference_check_fdtable((files), (files)->fdt) /* * The caller must ensure that fd table isn't shared or hold rcu or file lock */
static inline struct file *__fcheck_files(struct files_struct *files, unsigned int fd) { struct fdtable *fdt = rcu_dereference_raw(files->fdt); if (fd < fdt->max_fds) return rcu_dereference_raw(fdt->fd[fd]); return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
al viroal viro4280.77%150.00%
oleg nesterovoleg nesterov1019.23%150.00%
Total52100.00%2100.00%


static inline struct file *fcheck_files(struct files_struct *files, unsigned int fd) { RCU_LOCKDEP_WARN(!rcu_read_lock_held() && !lockdep_is_held(&files->file_lock), "suspicious rcu_dereference_check() usage"); return __fcheck_files(files, fd); }

Contributors

PersonTokensPropCommitsCommitProp
oleg nesterovoleg nesterov3784.09%133.33%
paul e. mckenneypaul e. mckenney49.09%133.33%
al viroal viro36.82%133.33%
Total44100.00%3100.00%

/* * Check whether the specified fd has an open file. */ #define fcheck(fd) fcheck_files(current->files, fd) struct task_struct; struct files_struct *get_files_struct(struct task_struct *); void put_files_struct(struct files_struct *fs); void reset_files_struct(struct files_struct *); int unshare_files(struct files_struct **); struct files_struct *dup_fd(struct files_struct *, int *); void do_close_on_exec(struct files_struct *); int iterate_fd(struct files_struct *, unsigned, int (*)(const void *, struct file *, unsigned), const void *); extern int __alloc_fd(struct files_struct *files, unsigned start, unsigned end, unsigned flags); extern void __fd_install(struct files_struct *files, unsigned int fd, struct file *file); extern int __close_fd(struct files_struct *files, unsigned int fd); extern struct kmem_cache *files_cachep; #endif /* __LINUX_FDTABLE_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
al viroal viro30564.76%741.18%
david howellsdavid howells6614.01%211.76%
oleg nesterovoleg nesterov6614.01%15.88%
linus torvaldslinus torvalds122.55%15.88%
paul e. mckenneypaul e. mckenney71.49%211.76%
eric dumazeteric dumazet61.27%15.88%
ingo molnaringo molnar51.06%15.88%
arnd bergmannarnd bergmann30.64%15.88%
arun sharmaarun sharma10.21%15.88%
Total471100.00%17100.00%
Directory: include/linux
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}