diff options
Diffstat (limited to 'fs/xfs/xfs_ag.h')
-rw-r--r-- | fs/xfs/xfs_ag.h | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/fs/xfs/xfs_ag.h b/fs/xfs/xfs_ag.h index a5d54bf4931b..b1a5a1ff88ea 100644 --- a/fs/xfs/xfs_ag.h +++ b/fs/xfs/xfs_ag.h | |||
@@ -86,6 +86,20 @@ typedef struct xfs_agf { | |||
86 | #define XFS_AGF_NUM_BITS 12 | 86 | #define XFS_AGF_NUM_BITS 12 |
87 | #define XFS_AGF_ALL_BITS ((1 << XFS_AGF_NUM_BITS) - 1) | 87 | #define XFS_AGF_ALL_BITS ((1 << XFS_AGF_NUM_BITS) - 1) |
88 | 88 | ||
89 | #define XFS_AGF_FLAGS \ | ||
90 | { XFS_AGF_MAGICNUM, "MAGICNUM" }, \ | ||
91 | { XFS_AGF_VERSIONNUM, "VERSIONNUM" }, \ | ||
92 | { XFS_AGF_SEQNO, "SEQNO" }, \ | ||
93 | { XFS_AGF_LENGTH, "LENGTH" }, \ | ||
94 | { XFS_AGF_ROOTS, "ROOTS" }, \ | ||
95 | { XFS_AGF_LEVELS, "LEVELS" }, \ | ||
96 | { XFS_AGF_FLFIRST, "FLFIRST" }, \ | ||
97 | { XFS_AGF_FLLAST, "FLLAST" }, \ | ||
98 | { XFS_AGF_FLCOUNT, "FLCOUNT" }, \ | ||
99 | { XFS_AGF_FREEBLKS, "FREEBLKS" }, \ | ||
100 | { XFS_AGF_LONGEST, "LONGEST" }, \ | ||
101 | { XFS_AGF_BTREEBLKS, "BTREEBLKS" } | ||
102 | |||
89 | /* disk block (xfs_daddr_t) in the AG */ | 103 | /* disk block (xfs_daddr_t) in the AG */ |
90 | #define XFS_AGF_DADDR(mp) ((xfs_daddr_t)(1 << (mp)->m_sectbb_log)) | 104 | #define XFS_AGF_DADDR(mp) ((xfs_daddr_t)(1 << (mp)->m_sectbb_log)) |
91 | #define XFS_AGF_BLOCK(mp) XFS_HDR_BLOCK(mp, XFS_AGF_DADDR(mp)) | 105 | #define XFS_AGF_BLOCK(mp) XFS_HDR_BLOCK(mp, XFS_AGF_DADDR(mp)) |
@@ -173,17 +187,13 @@ typedef struct xfs_perag_busy { | |||
173 | /* | 187 | /* |
174 | * Per-ag incore structure, copies of information in agf and agi, | 188 | * Per-ag incore structure, copies of information in agf and agi, |
175 | * to improve the performance of allocation group selection. | 189 | * to improve the performance of allocation group selection. |
176 | * | ||
177 | * pick sizes which fit in allocation buckets well | ||
178 | */ | 190 | */ |
179 | #if (BITS_PER_LONG == 32) | ||
180 | #define XFS_PAGB_NUM_SLOTS 84 | ||
181 | #elif (BITS_PER_LONG == 64) | ||
182 | #define XFS_PAGB_NUM_SLOTS 128 | 191 | #define XFS_PAGB_NUM_SLOTS 128 |
183 | #endif | ||
184 | 192 | ||
185 | typedef struct xfs_perag | 193 | typedef struct xfs_perag { |
186 | { | 194 | struct xfs_mount *pag_mount; /* owner filesystem */ |
195 | xfs_agnumber_t pag_agno; /* AG this structure belongs to */ | ||
196 | atomic_t pag_ref; /* perag reference count */ | ||
187 | char pagf_init; /* this agf's entry is initialized */ | 197 | char pagf_init; /* this agf's entry is initialized */ |
188 | char pagi_init; /* this agi's entry is initialized */ | 198 | char pagi_init; /* this agi's entry is initialized */ |
189 | char pagf_metadata; /* the agf is preferred to be metadata */ | 199 | char pagf_metadata; /* the agf is preferred to be metadata */ |
@@ -196,8 +206,6 @@ typedef struct xfs_perag | |||
196 | __uint32_t pagf_btreeblks; /* # of blocks held in AGF btrees */ | 206 | __uint32_t pagf_btreeblks; /* # of blocks held in AGF btrees */ |
197 | xfs_agino_t pagi_freecount; /* number of free inodes */ | 207 | xfs_agino_t pagi_freecount; /* number of free inodes */ |
198 | xfs_agino_t pagi_count; /* number of allocated inodes */ | 208 | xfs_agino_t pagi_count; /* number of allocated inodes */ |
199 | int pagb_count; /* pagb slots in use */ | ||
200 | xfs_perag_busy_t *pagb_list; /* unstable blocks */ | ||
201 | 209 | ||
202 | /* | 210 | /* |
203 | * Inode allocation search lookup optimisation. | 211 | * Inode allocation search lookup optimisation. |
@@ -216,6 +224,8 @@ typedef struct xfs_perag | |||
216 | rwlock_t pag_ici_lock; /* incore inode lock */ | 224 | rwlock_t pag_ici_lock; /* incore inode lock */ |
217 | struct radix_tree_root pag_ici_root; /* incore inode cache root */ | 225 | struct radix_tree_root pag_ici_root; /* incore inode cache root */ |
218 | #endif | 226 | #endif |
227 | int pagb_count; /* pagb slots in use */ | ||
228 | xfs_perag_busy_t pagb_list[XFS_PAGB_NUM_SLOTS]; /* unstable blocks */ | ||
219 | } xfs_perag_t; | 229 | } xfs_perag_t; |
220 | 230 | ||
221 | /* | 231 | /* |