diff options
Diffstat (limited to 'fs/hpfs/super.c')
| -rw-r--r-- | fs/hpfs/super.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c index b30426b1fc97..c89b40808587 100644 --- a/fs/hpfs/super.c +++ b/fs/hpfs/super.c | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | #include <linux/statfs.h> | 13 | #include <linux/statfs.h> |
| 14 | #include <linux/magic.h> | 14 | #include <linux/magic.h> |
| 15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
| 16 | #include <linux/smp_lock.h> | ||
| 17 | #include <linux/bitmap.h> | 16 | #include <linux/bitmap.h> |
| 18 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
| 19 | 18 | ||
| @@ -103,15 +102,11 @@ static void hpfs_put_super(struct super_block *s) | |||
| 103 | { | 102 | { |
| 104 | struct hpfs_sb_info *sbi = hpfs_sb(s); | 103 | struct hpfs_sb_info *sbi = hpfs_sb(s); |
| 105 | 104 | ||
| 106 | lock_kernel(); | ||
| 107 | |||
| 108 | kfree(sbi->sb_cp_table); | 105 | kfree(sbi->sb_cp_table); |
| 109 | kfree(sbi->sb_bmp_dir); | 106 | kfree(sbi->sb_bmp_dir); |
| 110 | unmark_dirty(s); | 107 | unmark_dirty(s); |
| 111 | s->s_fs_info = NULL; | 108 | s->s_fs_info = NULL; |
| 112 | kfree(sbi); | 109 | kfree(sbi); |
| 113 | |||
| 114 | unlock_kernel(); | ||
| 115 | } | 110 | } |
| 116 | 111 | ||
| 117 | unsigned hpfs_count_one_bitmap(struct super_block *s, secno secno) | 112 | unsigned hpfs_count_one_bitmap(struct super_block *s, secno secno) |
| @@ -143,7 +138,7 @@ static int hpfs_statfs(struct dentry *dentry, struct kstatfs *buf) | |||
| 143 | struct super_block *s = dentry->d_sb; | 138 | struct super_block *s = dentry->d_sb; |
| 144 | struct hpfs_sb_info *sbi = hpfs_sb(s); | 139 | struct hpfs_sb_info *sbi = hpfs_sb(s); |
| 145 | u64 id = huge_encode_dev(s->s_bdev->bd_dev); | 140 | u64 id = huge_encode_dev(s->s_bdev->bd_dev); |
| 146 | lock_kernel(); | 141 | hpfs_lock(s); |
| 147 | 142 | ||
| 148 | /*if (sbi->sb_n_free == -1) {*/ | 143 | /*if (sbi->sb_n_free == -1) {*/ |
| 149 | sbi->sb_n_free = count_bitmaps(s); | 144 | sbi->sb_n_free = count_bitmaps(s); |
| @@ -160,7 +155,7 @@ static int hpfs_statfs(struct dentry *dentry, struct kstatfs *buf) | |||
| 160 | buf->f_fsid.val[1] = (u32)(id >> 32); | 155 | buf->f_fsid.val[1] = (u32)(id >> 32); |
| 161 | buf->f_namelen = 254; | 156 | buf->f_namelen = 254; |
| 162 | 157 | ||
| 163 | unlock_kernel(); | 158 | hpfs_unlock(s); |
| 164 | 159 | ||
| 165 | return 0; | 160 | return 0; |
| 166 | } | 161 | } |
| @@ -406,7 +401,7 @@ static int hpfs_remount_fs(struct super_block *s, int *flags, char *data) | |||
| 406 | 401 | ||
| 407 | *flags |= MS_NOATIME; | 402 | *flags |= MS_NOATIME; |
| 408 | 403 | ||
| 409 | lock_kernel(); | 404 | hpfs_lock(s); |
| 410 | lock_super(s); | 405 | lock_super(s); |
| 411 | uid = sbi->sb_uid; gid = sbi->sb_gid; | 406 | uid = sbi->sb_uid; gid = sbi->sb_gid; |
| 412 | umask = 0777 & ~sbi->sb_mode; | 407 | umask = 0777 & ~sbi->sb_mode; |
| @@ -441,12 +436,12 @@ static int hpfs_remount_fs(struct super_block *s, int *flags, char *data) | |||
| 441 | replace_mount_options(s, new_opts); | 436 | replace_mount_options(s, new_opts); |
| 442 | 437 | ||
| 443 | unlock_super(s); | 438 | unlock_super(s); |
| 444 | unlock_kernel(); | 439 | hpfs_unlock(s); |
| 445 | return 0; | 440 | return 0; |
| 446 | 441 | ||
| 447 | out_err: | 442 | out_err: |
| 448 | unlock_super(s); | 443 | unlock_super(s); |
| 449 | unlock_kernel(); | 444 | hpfs_unlock(s); |
| 450 | kfree(new_opts); | 445 | kfree(new_opts); |
| 451 | return -EINVAL; | 446 | return -EINVAL; |
| 452 | } | 447 | } |
| @@ -484,13 +479,15 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent) | |||
| 484 | 479 | ||
| 485 | int o; | 480 | int o; |
| 486 | 481 | ||
| 487 | lock_kernel(); | 482 | if (num_possible_cpus() > 1) { |
| 483 | printk(KERN_ERR "HPFS is not SMP safe\n"); | ||
| 484 | return -EINVAL; | ||
| 485 | } | ||
| 488 | 486 | ||
| 489 | save_mount_options(s, options); | 487 | save_mount_options(s, options); |
| 490 | 488 | ||
| 491 | sbi = kzalloc(sizeof(*sbi), GFP_KERNEL); | 489 | sbi = kzalloc(sizeof(*sbi), GFP_KERNEL); |
| 492 | if (!sbi) { | 490 | if (!sbi) { |
| 493 | unlock_kernel(); | ||
| 494 | return -ENOMEM; | 491 | return -ENOMEM; |
| 495 | } | 492 | } |
| 496 | s->s_fs_info = sbi; | 493 | s->s_fs_info = sbi; |
| @@ -677,7 +674,6 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent) | |||
| 677 | root->i_blocks = 5; | 674 | root->i_blocks = 5; |
| 678 | hpfs_brelse4(&qbh); | 675 | hpfs_brelse4(&qbh); |
| 679 | } | 676 | } |
| 680 | unlock_kernel(); | ||
| 681 | return 0; | 677 | return 0; |
| 682 | 678 | ||
| 683 | bail4: brelse(bh2); | 679 | bail4: brelse(bh2); |
| @@ -689,7 +685,6 @@ bail0: | |||
| 689 | kfree(sbi->sb_cp_table); | 685 | kfree(sbi->sb_cp_table); |
| 690 | s->s_fs_info = NULL; | 686 | s->s_fs_info = NULL; |
| 691 | kfree(sbi); | 687 | kfree(sbi); |
| 692 | unlock_kernel(); | ||
| 693 | return -EINVAL; | 688 | return -EINVAL; |
| 694 | } | 689 | } |
| 695 | 690 | ||
