On Wed, Jul 29, 2015 at 03:33:30PM -0700, Darrick J. Wong wrote: > Start constructing the refcount btree implementation by establishing > the on-disk format and everything needed to read, write, and > manipulate the refcount btree blocks. > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> .... > +STATIC bool > +xfs_refcountbt_verify( > + struct xfs_buf *bp) feel free to shorten that prefix to xfs_refcbt_..... > +{ > + struct xfs_mount *mp = bp->b_target->bt_mount; > + struct xfs_btree_block *block = XFS_BUF_TO_BLOCK(bp); > + struct xfs_perag *pag = bp->b_pag; > + unsigned int level; > + > + if (block->bb_magic != cpu_to_be32(XFS_REFC_CRC_MAGIC)) > + return false; > + > + if (!xfs_sb_version_hasreflink(&mp->m_sb)) > + return false; > + if (!uuid_equal(&block->bb_u.s.bb_uuid, &mp->m_sb.sb_uuid)) > + return false; > + if (block->bb_u.s.bb_blkno != cpu_to_be64(bp->b_bn)) > + return false; > + if (pag && > + be32_to_cpu(block->bb_u.s.bb_owner) != pag->pag_agno) > + return false; > + > + level = be16_to_cpu(block->bb_level); > + if (pag && pag->pagf_init) { > + if (level >= pag->pagf_refcount_level) > + return false; > + } else if (level >= mp->m_ag_maxlevels) > + return false; > + > + /* numrecs verification */ > + if (be16_to_cpu(block->bb_numrecs) > mp->m_refc_mxr[level != 0]) > + return false; > + > + /* sibling pointer verification */ > + if (!block->bb_u.s.bb_leftsib || > + (be32_to_cpu(block->bb_u.s.bb_leftsib) >= mp->m_sb.sb_agblocks && > + block->bb_u.s.bb_leftsib != cpu_to_be32(NULLAGBLOCK))) > + return false; > + if (!block->bb_u.s.bb_rightsib || > + (be32_to_cpu(block->bb_u.s.bb_rightsib) >= mp->m_sb.sb_agblocks && > + block->bb_u.s.bb_rightsib != cpu_to_be32(NULLAGBLOCK))) > + return false; I'm starting to think there's a xfs_btree_sblock_verify() function we need to factor out of all these btree verification functions... > +#ifndef __XFS_REFCOUNT_BTREE_H__ > +#define __XFS_REFCOUNT_BTREE_H__ > + > +/* > + * Freespace on-disk structures > + */ > + > +struct xfs_buf; > +struct xfs_btree_cur; > +struct xfs_mount; > + > +/* > + * Btree block header size depends on a superblock flag. > + */ > +#define XFS_REFCOUNT_BLOCK_LEN XFS_BTREE_SBLOCK_CRC_LEN Comment is stale. Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs