Browse Source

ufs_trunc_branch(): separate the calls with non-NULL offsets

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

+ 7 - 4
fs/ufs/inode.c

@@ -1091,13 +1091,16 @@ static void ufs_trunc_branch(struct inode *inode, unsigned *offsets, int depth2,
 	}
 
 	if (--depth) {
-		if (!--depth2)
-			offsets = NULL;
-		for (i = from ; i < uspi->s_apb ; i++, offsets = NULL) {
-			void *ind = ubh_get_data_ptr(uspi, ubh, i);
+		if (offsets && --depth2) {
+			void *ind = ubh_get_data_ptr(uspi, ubh, from++);
 			ufs_trunc_branch(inode, offsets, depth2, depth, ind);
 			ubh_mark_buffer_dirty(ubh);
 		}
+		for (i = from ; i < uspi->s_apb ; i++) {
+			void *ind = ubh_get_data_ptr(uspi, ubh, i);
+			ufs_trunc_branch(inode, NULL, 0, depth, ind);
+			ubh_mark_buffer_dirty(ubh);
+		}
 	} else {
 		u64 frag_to_free = 0;
 		unsigned free_count = 0;