diff options
Diffstat (limited to 'fs/hpfs/super.c')
-rw-r--r-- | fs/hpfs/super.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c index fc77965be841..f2feaa06bf26 100644 --- a/fs/hpfs/super.c +++ b/fs/hpfs/super.c | |||
@@ -13,6 +13,7 @@ | |||
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> | ||
16 | 17 | ||
17 | /* Mark the filesystem dirty, so that chkdsk checks it when os/2 booted */ | 18 | /* Mark the filesystem dirty, so that chkdsk checks it when os/2 booted */ |
18 | 19 | ||
@@ -99,11 +100,16 @@ int hpfs_stop_cycles(struct super_block *s, int key, int *c1, int *c2, | |||
99 | static void hpfs_put_super(struct super_block *s) | 100 | static void hpfs_put_super(struct super_block *s) |
100 | { | 101 | { |
101 | struct hpfs_sb_info *sbi = hpfs_sb(s); | 102 | struct hpfs_sb_info *sbi = hpfs_sb(s); |
103 | |||
104 | lock_kernel(); | ||
105 | |||
102 | kfree(sbi->sb_cp_table); | 106 | kfree(sbi->sb_cp_table); |
103 | kfree(sbi->sb_bmp_dir); | 107 | kfree(sbi->sb_bmp_dir); |
104 | unmark_dirty(s); | 108 | unmark_dirty(s); |
105 | s->s_fs_info = NULL; | 109 | s->s_fs_info = NULL; |
106 | kfree(sbi); | 110 | kfree(sbi); |
111 | |||
112 | unlock_kernel(); | ||
107 | } | 113 | } |
108 | 114 | ||
109 | unsigned hpfs_count_one_bitmap(struct super_block *s, secno secno) | 115 | unsigned hpfs_count_one_bitmap(struct super_block *s, secno secno) |
@@ -393,6 +399,8 @@ static int hpfs_remount_fs(struct super_block *s, int *flags, char *data) | |||
393 | 399 | ||
394 | *flags |= MS_NOATIME; | 400 | *flags |= MS_NOATIME; |
395 | 401 | ||
402 | lock_kernel(); | ||
403 | lock_super(s); | ||
396 | uid = sbi->sb_uid; gid = sbi->sb_gid; | 404 | uid = sbi->sb_uid; gid = sbi->sb_gid; |
397 | umask = 0777 & ~sbi->sb_mode; | 405 | umask = 0777 & ~sbi->sb_mode; |
398 | lowercase = sbi->sb_lowercase; conv = sbi->sb_conv; | 406 | lowercase = sbi->sb_lowercase; conv = sbi->sb_conv; |
@@ -425,9 +433,13 @@ static int hpfs_remount_fs(struct super_block *s, int *flags, char *data) | |||
425 | 433 | ||
426 | replace_mount_options(s, new_opts); | 434 | replace_mount_options(s, new_opts); |
427 | 435 | ||
436 | unlock_super(s); | ||
437 | unlock_kernel(); | ||
428 | return 0; | 438 | return 0; |
429 | 439 | ||
430 | out_err: | 440 | out_err: |
441 | unlock_super(s); | ||
442 | unlock_kernel(); | ||
431 | kfree(new_opts); | 443 | kfree(new_opts); |
432 | return -EINVAL; | 444 | return -EINVAL; |
433 | } | 445 | } |