📄 fs.h
字号:
{ if (MANDATORY_LOCK(inode)) return locks_mandatory_locked(inode); return 0;}extern int rw_verify_area(int, struct file *, loff_t *, size_t);static inline int locks_verify_truncate(struct inode *inode, struct file *filp, loff_t size){ if (inode->i_flock && MANDATORY_LOCK(inode)) return locks_mandatory_area( FLOCK_VERIFY_WRITE, inode, filp, size < inode->i_size ? size : inode->i_size, (size < inode->i_size ? inode->i_size - size : size - inode->i_size) ); return 0;}static inline int break_lease(struct inode *inode, unsigned int mode){ if (inode->i_flock) return __break_lease(inode, mode); return 0;}/* fs/open.c */extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs, struct file *filp);extern long do_sys_open(int fdf, const char __user *filename, int flags, int mode);extern struct file *filp_open(const char *, int, int);extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);extern int filp_close(struct file *, fl_owner_t id);extern char * getname(const char __user *);/* fs/dcache.c */extern void __init vfs_caches_init_early(void);extern void __init vfs_caches_init(unsigned long);extern struct kmem_cache *names_cachep;#define __getname() kmem_cache_alloc(names_cachep, GFP_KERNEL)#define __putname(name) kmem_cache_free(names_cachep, (void *)(name))#ifndef CONFIG_AUDITSYSCALL#define putname(name) __putname(name)#elseextern void putname(const char *name);#endif#ifdef CONFIG_BLOCKextern int register_blkdev(unsigned int, const char *);extern int unregister_blkdev(unsigned int, const char *);extern struct block_device *bdget(dev_t);extern void bd_set_size(struct block_device *, loff_t size);extern void bd_forget(struct inode *inode);extern void bdput(struct block_device *);extern struct block_device *open_by_devnum(dev_t, unsigned);extern const struct address_space_operations def_blk_aops;#elsestatic inline void bd_forget(struct inode *inode) {}#endifextern const struct file_operations def_blk_fops;extern const struct file_operations def_chr_fops;extern const struct file_operations bad_sock_fops;extern const struct file_operations def_fifo_fops;#ifdef CONFIG_BLOCKextern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long);extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long);extern int blkdev_driver_ioctl(struct inode *inode, struct file *file, struct gendisk *disk, unsigned cmd, unsigned long arg);extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long);extern int blkdev_get(struct block_device *, mode_t, unsigned);extern int blkdev_put(struct block_device *);extern int bd_claim(struct block_device *, void *);extern void bd_release(struct block_device *);#ifdef CONFIG_SYSFSextern int bd_claim_by_disk(struct block_device *, void *, struct gendisk *);extern void bd_release_from_disk(struct block_device *, struct gendisk *);#else#define bd_claim_by_disk(bdev, holder, disk) bd_claim(bdev, holder)#define bd_release_from_disk(bdev, disk) bd_release(bdev)#endif#endif/* fs/char_dev.c */#define CHRDEV_MAJOR_HASH_SIZE 255extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);extern int register_chrdev_region(dev_t, unsigned, const char *);extern int register_chrdev(unsigned int, const char *, const struct file_operations *);extern int unregister_chrdev(unsigned int, const char *);extern void unregister_chrdev_region(dev_t, unsigned);extern int chrdev_open(struct inode *, struct file *);extern void chrdev_show(struct seq_file *,off_t);/* fs/block_dev.c */#define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */#ifdef CONFIG_BLOCK#define BLKDEV_MAJOR_HASH_SIZE 255extern const char *__bdevname(dev_t, char *buffer);extern const char *bdevname(struct block_device *bdev, char *buffer);extern struct block_device *lookup_bdev(const char *);extern struct block_device *open_bdev_excl(const char *, int, void *);extern void close_bdev_excl(struct block_device *);extern void blkdev_show(struct seq_file *,off_t);#else#define BLKDEV_MAJOR_HASH_SIZE 0#endifextern void init_special_inode(struct inode *, umode_t, dev_t);/* Invalid inode operations -- fs/bad_inode.c */extern void make_bad_inode(struct inode *);extern int is_bad_inode(struct inode *);extern const struct file_operations read_fifo_fops;extern const struct file_operations write_fifo_fops;extern const struct file_operations rdwr_fifo_fops;extern int fs_may_remount_ro(struct super_block *);#ifdef CONFIG_BLOCK/* * return READ, READA, or WRITE */#define bio_rw(bio) ((bio)->bi_rw & (RW_MASK | RWA_MASK))/* * return data direction, READ or WRITE */#define bio_data_dir(bio) ((bio)->bi_rw & 1)extern int check_disk_change(struct block_device *);extern int __invalidate_device(struct block_device *);extern int invalidate_partition(struct gendisk *, int);#endifextern int invalidate_inodes(struct super_block *);unsigned long invalidate_mapping_pages(struct address_space *mapping, pgoff_t start, pgoff_t end);unsigned long invalidate_inode_pages(struct address_space *mapping);static inline void invalidate_remote_inode(struct inode *inode){ if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) invalidate_inode_pages(inode->i_mapping);}extern int invalidate_inode_pages2(struct address_space *mapping);extern int invalidate_inode_pages2_range(struct address_space *mapping, pgoff_t start, pgoff_t end);extern int write_inode_now(struct inode *, int);extern int filemap_fdatawrite(struct address_space *);extern int filemap_flush(struct address_space *);extern int filemap_fdatawait(struct address_space *);extern int filemap_write_and_wait(struct address_space *mapping);extern int filemap_write_and_wait_range(struct address_space *mapping, loff_t lstart, loff_t lend);extern int wait_on_page_writeback_range(struct address_space *mapping, pgoff_t start, pgoff_t end);extern int __filemap_fdatawrite_range(struct address_space *mapping, loff_t start, loff_t end, int sync_mode);extern long do_fsync(struct file *file, int datasync);extern void sync_supers(void);extern void sync_filesystems(int wait);extern void __fsync_super(struct super_block *sb);extern void emergency_sync(void);extern void emergency_remount(void);extern int do_remount_sb(struct super_block *sb, int flags, void *data, int force);#ifdef CONFIG_BLOCKextern sector_t bmap(struct inode *, sector_t);#endifextern int notify_change(struct dentry *, struct iattr *);extern int permission(struct inode *, int, struct nameidata *);extern int generic_permission(struct inode *, int, int (*check_acl)(struct inode *, int));extern int get_write_access(struct inode *);extern int deny_write_access(struct file *);static inline void put_write_access(struct inode * inode){ atomic_dec(&inode->i_writecount);}static inline void allow_write_access(struct file *file){ if (file) atomic_inc(&file->f_path.dentry->d_inode->i_writecount);}extern int do_pipe(int *);extern struct file *create_read_pipe(struct file *f);extern struct file *create_write_pipe(void);extern void free_write_pipe(struct file *);extern int open_namei(int dfd, const char *, int, int, struct nameidata *);extern int may_open(struct nameidata *, int, int);extern int kernel_read(struct file *, unsigned long, char *, unsigned long);extern struct file * open_exec(const char *); /* fs/dcache.c -- generic fs support functions */extern int is_subdir(struct dentry *, struct dentry *);extern ino_t find_inode_number(struct dentry *, struct qstr *);#include <linux/err.h>/* needed for stackable file system support */extern loff_t default_llseek(struct file *file, loff_t offset, int origin);extern loff_t vfs_llseek(struct file *file, loff_t offset, int origin);extern void inode_init_once(struct inode *);extern void iput(struct inode *);extern struct inode * igrab(struct inode *);extern ino_t iunique(struct super_block *, ino_t);extern int inode_needs_sync(struct inode *inode);extern void generic_delete_inode(struct inode *inode);extern void generic_drop_inode(struct inode *inode);extern struct inode *ilookup5_nowait(struct super_block *sb, unsigned long hashval, int (*test)(struct inode *, void *), void *data);extern struct inode *ilookup5(struct super_block *sb, unsigned long hashval, int (*test)(struct inode *, void *), void *data);extern struct inode *ilookup(struct super_block *sb, unsigned long ino);extern struct inode * iget5_locked(struct super_block *, unsigned long, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *);extern struct inode * iget_locked(struct super_block *, unsigned long);extern void unlock_new_inode(struct inode *);static inline struct inode *iget(struct super_block *sb, unsigned long ino){ struct inode *inode = iget_locked(sb, ino); if (inode && (inode->i_state & I_NEW)) { sb->s_op->read_inode(inode); unlock_new_inode(inode); } return inode;}extern void __iget(struct inode * inode);extern void clear_inode(struct inode *);extern void destroy_inode(struct inode *);extern struct inode *new_inode(struct super_block *);extern int __remove_suid(struct dentry *, int);extern int should_remove_suid(struct dentry *);extern int remove_suid(struct dentry *);extern void remove_dquot_ref(struct super_block *, int, struct list_head *);extern void __insert_inode_hash(struct inode *, unsigned long hashval);extern void remove_inode_hash(struct inode *);static inline void insert_inode_hash(struct inode *inode) { __insert_inode_hash(inode, inode->i_ino);}extern struct file * get_empty_filp(void);extern void file_move(struct file *f, struct list_head *list);extern void file_kill(struct file *f);#ifdef CONFIG_BLOCKstruct bio;extern void submit_bio(int, struct bio *);extern int bdev_read_only(struct block_device *);#endifextern int set_blocksize(struct block_device *, int);extern int sb_set_blocksize(struct super_block *, int);extern int sb_min_blocksize(struct super_block *, int);extern int generic_file_mmap(struct file *, struct vm_area_struct *);extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *);extern int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size);extern int file_send_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size);int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk);extern ssize_t generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t);extern ssize_t generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, loff_t);extern ssize_t generic_file_aio_write_nolock(struct kiocb *, const struct iovec *, unsigned long, loff_t);extern ssize_t generic_file_direct_write(struct kiocb *, const struct iovec *, unsigned long *, loff_t, loff_t *, size_t, size_t);extern ssize_t generic_file_buffered_write(struct kiocb *, const struct iovec *, unsigned long, loff_t, loff_t *, size_t, ssize_t);extern ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos);extern ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos);extern ssize_t generic_file_sendfile(struct file *, loff_t *, size_t, read_actor_t, void *);extern void do_generic_mapping_read(struct address_space *mapping, struct file_ra_state *, struct file *, loff_t *, read_descriptor_t *, read_actor_t);/* fs/splice.c */extern ssize_t generic_file_splice_read(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);extern ssize_t generic_file_splice_write(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);extern ssize_t generic_file_splice_write_nolock(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe, struct file *out, loff_t *, size_t len, unsigned int flags);extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, size_t len, unsigned int flags);extern voidfile_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);extern loff_t no_llseek(struct file *file, loff_t offset, int origin);extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin);extern loff_t remote_llseek(struct file *file, loff_t offset, int origin);extern int generic_file_open(struct inode * inode, struct file * filp);extern int nonseekable_open(struct inode * inode, struct file * filp);#ifdef CONFIG_FS_XIPextern ssize_t xip_file_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos);extern ssize_t xip_file_sendfile(struct file *in_file, loff_t *ppos, size_t count, read_actor_t actor, void *target);extern int xip_file_mmap(struct file * file, struct vm_area_struct * vma);extern ssize_t xip_file_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos);extern int xip_truncate_page(struct address_space *mapping, loff_t from);#elsestatic inline int xip_truncate_page(struct address_space *mapping, loff_t from){ return 0;}#endifstatic inline void do_generic_file_read(struct file * filp, loff_t *ppos, read_descriptor_t * desc, read_actor_t actor){ do_generic_mapping_read(filp->f_mapping, &filp->f_ra, filp, ppos, desc, actor);}#ifdef CONFIG_BLOCKssize_t __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, struct block_device *bdev, const struct iovec *iov, loff_t offset, unsigned long nr_segs, get_block_t get_block, dio_iodone_t end_io, int lock_type);enum { DIO_LOCKING = 1, /* need locking between buffered and direct access */ DIO_NO_LOCKING, /* bdev; no locking at all between buffered/direct */ DIO_OWN_LOCKING, /* filesystem locks buffered and direct internally */};static inline ssize_t blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, struct block_device *bdev, const st
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -