@@ -266,13 +266,18 @@ typedef struct xfs_mount {
static inline unsigned long
xfs_preferred_iosize(xfs_mount_t *mp)
{
+ unsigned long default_size = max_t(unsigned long, PAGE_SIZE,
+ mp->m_sb.sb_blocksize);
+
if (mp->m_flags & XFS_MOUNT_COMPAT_IOSIZE)
- return PAGE_SIZE;
- return (mp->m_swidth ?
- (mp->m_swidth << mp->m_sb.sb_blocklog) :
- ((mp->m_flags & XFS_MOUNT_DFLT_IOSIZE) ?
- (1 << (int)max(mp->m_readio_log, mp->m_writeio_log)) :
- PAGE_SIZE));
+ return default_size;
+
+ if (mp->m_swidth)
+ return mp->m_swidth << mp->m_sb.sb_blocklog;
+ if (mp->m_flags & XFS_MOUNT_DFLT_IOSIZE)
+ return 1UL << max_t(int, mp->m_readio_log, mp->m_writeio_log);
+ return default_size;
+
}
#define XFS_LAST_UNMOUNT_WAS_CLEAN(mp) \