Annotation of linux/fs/minix/inode.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *  linux/fs/minix/inode.c
                      3:  *
                      4:  *  (C) 1991  Linus Torvalds
                      5:  */
                      6: 
                      7: #include <string.h>
                      8: #include <sys/stat.h>
                      9: 
                     10: #include <linux/sched.h>
                     11: #include <linux/minix_fs.h>
                     12: #include <linux/kernel.h>
                     13: #include <linux/mm.h>
                     14: #include <asm/system.h>
                     15: 
                     16: static int _bmap(struct inode * inode,int block,int create)
                     17: {
                     18:        struct buffer_head * bh;
                     19:        int i;
                     20: 
                     21:        if (block<0)
                     22:                panic("_bmap: block<0");
                     23:        if (block >= 7+512+512*512)
                     24:                panic("_bmap: block>big");
                     25:        if (block<7) {
                     26:                if (create && !inode->i_data[block])
                     27:                        if (inode->i_data[block]=minix_new_block(inode->i_dev)) {
                     28:                                inode->i_ctime=CURRENT_TIME;
                     29:                                inode->i_dirt=1;
                     30:                        }
                     31:                return inode->i_data[block];
                     32:        }
                     33:        block -= 7;
                     34:        if (block<512) {
                     35:                if (create && !inode->i_data[7])
                     36:                        if (inode->i_data[7]=minix_new_block(inode->i_dev)) {
                     37:                                inode->i_dirt=1;
                     38:                                inode->i_ctime=CURRENT_TIME;
                     39:                        }
                     40:                if (!inode->i_data[7])
                     41:                        return 0;
                     42:                if (!(bh = bread(inode->i_dev,inode->i_data[7])))
                     43:                        return 0;
                     44:                i = ((unsigned short *) (bh->b_data))[block];
                     45:                if (create && !i)
                     46:                        if (i=minix_new_block(inode->i_dev)) {
                     47:                                ((unsigned short *) (bh->b_data))[block]=i;
                     48:                                bh->b_dirt=1;
                     49:                        }
                     50:                brelse(bh);
                     51:                return i;
                     52:        }
                     53:        block -= 512;
                     54:        if (create && !inode->i_data[8])
                     55:                if (inode->i_data[8]=minix_new_block(inode->i_dev)) {
                     56:                        inode->i_dirt=1;
                     57:                        inode->i_ctime=CURRENT_TIME;
                     58:                }
                     59:        if (!inode->i_data[8])
                     60:                return 0;
                     61:        if (!(bh=bread(inode->i_dev,inode->i_data[8])))
                     62:                return 0;
                     63:        i = ((unsigned short *)bh->b_data)[block>>9];
                     64:        if (create && !i)
                     65:                if (i=minix_new_block(inode->i_dev)) {
                     66:                        ((unsigned short *) (bh->b_data))[block>>9]=i;
                     67:                        bh->b_dirt=1;
                     68:                }
                     69:        brelse(bh);
                     70:        if (!i)
                     71:                return 0;
                     72:        if (!(bh=bread(inode->i_dev,i)))
                     73:                return 0;
                     74:        i = ((unsigned short *)bh->b_data)[block&511];
                     75:        if (create && !i)
                     76:                if (i=minix_new_block(inode->i_dev)) {
                     77:                        ((unsigned short *) (bh->b_data))[block&511]=i;
                     78:                        bh->b_dirt=1;
                     79:                }
                     80:        brelse(bh);
                     81:        return i;
                     82: }
                     83: 
                     84: int minix_bmap(struct inode * inode,int block)
                     85: {
                     86:        return _bmap(inode,block,0);
                     87: }
                     88: 
                     89: int minix_create_block(struct inode * inode, int block)
                     90: {
                     91:        return _bmap(inode,block,1);
                     92: }
                     93: 
                     94: void minix_read_inode(struct inode * inode)
                     95: {
                     96:        struct buffer_head * bh;
                     97:        struct minix_inode * raw_inode;
                     98:        int block;
                     99: 
                    100:        block = 2 + inode->i_sb->s_imap_blocks + inode->i_sb->s_zmap_blocks +
                    101:                (inode->i_ino-1)/MINIX_INODES_PER_BLOCK;
                    102:        if (!(bh=bread(inode->i_dev,block)))
                    103:                panic("unable to read i-node block");
                    104:        raw_inode = ((struct minix_inode *) bh->b_data) +
                    105:                (inode->i_ino-1)%MINIX_INODES_PER_BLOCK;
                    106:        inode->i_mode = raw_inode->i_mode;
                    107:        inode->i_uid = raw_inode->i_uid;
                    108:        inode->i_gid = raw_inode->i_gid;
                    109:        inode->i_nlink = raw_inode->i_nlinks;
                    110:        inode->i_size = raw_inode->i_size;
                    111:        inode->i_mtime = inode->i_atime = inode->i_ctime = raw_inode->i_time;
                    112:        if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
                    113:                inode->i_rdev = raw_inode->i_zone[0];
                    114:        else for (block = 0; block < 9; block++)
                    115:                inode->i_data[block] = raw_inode->i_zone[block];
                    116:        brelse(bh);
                    117:        inode->i_op = &minix_inode_operations;
                    118: }
                    119: 
                    120: void minix_write_inode(struct inode * inode)
                    121: {
                    122:        struct buffer_head * bh;
                    123:        struct minix_inode * raw_inode;
                    124:        int block;
                    125: 
                    126:        block = 2 + inode->i_sb->s_imap_blocks + inode->i_sb->s_zmap_blocks +
                    127:                (inode->i_ino-1)/MINIX_INODES_PER_BLOCK;
                    128:        if (!(bh=bread(inode->i_dev,block)))
                    129:                panic("unable to read i-node block");
                    130:        raw_inode = ((struct minix_inode *)bh->b_data) +
                    131:                (inode->i_ino-1)%MINIX_INODES_PER_BLOCK;
                    132:        raw_inode->i_mode = inode->i_mode;
                    133:        raw_inode->i_uid = inode->i_uid;
                    134:        raw_inode->i_gid = inode->i_gid;
                    135:        raw_inode->i_nlinks = inode->i_nlink;
                    136:        raw_inode->i_size = inode->i_size;
                    137:        raw_inode->i_time = inode->i_mtime;
                    138:        if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
                    139:                raw_inode->i_zone[0] = inode->i_rdev;
                    140:        else for (block = 0; block < 9; block++)
                    141:                raw_inode->i_zone[block] = inode->i_data[block];
                    142:        bh->b_dirt=1;
                    143:        inode->i_dirt=0;
                    144:        brelse(bh);
                    145: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.