Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ufs: kill lock_ufs()

There were 3 remaining users; in two of them we took ->s_lock immediately
after lock_ufs() and held it until just before unlock_ufs(); the third
one (statfs) could not be called from itself or from other two (remount
and sync_fs). Just use ->s_lock in statfs and don't bother with lock_ufs
at all.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro dff7cfd3 724bb09f

+2 -37
+2 -32
fs/ufs/super.c
··· 94 94 #include "swab.h" 95 95 #include "util.h" 96 96 97 - void lock_ufs(struct super_block *sb) 98 - { 99 - struct ufs_sb_info *sbi = UFS_SB(sb); 100 - 101 - mutex_lock(&sbi->mutex); 102 - sbi->mutex_owner = current; 103 - } 104 - 105 - void unlock_ufs(struct super_block *sb) 106 - { 107 - struct ufs_sb_info *sbi = UFS_SB(sb); 108 - 109 - sbi->mutex_owner = NULL; 110 - mutex_unlock(&sbi->mutex); 111 - } 112 - 113 97 static struct inode *ufs_nfs_get_inode(struct super_block *sb, u64 ino, u32 generation) 114 98 { 115 99 struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi; ··· 678 694 struct ufs_super_block_third * usb3; 679 695 unsigned flags; 680 696 681 - lock_ufs(sb); 682 697 mutex_lock(&UFS_SB(sb)->s_lock); 683 698 684 699 UFSD("ENTER\n"); ··· 697 714 698 715 UFSD("EXIT\n"); 699 716 mutex_unlock(&UFS_SB(sb)->s_lock); 700 - unlock_ufs(sb); 701 717 702 718 return 0; 703 719 } ··· 740 758 741 759 ubh_brelse_uspi (sbi->s_uspi); 742 760 kfree (sbi->s_uspi); 743 - mutex_destroy(&sbi->mutex); 744 761 kfree (sbi); 745 762 sb->s_fs_info = NULL; 746 763 UFSD("EXIT\n"); ··· 782 801 783 802 UFSD("flag %u\n", (int)(sb->s_flags & MS_RDONLY)); 784 803 785 - mutex_init(&sbi->mutex); 786 804 mutex_init(&sbi->s_lock); 787 805 spin_lock_init(&sbi->work_lock); 788 806 INIT_DELAYED_WORK(&sbi->sync_work, delayed_sync_fs); ··· 1237 1257 return 0; 1238 1258 1239 1259 failed: 1240 - mutex_destroy(&sbi->mutex); 1241 1260 if (ubh) 1242 1261 ubh_brelse_uspi (uspi); 1243 1262 kfree (uspi); ··· 1259 1280 unsigned flags; 1260 1281 1261 1282 sync_filesystem(sb); 1262 - lock_ufs(sb); 1263 1283 mutex_lock(&UFS_SB(sb)->s_lock); 1264 1284 uspi = UFS_SB(sb)->s_uspi; 1265 1285 flags = UFS_SB(sb)->s_flags; ··· 1274 1296 ufs_set_opt (new_mount_opt, ONERROR_LOCK); 1275 1297 if (!ufs_parse_options (data, &new_mount_opt)) { 1276 1298 mutex_unlock(&UFS_SB(sb)->s_lock); 1277 - unlock_ufs(sb); 1278 1299 return -EINVAL; 1279 1300 } 1280 1301 if (!(new_mount_opt & UFS_MOUNT_UFSTYPE)) { ··· 1281 1304 } else if ((new_mount_opt & UFS_MOUNT_UFSTYPE) != ufstype) { 1282 1305 pr_err("ufstype can't be changed during remount\n"); 1283 1306 mutex_unlock(&UFS_SB(sb)->s_lock); 1284 - unlock_ufs(sb); 1285 1307 return -EINVAL; 1286 1308 } 1287 1309 1288 1310 if ((*mount_flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) { 1289 1311 UFS_SB(sb)->s_mount_opt = new_mount_opt; 1290 1312 mutex_unlock(&UFS_SB(sb)->s_lock); 1291 - unlock_ufs(sb); 1292 1313 return 0; 1293 1314 } 1294 1315 ··· 1310 1335 #ifndef CONFIG_UFS_FS_WRITE 1311 1336 pr_err("ufs was compiled with read-only support, can't be mounted as read-write\n"); 1312 1337 mutex_unlock(&UFS_SB(sb)->s_lock); 1313 - unlock_ufs(sb); 1314 1338 return -EINVAL; 1315 1339 #else 1316 1340 if (ufstype != UFS_MOUNT_UFSTYPE_SUN && ··· 1319 1345 ufstype != UFS_MOUNT_UFSTYPE_UFS2) { 1320 1346 pr_err("this ufstype is read-only supported\n"); 1321 1347 mutex_unlock(&UFS_SB(sb)->s_lock); 1322 - unlock_ufs(sb); 1323 1348 return -EINVAL; 1324 1349 } 1325 1350 if (!ufs_read_cylinder_structures(sb)) { 1326 1351 pr_err("failed during remounting\n"); 1327 1352 mutex_unlock(&UFS_SB(sb)->s_lock); 1328 - unlock_ufs(sb); 1329 1353 return -EPERM; 1330 1354 } 1331 1355 sb->s_flags &= ~MS_RDONLY; ··· 1331 1359 } 1332 1360 UFS_SB(sb)->s_mount_opt = new_mount_opt; 1333 1361 mutex_unlock(&UFS_SB(sb)->s_lock); 1334 - unlock_ufs(sb); 1335 1362 return 0; 1336 1363 } 1337 1364 ··· 1362 1391 struct ufs_super_block_third *usb3; 1363 1392 u64 id = huge_encode_dev(sb->s_bdev->bd_dev); 1364 1393 1365 - lock_ufs(sb); 1366 - 1394 + mutex_lock(&UFS_SB(sb)->s_lock); 1367 1395 usb3 = ubh_get_usb_third(uspi); 1368 1396 1369 1397 if ((flags & UFS_TYPE_MASK) == UFS_TYPE_UFS2) { ··· 1383 1413 buf->f_fsid.val[0] = (u32)id; 1384 1414 buf->f_fsid.val[1] = (u32)(id >> 32); 1385 1415 1386 - unlock_ufs(sb); 1416 + mutex_unlock(&UFS_SB(sb)->s_lock); 1387 1417 1388 1418 return 0; 1389 1419 }
-5
fs/ufs/ufs.h
··· 24 24 unsigned s_cgno[UFS_MAX_GROUP_LOADED]; 25 25 unsigned short s_cg_loaded; 26 26 unsigned s_mount_opt; 27 - struct mutex mutex; 28 - struct task_struct *mutex_owner; 29 27 struct super_block *sb; 30 28 int work_queued; /* non-zero if the delayed work is queued */ 31 29 struct delayed_work sync_work; /* FS sync delayed work */ ··· 169 171 { 170 172 return do_div(b, uspi->s_fpg); 171 173 } 172 - 173 - extern void lock_ufs(struct super_block *sb); 174 - extern void unlock_ufs(struct super_block *sb); 175 174 176 175 #endif /* _UFS_UFS_H */