diff options
Diffstat (limited to 'fs/adfs/super.c')
-rw-r--r-- | fs/adfs/super.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/fs/adfs/super.c b/fs/adfs/super.c index 4a3af7075c1d..959dbff2d42d 100644 --- a/fs/adfs/super.c +++ b/fs/adfs/super.c | |||
@@ -352,11 +352,15 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent) | |||
352 | struct adfs_sb_info *asb; | 352 | struct adfs_sb_info *asb; |
353 | struct inode *root; | 353 | struct inode *root; |
354 | 354 | ||
355 | lock_kernel(); | ||
356 | |||
355 | sb->s_flags |= MS_NODIRATIME; | 357 | sb->s_flags |= MS_NODIRATIME; |
356 | 358 | ||
357 | asb = kzalloc(sizeof(*asb), GFP_KERNEL); | 359 | asb = kzalloc(sizeof(*asb), GFP_KERNEL); |
358 | if (!asb) | 360 | if (!asb) { |
361 | unlock_kernel(); | ||
359 | return -ENOMEM; | 362 | return -ENOMEM; |
363 | } | ||
360 | sb->s_fs_info = asb; | 364 | sb->s_fs_info = asb; |
361 | 365 | ||
362 | /* set default options */ | 366 | /* set default options */ |
@@ -474,6 +478,7 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent) | |||
474 | goto error; | 478 | goto error; |
475 | } else | 479 | } else |
476 | sb->s_root->d_op = &adfs_dentry_operations; | 480 | sb->s_root->d_op = &adfs_dentry_operations; |
481 | unlock_kernel(); | ||
477 | return 0; | 482 | return 0; |
478 | 483 | ||
479 | error_free_bh: | 484 | error_free_bh: |
@@ -481,20 +486,20 @@ error_free_bh: | |||
481 | error: | 486 | error: |
482 | sb->s_fs_info = NULL; | 487 | sb->s_fs_info = NULL; |
483 | kfree(asb); | 488 | kfree(asb); |
489 | unlock_kernel(); | ||
484 | return -EINVAL; | 490 | return -EINVAL; |
485 | } | 491 | } |
486 | 492 | ||
487 | static int adfs_get_sb(struct file_system_type *fs_type, | 493 | static struct dentry *adfs_mount(struct file_system_type *fs_type, |
488 | int flags, const char *dev_name, void *data, struct vfsmount *mnt) | 494 | int flags, const char *dev_name, void *data) |
489 | { | 495 | { |
490 | return get_sb_bdev(fs_type, flags, dev_name, data, adfs_fill_super, | 496 | return mount_bdev(fs_type, flags, dev_name, data, adfs_fill_super); |
491 | mnt); | ||
492 | } | 497 | } |
493 | 498 | ||
494 | static struct file_system_type adfs_fs_type = { | 499 | static struct file_system_type adfs_fs_type = { |
495 | .owner = THIS_MODULE, | 500 | .owner = THIS_MODULE, |
496 | .name = "adfs", | 501 | .name = "adfs", |
497 | .get_sb = adfs_get_sb, | 502 | .mount = adfs_mount, |
498 | .kill_sb = kill_block_super, | 503 | .kill_sb = kill_block_super, |
499 | .fs_flags = FS_REQUIRES_DEV, | 504 | .fs_flags = FS_REQUIRES_DEV, |
500 | }; | 505 | }; |