re-remove xfs custom bitops
PATCH 1/1 re-remove xfs custom bitops
Once more, with feeling!
This re-instates the reverted mod after the ppc panic of Feb '08. You guys do have ppc boxes in the test farm now right? :)
This keeps xfs_lowbit64 as it was since there aren't good generic helpers there ...
This should probably keep Dave's signed-off line, there's a bit of my (userspace) testing here but no original work.
This exact patch isn't tested but it's based on a conglomeration of prior testing...
Thanks,
-Eric
fs/xfs/xfs_bit.c +0 -103
@@ -25,109 +25,6 @@* XFS bit manipulation routines, used in non-realtime code. */ -#ifndef HAVE_ARCH_HIGHBIT -/* -* Index of high bit number in byte, -1 for none set, 0..7 otherwise. -*/ -static const char xfs_highbit[256 ] = { --1 ,0 ,1 ,1 ,2 ,2 ,2 ,2 ,/* 00 .. 07 */ -3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,/* 08 .. 0f */ -4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,/* 10 .. 17 */ -4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,/* 18 .. 1f */ -5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,/* 20 .. 27 */ -5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,/* 28 .. 2f */ -5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,/* 30 .. 37 */ -5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,/* 38 .. 3f */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 40 .. 47 */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 48 .. 4f */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 50 .. 57 */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 58 .. 5f */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 60 .. 67 */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 68 .. 6f */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 70 .. 77 */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 78 .. 7f */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* 80 .. 87 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* 88 .. 8f */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* 90 .. 97 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* 98 .. 9f */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* a0 .. a7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* a8 .. af */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* b0 .. b7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* b8 .. bf */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* c0 .. c7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* c8 .. cf */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* d0 .. d7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* d8 .. df */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* e0 .. e7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* e8 .. ef */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* f0 .. f7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* f8 .. ff */ -}; -#endif - -/* -* xfs_highbit32: get high bit set out of 32-bit argument, -1 if none set. -*/ -inline int -xfs_highbit32 ( -__uint32_t v) -{ -#ifdef HAVE_ARCH_HIGHBIT -return highbit32 (v); -#else -int i; - -if (v &0xffff0000 ) -if (v &0xff000000 ) - i =24 ; -else - i =16 ; -else if (v &0x0000ffff ) -if (v &0x0000ff00 ) - i =8 ; -else - i =0 ; -else -return -1 ; -return i + xfs_highbit[(v >> i) &0xff ]; -#endif -} - -/* -* xfs_lowbit64: get low bit set out of 64-bit argument, -1 if none set. -*/ -int -xfs_lowbit64 ( -__uint64_t v) -{ -__uint32_t w = (__uint32_t )v; -int n =0 ; - -if (w) {/* lower bits */ - n =ffs (w); - }else {/* upper bits */ - w = (__uint32_t)(v >>32 ); -if (w && (n =ffs (w))) - n +=32 ; - } -return n -1 ; -} - -/* -* xfs_highbit64: get high bit set out of 64-bit argument, -1 if none set. -*/ -int -xfs_highbit64 ( -__uint64_t v) -{ -__uint32_t h = (__uint32_t)(v >>32 ); - -if (h) -return xfs_highbit32 (h) +32 ; -return xfs_highbit32 ((__uint32_t )v); -} - -/* * Return whether bitmap is empty. * Size is number of words in the bitmap, which is padded to word boundary
fs/xfs/xfs_bit.h +31 -5
@@ -47,13 +47,39 @@ static inline __uint64_t xfs_mask64lo(in }/* Get high bit set out of 32-bit argument, -1 if none set */ -extern int xfs_highbit32 (__uint32_t v); - -/* Get low bit set out of 64-bit argument, -1 if none set */ -extern int xfs_lowbit64 (__uint64_t v); +static inline int xfs_highbit32 (__uint32_t v) +{ +return fls (v) -1 ; +}/* Get high bit set out of 64-bit argument, -1 if none set */ -extern int xfs_highbit64 (__uint64_t ); +static inline int xfs_highbit64 (__uint64_t v) +{ +return fls64 (v) -1 ; +} + +/* Get low bit set out of 32-bit argument, -1 if none set */ +static inline int xfs_lowbit32 (__uint32_t v) +{ +unsigned long t = v; +return (v) ?find_first_bit (&t,32 ) :-1 ; +} + +/* Get low bit set out of 64-bit argument, -1 if none set */ +static inline int xfs_lowbit64 (__uint64_t v) +{ +__uint32_t w = (__uint32_t )v; +int n =0 ; + +if (w) {/* lower bits */ + n =ffs (w); + }else {/* upper bits */ + w = (__uint32_t)(v >>32 ); +if (w && (n =ffs (w))) + n +=32 ; + } +return n -1 ; +}/* Return whether bitmap is empty (1 == empty) */ extern int xfs_bitmap_empty (uint *map,uint size);
fs/xfs/xfs_rtalloc.c +7 -12
@@ -74,18 +74,6 @@ STATIC int xfs_rtmodify_summary(xfs_moun*/ /* -* xfs_lowbit32: get low bit set out of 32-bit argument, -1 if none set. -*/ -STATIC int -xfs_lowbit32 ( -__uint32_t v) -{ -if (v) -return ffs (v) -1 ; -return -1 ; -} - -/* * Allocate space to the bitmap or summary file, and zero it, for growfs. */ STATIC int/* error */
@@ -450,6 +438,7 @@ xfs_rtallocate_extent_near( } bbno =XFS_BITTOBLOCK (mp, bno); i =0 ; +ASSERT (minlen !=0 ); log2len =xfs_highbit32 (minlen);/* * Loop over all bitmap blocks (bbno + i is current block).
@@ -618,6 +607,8 @@ xfs_rtallocate_extent_size(xfs_suminfo_t sum;/* summary information for extents */ ASSERT (minlen % prod ==0 && maxlen % prod ==0 ); +ASSERT (maxlen !=0 ); +/* * Loop over all the levels starting with maxlen. * At each level, look at all the bitmap blocks, to see if there
@@ -675,6 +666,9 @@ xfs_rtallocate_extent_size( *rtblock =NULLRTBLOCK ;return 0 ; } +ASSERT (minlen !=0 ); +ASSERT (maxlen !=0 ); +/* * Loop over sizes, from maxlen down to minlen. * This time, when we do the allocations, allow smaller ones
@@ -1961,6 +1955,7 @@ xfs_growfs_rt( nsbp->sb_blocksize * nsbp->sb_rextsize); nsbp->sb_rextents = nsbp->sb_rblocks;do_div (nsbp->sb_rextents, nsbp->sb_rextsize); +ASSERT (nsbp->sb_rextents !=0 ); nsbp->sb_rextslog =xfs_highbit32 (nsbp->sb_rextents); nrsumlevels = nmp->m_rsumlevels = nsbp->sb_rextslog +1 ; nrsumsize =
Quoted 5 lines · Eric Sandeen
Once more, with feeling!
This re-instates the reverted mod after the ppc panic of Feb '08. You guys do have ppc boxes in the test farm now right? :)
Quoted 8 lines
This keeps
xfs_lowbit64as it was since there aren't good generic helpers there ...This should probably keep Dave's signed-off line, there's a bit of my (userspace) testing here but no original work.
This exact patch isn't tested but it's based on a conglomeration of prior testing...
SGI guys, any takers on this one?
-Eric
Quoted 227 lines
Thanks,
-EricIndex:
linux-2.6-xfs/fs/xfs/xfs_bit.c
===================================================================fs/xfs/xfs_bit.c +0
-103@@ -25,109 +25,6 @@* XFS bit manipulation routines, used in non-realtime code. */ -#ifndef HAVE_ARCH_HIGHBIT -/* -* Index of high bit number in byte, -1 for none set, 0..7 otherwise. -*/ -static const char xfs_highbit[256 ] = { --1 ,0 ,1 ,1 ,2 ,2 ,2 ,2 ,/* 00 .. 07 */ -3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,/* 08 .. 0f */ -4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,/* 10 .. 17 */ -4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,/* 18 .. 1f */ -5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,/* 20 .. 27 */ -5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,/* 28 .. 2f */ -5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,/* 30 .. 37 */ -5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,/* 38 .. 3f */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 40 .. 47 */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 48 .. 4f */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 50 .. 57 */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 58 .. 5f */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 60 .. 67 */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 68 .. 6f */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 70 .. 77 */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 78 .. 7f */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* 80 .. 87 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* 88 .. 8f */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* 90 .. 97 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* 98 .. 9f */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* a0 .. a7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* a8 .. af */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* b0 .. b7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* b8 .. bf */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* c0 .. c7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* c8 .. cf */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* d0 .. d7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* d8 .. df */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* e0 .. e7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* e8 .. ef */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* f0 .. f7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* f8 .. ff */ -}; -#endif - -/* -* xfs_highbit32: get high bit set out of 32-bit argument, -1 if none set. -*/ -inline int -xfs_highbit32 ( -__uint32_t v) -{ -#ifdef HAVE_ARCH_HIGHBIT -return highbit32 (v); -#else -int i; - -if (v &0xffff0000 ) -if (v &0xff000000 ) - i =24 ; -else - i =16 ; -else if (v &0x0000ffff ) -if (v &0x0000ff00 ) - i =8 ; -else - i =0 ; -else -return -1 ; -return i + xfs_highbit[(v >> i) &0xff ]; -#endif -} - -/* -* xfs_lowbit64: get low bit set out of 64-bit argument, -1 if none set. -*/ -int -xfs_lowbit64 ( -__uint64_t v) -{ -__uint32_t w = (__uint32_t )v; -int n =0 ; - -if (w) {/* lower bits */ - n =ffs (w); - }else {/* upper bits */ - w = (__uint32_t)(v >>32 ); -if (w && (n =ffs (w))) - n +=32 ; - } -return n -1 ; -} - -/* -* xfs_highbit64: get high bit set out of 64-bit argument, -1 if none set. -*/ -int -xfs_highbit64 ( -__uint64_t v) -{ -__uint32_t h = (__uint32_t)(v >>32 ); - -if (h) -return xfs_highbit32 (h) +32 ; -return xfs_highbit32 ((__uint32_t )v); -} - -/* * Return whether bitmap is empty. * Size is number of words in the bitmap, which is padded to word boundary Index:
linux-2.6-xfs/fs/xfs/xfs_bit.h
===================================================================fs/xfs/xfs_bit.h +31
-5@@ -47,13 +47,39 @@ static inline __uint64_t xfs_mask64lo(in }/* Get high bit set out of 32-bit argument, -1 if none set */ -extern int xfs_highbit32 (__uint32_t v); - -/* Get low bit set out of 64-bit argument, -1 if none set */ -extern int xfs_lowbit64 (__uint64_t v); +static inline int xfs_highbit32 (__uint32_t v) +{ +return fls (v) -1 ; +}/* Get high bit set out of 64-bit argument, -1 if none set */ -extern int xfs_highbit64 (__uint64_t ); +static inline int xfs_highbit64 (__uint64_t v) +{ +return fls64 (v) -1 ; +} + +/* Get low bit set out of 32-bit argument, -1 if none set */ +static inline int xfs_lowbit32 (__uint32_t v) +{ +unsigned long t = v; +return (v) ?find_first_bit (&t,32 ) :-1 ; +} + +/* Get low bit set out of 64-bit argument, -1 if none set */ +static inline int xfs_lowbit64 (__uint64_t v) +{ +__uint32_t w = (__uint32_t )v; +int n =0 ; + +if (w) {/* lower bits */ + n =ffs (w); + }else {/* upper bits */ + w = (__uint32_t)(v >>32 ); +if (w && (n =ffs (w))) + n +=32 ; + } +return n -1 ; +}/* Return whether bitmap is empty (1 == empty) */ extern int xfs_bitmap_empty (uint *map,uint size);Index:
linux-2.6-xfs/fs/xfs/xfs_rtalloc.c
===================================================================fs/xfs/xfs_rtalloc.c +7
-12@@ -74,18 +74,6 @@ STATIC int xfs_rtmodify_summary(xfs_moun*/ /* -* xfs_lowbit32: get low bit set out of 32-bit argument, -1 if none set. -*/ -STATIC int -xfs_lowbit32 ( -__uint32_t v) -{ -if (v) -return ffs (v) -1 ; -return -1 ; -} - -/* * Allocate space to the bitmap or summary file, and zero it, for growfs. */ STATIC int/* error */ @@ -450,6 +438,7 @@ xfs_rtallocate_extent_near( } bbno =XFS_BITTOBLOCK (mp, bno); i =0 ; +ASSERT (minlen !=0 ); log2len =xfs_highbit32 (minlen);/* * Loop over all bitmap blocks (bbno + i is current block). @@ -618,6 +607,8 @@ xfs_rtallocate_extent_size(xfs_suminfo_t sum;/* summary information for extents */ ASSERT (minlen % prod ==0 && maxlen % prod ==0 ); +ASSERT (maxlen !=0 ); +/* * Loop over all the levels starting with maxlen. * At each level, look at all the bitmap blocks, to see if there @@ -675,6 +666,9 @@ xfs_rtallocate_extent_size( *rtblock =NULLRTBLOCK ;return 0 ; } +ASSERT (minlen !=0 ); +ASSERT (maxlen !=0 ); +/* * Loop over sizes, from maxlen down to minlen. * This time, when we do the allocations, allow smaller ones @@ -1961,6 +1955,7 @@ xfs_growfs_rt( nsbp->sb_blocksize * nsbp->sb_rextsize); nsbp->sb_rextents = nsbp->sb_rblocks;do_div (nsbp->sb_rextents, nsbp->sb_rextsize); +ASSERT (nsbp->sb_rextents !=0 ); nsbp->sb_rextslog =xfs_highbit32 (nsbp->sb_rextents); nrsumlevels = nmp->m_rsumlevels = nsbp->sb_rextslog +1 ; nrsumsize =
Quoted 9 lines · Eric Sandeen
Quoted 8 lines · Eric Sandeen
Once more, with feeling!
This re-instates the reverted mod after the ppc panic of Feb '08. You guys do have ppc boxes in the test farm now right? :)
This keeps
xfs_lowbit64as it was since there aren't good generic helpers there ...
Quoted 8 lines
Quoted 5 lines
This should probably keep Dave's signed-off line, there's a bit of my (userspace) testing here but no original work.
This exact patch isn't tested but it's based on a conglomeration of prior testing...
SGI guys, any takers on this one?
-Eric
Sorry Eric, havent had chance to run this on all platforms yet. I want to test it on ppc as well as the usual x86_64/ia64 combinations, then I'll get it committed.
Don
Quoted 229 lines
Quoted 228 lines
Thanks,
-EricIndex:
linux-2.6-xfs/fs/xfs/xfs_bit.c
===================================================================fs/xfs/xfs_bit.c +0
-103@@ -25,109 +25,6 @@* XFS bit manipulation routines, used in non-realtime code. */ -#ifndef HAVE_ARCH_HIGHBIT -/* -* Index of high bit number in byte, -1 for none set, 0..7 otherwise. -*/ -static const char xfs_highbit[256 ] = { --1 ,0 ,1 ,1 ,2 ,2 ,2 ,2 ,/* 00 .. 07 */ -3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,/* 08 .. 0f */ -4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,/* 10 .. 17 */ -4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,/* 18 .. 1f */ -5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,/* 20 .. 27 */ -5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,/* 28 .. 2f */ -5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,/* 30 .. 37 */ -5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,/* 38 .. 3f */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 40 .. 47 */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 48 .. 4f */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 50 .. 57 */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 58 .. 5f */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 60 .. 67 */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 68 .. 6f */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 70 .. 77 */ -6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,/* 78 .. 7f */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* 80 .. 87 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* 88 .. 8f */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* 90 .. 97 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* 98 .. 9f */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* a0 .. a7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* a8 .. af */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* b0 .. b7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* b8 .. bf */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* c0 .. c7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* c8 .. cf */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* d0 .. d7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* d8 .. df */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* e0 .. e7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* e8 .. ef */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* f0 .. f7 */ -7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,/* f8 .. ff */ -}; -#endif - -/* -* xfs_highbit32: get high bit set out of 32-bit argument, -1 if none set. -*/ -inline int -xfs_highbit32 ( -__uint32_t v) -{ -#ifdef HAVE_ARCH_HIGHBIT -return highbit32 (v); -#else -int i; - -if (v &0xffff0000 ) -if (v &0xff000000 ) - i =24 ; -else - i =16 ; -else if (v &0x0000ffff ) -if (v &0x0000ff00 ) - i =8 ; -else - i =0 ; -else -return -1 ; -return i + xfs_highbit[(v >> i) &0xff ]; -#endif -} - -/* -* xfs_lowbit64: get low bit set out of 64-bit argument, -1 if none set. -*/ -int -xfs_lowbit64 ( -__uint64_t v) -{ -__uint32_t w = (__uint32_t )v; -int n =0 ; - -if (w) {/* lower bits */ - n =ffs (w); - }else {/* upper bits */ - w = (__uint32_t)(v >>32 ); -if (w && (n =ffs (w))) - n +=32 ; - } -return n -1 ; -} - -/* -* xfs_highbit64: get high bit set out of 64-bit argument, -1 if none set. -*/ -int -xfs_highbit64 ( -__uint64_t v) -{ -__uint32_t h = (__uint32_t)(v >>32 ); - -if (h) -return xfs_highbit32 (h) +32 ; -return xfs_highbit32 ((__uint32_t )v); -} - -/* * Return whether bitmap is empty. * Size is number of words in the bitmap, which is padded to word boundary Index:
linux-2.6-xfs/fs/xfs/xfs_bit.h
===================================================================fs/xfs/xfs_bit.h +31
-5@@ -47,13 +47,39 @@ static inline __uint64_t xfs_mask64lo(in }/* Get high bit set out of 32-bit argument, -1 if none set */ -extern int xfs_highbit32 (__uint32_t v); - -/* Get low bit set out of 64-bit argument, -1 if none set */ -extern int xfs_lowbit64 (__uint64_t v); +static inline int xfs_highbit32 (__uint32_t v) +{ +return fls (v) -1 ; +}/* Get high bit set out of 64-bit argument, -1 if none set */ -extern int xfs_highbit64 (__uint64_t ); +static inline int xfs_highbit64 (__uint64_t v) +{ +return fls64 (v) -1 ; +} + +/* Get low bit set out of 32-bit argument, -1 if none set */ +static inline int xfs_lowbit32 (__uint32_t v) +{ +unsigned long t = v; +return (v) ?find_first_bit (&t,32 ) :-1 ; +} + +/* Get low bit set out of 64-bit argument, -1 if none set */ +static inline int xfs_lowbit64 (__uint64_t v) +{ +__uint32_t w = (__uint32_t )v; +int n =0 ; + +if (w) {/* lower bits */ + n =ffs (w); + }else {/* upper bits */ + w = (__uint32_t)(v >>32 ); +if (w && (n =ffs (w))) + n +=32 ; + } +return n -1 ; +}/* Return whether bitmap is empty (1 == empty) */ extern int xfs_bitmap_empty (uint *map,uint size);Index:
linux-2.6-xfs/fs/xfs/xfs_rtalloc.c
===================================================================fs/xfs/xfs_rtalloc.c +7
-12@@ -74,18 +74,6 @@ STATIC int xfs_rtmodify_summary(xfs_moun*/ /* -* xfs_lowbit32: get low bit set out of 32-bit argument, -1 if none set. -*/ -STATIC int -xfs_lowbit32 ( -__uint32_t v) -{ -if (v) -return ffs (v) -1 ; -return -1 ; -} - -/* * Allocate space to the bitmap or summary file, and zero it, for growfs. */ STATIC int/* error */ @@ -450,6 +438,7 @@ xfs_rtallocate_extent_near( } bbno =XFS_BITTOBLOCK (mp, bno); i =0 ; +ASSERT (minlen !=0 ); log2len =xfs_highbit32 (minlen);/* * Loop over all bitmap blocks (bbno + i is current block). @@ -618,6 +607,8 @@ xfs_rtallocate_extent_size(xfs_suminfo_t sum;/* summary information for extents */ ASSERT (minlen % prod ==0 && maxlen % prod ==0 ); +ASSERT (maxlen !=0 ); +/* * Loop over all the levels starting with maxlen. * At each level, look at all the bitmap blocks, to see if there @@ -675,6 +666,9 @@ xfs_rtallocate_extent_size( *rtblock =NULLRTBLOCK ;return 0 ; } +ASSERT (minlen !=0 ); +ASSERT (maxlen !=0 ); +/* * Loop over sizes, from maxlen down to minlen. * This time, when we do the allocations, allow smaller ones @@ -1961,6 +1955,7 @@ xfs_growfs_rt( nsbp->sb_blocksize * nsbp->sb_rextsize); nsbp->sb_rextents = nsbp->sb_rblocks;do_div (nsbp->sb_rextents, nsbp->sb_rextsize); +ASSERT (nsbp->sb_rextents !=0 ); nsbp->sb_rextslog =xfs_highbit32 (nsbp->sb_rextents); nrsumlevels = nmp->m_rsumlevels = nsbp->sb_rextslog +1 ; nrsumsize =
Quoted 15 lines · Donald Douwsma
Quoted 14 lines · Eric Sandeen
Quoted 13 lines · Eric Sandeen
Once more, with feeling!
This re-instates the reverted mod after the ppc panic of Feb '08. You guys do have ppc boxes in the test farm now right? :)
This keeps
xfs_lowbit64as it was since there aren't good generic helpers there ...This should probably keep Dave's signed-off line, there's a bit of my (userspace) testing here but no original work.
This exact patch isn't tested but it's based on a conglomeration of prior testing...
Quoted 8 lines
Quoted 2 lines
SGI guys, any takers on this one?
-EricSorry Eric, havent had chance to run this on all platforms yet. I want to test it on ppc as well as the usual x86_64/ia64 combinations, then I'll get it committed.
Don
Don, how's that all going then? :)
Thanks,
-Eric
Quoted 18 lines · Eric Sandeen
Quoted 17 lines · Donald Douwsma
Quoted 16 lines · Eric Sandeen
Quoted 5 lines · Eric Sandeen
Once more, with feeling!
This re-instates the reverted mod after the ppc panic of Feb '08. You guys do have ppc boxes in the test farm now right? :)
Quoted 8 lines
This keeps
xfs_lowbit64as it was since there aren't good generic helpers there ...This should probably keep Dave's signed-off line, there's a bit of my (userspace) testing here but no original work.
This exact patch isn't tested but it's based on a conglomeration of prior testing...
SGI guys, any takers on this one?
-Eric
Quoted 8 lines
Quoted 5 lines
Sorry Eric, havent had chance to run this on all platforms yet. I want to test it on ppc as well as the usual x86_64/ia64 combinations, then I'll get it committed.
Don
Don, how's that all going then? :)
Good question, got sidetracked with product releases.
First time round I hit an Oops on xfstests/177 while running the auto group on ppc32. I dont seem to hit it running the single test, its intermittent.
I also hit this oops once back in Feb running x86_64, which was around the time we pulled the last version of this cleanup out, but it may be unrelated.
Looping through the auto group overnight, I'll see If I hit it again.
XFS mounting filesystem hdb4
Ending clean XFS mount for filesystem: hdb4
Device hdb4 - bad inode magic/vsn daddr 23607192 #0 (magic=0)
------------[ cut here ]------------ kernel BUG at fs/xfs/support/debug.c:54! Oops: Exception in kernel mode, sig: 5 [#1] PowerMac Modules linked in: iptable_filter ip_tables ip6table_filter ip6_tables x_tables ipv6 dm_mod ide_cd_mod cdrom uninorth_agp ohci1394 agpgart sungem sungem_phy natsemi ieee1394 ehci_hcd NIP: c01955c8 LR: c01955bc CTR: c0032cc4 REGS: c3359d10 TRAP: 0700 Not tainted (2.6.25-donaldd) MSR: 00029032 <EE,ME,IR,DR> CR: 24002082 XER: 00000000
TASK = da1a4660[31911] 'xfssyncd' THREAD: c3358000
GPR00: 00000001 c3359dc0 da1a4660 00000041 00000001 00000000 00000000 00000001
GPR08: 0014ff97 c0500d48 d2aea3f2 c0500d48 00190834 00000000 0242db00 0242dc14
GPR16: 0242d860 02464870 0242dc38 c0448f8c c04512c8 00000000 c0160984 c3359e88
GPR24: 00000000 00000020 c3b1d1e0 00000000 c3359e90 00000000 c056cf34 00009032 NIP [c01955c8] cmn_err+0xd4/0xec
LR [c01955bc] cmn_err+0xc8/0xec
Call Trace: [c3359dc0] [c01955bc] cmn_err+0xc8/0xec (unreliable) [c3359e00] [c0160844] xfs_imap_to_bp+0x1a0/0x200 [c3359e80] [c0160984] xfs_itobp+0xe0/0x18c [c3359ed0] [c0162890] xfs_iflush+0x268/0x3f4 [c3359f10] [c017f98c] xfs_finish_reclaim+0xe8/0x190 [c3359f30] [c017facc] xfs_finish_reclaim_all+0x98/0xf4 [c3359f60] [c017ded0] xfs_syncsub+0x5c/0x290 [c3359f90] [c0192820] xfs_sync_worker+0x30/0x64 [c3359fa0] [c019404c] xfssyncd+0x118/0x16c [c3359fe0] [c004a790] kthread+0x4c/0x88 [c3359ff0] [c0012f9c] kernel_thread+0x44/0x60 Instruction dump: 7c1e19ae 3d20c03a 57a0103a 39291c84 3c60c047 7c89002e 7fc5f378 3863ae70 4bea0c49 7fe00124 7fa00034 5400d97e <0f000000> 80010044 bba10034 38210040 ---[ end trace f4636d0864e8be53 ]---
Quoted 2 lines · Donald Douwsma
First time round I hit an Oops on xfstests/177 while running the auto group on ppc32. I dont seem to hit it running the single test, its intermittent.
Funky. Do you ever hit it w/ the patch reverted?
-Eric
Quoted 6 lines · Eric Sandeen
Quoted 2 lines · Donald Douwsma
First time round I hit an Oops on xfstests/177 while running the auto group on ppc32. I dont seem to hit it running the single test, its intermittent.
Funky. Do you ever hit it w/ the patch reverted?
That's the question. So far no, the QA guys said they hit it a while ago, but the time frame still matches last time. I dont think this is related but I need to get some more ppc32 runs without.
I'm probably being over cautious but I'd like to avoid the inagain/outagain/inagain/outagain approach we keep using with some of these cleanups.
Don
Quoted 7 lines · Donald Douwsma
Quoted 5 lines · Eric Sandeen
Quoted 2 lines · Donald Douwsma
First time round I hit an Oops on xfstests/177 while running the auto group on ppc32. I dont seem to hit it running the single test, its intermittent.
Funky. Do you ever hit it w/ the patch reverted?
Quoted 7 lines
That's the question. So far no, the QA guys said they hit it a while ago, but the time frame still matches last time. I dont think this is related but I need to get some more ppc32 runs without.
I'm probably being over cautious but I'd like to avoid the inagain/outagain/inagain/outagain approach we keep using with some of these cleanups.
Yep, I totally understand, I'd do just the same. :)
-Eric
Quoted 12 lines · Donald Douwsma
Quoted 6 lines · Eric Sandeen
Quoted 2 lines · Donald Douwsma
First time round I hit an Oops on xfstests/177 while running the auto group on ppc32. I dont seem to hit it running the single test, its intermittent.
Funky. Do you ever hit it w/ the patch reverted?
That's the question. So far no, the QA guys said they hit it a while ago, but the time frame still matches last time. I dont think this is related but I need to get some more ppc32 runs without.
Quoted 6 lines
I'm probably being over cautious but I'd like to avoid the inagain/outagain/inagain/outagain approach we keep using with some of these cleanups.
Don
Ok I hit the Oops again last weekend without the patch. Which means I have a patch to checkin and another bug to fix Yea!
Dave, Eric said this should still be considered signed-off-by you, You ok with that?
Eric, am I ok to add yours too since you kept this on the radar?
Don
Quoted 20 lines · Donald Douwsma
Quoted 12 lines · Donald Douwsma
Quoted 7 lines · Eric Sandeen
Quoted 4 lines · Donald Douwsma
First time round I hit an Oops on xfstests/177 while running the auto group
on ppc32. I dont seem to hit it running the single test, its intermittent.Funky. Do you ever hit it w/ the patch reverted?
That's the question. So far no, the QA guys said they hit it a while ago, but the time frame still matches last time. I dont think this is related but I need to get some more ppc32 runs without.
Quoted 6 lines
I'm probably being over cautious but I'd like to avoid the inagain/outagain/inagain/outagain approach we keep using with some of these cleanups.
Don
Quoted 6 lines
Ok I hit the Oops again last weekend without the patch. Which means I have a patch to checkin and another bug to fix Yea!
Dave, Eric said this should still be considered signed-off-by you, You ok with that?
Eric, am I ok to add yours too since you kept this on the radar?
That's fine by me, thanks.
-Eric
Quoted 19 lines · Donald Douwsma
Quoted 18 lines · Donald Douwsma
Quoted 8 lines · Eric Sandeen
Quoted 4 lines · Donald Douwsma
First time round I hit an Oops on xfstests/177 while running the auto group
on ppc32. I dont seem to hit it running the single test, its intermittent.Funky. Do you ever hit it w/ the patch reverted?
That's the question. So far no, the QA guys said they hit it a while ago, but the time frame still matches last time. I dont think this is related but I need to get some more ppc32 runs without.
I'm probably being over cautious but I'd like to avoid the inagain/outagain/inagain/outagain approach we keep using with some of these cleanups.
Quoted 8 lines
Quoted 2 lines
Don
Ok I hit the Oops again last weekend without the patch. Which means I have a patch to checkin and another bug to fix Yea!
Dave, Eric said this should still be considered signed-off-by you, You ok with that?
Yeah, no problems there.
Cheers,
Dave.
Signature · 2 lines
Dave Chinner [email protected]