mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 06:31:52 +00:00
a64b041797
Remove the confusing xfs_dir2_block structure. It is supposed to describe an XFS dir2 block format btree block, but due to the variable sized nature of almost all elements in it it can't actuall do anything close to that job. In addition to accessing the fixed offset header structure it was only used to get a pointer to the first dir or unused entry after it, which can be trivially replaced by pointer arithmetics on the header pointer. For most users that is actually more natural anyway, as they don't use a typed pointer but rather a character pointer for further arithmetics. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Alex Elder <aelder@sgi.com> Reviewed-by: Dave Chinner <dchinner@redhat.com>
94 lines
3.4 KiB
C
94 lines
3.4 KiB
C
/*
|
|
* Copyright (c) 2000-2001,2005 Silicon Graphics, 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_DIR2_BLOCK_H__
|
|
#define __XFS_DIR2_BLOCK_H__
|
|
|
|
/*
|
|
* Directory version 2, single block format structures.
|
|
*
|
|
* The single block format looks like the following drawing on disk:
|
|
*
|
|
* +-------------------------------------------------+
|
|
* | xfs_dir2_data_hdr_t |
|
|
* +-------------------------------------------------+
|
|
* | xfs_dir2_data_entry_t OR xfs_dir2_data_unused_t |
|
|
* | xfs_dir2_data_entry_t OR xfs_dir2_data_unused_t |
|
|
* | xfs_dir2_data_entry_t OR xfs_dir2_data_unused_t |
|
|
* | ... |
|
|
* +-------------------------------------------------+
|
|
* | unused space |
|
|
* +-------------------------------------------------+
|
|
* | ... |
|
|
* | xfs_dir2_leaf_entry_t |
|
|
* | xfs_dir2_leaf_entry_t |
|
|
* +-------------------------------------------------+
|
|
* | xfs_dir2_block_tail_t |
|
|
* +-------------------------------------------------+
|
|
*
|
|
* As all the entries are variable size structures the accessors in this
|
|
* file and xfs_dir2_data.h should be used to iterate over them.
|
|
*/
|
|
struct uio;
|
|
struct xfs_dabuf;
|
|
struct xfs_da_args;
|
|
struct xfs_dir2_data_hdr;
|
|
struct xfs_dir2_leaf_entry;
|
|
struct xfs_inode;
|
|
struct xfs_mount;
|
|
struct xfs_trans;
|
|
|
|
#define XFS_DIR2_BLOCK_MAGIC 0x58443242 /* XD2B: for one block dirs */
|
|
|
|
typedef struct xfs_dir2_block_tail {
|
|
__be32 count; /* count of leaf entries */
|
|
__be32 stale; /* count of stale lf entries */
|
|
} xfs_dir2_block_tail_t;
|
|
|
|
/*
|
|
* Pointer to the leaf header embedded in a data block (1-block format)
|
|
*/
|
|
static inline xfs_dir2_block_tail_t *
|
|
xfs_dir2_block_tail_p(struct xfs_mount *mp, xfs_dir2_data_hdr_t *hdr)
|
|
{
|
|
return ((xfs_dir2_block_tail_t *)((char *)hdr + mp->m_dirblksize)) - 1;
|
|
}
|
|
|
|
/*
|
|
* Pointer to the leaf entries embedded in a data block (1-block format)
|
|
*/
|
|
static inline struct xfs_dir2_leaf_entry *
|
|
xfs_dir2_block_leaf_p(xfs_dir2_block_tail_t *btp)
|
|
{
|
|
return ((struct xfs_dir2_leaf_entry *)btp) - be32_to_cpu(btp->count);
|
|
}
|
|
|
|
/*
|
|
* Function declarations.
|
|
*/
|
|
extern int xfs_dir2_block_addname(struct xfs_da_args *args);
|
|
extern int xfs_dir2_block_getdents(struct xfs_inode *dp, void *dirent,
|
|
xfs_off_t *offset, filldir_t filldir);
|
|
extern int xfs_dir2_block_lookup(struct xfs_da_args *args);
|
|
extern int xfs_dir2_block_removename(struct xfs_da_args *args);
|
|
extern int xfs_dir2_block_replace(struct xfs_da_args *args);
|
|
extern int xfs_dir2_leaf_to_block(struct xfs_da_args *args,
|
|
struct xfs_dabuf *lbp, struct xfs_dabuf *dbp);
|
|
extern int xfs_dir2_sf_to_block(struct xfs_da_args *args);
|
|
|
|
#endif /* __XFS_DIR2_BLOCK_H__ */
|