diff options
Diffstat (limited to 'fs/minix/inode.c')
| -rw-r--r-- | fs/minix/inode.c | 38 | 
1 files changed, 17 insertions, 21 deletions
| diff --git a/fs/minix/inode.c b/fs/minix/inode.c index fa8b612b8ce2..fcb05d2c6b5f 100644 --- a/fs/minix/inode.c +++ b/fs/minix/inode.c @@ -190,24 +190,24 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)  		sbi->s_version = MINIX_V1;  		sbi->s_dirsize = 16;  		sbi->s_namelen = 14; -		sbi->s_link_max = MINIX_LINK_MAX; +		s->s_max_links = MINIX_LINK_MAX;  	} else if (s->s_magic == MINIX_SUPER_MAGIC2) {  		sbi->s_version = MINIX_V1;  		sbi->s_dirsize = 32;  		sbi->s_namelen = 30; -		sbi->s_link_max = MINIX_LINK_MAX; +		s->s_max_links = MINIX_LINK_MAX;  	} else if (s->s_magic == MINIX2_SUPER_MAGIC) {  		sbi->s_version = MINIX_V2;  		sbi->s_nzones = ms->s_zones;  		sbi->s_dirsize = 16;  		sbi->s_namelen = 14; -		sbi->s_link_max = MINIX2_LINK_MAX; +		s->s_max_links = MINIX2_LINK_MAX;  	} else if (s->s_magic == MINIX2_SUPER_MAGIC2) {  		sbi->s_version = MINIX_V2;  		sbi->s_nzones = ms->s_zones;  		sbi->s_dirsize = 32;  		sbi->s_namelen = 30; -		sbi->s_link_max = MINIX2_LINK_MAX; +		s->s_max_links = MINIX2_LINK_MAX;  	} else if ( *(__u16 *)(bh->b_data + 24) == MINIX3_SUPER_MAGIC) {  		m3s = (struct minix3_super_block *) bh->b_data;  		s->s_magic = m3s->s_magic; @@ -221,9 +221,9 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)  		sbi->s_dirsize = 64;  		sbi->s_namelen = 60;  		sbi->s_version = MINIX_V3; -		sbi->s_link_max = MINIX2_LINK_MAX;  		sbi->s_mount_state = MINIX_VALID_FS;  		sb_set_blocksize(s, m3s->s_blocksize); +		s->s_max_links = MINIX2_LINK_MAX;  	} else  		goto out_no_fs; @@ -254,14 +254,6 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)  	minix_set_bit(0,sbi->s_imap[0]->b_data);  	minix_set_bit(0,sbi->s_zmap[0]->b_data); -	/* set up enough so that it can read an inode */ -	s->s_op = &minix_sops; -	root_inode = minix_iget(s, MINIX_ROOT_INO); -	if (IS_ERR(root_inode)) { -		ret = PTR_ERR(root_inode); -		goto out_no_root; -	} -  	/* Apparently minix can create filesystems that allocate more blocks for  	 * the bitmaps than needed.  We simply ignore that, but verify it didn't  	 * create one with not enough blocks and bail out if so. @@ -270,7 +262,7 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)  	if (sbi->s_imap_blocks < block) {  		printk("MINIX-fs: file system does not have enough "  				"imap blocks allocated.  Refusing to mount\n"); -		goto out_iput; +		goto out_no_bitmap;  	}  	block = minix_blocks_needed( @@ -279,13 +271,21 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)  	if (sbi->s_zmap_blocks < block) {  		printk("MINIX-fs: file system does not have enough "  				"zmap blocks allocated.  Refusing to mount.\n"); -		goto out_iput; +		goto out_no_bitmap; +	} + +	/* set up enough so that it can read an inode */ +	s->s_op = &minix_sops; +	root_inode = minix_iget(s, MINIX_ROOT_INO); +	if (IS_ERR(root_inode)) { +		ret = PTR_ERR(root_inode); +		goto out_no_root;  	}  	ret = -ENOMEM; -	s->s_root = d_alloc_root(root_inode); +	s->s_root = d_make_root(root_inode);  	if (!s->s_root) -		goto out_iput; +		goto out_no_root;  	if (!(s->s_flags & MS_RDONLY)) {  		if (sbi->s_version != MINIX_V3) /* s_state is now out from V3 sb */ @@ -301,10 +301,6 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)  	return 0; -out_iput: -	iput(root_inode); -	goto out_freemap; -  out_no_root:  	if (!silent)  		printk("MINIX-fs: get root inode failed\n"); | 
