xfs: Remove XFS_MOUNT_RETERR
XFS_MOUNT_RETERR is going to be set at xfs_parseargs() if mp->m_dalign is enabled, so any time we enter "if (mp->m_dalign)" branch in xfs_update_alignment(), XFS_MOUNT_RETERR is set and so we always be emitting a warning and returning an error. Hence, we can remove it and get rid of a couple of redundant check up against it at xfs_upate_alignment(). Thanks Dave Chinner for the suggestions of simplify the code in xfs_parseargs(). Signed-off-by: Jie Liu <jeff.liu@oracle.com> Cc: Dave Chinner <dchinner@redhat.com> Cc: Mark Tinguely <tinguely@sgi.com> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
parent
2fb8b5027d
commit
39a45d8463
3 changed files with 14 additions and 36 deletions
|
@ -987,42 +987,27 @@ xfs_update_alignment(xfs_mount_t *mp)
|
|||
*/
|
||||
if ((BBTOB(mp->m_dalign) & mp->m_blockmask) ||
|
||||
(BBTOB(mp->m_swidth) & mp->m_blockmask)) {
|
||||
if (mp->m_flags & XFS_MOUNT_RETERR) {
|
||||
xfs_warn(mp, "alignment check failed: "
|
||||
"(sunit/swidth vs. blocksize)");
|
||||
return XFS_ERROR(EINVAL);
|
||||
}
|
||||
mp->m_dalign = mp->m_swidth = 0;
|
||||
xfs_warn(mp,
|
||||
"alignment check failed: sunit/swidth vs. blocksize(%d)",
|
||||
sbp->sb_blocksize);
|
||||
return XFS_ERROR(EINVAL);
|
||||
} else {
|
||||
/*
|
||||
* Convert the stripe unit and width to FSBs.
|
||||
*/
|
||||
mp->m_dalign = XFS_BB_TO_FSBT(mp, mp->m_dalign);
|
||||
if (mp->m_dalign && (sbp->sb_agblocks % mp->m_dalign)) {
|
||||
if (mp->m_flags & XFS_MOUNT_RETERR) {
|
||||
xfs_warn(mp, "alignment check failed: "
|
||||
"(sunit/swidth vs. ag size)");
|
||||
return XFS_ERROR(EINVAL);
|
||||
}
|
||||
xfs_warn(mp,
|
||||
"stripe alignment turned off: sunit(%d)/swidth(%d) "
|
||||
"incompatible with agsize(%d)",
|
||||
mp->m_dalign, mp->m_swidth,
|
||||
sbp->sb_agblocks);
|
||||
|
||||
mp->m_dalign = 0;
|
||||
mp->m_swidth = 0;
|
||||
"alignment check failed: sunit/swidth vs. agsize(%d)",
|
||||
sbp->sb_agblocks);
|
||||
return XFS_ERROR(EINVAL);
|
||||
} else if (mp->m_dalign) {
|
||||
mp->m_swidth = XFS_BB_TO_FSBT(mp, mp->m_swidth);
|
||||
} else {
|
||||
if (mp->m_flags & XFS_MOUNT_RETERR) {
|
||||
xfs_warn(mp, "alignment check failed: "
|
||||
"sunit(%d) less than bsize(%d)",
|
||||
mp->m_dalign,
|
||||
mp->m_blockmask +1);
|
||||
return XFS_ERROR(EINVAL);
|
||||
}
|
||||
mp->m_swidth = 0;
|
||||
xfs_warn(mp,
|
||||
"alignment check failed: sunit(%d) less than bsize(%d)",
|
||||
mp->m_dalign, sbp->sb_blocksize);
|
||||
return XFS_ERROR(EINVAL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -227,8 +227,6 @@ typedef struct xfs_mount {
|
|||
operations, typically for
|
||||
disk errors in metadata */
|
||||
#define XFS_MOUNT_DISCARD (1ULL << 5) /* discard unused blocks */
|
||||
#define XFS_MOUNT_RETERR (1ULL << 6) /* return alignment errors to
|
||||
user */
|
||||
#define XFS_MOUNT_NOALIGN (1ULL << 7) /* turn off stripe alignment
|
||||
allocations */
|
||||
#define XFS_MOUNT_ATTR2 (1ULL << 8) /* allow use of attr2 format */
|
||||
|
|
|
@ -439,20 +439,15 @@ xfs_parseargs(
|
|||
}
|
||||
|
||||
done:
|
||||
if (!(mp->m_flags & XFS_MOUNT_NOALIGN)) {
|
||||
if (dsunit && !(mp->m_flags & XFS_MOUNT_NOALIGN)) {
|
||||
/*
|
||||
* At this point the superblock has not been read
|
||||
* in, therefore we do not know the block size.
|
||||
* Before the mount call ends we will convert
|
||||
* these to FSBs.
|
||||
*/
|
||||
if (dsunit) {
|
||||
mp->m_dalign = dsunit;
|
||||
mp->m_flags |= XFS_MOUNT_RETERR;
|
||||
}
|
||||
|
||||
if (dswidth)
|
||||
mp->m_swidth = dswidth;
|
||||
mp->m_dalign = dsunit;
|
||||
mp->m_swidth = dswidth;
|
||||
}
|
||||
|
||||
if (mp->m_logbufs != -1 &&
|
||||
|
|
Loading…
Reference in a new issue