diff options
author | Christoph Hellwig <hch@lst.de> | 2009-03-29 13:26:46 -0400 |
---|---|---|
committer | Christoph Hellwig <hch@brick.lst.de> | 2009-03-29 13:26:46 -0400 |
commit | 1a5902c5d2ad4f3aa1ee747017622d5d4edfa20f (patch) | |
tree | cf93367c9b63f814095351c1eeb8d7cc1c2d3f9f /fs/xfs/xfs_mount.c | |
parent | 9da096fd13e63031662566e5e868ec3dcc70824e (diff) |
xfs: remove m_attroffset
With the upcoming v3 inodes the default attroffset needs to be calculated
for each specific inode, so we can't cache it in the superblock anymore.
Also replace the assert for wrong inode sizes with a proper error check
also included in non-debug builds. Note that the ENOSYS return for
that might seem odd, but that error is returned by xfs_mount_validate_sb
for all theoretically valid but not supported filesystem geometries.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Diffstat (limited to 'fs/xfs/xfs_mount.c')
-rw-r--r-- | fs/xfs/xfs_mount.c | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 1c372f998c15..92fedfcc879a 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c | |||
@@ -256,6 +256,22 @@ xfs_mount_validate_sb( | |||
256 | return XFS_ERROR(ENOSYS); | 256 | return XFS_ERROR(ENOSYS); |
257 | } | 257 | } |
258 | 258 | ||
259 | /* | ||
260 | * Currently only very few inode sizes are supported. | ||
261 | */ | ||
262 | switch (sbp->sb_inodesize) { | ||
263 | case 256: | ||
264 | case 512: | ||
265 | case 1024: | ||
266 | case 2048: | ||
267 | break; | ||
268 | default: | ||
269 | xfs_fs_mount_cmn_err(flags, | ||
270 | "inode size of %d bytes not supported", | ||
271 | sbp->sb_inodesize); | ||
272 | return XFS_ERROR(ENOSYS); | ||
273 | } | ||
274 | |||
259 | if (xfs_sb_validate_fsb_count(sbp, sbp->sb_dblocks) || | 275 | if (xfs_sb_validate_fsb_count(sbp, sbp->sb_dblocks) || |
260 | xfs_sb_validate_fsb_count(sbp, sbp->sb_rblocks)) { | 276 | xfs_sb_validate_fsb_count(sbp, sbp->sb_rblocks)) { |
261 | xfs_fs_mount_cmn_err(flags, | 277 | xfs_fs_mount_cmn_err(flags, |
@@ -578,27 +594,6 @@ xfs_mount_common(xfs_mount_t *mp, xfs_sb_t *sbp) | |||
578 | mp->m_blockwsize = sbp->sb_blocksize >> XFS_WORDLOG; | 594 | mp->m_blockwsize = sbp->sb_blocksize >> XFS_WORDLOG; |
579 | mp->m_blockwmask = mp->m_blockwsize - 1; | 595 | mp->m_blockwmask = mp->m_blockwsize - 1; |
580 | 596 | ||
581 | /* | ||
582 | * Setup for attributes, in case they get created. | ||
583 | * This value is for inodes getting attributes for the first time, | ||
584 | * the per-inode value is for old attribute values. | ||
585 | */ | ||
586 | ASSERT(sbp->sb_inodesize >= 256 && sbp->sb_inodesize <= 2048); | ||
587 | switch (sbp->sb_inodesize) { | ||
588 | case 256: | ||
589 | mp->m_attroffset = XFS_LITINO(mp) - | ||
590 | XFS_BMDR_SPACE_CALC(MINABTPTRS); | ||
591 | break; | ||
592 | case 512: | ||
593 | case 1024: | ||
594 | case 2048: | ||
595 | mp->m_attroffset = XFS_BMDR_SPACE_CALC(6 * MINABTPTRS); | ||
596 | break; | ||
597 | default: | ||
598 | ASSERT(0); | ||
599 | } | ||
600 | ASSERT(mp->m_attroffset < XFS_LITINO(mp)); | ||
601 | |||
602 | mp->m_alloc_mxr[0] = xfs_allocbt_maxrecs(mp, sbp->sb_blocksize, 1); | 597 | mp->m_alloc_mxr[0] = xfs_allocbt_maxrecs(mp, sbp->sb_blocksize, 1); |
603 | mp->m_alloc_mxr[1] = xfs_allocbt_maxrecs(mp, sbp->sb_blocksize, 0); | 598 | mp->m_alloc_mxr[1] = xfs_allocbt_maxrecs(mp, sbp->sb_blocksize, 0); |
604 | mp->m_alloc_mnr[0] = mp->m_alloc_mxr[0] / 2; | 599 | mp->m_alloc_mnr[0] = mp->m_alloc_mxr[0] / 2; |