xfs: define the on-disk rmap btree format
Originally-From: Dave Chinner <dchinner@redhat.com> Now we have all the surrounding call infrastructure in place, we can start filling out the rmap btree implementation. Start with the on-disk btree format; add everything needed to read, write and manipulate rmap btree blocks. This prepares the way for adding the btree operations implementation. [darrick: record owner and offset info in rmap btree] [darrick: fork, bmbt and unwritten state in rmap btree] [darrick: flags are a separate field in xfs_rmap_irec] [darrick: calculate maxlevels separately] [darrick: move the 'unwritten' bit into unused parts of rm_offset] Signed-off-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:

committed by
Dave Chinner

parent
673930c34a
commit
035e00acb5
55
fs/xfs/libxfs/xfs_rmap_btree.h
Normal file
55
fs/xfs/libxfs/xfs_rmap_btree.h
Normal file
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Red Hat, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it would be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#ifndef __XFS_RMAP_BTREE_H__
|
||||
#define __XFS_RMAP_BTREE_H__
|
||||
|
||||
struct xfs_buf;
|
||||
struct xfs_btree_cur;
|
||||
struct xfs_mount;
|
||||
|
||||
/* rmaps only exist on crc enabled filesystems */
|
||||
#define XFS_RMAP_BLOCK_LEN XFS_BTREE_SBLOCK_CRC_LEN
|
||||
|
||||
/*
|
||||
* Record, key, and pointer address macros for btree blocks.
|
||||
*
|
||||
* (note that some of these may appear unused, but they are used in userspace)
|
||||
*/
|
||||
#define XFS_RMAP_REC_ADDR(block, index) \
|
||||
((struct xfs_rmap_rec *) \
|
||||
((char *)(block) + XFS_RMAP_BLOCK_LEN + \
|
||||
(((index) - 1) * sizeof(struct xfs_rmap_rec))))
|
||||
|
||||
#define XFS_RMAP_KEY_ADDR(block, index) \
|
||||
((struct xfs_rmap_key *) \
|
||||
((char *)(block) + XFS_RMAP_BLOCK_LEN + \
|
||||
((index) - 1) * sizeof(struct xfs_rmap_key)))
|
||||
|
||||
#define XFS_RMAP_PTR_ADDR(block, index, maxrecs) \
|
||||
((xfs_rmap_ptr_t *) \
|
||||
((char *)(block) + XFS_RMAP_BLOCK_LEN + \
|
||||
(maxrecs) * sizeof(struct xfs_rmap_key) + \
|
||||
((index) - 1) * sizeof(xfs_rmap_ptr_t)))
|
||||
|
||||
struct xfs_btree_cur *xfs_rmapbt_init_cursor(struct xfs_mount *mp,
|
||||
struct xfs_trans *tp, struct xfs_buf *bp,
|
||||
xfs_agnumber_t agno);
|
||||
int xfs_rmapbt_maxrecs(struct xfs_mount *mp, int blocklen, int leaf);
|
||||
extern void xfs_rmapbt_compute_maxlevels(struct xfs_mount *mp);
|
||||
|
||||
#endif /* __XFS_RMAP_BTREE_H__ */
|
Reference in New Issue
Block a user