root/include/linux/fs.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * This file has definitions for some important file table
   3  * structures etc.
   4  */
   5 
   6 #ifndef _FS_H
   7 #define _FS_H
   8 
   9 #include <sys/types.h>
  10 
  11 /* devices are as follows: (same as minix, so we can use the minix
  12  * file system. These are major numbers.)
  13  *
  14  * 0 - unused (nodev)
  15  * 1 - /dev/mem
  16  * 2 - /dev/fd
  17  * 3 - /dev/hd
  18  * 4 - /dev/ttyx
  19  * 5 - /dev/tty
  20  * 6 - /dev/lp
  21  * 7 - unnamed pipes
  22  */
  23 
  24 #define IS_SEEKABLE(x) ((x)>=1 && (x)<=3)
  25 
  26 #define READ 0
  27 #define WRITE 1
  28 #define READA 2         /* read-ahead - don't pause */
  29 
  30 void buffer_init(long buffer_end);
  31 
  32 #define MAJOR(a) (((unsigned)(a))>>8)
  33 #define MINOR(a) ((a)&0xff)
  34 
  35 #define NAME_LEN 14
  36 #define ROOT_INO 1
  37 
  38 #define I_MAP_SLOTS 8
  39 #define Z_MAP_SLOTS 8
  40 #define SUPER_MAGIC 0x137F
  41 
  42 #define NR_OPEN 20
  43 #define NR_INODE 32
  44 #define NR_FILE 64
  45 #define NR_SUPER 8
  46 #define NR_HASH 307
  47 #define NR_BUFFERS nr_buffers
  48 #define BLOCK_SIZE 1024
  49 #define BLOCK_SIZE_BITS 10
  50 #ifndef NULL
  51 #define NULL ((void *) 0)
  52 #endif
  53 
  54 #define INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct d_inode)))
  55 #define DIR_ENTRIES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct dir_entry)))
  56 
  57 #define PIPE_HEAD(inode) ((inode).i_zone[0])
  58 #define PIPE_TAIL(inode) ((inode).i_zone[1])
  59 #define PIPE_SIZE(inode) ((PIPE_HEAD(inode)-PIPE_TAIL(inode))&(PAGE_SIZE-1))
  60 #define PIPE_EMPTY(inode) (PIPE_HEAD(inode)==PIPE_TAIL(inode))
  61 #define PIPE_FULL(inode) (PIPE_SIZE(inode)==(PAGE_SIZE-1))
  62 #define INC_PIPE(head) \
  63 __asm__("incl %0\n\tandl $4095,%0"::"m" (head))
  64 
  65 typedef char buffer_block[BLOCK_SIZE];
  66 
  67 struct buffer_head {
  68         char * b_data;                  /* pointer to data block (1024 bytes) */
  69         unsigned short b_dev;           /* device (0 = free) */
  70         unsigned short b_blocknr;       /* block number */
  71         unsigned char b_uptodate;
  72         unsigned char b_dirt;           /* 0-clean,1-dirty */
  73         unsigned char b_count;          /* users using this block */
  74         unsigned char b_lock;           /* 0 - ok, 1 -locked */
  75         struct task_struct * b_wait;
  76         struct buffer_head * b_prev;
  77         struct buffer_head * b_next;
  78         struct buffer_head * b_prev_free;
  79         struct buffer_head * b_next_free;
  80 };
  81 
  82 struct d_inode {
  83         unsigned short i_mode;
  84         unsigned short i_uid;
  85         unsigned long i_size;
  86         unsigned long i_time;
  87         unsigned char i_gid;
  88         unsigned char i_nlinks;
  89         unsigned short i_zone[9];
  90 };
  91 
  92 struct m_inode {
  93         unsigned short i_mode;
  94         unsigned short i_uid;
  95         unsigned long i_size;
  96         unsigned long i_mtime;
  97         unsigned char i_gid;
  98         unsigned char i_nlinks;
  99         unsigned short i_zone[9];
 100 /* these are in memory also */
 101         struct task_struct * i_wait;
 102         unsigned long i_atime;
 103         unsigned long i_ctime;
 104         unsigned short i_dev;
 105         unsigned short i_num;
 106         unsigned short i_count;
 107         unsigned char i_lock;
 108         unsigned char i_dirt;
 109         unsigned char i_pipe;
 110         unsigned char i_mount;
 111         unsigned char i_seek;
 112         unsigned char i_update;
 113 };
 114 
 115 struct file {
 116         unsigned short f_mode;
 117         unsigned short f_flags;
 118         unsigned short f_count;
 119         struct m_inode * f_inode;
 120         off_t f_pos;
 121 };
 122 
 123 struct super_block {
 124         unsigned short s_ninodes;
 125         unsigned short s_nzones;
 126         unsigned short s_imap_blocks;
 127         unsigned short s_zmap_blocks;
 128         unsigned short s_firstdatazone;
 129         unsigned short s_log_zone_size;
 130         unsigned long s_max_size;
 131         unsigned short s_magic;
 132 /* These are only in memory */
 133         struct buffer_head * s_imap[8];
 134         struct buffer_head * s_zmap[8];
 135         unsigned short s_dev;
 136         struct m_inode * s_isup;
 137         struct m_inode * s_imount;
 138         unsigned long s_time;
 139         struct task_struct * s_wait;
 140         unsigned char s_lock;
 141         unsigned char s_rd_only;
 142         unsigned char s_dirt;
 143 };
 144 
 145 struct d_super_block {
 146         unsigned short s_ninodes;
 147         unsigned short s_nzones;
 148         unsigned short s_imap_blocks;
 149         unsigned short s_zmap_blocks;
 150         unsigned short s_firstdatazone;
 151         unsigned short s_log_zone_size;
 152         unsigned long s_max_size;
 153         unsigned short s_magic;
 154 };
 155 
 156 struct dir_entry {
 157         unsigned short inode;
 158         char name[NAME_LEN];
 159 };
 160 
 161 extern struct m_inode inode_table[NR_INODE];
 162 extern struct file file_table[NR_FILE];
 163 extern struct super_block super_block[NR_SUPER];
 164 extern struct buffer_head * start_buffer;
 165 extern int nr_buffers;
 166 
 167 extern void check_disk_change(int dev);
 168 extern int floppy_change(unsigned int nr);
 169 extern int ticks_to_floppy_on(unsigned int dev);
 170 extern void floppy_on(unsigned int dev);
 171 extern void floppy_off(unsigned int dev);
 172 extern void truncate(struct m_inode * inode);
 173 extern void sync_inodes(void);
 174 extern void wait_on(struct m_inode * inode);
 175 extern int bmap(struct m_inode * inode,int block);
 176 extern int create_block(struct m_inode * inode,int block);
 177 extern struct m_inode * namei(const char * pathname);
 178 extern int open_namei(const char * pathname, int flag, int mode,
 179         struct m_inode ** res_inode);
 180 extern void iput(struct m_inode * inode);
 181 extern struct m_inode * iget(int dev,int nr);
 182 extern struct m_inode * get_empty_inode(void);
 183 extern struct m_inode * get_pipe_inode(void);
 184 extern struct buffer_head * get_hash_table(int dev, int block);
 185 extern struct buffer_head * getblk(int dev, int block);
 186 extern void ll_rw_block(int rw, struct buffer_head * bh);
 187 extern void brelse(struct buffer_head * buf);
 188 extern struct buffer_head * bread(int dev,int block);
 189 extern struct buffer_head * breada(int dev,int block,...);
 190 extern int new_block(int dev);
 191 extern void free_block(int dev, int block);
 192 extern struct m_inode * new_inode(int dev);
 193 extern void free_inode(struct m_inode * inode);
 194 extern int sync_dev(int dev);
 195 extern struct super_block * get_super(int dev);
 196 extern int ROOT_DEV;
 197 
 198 extern void mount_root(void);
 199 
 200 #endif

/* [previous][next][first][last][top][bottom][index][help] */