--- linux-3.10.0-327.22.2.el7.a/fs/xfs/libxfs/xfs_alloc.c 2016-07-07 03:57:19.366512544 +0800 +++ linux-3.10.0-327.22.2.el7.b/fs/xfs/libxfs/xfs_alloc.c 2016-07-07 09:30:32.178766480 +0800 @@ -309,7 +309,8 @@ xfs_alloc_fixup_trees( xfs_extlen_t flen, /* length of free extent */ xfs_agblock_t rbno, /* starting block of returned extent */ xfs_extlen_t rlen, /* length of returned extent */ - int flags) /* flags, XFSA_FIXUP_... */ + int flags, /* flags, XFSA_FIXUP_... */ + int isfl) { int error; /* error code */ int i; /* operation results */ @@ -376,15 +377,27 @@ xfs_alloc_fixup_trees( nfbno1 = rbno + rlen; nflen1 = flen - rlen; nfbno2 = NULLAGBLOCK; + if (isfl) + xfs_warn(mp, + "Case 1 Inserting: nfbno1: %d, nflen1: %d, nfbno2: %d, nflen2: %d, fbno: %d, flen: %d, rbno: %d, rlen: %d", + nfbno1, nflen1, nfbno2, nflen2, fbno, flen, rbno, rlen); } else if (rbno + rlen == fbno + flen) { nfbno1 = fbno; nflen1 = flen - rlen; nfbno2 = NULLAGBLOCK; + if (isfl) + xfs_warn(mp, + "Case 2 Inserting: nfbno1: %d, nflen1: %d, nfbno2: %d, nflen2: %d, fbno: %d, flen: %d, rbno: %d, rlen: %d", + nfbno1, nflen1, nfbno2, nflen2, fbno, flen, rbno, rlen); } else { nfbno1 = fbno; nflen1 = rbno - fbno; nfbno2 = rbno + rlen; nflen2 = (fbno + flen) - nfbno2; + if (isfl) + xfs_warn(mp, + "Case 3 Inserting: nfbno1: %d, nflen1: %d, nfbno2: %d, nflen2: %d, fbno: %d, flen: %d, rbno: %d, rlen: %d", + nfbno1, nflen1, nfbno2, nflen2, fbno, flen, rbno, rlen); } /* * Delete the entry from the by-size btree. @@ -396,19 +409,31 @@ xfs_alloc_fixup_trees( * Add new by-size btree entry(s). */ if (nfbno1 != NULLAGBLOCK) { + struct xfs_btree_block *cntblock; if ((error = xfs_alloc_lookup_eq(cnt_cur, nfbno1, nflen1, &i))) return error; + cntblock = XFS_BUF_TO_BLOCK(cnt_cur->bc_bufs[0]); XFS_WANT_CORRUPTED_RETURN(mp, i == 0); + xfs_warn(mp, + "B+Tree before insert: isfl: %d, bb_numrec: %d, addr: %llu", isfl, xfs_btree_get_numrecs(cntblock), XFS_BUF_ADDR(cnt_cur->bc_bufs[0])); if ((error = xfs_btree_insert(cnt_cur, &i))) return error; + xfs_warn(mp, + "B+Tree after insert: isfl: %d, bb_numrec: %d, addr: %llu", isfl, xfs_btree_get_numrecs(cntblock), XFS_BUF_ADDR(cnt_cur->bc_bufs[0])); XFS_WANT_CORRUPTED_RETURN(mp, i == 1); } if (nfbno2 != NULLAGBLOCK) { + struct xfs_btree_block *cntblock; + cntblock = XFS_BUF_TO_BLOCK(cnt_cur->bc_bufs[0]); if ((error = xfs_alloc_lookup_eq(cnt_cur, nfbno2, nflen2, &i))) return error; XFS_WANT_CORRUPTED_RETURN(mp, i == 0); + xfs_warn(mp, + "B+Tree before insert: isfl: %d, bb_numrec: %d, addr: %llu", isfl, xfs_btree_get_numrecs(cntblock), XFS_BUF_ADDR(cnt_cur->bc_bufs[0])); if ((error = xfs_btree_insert(cnt_cur, &i))) return error; + xfs_warn(mp, + "B+Tree after insert: isfl: %d, bb_numrec: %d, addr: %llu", isfl, xfs_btree_get_numrecs(cntblock), XFS_BUF_ADDR(cnt_cur->bc_bufs[0])); XFS_WANT_CORRUPTED_RETURN(mp, i == 1); } /* @@ -730,7 +755,7 @@ xfs_alloc_ag_vextent_exact( ASSERT(args->agbno + args->len <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, - args->len, XFSA_FIXUP_BNO_OK); + args->len, XFSA_FIXUP_BNO_OK, args->isfl); if (error) { xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR); goto error0; @@ -1028,7 +1053,7 @@ restart: * Fix up the btree entries. */ if ((error = xfs_alloc_fixup_trees(cnt_cur, bno_cur_lt, ltbno, - ltlen, bnew, blen, XFSA_FIXUP_CNT_OK))) + ltlen, bnew, blen, XFSA_FIXUP_CNT_OK, args->isfl))) goto error0; xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); xfs_btree_del_cursor(bno_cur_lt, XFS_BTREE_NOERROR); @@ -1219,7 +1244,7 @@ restart: args->agbno = ltnew; if ((error = xfs_alloc_fixup_trees(cnt_cur, bno_cur_lt, ltbno, ltlen, - ltnew, rlen, XFSA_FIXUP_BNO_OK))) + ltnew, rlen, XFSA_FIXUP_BNO_OK, args->isfl))) goto error0; if (j) @@ -1420,7 +1445,7 @@ restart: bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, args->agno, XFS_BTNUM_BNO); if ((error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, - rbno, rlen, XFSA_FIXUP_CNT_OK))) + rbno, rlen, XFSA_FIXUP_CNT_OK, args->isfl))) goto error0; xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR);