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

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