/* per-AG block reservation data structures*/ struct xfs_ag_resv { /* number of blocks originally reserved here */
xfs_extlen_t ar_orig_reserved; /* number of blocks reserved here */
xfs_extlen_t ar_reserved; /* number of blocks originally asked for */
xfs_extlen_t ar_asked;
};
/* * Per-ag incore structure, copies of information in agf and agi, to improve the * performance of allocation group selection.
*/ struct xfs_perag { struct xfs_group pag_group; unsignedlong pag_opstate;
uint8_t pagf_bno_level; /* # of levels in bno btree */
uint8_t pagf_cnt_level; /* # of levels in cnt btree */
uint8_t pagf_rmap_level;/* # of levels in rmap btree */
uint32_t pagf_flcount; /* count of blocks in freelist */
xfs_extlen_t pagf_freeblks; /* total free blocks */
xfs_extlen_t pagf_longest; /* longest free space */
uint32_t pagf_btreeblks; /* # of blocks held in AGF btrees */
xfs_agino_t pagi_freecount; /* number of free inodes */
xfs_agino_t pagi_count; /* number of allocated inodes */
/* * Inode allocation search lookup optimisation. * If the pagino matches, the search for new inodes * doesn't need to search the near ones again straight away
*/
xfs_agino_t pagl_pagino;
xfs_agino_t pagl_leftrec;
xfs_agino_t pagl_rightrec;
/* Blocks reserved for all kinds of metadata. */ struct xfs_ag_resv pag_meta_resv; /* Blocks reserved for the reverse mapping btree. */ struct xfs_ag_resv pag_rmapbt_resv;
/* Precalculated geometry info */
xfs_agino_t agino_min;
xfs_agino_t agino_max;
#ifdef __KERNEL__ /* -- kernel only structures below this line -- */
#ifdef CONFIG_XFS_ONLINE_REPAIR /* * Alternate btree heights so that online repair won't trip the write * verifiers while rebuilding the AG btrees.
*/
uint8_t pagf_repair_bno_level;
uint8_t pagf_repair_cnt_level;
uint8_t pagf_repair_refcount_level;
uint8_t pagf_repair_rmap_level; #endif
atomic_t pagf_fstrms; /* # of filestreams active in this AG */
/* * Verify that an AG inode number pointer neither points outside the AG * nor points at static metadata.
*/ staticinlinebool
xfs_verify_agino(struct xfs_perag *pag, xfs_agino_t agino)
{ if (agino < pag->agino_min) returnfalse; if (agino > pag->agino_max) returnfalse; returntrue;
}
/* * Verify that an AG inode number pointer neither points outside the AG * nor points at static metadata, or is NULLAGINO.
*/ staticinlinebool
xfs_verify_agino_or_null(struct xfs_perag *pag, xfs_agino_t agino)
{ if (agino == NULLAGINO) returntrue; return xfs_verify_agino(pag, agino);
}
/* * Iterate all AGs from start_agno through wrap_agno, then restart_agno through * (start_agno - 1).
*/ #define for_each_perag_wrap_range(mp, start_agno, restart_agno, wrap_agno, agno, pag) \ for ((agno) = (start_agno), (pag) = xfs_perag_grab((mp), (agno)); \
(pag) != NULL; \
(pag) = xfs_perag_next_wrap((pag), &(agno), (start_agno), \
(restart_agno), (wrap_agno))) /* * Iterate all AGs from start_agno through wrap_agno, then 0 through * (start_agno - 1).
*/ #define for_each_perag_wrap_at(mp, start_agno, wrap_agno, agno, pag) \
for_each_perag_wrap_range((mp), (start_agno), 0, (wrap_agno), (agno), (pag))
/* * Iterate all AGs from start_agno through to the end of the filesystem, then 0 * through (start_agno - 1).
*/ #define for_each_perag_wrap(mp, start_agno, agno, pag) \
for_each_perag_wrap_at((mp), (start_agno), (mp)->m_sb.sb_agcount, \
(agno), (pag))
struct aghdr_init_data { /* per ag data */
xfs_agblock_t agno; /* ag to init */
xfs_extlen_t agsize; /* new AG size */ struct list_head buffer_list; /* buffer writeback list */
xfs_rfsblock_t nfree; /* cumulative new free space */
/* per header data */
xfs_daddr_t daddr; /* header location */
size_t numblks; /* size of header */ conststruct xfs_btree_ops *bc_ops; /* btree ops */
};
int xfs_ag_init_headers(struct xfs_mount *mp, struct aghdr_init_data *id); int xfs_ag_shrink_space(struct xfs_perag *pag, struct xfs_trans **tpp,
xfs_extlen_t delta); int xfs_ag_extend_space(struct xfs_perag *pag, struct xfs_trans *tp,
xfs_extlen_t len); int xfs_ag_get_geometry(struct xfs_perag *pag, struct xfs_ag_geometry *ageo);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.