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) | |||
190 | sbi->s_version = MINIX_V1; | 190 | sbi->s_version = MINIX_V1; |
191 | sbi->s_dirsize = 16; | 191 | sbi->s_dirsize = 16; |
192 | sbi->s_namelen = 14; | 192 | sbi->s_namelen = 14; |
193 | sbi->s_link_max = MINIX_LINK_MAX; | 193 | s->s_max_links = MINIX_LINK_MAX; |
194 | } else if (s->s_magic == MINIX_SUPER_MAGIC2) { | 194 | } else if (s->s_magic == MINIX_SUPER_MAGIC2) { |
195 | sbi->s_version = MINIX_V1; | 195 | sbi->s_version = MINIX_V1; |
196 | sbi->s_dirsize = 32; | 196 | sbi->s_dirsize = 32; |
197 | sbi->s_namelen = 30; | 197 | sbi->s_namelen = 30; |
198 | sbi->s_link_max = MINIX_LINK_MAX; | 198 | s->s_max_links = MINIX_LINK_MAX; |
199 | } else if (s->s_magic == MINIX2_SUPER_MAGIC) { | 199 | } else if (s->s_magic == MINIX2_SUPER_MAGIC) { |
200 | sbi->s_version = MINIX_V2; | 200 | sbi->s_version = MINIX_V2; |
201 | sbi->s_nzones = ms->s_zones; | 201 | sbi->s_nzones = ms->s_zones; |
202 | sbi->s_dirsize = 16; | 202 | sbi->s_dirsize = 16; |
203 | sbi->s_namelen = 14; | 203 | sbi->s_namelen = 14; |
204 | sbi->s_link_max = MINIX2_LINK_MAX; | 204 | s->s_max_links = MINIX2_LINK_MAX; |
205 | } else if (s->s_magic == MINIX2_SUPER_MAGIC2) { | 205 | } else if (s->s_magic == MINIX2_SUPER_MAGIC2) { |
206 | sbi->s_version = MINIX_V2; | 206 | sbi->s_version = MINIX_V2; |
207 | sbi->s_nzones = ms->s_zones; | 207 | sbi->s_nzones = ms->s_zones; |
208 | sbi->s_dirsize = 32; | 208 | sbi->s_dirsize = 32; |
209 | sbi->s_namelen = 30; | 209 | sbi->s_namelen = 30; |
210 | sbi->s_link_max = MINIX2_LINK_MAX; | 210 | s->s_max_links = MINIX2_LINK_MAX; |
211 | } else if ( *(__u16 *)(bh->b_data + 24) == MINIX3_SUPER_MAGIC) { | 211 | } else if ( *(__u16 *)(bh->b_data + 24) == MINIX3_SUPER_MAGIC) { |
212 | m3s = (struct minix3_super_block *) bh->b_data; | 212 | m3s = (struct minix3_super_block *) bh->b_data; |
213 | s->s_magic = m3s->s_magic; | 213 | s->s_magic = m3s->s_magic; |
@@ -221,9 +221,9 @@ static int minix_fill_super(struct super_block *s, void *data, int silent) | |||
221 | sbi->s_dirsize = 64; | 221 | sbi->s_dirsize = 64; |
222 | sbi->s_namelen = 60; | 222 | sbi->s_namelen = 60; |
223 | sbi->s_version = MINIX_V3; | 223 | sbi->s_version = MINIX_V3; |
224 | sbi->s_link_max = MINIX2_LINK_MAX; | ||
225 | sbi->s_mount_state = MINIX_VALID_FS; | 224 | sbi->s_mount_state = MINIX_VALID_FS; |
226 | sb_set_blocksize(s, m3s->s_blocksize); | 225 | sb_set_blocksize(s, m3s->s_blocksize); |
226 | s->s_max_links = MINIX2_LINK_MAX; | ||
227 | } else | 227 | } else |
228 | goto out_no_fs; | 228 | goto out_no_fs; |
229 | 229 | ||
@@ -254,14 +254,6 @@ static int minix_fill_super(struct super_block *s, void *data, int silent) | |||
254 | minix_set_bit(0,sbi->s_imap[0]->b_data); | 254 | minix_set_bit(0,sbi->s_imap[0]->b_data); |
255 | minix_set_bit(0,sbi->s_zmap[0]->b_data); | 255 | minix_set_bit(0,sbi->s_zmap[0]->b_data); |
256 | 256 | ||
257 | /* set up enough so that it can read an inode */ | ||
258 | s->s_op = &minix_sops; | ||
259 | root_inode = minix_iget(s, MINIX_ROOT_INO); | ||
260 | if (IS_ERR(root_inode)) { | ||
261 | ret = PTR_ERR(root_inode); | ||
262 | goto out_no_root; | ||
263 | } | ||
264 | |||
265 | /* Apparently minix can create filesystems that allocate more blocks for | 257 | /* Apparently minix can create filesystems that allocate more blocks for |
266 | * the bitmaps than needed. We simply ignore that, but verify it didn't | 258 | * the bitmaps than needed. We simply ignore that, but verify it didn't |
267 | * create one with not enough blocks and bail out if so. | 259 | * 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) | |||
270 | if (sbi->s_imap_blocks < block) { | 262 | if (sbi->s_imap_blocks < block) { |
271 | printk("MINIX-fs: file system does not have enough " | 263 | printk("MINIX-fs: file system does not have enough " |
272 | "imap blocks allocated. Refusing to mount\n"); | 264 | "imap blocks allocated. Refusing to mount\n"); |
273 | goto out_iput; | 265 | goto out_no_bitmap; |
274 | } | 266 | } |
275 | 267 | ||
276 | block = minix_blocks_needed( | 268 | block = minix_blocks_needed( |
@@ -279,13 +271,21 @@ static int minix_fill_super(struct super_block *s, void *data, int silent) | |||
279 | if (sbi->s_zmap_blocks < block) { | 271 | if (sbi->s_zmap_blocks < block) { |
280 | printk("MINIX-fs: file system does not have enough " | 272 | printk("MINIX-fs: file system does not have enough " |
281 | "zmap blocks allocated. Refusing to mount.\n"); | 273 | "zmap blocks allocated. Refusing to mount.\n"); |
282 | goto out_iput; | 274 | goto out_no_bitmap; |
275 | } | ||
276 | |||
277 | /* set up enough so that it can read an inode */ | ||
278 | s->s_op = &minix_sops; | ||
279 | root_inode = minix_iget(s, MINIX_ROOT_INO); | ||
280 | if (IS_ERR(root_inode)) { | ||
281 | ret = PTR_ERR(root_inode); | ||
282 | goto out_no_root; | ||
283 | } | 283 | } |
284 | 284 | ||
285 | ret = -ENOMEM; | 285 | ret = -ENOMEM; |
286 | s->s_root = d_alloc_root(root_inode); | 286 | s->s_root = d_make_root(root_inode); |
287 | if (!s->s_root) | 287 | if (!s->s_root) |
288 | goto out_iput; | 288 | goto out_no_root; |
289 | 289 | ||
290 | if (!(s->s_flags & MS_RDONLY)) { | 290 | if (!(s->s_flags & MS_RDONLY)) { |
291 | if (sbi->s_version != MINIX_V3) /* s_state is now out from V3 sb */ | 291 | 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) | |||
301 | 301 | ||
302 | return 0; | 302 | return 0; |
303 | 303 | ||
304 | out_iput: | ||
305 | iput(root_inode); | ||
306 | goto out_freemap; | ||
307 | |||
308 | out_no_root: | 304 | out_no_root: |
309 | if (!silent) | 305 | if (!silent) |
310 | printk("MINIX-fs: get root inode failed\n"); | 306 | printk("MINIX-fs: get root inode failed\n"); |