xfs: introduce directory geometry structure
The directory code has a dependency on the struct xfs_mount to supply the directory block geometry. Block size, block log size, and other parameters are pre-caclulated in the struct xfs_mount or access directly from the superblock embedded in the struct xfs_mount. Extract all of this geometry information out of the struct xfs_mount and superblock and place it into a new struct xfs_da_geometry defined by the directory code. Allocate and initialise it at mount time, and attach it to the struct xfs_mount so it canbe passed back into the directory code appropriately rather than using the struct xfs_mount. Signed-off-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
2d6dcc6d7e
commit
0650b55497
@@ -25,6 +25,23 @@ struct xfs_trans;
|
||||
struct zone;
|
||||
struct xfs_dir_ops;
|
||||
|
||||
/*
|
||||
* Directory/attribute geometry information. There will be one of these for each
|
||||
* data fork type, and it will be passed around via the xfs_da_args. Global
|
||||
* structures will be attached to the xfs_mount.
|
||||
*/
|
||||
struct xfs_da_geometry {
|
||||
int blksize; /* da block size in bytes */
|
||||
int fsbcount; /* da block size in filesystem blocks */
|
||||
uint8_t fsblog; /* log2 of _filesystem_ block size */
|
||||
uint8_t blklog; /* log2 of da block size */
|
||||
uint node_ents; /* # of entries in a danode */
|
||||
int magicpct; /* 37% of block size in bytes */
|
||||
xfs_dablk_t datablk; /* blockno of dir data v2 */
|
||||
xfs_dablk_t leafblk; /* blockno of leaf data v2 */
|
||||
xfs_dablk_t freeblk; /* blockno of free data v2 */
|
||||
};
|
||||
|
||||
/*========================================================================
|
||||
* Btree searching and modification structure definitions.
|
||||
*========================================================================*/
|
||||
@@ -42,6 +59,7 @@ enum xfs_dacmp {
|
||||
* Structure to ease passing around component names.
|
||||
*/
|
||||
typedef struct xfs_da_args {
|
||||
struct xfs_da_geometry *geo; /* da block geometry */
|
||||
const __uint8_t *name; /* string (maybe not NULL terminated) */
|
||||
int namelen; /* length of string (maybe no NULL) */
|
||||
__uint8_t filetype; /* filetype of inode for directories */
|
||||
|
||||
Reference in New Issue
Block a user