Browse Source

btrfs_drop_extent fixe for inline items > 8K

When truncating a inline extent, btrfs_drop_extents doesn't properly
handle the case "key.offset > inline_limit". This bug can only happen
when max line size is larger than 8K.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
Yan 17 years ago
parent
commit
0181e58f91
1 changed files with 3 additions and 5 deletions
  1. 3 5
      fs/btrfs/file.c

+ 3 - 5
fs/btrfs/file.c

@@ -591,8 +591,7 @@ next_slot:
 				}
 				}
 			}
 			}
 			bookend = 1;
 			bookend = 1;
-			if (found_inline && start <= key.offset &&
-			    inline_limit < extent_end)
+			if (found_inline && start <= key.offset)
 				keep = 1;
 				keep = 1;
 		}
 		}
 		/* truncate existing extent */
 		/* truncate existing extent */
@@ -672,11 +671,10 @@ next_slot:
 			if (!bookend)
 			if (!bookend)
 				continue;
 				continue;
 		}
 		}
-		if (bookend && found_inline && start <= key.offset &&
-		    inline_limit < extent_end && key.offset <= inline_limit) {
+		if (bookend && found_inline && start <= key.offset) {
 			u32 new_size;
 			u32 new_size;
 			new_size = btrfs_file_extent_calc_inline_size(
 			new_size = btrfs_file_extent_calc_inline_size(
-						   extent_end - inline_limit);
+						   extent_end - end);
 			btrfs_truncate_item(trans, root, path, new_size, 0);
 			btrfs_truncate_item(trans, root, path, new_size, 0);
 		}
 		}
 		/* create bookend, splitting the extent in two */
 		/* create bookend, splitting the extent in two */