Skip to contentSkip to conversation

ext4: do less extent validations

PATCH In review Thiemo Nagel 2 participants 4 messages Mar 12, 2009 – Mar 27, 2009 ext4 file system

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ext4: do less extent validations

Based on 2.6.29-rc7 with Aneesh Kumar's patches:
ext4: Validate extent details only when read from the disk
ext4: Add checks to validate extent entries

Sets need_to_validate=0 inside instead of outside the loop.

fs/ext4/extents.c renamed from fs/ext4/extents.c~ +1 -1
@@ -607,7 +607,6 @@
 ext4_ext_find_extent(struct inode *inode, ext4_lblk_t block,
 					struct ext4_ext_path *path)
 {
-	int need_to_validate = 0;
 	struct ext4_extent_header *eh;
 	struct buffer_head *bh;
 	short int depth, i, ppos = 0, alloc = 0;
@@ -629,6 +628,7 @@
 	i = depth;
 	/* walk through the tree */
 	while (i) {
+		int need_to_validate = 0;
 		ext_debug("depth %d: num %d, max %d\n",
 			  ppos, le16_to_cpu(eh->eh_entries), le16_to_cpu(eh->eh_max));
 
#1 lore raw
Quoted 6 lines · Thiemo Nagel

Based on 2.6.29-rc7 with Aneesh Kumar's patches:
ext4: Validate extent details only when read from the disk
ext4: Add checks to validate extent entries

Sets need_to_validate=0 inside instead of outside the loop.

OTOH, why not remove the variable altogether? (cf. attached patch)

Kind regards,

Signature · 7 lines
+-----------------------------------+--------------------------+
| Dipl.-Phys. Thiemo Nagel          |                          |
| Technische Universitaet Muenchen  | Room    PH1 3276         |
| Physik-Department E18             |                          |
| James-Franck-Strasse              | Phone  +49 89 289-12379  |
| D-85747 Garching                  | Fax    +49 89 289-12570  |
+-----------------------------------+--------------------------+
fs/ext4/extents.c renamed from fs/ext4/extents.c~ +3 -2
@@ -607,7 +607,6 @@
 ext4_ext_find_extent(struct inode *inode, ext4_lblk_t block,
 					struct ext4_ext_path *path)
 {
-	int need_to_validate = 0;
 	struct ext4_extent_header *eh;
 	struct buffer_head *bh;
 	short int depth, i, ppos = 0, alloc = 0;
@@ -646,17 +645,16 @@
 				goto err;
 			}
 			/* validate the extent entries */
-			need_to_validate = 1;
+			if (ext4_ext_check(inode, eh, i))
+				goto err;
 		}
+
 		eh = ext_block_hdr(bh);
 		ppos++;
 		BUG_ON(ppos > depth);
 		path[ppos].p_bh = bh;
 		path[ppos].p_hdr = eh;
 		i--;
maintainer
#2 lore raw
Quoted 9 lines · Thiemo Nagel
Quoted 6 lines · Thiemo Nagel

Based on 2.6.29-rc7 with Aneesh Kumar's patches:
ext4: Validate extent details only when read from the disk
ext4: Add checks to validate extent entries

Sets need_to_validate=0 inside instead of outside the loop.

OTOH, why not remove the variable altogether? (cf. attached patch)

This patch causes ext4_ext_check to be called before the variables eh is set, and before variable is updated.

- Ted

maintainer
#3 lore raw
In reply to Thiemo Nagel
Quoted 6 lines · Thiemo Nagel

Based on 2.6.29-rc7 with Aneesh Kumar's patches:
ext4: Validate extent details only when read from the disk
ext4: Add checks to validate extent entries

Sets need_to_validate=0 inside instead of outside the loop.

I've integrated this change into Aneesh's patch in the ext4 patch queue.

- Ted