Browse Source

__ufs_trunc_blocks(): turn the part after switch into a loop

... and turn the switch into if (), since all cases with
depth != 1 have just become identical.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Al Viro 10 years ago
parent
commit
42432739b5
1 changed files with 10 additions and 25 deletions
  1. 10 25
      fs/ufs/inode.c

+ 10 - 25
fs/ufs/inode.c

@@ -1222,6 +1222,7 @@ static void __ufs_truncate_blocks(struct inode *inode)
 	unsigned offsets[4];
 	int depth = ufs_block_to_path(inode, DIRECT_BLOCK, offsets);
 	int depth2;
+	unsigned i;
 
 	if (!depth)
 		return;
@@ -1232,33 +1233,17 @@ static void __ufs_truncate_blocks(struct inode *inode)
 			break;
 
 	mutex_lock(&ufsi->truncate_mutex);
-	switch (depth) {
-	case 1:
+	if (depth == 1) {
 		ufs_trunc_direct(inode);
-		goto l1;
-	case 2:
-		ufs_trunc_branch(inode, offsets + 1, depth2, 1,
-			   ufs_get_direct_data_ptr(uspi, ufsi, UFS_IND_BLOCK));
-		goto l2;
-	case 3:
-		ufs_trunc_branch(inode, offsets + 1, depth2, 2,
-			    ufs_get_direct_data_ptr(uspi, ufsi, UFS_DIND_BLOCK));
-		goto l3;
-	case 4:
-		ufs_trunc_branch(inode, offsets + 1, depth2, 3,
-			    ufs_get_direct_data_ptr(uspi, ufsi, UFS_TIND_BLOCK));
-		goto l4;
+		offsets[0] = UFS_IND_BLOCK;
+	} else {
+		ufs_trunc_branch(inode, offsets + 1, depth2, depth - 1,
+			   ufs_get_direct_data_ptr(uspi, ufsi, offsets[0]++));
+	}
+	for (i = offsets[0]; i <= UFS_TIND_BLOCK; i++) {
+		ufs_trunc_branch(inode, NULL, 0, i - UFS_IND_BLOCK + 1,
+			   ufs_get_direct_data_ptr(uspi, ufsi, i));
 	}
-l1:
-	ufs_trunc_branch(inode, NULL, 0, 1,
-			   ufs_get_direct_data_ptr(uspi, ufsi, UFS_IND_BLOCK));
-l2:
-	ufs_trunc_branch(inode, NULL, 0, 2,
-			    ufs_get_direct_data_ptr(uspi, ufsi, UFS_DIND_BLOCK));
-l3:
-	ufs_trunc_branch(inode, NULL, 0, 3,
-			    ufs_get_direct_data_ptr(uspi, ufsi, UFS_TIND_BLOCK));
-l4:
 	ufsi->i_lastfrag = DIRECT_FRAGMENT;
 	mutex_unlock(&ufsi->truncate_mutex);
 }