From 18e69ffcec97d5bce0e07594782d3b665fecc539 Mon Sep 17 00:00:00 2001 From: girish Date: Wed, 28 Jan 2009 11:29:40 +0000 Subject: [PATCH] Return EXT_UNSET_BLOCK from ext3_ext_next_leaf_block. Patch was missing for 2.6.22 Added changelog entry along with newer build version. b=16114 --- ldiskfs/ChangeLog | 8 +++++++- .../patches/ext3-extents-2.6.22-vanilla.patch | 15 ++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ldiskfs/ChangeLog b/ldiskfs/ChangeLog index 4a95b081..3b31c97 100644 --- a/ldiskfs/ChangeLog +++ b/ldiskfs/ChangeLog @@ -1,5 +1,11 @@ tbd Sun Microsystems, Inc. - * version 3.0.6 + * version 3.0.8 + +Severity : enhancement +Bugzilla : 16114 +Description: return EXT_UNSET_BLOCK from ext3_ext_next_leaf_block() +Details : With 16TB-1 filesystem, 0xffffffff is valid block number so + EXT_UNSET_BLOCK was introduced for ext3_ext_next_leaf_block() Severity : normal Bugzilla : 15320 diff --git a/ldiskfs/kernel_patches/patches/ext3-extents-2.6.22-vanilla.patch b/ldiskfs/kernel_patches/patches/ext3-extents-2.6.22-vanilla.patch index c7f9164..9e65e15 100644 --- a/ldiskfs/kernel_patches/patches/ext3-extents-2.6.22-vanilla.patch +++ b/ldiskfs/kernel_patches/patches/ext3-extents-2.6.22-vanilla.patch @@ -1162,7 +1162,7 @@ Index: linux-2.6.18.8/fs/ext3/extents.c +} + +/* -+ * returns first allocated block from next leaf or EXT_MAX_BLOCK ++ * returns first allocated block from next leaf or EXT_UNSET_BLOCK + */ +static unsigned ext3_ext_next_leaf_block(struct inode *inode, + struct ext3_ext_path *path) @@ -1174,7 +1174,7 @@ Index: linux-2.6.18.8/fs/ext3/extents.c + + /* zero-tree has no leaf blocks at all */ + if (depth == 0) -+ return EXT_MAX_BLOCK; ++ return EXT_UNSET_BLOCK; + + /* go to index block */ + depth--; @@ -1186,7 +1186,7 @@ Index: linux-2.6.18.8/fs/ext3/extents.c + depth--; + } + -+ return EXT_MAX_BLOCK; ++ return EXT_UNSET_BLOCK; +} + +/* @@ -1309,7 +1309,7 @@ Index: linux-2.6.18.8/fs/ext3/extents.c + fex = EXT_LAST_EXTENT(eh); + next = ext3_ext_next_leaf_block(inode, path); + if (le32_to_cpu(newext->ee_block) > le32_to_cpu(fex->ee_block) -+ && next != EXT_MAX_BLOCK) { ++ && next != EXT_UNSET_BLOCK) { + ext_debug(inode, "next leaf block - %d\n", next); + BUG_ON(npath != NULL); + npath = ext3_ext_find_extent(inode, next, NULL); @@ -1773,8 +1773,8 @@ Index: linux-2.6.18.8/fs/ext3/extents.c + path[depth].p_ext = ex; + + a = ex_ee_block > start ? ex_ee_block : start; -+ b = ex_ee_block + ex_ee_len - 1 < EXT_MAX_BLOCK ? -+ ex_ee_block + ex_ee_len - 1 : EXT_MAX_BLOCK; ++ b = (unsigned long long)ex_ee_block + ex_ee_len - 1 < ++ EXT_MAX_BLOCK ? ex_ee_block + ex_ee_len - 1 : EXT_MAX_BLOCK; + + ext_debug(inode, " border %u:%u\n", a, b); + @@ -2489,7 +2489,7 @@ Index: linux-2.6.18.8/include/linux/ext3_extents.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6.18.8/include/linux/ext3_extents.h 2007-07-17 09:18:14.000000000 +0200 -@@ -0,0 +1,231 @@ +@@ -0,0 +1,232 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. + * Written by Alex Tomas @@ -2643,6 +2643,7 @@ Index: linux-2.6.18.8/include/linux/ext3_extents.h + + +#define EXT_MAX_BLOCK 0xffffffff ++#define EXT_UNSET_BLOCK 1 + +#define EXT_FLAGS_CLR_UNKNOWN 0x7 /* Flags cleared on modification */ +#define EXT_HDR_GEN_BITS 24 -- 1.8.3.1