diff options
Diffstat (limited to 'fs/affs')
-rw-r--r-- | fs/affs/super.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/affs/super.c b/fs/affs/super.c index 33c4e7eef470..3a6d1dee4a51 100644 --- a/fs/affs/super.c +++ b/fs/affs/super.c | |||
@@ -291,6 +291,8 @@ static int affs_fill_super(struct super_block *sb, void *data, int silent) | |||
291 | u8 sig[4]; | 291 | u8 sig[4]; |
292 | int ret = -EINVAL; | 292 | int ret = -EINVAL; |
293 | 293 | ||
294 | lock_kernel(); | ||
295 | |||
294 | save_mount_options(sb, data); | 296 | save_mount_options(sb, data); |
295 | 297 | ||
296 | pr_debug("AFFS: read_super(%s)\n",data ? (const char *)data : "no options"); | 298 | pr_debug("AFFS: read_super(%s)\n",data ? (const char *)data : "no options"); |
@@ -300,8 +302,10 @@ static int affs_fill_super(struct super_block *sb, void *data, int silent) | |||
300 | sb->s_flags |= MS_NODIRATIME; | 302 | sb->s_flags |= MS_NODIRATIME; |
301 | 303 | ||
302 | sbi = kzalloc(sizeof(struct affs_sb_info), GFP_KERNEL); | 304 | sbi = kzalloc(sizeof(struct affs_sb_info), GFP_KERNEL); |
303 | if (!sbi) | 305 | if (!sbi) { |
306 | unlock_kernel(); | ||
304 | return -ENOMEM; | 307 | return -ENOMEM; |
308 | } | ||
305 | sb->s_fs_info = sbi; | 309 | sb->s_fs_info = sbi; |
306 | mutex_init(&sbi->s_bmlock); | 310 | mutex_init(&sbi->s_bmlock); |
307 | spin_lock_init(&sbi->symlink_lock); | 311 | spin_lock_init(&sbi->symlink_lock); |
@@ -312,6 +316,7 @@ static int affs_fill_super(struct super_block *sb, void *data, int silent) | |||
312 | printk(KERN_ERR "AFFS: Error parsing options\n"); | 316 | printk(KERN_ERR "AFFS: Error parsing options\n"); |
313 | kfree(sbi->s_prefix); | 317 | kfree(sbi->s_prefix); |
314 | kfree(sbi); | 318 | kfree(sbi); |
319 | unlock_kernel(); | ||
315 | return -EINVAL; | 320 | return -EINVAL; |
316 | } | 321 | } |
317 | /* N.B. after this point s_prefix must be released */ | 322 | /* N.B. after this point s_prefix must be released */ |
@@ -482,6 +487,7 @@ got_root: | |||
482 | sb->s_root->d_op = &affs_dentry_operations; | 487 | sb->s_root->d_op = &affs_dentry_operations; |
483 | 488 | ||
484 | pr_debug("AFFS: s_flags=%lX\n",sb->s_flags); | 489 | pr_debug("AFFS: s_flags=%lX\n",sb->s_flags); |
490 | unlock_kernel(); | ||
485 | return 0; | 491 | return 0; |
486 | 492 | ||
487 | /* | 493 | /* |
@@ -496,6 +502,7 @@ out_error_noinode: | |||
496 | kfree(sbi->s_prefix); | 502 | kfree(sbi->s_prefix); |
497 | kfree(sbi); | 503 | kfree(sbi); |
498 | sb->s_fs_info = NULL; | 504 | sb->s_fs_info = NULL; |
505 | unlock_kernel(); | ||
499 | return ret; | 506 | return ret; |
500 | } | 507 | } |
501 | 508 | ||