From: Barry Naujok Date: Tue, 8 Sep 2009 14:09:52 +0000 (-0300) Subject: repair: reduce byte swap operations in scanfunc_allocbt X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9fa82595976c0604f04a1969a73343ac1745f967;p=thirdparty%2Fxfsprogs-dev.git repair: reduce byte swap operations in scanfunc_allocbt Store native endian version of the extent startblock and length in local variables instead of converting them over and over again. Signed-off-by: Barry Naujok Signed-off-by: Christoph Hellwig --- diff --git a/repair/scan.c b/repair/scan.c index e77c2ecc0..f3bb2d3b3 100644 --- a/repair/scan.c +++ b/repair/scan.c @@ -449,7 +449,6 @@ scanfunc_allocbt( __uint32_t magic) { const char *name; - xfs_agblock_t b, e; int i; xfs_alloc_ptr_t *pp; xfs_alloc_rec_t *rp; @@ -509,20 +508,21 @@ _("%s freespace btree block claimed (state %d), agno %d, bno %d, suspect %d\n"), rp = XFS_ALLOC_REC_ADDR(mp, block, 1); for (i = 0; i < numrecs; i++) { - if (be32_to_cpu(rp[i].ar_blockcount) == 0 || - be32_to_cpu(rp[i].ar_startblock) == 0 || - !verify_agbno(mp, agno, - be32_to_cpu(rp[i].ar_startblock)) || - be32_to_cpu(rp[i].ar_blockcount) > - MAXEXTLEN) - continue; + xfs_agblock_t b, end; + xfs_extlen_t len; + + b = be32_to_cpu(rp[i].ar_startblock); + len = be32_to_cpu(rp[i].ar_blockcount); + end = b + len; - e = be32_to_cpu(rp[i].ar_startblock) + - be32_to_cpu(rp[i].ar_blockcount); - if (!verify_agbno(mp, agno, e - 1)) + if (b == 0 || !verify_agbno(mp, agno, b)) + continue; + if (len == 0 || len > MAXEXTLEN) continue; - for (b = be32_to_cpu(rp[i].ar_startblock); - b < e; b++) { + if (!verify_agbno(mp, agno, end - 1)) + continue; + + for ( ; b < end; b++) { state = get_agbno_state(mp, agno, b); switch (state) { case XR_E_UNKNOWN: @@ -579,6 +579,8 @@ _("%s freespace btree block claimed (state %d), agno %d, bno %d, suspect %d\n"), } for (i = 0; i < numrecs; i++) { + xfs_agblock_t bno = be32_to_cpu(pp[i]); + /* * XXX - put sibling detection right here. * we know our sibling chain is good. So as we go, @@ -588,11 +590,11 @@ _("%s freespace btree block claimed (state %d), agno %d, bno %d, suspect %d\n"), * pointer mismatch, try and extract as much data * as possible. */ - if (be32_to_cpu(pp[i]) != 0 && verify_agbno(mp, agno, - be32_to_cpu(pp[i]))) - scan_sbtree(be32_to_cpu(pp[i]), level, agno, suspect, + if (bno != 0 && verify_agbno(mp, agno, bno)) { + scan_sbtree(bno, level, agno, suspect, (magic == XFS_ABTB_MAGIC) ? scanfunc_bno : scanfunc_cnt, 0); + } } }