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 | ||