[XFS] Introduce two new mount options (nolargeio/largeio) to allow
filesystems to expose the filesystem stripe width in stat(2) rather than the page cache size. This allows applications requiring high bandwidth to easily determine the optimum I/O size for the underlying filesystem. The default is to report the page cache size (i.e. "nolargeio"). SGI-PV: 942818 SGI-Modid: xfs-linux:xfs-kern:23830a Signed-off-by: David Chinner <dgc@sgi.com> Signed-off-by: Nathan Scott <nathans@sgi.com>
This commit is contained in:
committed by
Nathan Scott
parent
ee34807a65
commit
e8c8b3a79d
@@ -421,6 +421,9 @@ typedef struct xfs_mount {
|
||||
* allocation */
|
||||
#define XFS_MOUNT_IHASHSIZE 0x00100000 /* inode hash table size */
|
||||
#define XFS_MOUNT_DIRSYNC 0x00200000 /* synchronous directory ops */
|
||||
#define XFS_MOUNT_COMPAT_IOSIZE 0x00400000 /* don't report large preferred
|
||||
* I/O size in stat() */
|
||||
|
||||
|
||||
/*
|
||||
* Default minimum read and write sizes.
|
||||
@@ -442,6 +445,30 @@ typedef struct xfs_mount {
|
||||
#define XFS_WSYNC_READIO_LOG 15 /* 32K */
|
||||
#define XFS_WSYNC_WRITEIO_LOG 14 /* 16K */
|
||||
|
||||
/*
|
||||
* Allow large block sizes to be reported to userspace programs if the
|
||||
* "largeio" mount option is used.
|
||||
*
|
||||
* If compatibility mode is specified, simply return the basic unit of caching
|
||||
* so that we don't get inefficient read/modify/write I/O from user apps.
|
||||
* Otherwise....
|
||||
*
|
||||
* If the underlying volume is a stripe, then return the stripe width in bytes
|
||||
* as the recommended I/O size. It is not a stripe and we've set a default
|
||||
* buffered I/O size, return that, otherwise return the compat default.
|
||||
*/
|
||||
static inline unsigned long
|
||||
xfs_preferred_iosize(xfs_mount_t *mp)
|
||||
{
|
||||
if (mp->m_flags & XFS_MOUNT_COMPAT_IOSIZE)
|
||||
return PAGE_CACHE_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_CACHE_SIZE));
|
||||
}
|
||||
|
||||
#define XFS_MAXIOFFSET(mp) ((mp)->m_maxioffset)
|
||||
|
||||
#define XFS_FORCED_SHUTDOWN(mp) ((mp)->m_flags & XFS_MOUNT_FS_SHUTDOWN)
|
||||
|
Reference in New Issue
Block a user