Browse Source

btrfs_drop_extents: handle BTRFS_INODE_REF_KEY types
It's possible "key.type == BTRFS_INODE_REF_KEY" and "key.offset >= end".

Signed-off-by: Chris Mason <chris.mason@oracle.com>

Yan 17 years ago
parent
commit
7261009cea
1 changed files with 4 additions and 3 deletions
  1. 4 3
      fs/btrfs/file.c

+ 4 - 3
fs/btrfs/file.c

@@ -507,11 +507,12 @@ next_slot:
 		slot = path->slots[0];
 		ret = 0;
 		btrfs_item_key_to_cpu(leaf, &key, slot);
-
-		if (key.offset >= end || key.objectid != inode->i_ino) {
+		if (btrfs_key_type(&key) == BTRFS_EXTENT_DATA_KEY &&
+		    key.offset >= end) {
 			goto out;
 		}
-		if (btrfs_key_type(&key) > BTRFS_EXTENT_DATA_KEY) {
+		if (btrfs_key_type(&key) > BTRFS_EXTENT_DATA_KEY ||
+		    key.objectid != inode->i_ino) {
 			goto out;
 		}
 		if (recow) {