fs.h
来自「GNU Hurd 源代码」· C头文件 代码 · 共 911 行 · 第 1/2 页
H
911 行
struct wait_queue *fl_wait; struct file *fl_file; unsigned char fl_flags; unsigned char fl_type; off_t fl_start; off_t fl_end; void (*fl_notify)(struct file_lock *); /* unblock callback */ union { struct nfs_lock_info nfs_fl; } fl_u;};extern struct file_lock *file_lock_table;#include <linux/fcntl.h>extern int fcntl_getlk(unsigned int fd, struct flock *l);extern int fcntl_setlk(unsigned int fd, unsigned int cmd, struct flock *l);/* fs/locks.c */extern void locks_remove_posix(struct file *, fl_owner_t id);extern void locks_remove_flock(struct file *);extern struct file_lock *posix_test_lock(struct file *, struct file_lock *);extern int posix_lock_file(struct file *, struct file_lock *, unsigned int);extern void posix_block_lock(struct file_lock *, struct file_lock *);extern void posix_unblock_lock(struct file_lock *);struct fasync_struct { int magic; int fa_fd; struct fasync_struct *fa_next; /* singly linked list */ struct file *fa_file;};#define FASYNC_MAGIC 0x4601extern int fasync_helper(int, struct file *, int, struct fasync_struct **);#include <linux/minix_fs_sb.h>#include <linux/ext2_fs_sb.h>#include <linux/hpfs_fs_sb.h>#include <linux/ntfs_fs_sb.h>#include <linux/msdos_fs_sb.h>#include <linux/iso_fs_sb.h>#include <linux/nfs_fs_sb.h>#include <linux/sysv_fs_sb.h>#include <linux/affs_fs_sb.h>#include <linux/ufs_fs_sb.h>#include <linux/efs_fs_sb.h>#include <linux/romfs_fs_sb.h>#include <linux/smb_fs_sb.h>#include <linux/hfs_fs_sb.h>#include <linux/adfs_fs_sb.h>#include <linux/qnx4_fs_sb.h>extern struct list_head super_blocks;#define sb_entry(list) list_entry((list), struct super_block, s_list)struct super_block { struct list_head s_list; /* Keep this first */ kdev_t s_dev; unsigned long s_blocksize; unsigned char s_blocksize_bits; unsigned char s_lock; unsigned char s_rd_only; unsigned char s_dirt; struct file_system_type *s_type; struct super_operations *s_op; struct dquot_operations *dq_op; unsigned long s_flags; unsigned long s_magic; unsigned long s_time; struct dentry *s_root; struct wait_queue *s_wait; struct inode *s_ibasket; short int s_ibasket_count; short int s_ibasket_max; struct list_head s_dirty; /* dirty inodes */ union { struct minix_sb_info minix_sb; struct ext2_sb_info ext2_sb; struct hpfs_sb_info hpfs_sb; struct ntfs_sb_info ntfs_sb; struct msdos_sb_info msdos_sb; struct isofs_sb_info isofs_sb; struct nfs_sb_info nfs_sb; struct sysv_sb_info sysv_sb; struct affs_sb_info affs_sb; struct ufs_sb_info ufs_sb; struct efs_sb_info efs_sb; struct romfs_sb_info romfs_sb; struct smb_sb_info smbfs_sb; struct hfs_sb_info hfs_sb; struct adfs_sb_info adfs_sb; struct qnx4_sb_info qnx4_sb; void *generic_sbp; } u; /* * The next field is for VFS *only*. No filesystems have any business * even looking at it. You had been warned. */ struct semaphore s_vfs_rename_sem; /* Kludge */};/* * VFS helper functions.. */extern int vfs_rmdir(struct inode *, struct dentry *);extern int vfs_unlink(struct inode *, struct dentry *);extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);/* * This is the "filldir" function type, used by readdir() to let * the kernel specify what kind of dirent layout it wants to have. * This allows the kernel to read directories into kernel space or * to have different dirent layouts depending on the binary type. */typedef int (*filldir_t)(void *, const char *, int, off_t, ino_t); struct file_operations { loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*write) (struct file *, const char *, size_t, loff_t *); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll) (struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *); int (*release) (struct inode *, struct file *); int (*fsync) (struct file *, struct dentry *); int (*fasync) (int, struct file *, int); int (*check_media_change) (kdev_t dev); int (*revalidate) (kdev_t dev); int (*lock) (struct file *, int, struct file_lock *);};struct inode_operations { struct file_operations * default_file_ops; int (*create) (struct inode *,struct dentry *,int); struct dentry * (*lookup) (struct inode *,struct dentry *); int (*link) (struct dentry *,struct inode *,struct dentry *); int (*unlink) (struct inode *,struct dentry *); int (*symlink) (struct inode *,struct dentry *,const char *); int (*mkdir) (struct inode *,struct dentry *,int); int (*rmdir) (struct inode *,struct dentry *); int (*mknod) (struct inode *,struct dentry *,int,int); int (*rename) (struct inode *, struct dentry *, struct inode *, struct dentry *); int (*readlink) (struct dentry *, char *,int); struct dentry * (*follow_link) (struct dentry *, struct dentry *, unsigned int); int (*readpage) (struct file *, struct page *); int (*writepage) (struct file *, struct page *); int (*bmap) (struct inode *,int); void (*truncate) (struct inode *); int (*permission) (struct inode *, int); int (*smap) (struct inode *,int); int (*updatepage) (struct file *, struct page *, unsigned long, unsigned int, int); int (*revalidate) (struct dentry *);};struct super_operations { void (*read_inode) (struct inode *); void (*write_inode) (struct inode *); void (*put_inode) (struct inode *); void (*delete_inode) (struct inode *); int (*notify_change) (struct dentry *, struct iattr *); void (*put_super) (struct super_block *); void (*write_super) (struct super_block *); int (*statfs) (struct super_block *, struct statfs *, int); int (*remount_fs) (struct super_block *, int *, char *); void (*clear_inode) (struct inode *); void (*umount_begin) (struct super_block *);};struct dquot_operations { void (*initialize) (struct inode *, short); void (*drop) (struct inode *); int (*alloc_block) (const struct inode *, unsigned long, uid_t, char); int (*alloc_inode) (const struct inode *, unsigned long, uid_t); void (*free_block) (const struct inode *, unsigned long); void (*free_inode) (const struct inode *, unsigned long); int (*transfer) (struct dentry *, struct iattr *, uid_t);};struct file_system_type { const char *name; int fs_flags; struct super_block *(*read_super) (struct super_block *, void *, int); struct file_system_type * next;};extern int register_filesystem(struct file_system_type *);extern int unregister_filesystem(struct file_system_type *);/* Return value for VFS lock functions - tells locks.c to lock conventionally * REALLY kosha for root NFS and nfs_lock */ #define LOCK_USE_CLNT 1#define FLOCK_VERIFY_READ 1#define FLOCK_VERIFY_WRITE 2extern int locks_mandatory_locked(struct inode *inode);extern int locks_mandatory_area(int read_write, struct inode *inode, struct file *filp, loff_t offset, size_t count);extern inline int locks_verify_locked(struct inode *inode){ /* Candidates for mandatory locking have the setgid bit set * but no group execute bit - an otherwise meaningless combination. */ if (IS_MANDLOCK(inode) && (inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID) return (locks_mandatory_locked(inode)); return (0);}extern inline int locks_verify_area(int read_write, struct inode *inode, struct file *filp, loff_t offset, size_t count){ /* Candidates for mandatory locking have the setgid bit set * but no group execute bit - an otherwise meaningless combination. */ if (IS_MANDLOCK(inode) && (inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID) return (locks_mandatory_area(read_write, inode, filp, offset, count)); return (0);}/* fs/open.c */asmlinkage int sys_open(const char *, int, int);asmlinkage int sys_close(unsigned int); /* yes, it's really unsigned */extern int do_truncate(struct dentry *, unsigned long);extern int get_unused_fd(void);extern void put_unused_fd(unsigned int);extern struct file *filp_open(const char *, int, int);extern int filp_close(struct file *, fl_owner_t id);extern char * getname(const char * filename);#define __getname() ((char *) __get_free_page(GFP_KERNEL))#define putname(name) free_page((unsigned long)(name))extern void kill_fasync(struct fasync_struct *fa, int sig);extern int register_blkdev(unsigned int, const char *, struct file_operations *);extern int unregister_blkdev(unsigned int major, const char * name);extern int blkdev_open(struct inode * inode, struct file * filp);extern int blkdev_release (struct inode * inode);extern struct file_operations def_blk_fops;extern struct inode_operations blkdev_inode_operations;/* fs/devices.c */extern int register_chrdev(unsigned int, const char *, struct file_operations *);extern int unregister_chrdev(unsigned int major, const char * name);extern int chrdev_open(struct inode * inode, struct file * filp);extern struct file_operations def_chr_fops;extern struct inode_operations chrdev_inode_operations;extern char * bdevname(kdev_t dev);extern char * cdevname(kdev_t dev);extern char * kdevname(kdev_t dev);extern void init_fifo(struct inode * inode);extern struct inode_operations fifo_inode_operations;/* Invalid inode operations -- fs/bad_inode.c */extern void make_bad_inode(struct inode * inode);extern int is_bad_inode(struct inode * inode);extern struct file_operations connecting_fifo_fops;extern struct file_operations read_fifo_fops;extern struct file_operations write_fifo_fops;extern struct file_operations rdwr_fifo_fops;extern struct file_operations read_pipe_fops;extern struct file_operations write_pipe_fops;extern struct file_operations rdwr_pipe_fops;extern struct file_system_type *get_fs_type(const char *name);extern int fs_may_remount_ro(struct super_block *);extern int fs_may_mount(kdev_t dev);extern struct file *inuse_filps;extern void refile_buffer(struct buffer_head * buf);extern void set_writetime(struct buffer_head * buf, int flag);extern int try_to_free_buffers(struct page *);extern int nr_buffers;extern long buffermem;extern int nr_buffer_heads;#define BUF_CLEAN 0#define BUF_LOCKED 1 /* Buffers scheduled for write */#define BUF_DIRTY 2 /* Dirty buffers, not yet scheduled for write */#define NR_LIST 3void mark_buffer_uptodate(struct buffer_head * bh, int on);extern inline void mark_buffer_clean(struct buffer_head * bh){ if (test_and_clear_bit(BH_Dirty, &bh->b_state)) { if (bh->b_list == BUF_DIRTY) refile_buffer(bh); }}extern inline void mark_buffer_dirty(struct buffer_head * bh, int flag){ if (!test_and_set_bit(BH_Dirty, &bh->b_state)) { set_writetime(bh, flag); if (bh->b_list != BUF_DIRTY) refile_buffer(bh); }}extern int check_disk_change(kdev_t dev);extern int invalidate_inodes(struct super_block * sb);extern void invalidate_inode_pages(struct inode *);#define invalidate_buffers(dev) __invalidate_buffers((dev), 0)#define destroy_buffers(dev) __invalidate_buffers((dev), 1)extern void __invalidate_buffers(kdev_t dev, int);extern int floppy_is_wp(int minor);extern void sync_inodes(kdev_t dev);extern void write_inode_now(struct inode *inode);extern void sync_dev(kdev_t dev);extern int fsync_dev(kdev_t dev);extern void sync_supers(kdev_t dev);extern int bmap(struct inode * inode,int block);extern int notify_change(struct dentry *, struct iattr *);extern int permission(struct inode * inode,int mask);extern int get_write_access(struct inode *inode);extern void put_write_access(struct inode *inode);extern struct dentry * open_namei(const char * pathname, int flag, int mode);extern struct dentry * do_mknod(const char * filename, int mode, dev_t dev);extern int do_pipe(int *);/* 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 *);/* * Kernel pointers have redundant information, so we can use a * scheme where we can return either an error code or a dentry * pointer with the same return value. * * This should be a per-architecture thing, to allow different * error and pointer decisions. */#define ERR_PTR(err) ((void *)((long)(err)))#define PTR_ERR(ptr) ((long)(ptr))#define IS_ERR(ptr) ((unsigned long)(ptr) > (unsigned long)(-1000))/* * The bitmask for a lookup event: * - follow links at the end * - require a directory * - ending slashes ok even for nonexistent files * - internal "there are more path compnents" flag */#define LOOKUP_FOLLOW (1)#define LOOKUP_DIRECTORY (2)#define LOOKUP_SLASHOK (4)#define LOOKUP_CONTINUE (8)extern struct dentry * lookup_dentry(const char *, struct dentry *, unsigned int);extern struct dentry * __namei(const char *, unsigned int);#define namei(pathname) __namei(pathname, 1)#define lnamei(pathname) __namei(pathname, 0)extern void iput(struct inode *);extern struct inode * igrab(struct inode *inode);extern ino_t iunique(struct super_block *, ino_t);extern struct inode * iget(struct super_block *, unsigned long);extern struct inode * iget_in_use (struct super_block *, unsigned long);extern void clear_inode(struct inode *);extern struct inode * get_empty_inode(void);extern void insert_inode_hash(struct inode *);extern void remove_inode_hash(struct inode *);extern struct file * get_empty_filp(void);extern struct buffer_head * get_hash_table(kdev_t, int, int);extern struct buffer_head * getblk(kdev_t, int, int);extern struct buffer_head * find_buffer(kdev_t dev, int block, int size);extern void ll_rw_block(int, int, struct buffer_head * bh[]);extern int is_read_only(kdev_t);extern void __brelse(struct buffer_head *);extern inline void brelse(struct buffer_head *buf){ if (buf) __brelse(buf);}extern void __bforget(struct buffer_head *buf);extern inline void bforget(struct buffer_head *buf){ if (buf) __bforget(buf);}extern void set_blocksize(kdev_t dev, int size);extern unsigned int get_hardblocksize(kdev_t dev);extern struct buffer_head * bread(kdev_t dev, int block, int size);extern struct buffer_head * breada(kdev_t dev,int block, int size, unsigned int pos, unsigned int filesize);extern int brw_page(int, struct page *, kdev_t, int [], int, int);extern int generic_readpage(struct file *, struct page *);extern int generic_file_mmap(struct file *, struct vm_area_struct *);extern ssize_t generic_file_read(struct file *, char *, size_t, loff_t *);extern ssize_t generic_file_write(struct file *, const char*, size_t, loff_t*);extern struct super_block *get_super(kdev_t dev);extern void put_super(kdev_t dev);unsigned long generate_cluster(kdev_t dev, int b[], int size);unsigned long generate_cluster_swab32(kdev_t dev, int b[], int size);extern kdev_t ROOT_DEV;extern void show_buffers(void);extern void mount_root(void);#ifdef CONFIG_BLK_DEV_INITRDextern kdev_t real_root_dev;extern int change_root(kdev_t new_root_dev,const char *put_old);#endifextern ssize_t char_read(struct file *, char *, size_t, loff_t *);extern ssize_t block_read(struct file *, char *, size_t, loff_t *);extern int read_ahead[];extern ssize_t char_write(struct file *, const char *, size_t, loff_t *);extern ssize_t block_write(struct file *, const char *, size_t, loff_t *);extern int block_fsync(struct file *, struct dentry *dir);extern int file_fsync(struct file *, struct dentry *dir);extern int inode_change_ok(struct inode *, struct iattr *);extern void inode_setattr(struct inode *, struct iattr *);extern __u32 inode_generation_count;#endif /* __KERNEL__ */#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?