--- linux/fs/minix/inode.c 2018/04/24 18:07:15 1.1.1.3 +++ linux/fs/minix/inode.c 2018/04/24 18:10:46 1.1.1.5 @@ -5,13 +5,13 @@ */ #include -#include - +#include #include #include #include #include #include +#include int sync_dev(int dev); @@ -40,12 +40,15 @@ static struct super_operations minix_sop minix_read_inode, minix_write_inode, minix_put_inode, - minix_put_super + minix_put_super, + NULL, + minix_statfs }; struct super_block *minix_read_super(struct super_block *s,void *data) { struct buffer_head *bh; + struct minix_super_block *ms; int i,dev=s->s_dev,block; lock_super(s); @@ -55,8 +58,15 @@ struct super_block *minix_read_super(str printk("bread failed\n"); return NULL; } - *((struct minix_super_block *) s) = - *((struct minix_super_block *) bh->b_data); + ms = (struct minix_super_block *) bh->b_data; + s->s_ninodes = ms->s_ninodes; + s->s_nzones = ms->s_nzones; + s->s_imap_blocks = ms->s_imap_blocks; + s->s_zmap_blocks = ms->s_zmap_blocks; + s->s_firstdatazone = ms->s_firstdatazone; + s->s_log_zone_size = ms->s_log_zone_size; + s->s_max_size = ms->s_max_size; + s->s_magic = ms->s_magic; brelse(bh); if (s->s_magic != MINIX_SUPER_MAGIC) { s->s_dev = 0; @@ -103,6 +113,21 @@ struct super_block *minix_read_super(str return s; } +void minix_statfs (struct super_block *sb, struct statfs *buf) +{ + long tmp; + + put_fs_long(MINIX_SUPER_MAGIC, &buf->f_type); + put_fs_long(1024, &buf->f_bsize); + put_fs_long(sb->s_nzones << sb->s_log_zone_size, &buf->f_blocks); + tmp = minix_count_free_blocks(sb); + put_fs_long(tmp, &buf->f_bfree); + put_fs_long(tmp, &buf->f_bavail); + put_fs_long(sb->s_ninodes, &buf->f_files); + put_fs_long(minix_count_free_inodes(sb), &buf->f_ffree); + /* Don't know what value to put in buf->f_fsid */ +} + static int _minix_bmap(struct inode * inode,int block,int create) { struct buffer_head * bh; @@ -219,6 +244,13 @@ void minix_read_inode(struct inode * ino inode->i_op = &minix_chrdev_inode_operations; else if (S_ISBLK(inode->i_mode)) inode->i_op = &minix_blkdev_inode_operations; + else if (S_ISFIFO(inode->i_mode)) { + inode->i_op = &minix_fifo_inode_operations; + inode->i_size = 0; + inode->i_pipe = 1; + PIPE_HEAD(*inode) = PIPE_TAIL(*inode) = 0; + PIPE_READERS(*inode) = PIPE_WRITERS(*inode) = 0; + } } void minix_write_inode(struct inode * inode)