📄 sysv_fs.h
字号:
coh_ulong s_tfree __packed2__; /* total number of free zones */ u16 s_tinode; /* total number of free inodes */ u16 s_interleave_m; /* interleave factor */ u16 s_interleave_n; char s_fname[6]; /* file system volume name */ char s_fpack[6]; /* file system pack name */ u32 s_unique; /* zero, not used */};/* Coherent free list block on disk */struct coh_freelist_chunk { u16 fl_nfree; /* number of free blocks in fl_free, <= COH_NICFREE] */ u32 fl_free[COH_NICFREE] __packed2__;};/* SystemV/Coherent inode data on disk */struct sysv_inode { u16 i_mode; u16 i_nlink; u16 i_uid; u16 i_gid; u32 i_size; union { /* directories, regular files, ... */ unsigned char i_addb[3*(10+1+1+1)+1]; /* zone numbers: max. 10 data blocks, * then 1 indirection block, * then 1 double indirection block, * then 1 triple indirection block. * Then maybe a "file generation number" ?? */ /* devices */ dev_t i_rdev; /* named pipes on Coherent */ struct { char p_addp[30]; s16 p_pnc; s16 p_prx; s16 p_pwx; } i_p; } i_a; u32 i_atime; /* time of last access */ u32 i_mtime; /* time of last modification */ u32 i_ctime; /* time of creation */};/* The admissible values for i_mode are listed in <linux/stat.h> : * #define S_IFMT 00170000 mask for type * #define S_IFREG 0100000 type = regular file * #define S_IFBLK 0060000 type = block device * #define S_IFDIR 0040000 type = directory * #define S_IFCHR 0020000 type = character device * #define S_IFIFO 0010000 type = named pipe * #define S_ISUID 0004000 set user id * #define S_ISGID 0002000 set group id * #define S_ISVTX 0001000 save swapped text even after use * Additionally for SystemV: * #define S_IFLNK 0120000 type = symbolic link * #define S_IFNAM 0050000 type = XENIX special named file ?? * Additionally for Coherent: * #define S_IFMPB 0070000 type = multiplexed block device ?? * #define S_IFMPC 0030000 type = multiplexed character device ?? * * Since Coherent doesn't know about symbolic links, we use a kludgey * implementation of symbolic links: i_mode = COH_KLUDGE_SYMLINK_MODE * denotes a symbolic link. When a regular file should get this mode by * accident, it is automatically converted to COH_KLUDGE_NOT_SYMLINK. * We use S_IFREG because only regular files (and Coherent pipes...) can have * data blocks with arbitrary contents associated with them, and S_ISVTX * ("save swapped text after use") because it is unused on both Linux and * Coherent: Linux does much more intelligent paging, and Coherent hasn't * virtual memory at all. * Same trick for Xenix. */#define COH_KLUDGE_SYMLINK_MODE (S_IFREG | S_ISVTX)#define COH_KLUDGE_NOT_SYMLINK (S_IFREG | S_ISVTX | S_IRUSR) /* force read access */extern inline mode_t from_coh_imode(unsigned short mode){ if (mode == COH_KLUDGE_SYMLINK_MODE) return (S_IFLNK | 0777); else return mode;}extern inline unsigned short to_coh_imode(mode_t mode){ if (S_ISLNK(mode)) return COH_KLUDGE_SYMLINK_MODE; else if (mode == COH_KLUDGE_SYMLINK_MODE) return COH_KLUDGE_NOT_SYMLINK; else return mode;}/* Admissible values for i_nlink: 0.._LINK_MAX */#define XENIX_LINK_MAX 126 /* ?? */#define SYSV_LINK_MAX 126 /* 127? 251? */#define COH_LINK_MAX 10000 /* max number of hard links to an inode *//* The number of inodes per block is sb->sv_inodes_per_block = block_size / sizeof(struct sysv_inode) *//* The number of indirect pointers per block is sb->sv_ind_per_block = block_size / sizeof(u32) *//* SystemV/Coherent directory entry on disk */#define SYSV_NAMELEN 14 /* max size of name in struct sysv_dir_entry */struct sysv_dir_entry { sysv_ino_t inode; char name[SYSV_NAMELEN]; /* up to 14 characters, the rest are zeroes */};#define SYSV_DIRSIZE sizeof(struct sysv_dir_entry) /* size of every directory entry *//* Operations *//* ========== *//* identify the FS in memory */#define FSTYPE_XENIX 1#define FSTYPE_SYSV4 2#define FSTYPE_SYSV2 3#define FSTYPE_COH 4#define SYSV_MAGIC_BASE 0x012FF7B3#define XENIX_SUPER_MAGIC (SYSV_MAGIC_BASE+FSTYPE_XENIX)#define SYSV4_SUPER_MAGIC (SYSV_MAGIC_BASE+FSTYPE_SYSV4)#define SYSV2_SUPER_MAGIC (SYSV_MAGIC_BASE+FSTYPE_SYSV2)#define COH_SUPER_MAGIC (SYSV_MAGIC_BASE+FSTYPE_COH)#ifdef __KERNEL__/* sv_get_hash_table(sb,dev,block) is equivalent to get_hash_table(dev,block,block_size) */static inline struct buffer_head *sv_get_hash_table (struct super_block *sb, kdev_t dev, unsigned int block){ return get_hash_table (dev, block + sb->sv_block_base, sb->sv_block_size);}/* sv_getblk(sb,dev,block) is equivalent to getblk(dev,block,block_size) */static inline struct buffer_head *sv_getblk (struct super_block *sb, kdev_t dev, unsigned int block){ return getblk (dev, block + sb->sv_block_base, sb->sv_block_size);}/* sv_bread(sb,dev,block) is equivalent to bread(dev,block,block_size) */static inline struct buffer_head *sv_bread (struct super_block *sb, kdev_t dev, unsigned int block){ return bread (dev, block + sb->sv_block_base, sb->sv_block_size);}/* * Function prototypes */extern struct dentry *sysv_lookup(struct inode * dir, struct dentry * dentry);extern int sysv_create(struct inode * dir, struct dentry * dentry, int mode);extern int sysv_mkdir(struct inode * dir, struct dentry * dentry, int mode);extern int sysv_rmdir(struct inode * dir, struct dentry * dentry);extern int sysv_unlink(struct inode * dir, struct dentry * dentry);extern int sysv_symlink(struct inode * inode, struct dentry * dentry, const char * symname);extern int sysv_link(struct dentry * old_dentry, struct inode * dir, struct dentry * dentry);extern int sysv_mknod(struct inode * dir, struct dentry * dentry, int mode, int rdev);extern int sysv_rename(struct inode * old_dir, struct dentry * old_dentry, struct inode * new_dir, struct dentry * new_dentry);extern struct inode * sysv_new_inode(const struct inode * dir);extern void sysv_free_inode(struct inode * inode);extern unsigned long sysv_count_free_inodes(struct super_block *sb);extern int sysv_new_block(struct super_block * sb);extern void sysv_free_block(struct super_block * sb, unsigned int block);extern unsigned long sysv_count_free_blocks(struct super_block *sb);extern int sysv_bmap(struct inode *,int);extern struct buffer_head * sysv_getblk(struct inode *, unsigned int, int);extern struct buffer_head * sysv_file_bread(struct inode *, int, int);extern ssize_t sysv_file_read(struct file *, char *, size_t, loff_t *);extern void sysv_truncate(struct inode *);extern void sysv_put_super(struct super_block *);extern struct super_block *sysv_read_super(struct super_block *,void *,int);extern int init_sysv_fs(void);extern void sysv_write_super(struct super_block *);extern void sysv_read_inode(struct inode *);extern int sysv_notify_change(struct dentry *, struct iattr *);extern void sysv_write_inode(struct inode *);extern int sysv_statfs(struct super_block *, struct statfs *, int);extern int sysv_sync_inode(struct inode *);extern int sysv_sync_file(struct file *, struct dentry *);extern int sysv_mmap(struct file *, struct vm_area_struct *);extern struct inode_operations sysv_file_inode_operations;extern struct inode_operations sysv_file_inode_operations_with_bmap;extern struct inode_operations sysv_dir_inode_operations;extern struct inode_operations sysv_symlink_inode_operations;#endif /* __KERNEL__ */#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -