diff options
Diffstat (limited to 'fs/ufs/super.c')
-rw-r--r-- | fs/ufs/super.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/fs/ufs/super.c b/fs/ufs/super.c index f7cfecfe1cab..dc8e3a861d0f 100644 --- a/fs/ufs/super.c +++ b/fs/ufs/super.c | |||
@@ -699,7 +699,7 @@ static int ufs_sync_fs(struct super_block *sb, int wait) | |||
699 | unsigned flags; | 699 | unsigned flags; |
700 | 700 | ||
701 | lock_ufs(sb); | 701 | lock_ufs(sb); |
702 | lock_super(sb); | 702 | mutex_lock(&UFS_SB(sb)->s_lock); |
703 | 703 | ||
704 | UFSD("ENTER\n"); | 704 | UFSD("ENTER\n"); |
705 | 705 | ||
@@ -717,7 +717,7 @@ static int ufs_sync_fs(struct super_block *sb, int wait) | |||
717 | ufs_put_cstotal(sb); | 717 | ufs_put_cstotal(sb); |
718 | 718 | ||
719 | UFSD("EXIT\n"); | 719 | UFSD("EXIT\n"); |
720 | unlock_super(sb); | 720 | mutex_unlock(&UFS_SB(sb)->s_lock); |
721 | unlock_ufs(sb); | 721 | unlock_ufs(sb); |
722 | 722 | ||
723 | return 0; | 723 | return 0; |
@@ -805,6 +805,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent) | |||
805 | } | 805 | } |
806 | #endif | 806 | #endif |
807 | mutex_init(&sbi->mutex); | 807 | mutex_init(&sbi->mutex); |
808 | mutex_init(&sbi->s_lock); | ||
808 | spin_lock_init(&sbi->work_lock); | 809 | spin_lock_init(&sbi->work_lock); |
809 | INIT_DELAYED_WORK(&sbi->sync_work, delayed_sync_fs); | 810 | INIT_DELAYED_WORK(&sbi->sync_work, delayed_sync_fs); |
810 | /* | 811 | /* |
@@ -1280,7 +1281,7 @@ static int ufs_remount (struct super_block *sb, int *mount_flags, char *data) | |||
1280 | unsigned flags; | 1281 | unsigned flags; |
1281 | 1282 | ||
1282 | lock_ufs(sb); | 1283 | lock_ufs(sb); |
1283 | lock_super(sb); | 1284 | mutex_lock(&UFS_SB(sb)->s_lock); |
1284 | uspi = UFS_SB(sb)->s_uspi; | 1285 | uspi = UFS_SB(sb)->s_uspi; |
1285 | flags = UFS_SB(sb)->s_flags; | 1286 | flags = UFS_SB(sb)->s_flags; |
1286 | usb1 = ubh_get_usb_first(uspi); | 1287 | usb1 = ubh_get_usb_first(uspi); |
@@ -1294,7 +1295,7 @@ static int ufs_remount (struct super_block *sb, int *mount_flags, char *data) | |||
1294 | new_mount_opt = 0; | 1295 | new_mount_opt = 0; |
1295 | ufs_set_opt (new_mount_opt, ONERROR_LOCK); | 1296 | ufs_set_opt (new_mount_opt, ONERROR_LOCK); |
1296 | if (!ufs_parse_options (data, &new_mount_opt)) { | 1297 | if (!ufs_parse_options (data, &new_mount_opt)) { |
1297 | unlock_super(sb); | 1298 | mutex_unlock(&UFS_SB(sb)->s_lock); |
1298 | unlock_ufs(sb); | 1299 | unlock_ufs(sb); |
1299 | return -EINVAL; | 1300 | return -EINVAL; |
1300 | } | 1301 | } |
@@ -1302,14 +1303,14 @@ static int ufs_remount (struct super_block *sb, int *mount_flags, char *data) | |||
1302 | new_mount_opt |= ufstype; | 1303 | new_mount_opt |= ufstype; |
1303 | } else if ((new_mount_opt & UFS_MOUNT_UFSTYPE) != ufstype) { | 1304 | } else if ((new_mount_opt & UFS_MOUNT_UFSTYPE) != ufstype) { |
1304 | printk("ufstype can't be changed during remount\n"); | 1305 | printk("ufstype can't be changed during remount\n"); |
1305 | unlock_super(sb); | 1306 | mutex_unlock(&UFS_SB(sb)->s_lock); |
1306 | unlock_ufs(sb); | 1307 | unlock_ufs(sb); |
1307 | return -EINVAL; | 1308 | return -EINVAL; |
1308 | } | 1309 | } |
1309 | 1310 | ||
1310 | if ((*mount_flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) { | 1311 | if ((*mount_flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) { |
1311 | UFS_SB(sb)->s_mount_opt = new_mount_opt; | 1312 | UFS_SB(sb)->s_mount_opt = new_mount_opt; |
1312 | unlock_super(sb); | 1313 | mutex_unlock(&UFS_SB(sb)->s_lock); |
1313 | unlock_ufs(sb); | 1314 | unlock_ufs(sb); |
1314 | return 0; | 1315 | return 0; |
1315 | } | 1316 | } |
@@ -1334,7 +1335,7 @@ static int ufs_remount (struct super_block *sb, int *mount_flags, char *data) | |||
1334 | #ifndef CONFIG_UFS_FS_WRITE | 1335 | #ifndef CONFIG_UFS_FS_WRITE |
1335 | printk("ufs was compiled with read-only support, " | 1336 | printk("ufs was compiled with read-only support, " |
1336 | "can't be mounted as read-write\n"); | 1337 | "can't be mounted as read-write\n"); |
1337 | unlock_super(sb); | 1338 | mutex_unlock(&UFS_SB(sb)->s_lock); |
1338 | unlock_ufs(sb); | 1339 | unlock_ufs(sb); |
1339 | return -EINVAL; | 1340 | return -EINVAL; |
1340 | #else | 1341 | #else |
@@ -1344,13 +1345,13 @@ static int ufs_remount (struct super_block *sb, int *mount_flags, char *data) | |||
1344 | ufstype != UFS_MOUNT_UFSTYPE_SUNx86 && | 1345 | ufstype != UFS_MOUNT_UFSTYPE_SUNx86 && |
1345 | ufstype != UFS_MOUNT_UFSTYPE_UFS2) { | 1346 | ufstype != UFS_MOUNT_UFSTYPE_UFS2) { |
1346 | printk("this ufstype is read-only supported\n"); | 1347 | printk("this ufstype is read-only supported\n"); |
1347 | unlock_super(sb); | 1348 | mutex_unlock(&UFS_SB(sb)->s_lock); |
1348 | unlock_ufs(sb); | 1349 | unlock_ufs(sb); |
1349 | return -EINVAL; | 1350 | return -EINVAL; |
1350 | } | 1351 | } |
1351 | if (!ufs_read_cylinder_structures(sb)) { | 1352 | if (!ufs_read_cylinder_structures(sb)) { |
1352 | printk("failed during remounting\n"); | 1353 | printk("failed during remounting\n"); |
1353 | unlock_super(sb); | 1354 | mutex_unlock(&UFS_SB(sb)->s_lock); |
1354 | unlock_ufs(sb); | 1355 | unlock_ufs(sb); |
1355 | return -EPERM; | 1356 | return -EPERM; |
1356 | } | 1357 | } |
@@ -1358,7 +1359,7 @@ static int ufs_remount (struct super_block *sb, int *mount_flags, char *data) | |||
1358 | #endif | 1359 | #endif |
1359 | } | 1360 | } |
1360 | UFS_SB(sb)->s_mount_opt = new_mount_opt; | 1361 | UFS_SB(sb)->s_mount_opt = new_mount_opt; |
1361 | unlock_super(sb); | 1362 | mutex_unlock(&UFS_SB(sb)->s_lock); |
1362 | unlock_ufs(sb); | 1363 | unlock_ufs(sb); |
1363 | return 0; | 1364 | return 0; |
1364 | } | 1365 | } |