aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_mount.h
diff options
context:
space:
mode:
authorDavid Chinner <dgc@sgi.com>2005-11-01 18:33:05 -0500
committerNathan Scott <nathans@sgi.com>2005-11-01 18:33:05 -0500
commite8c8b3a79d85c22d3665b97dde843dc4d8d7ae37 (patch)
treea82b58ebc5c40474cdc53c91bd135b97034de565 /fs/xfs/xfs_mount.h
parentee34807a65aa0c5911dc27682863afca780a003e (diff)
[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>
Diffstat (limited to 'fs/xfs/xfs_mount.h')
-rw-r--r--fs/xfs/xfs_mount.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
index 0653beecf93a..b71af184aea6 100644
--- a/fs/xfs/xfs_mount.h
+++ b/fs/xfs/xfs_mount.h
@@ -421,6 +421,9 @@ typedef struct xfs_mount {
421 * allocation */ 421 * allocation */
422#define XFS_MOUNT_IHASHSIZE 0x00100000 /* inode hash table size */ 422#define XFS_MOUNT_IHASHSIZE 0x00100000 /* inode hash table size */
423#define XFS_MOUNT_DIRSYNC 0x00200000 /* synchronous directory ops */ 423#define XFS_MOUNT_DIRSYNC 0x00200000 /* synchronous directory ops */
424#define XFS_MOUNT_COMPAT_IOSIZE 0x00400000 /* don't report large preferred
425 * I/O size in stat() */
426
424 427
425/* 428/*
426 * Default minimum read and write sizes. 429 * Default minimum read and write sizes.
@@ -442,6 +445,30 @@ typedef struct xfs_mount {
442#define XFS_WSYNC_READIO_LOG 15 /* 32K */ 445#define XFS_WSYNC_READIO_LOG 15 /* 32K */
443#define XFS_WSYNC_WRITEIO_LOG 14 /* 16K */ 446#define XFS_WSYNC_WRITEIO_LOG 14 /* 16K */
444 447
448/*
449 * Allow large block sizes to be reported to userspace programs if the
450 * "largeio" mount option is used.
451 *
452 * If compatibility mode is specified, simply return the basic unit of caching
453 * so that we don't get inefficient read/modify/write I/O from user apps.
454 * Otherwise....
455 *
456 * If the underlying volume is a stripe, then return the stripe width in bytes
457 * as the recommended I/O size. It is not a stripe and we've set a default
458 * buffered I/O size, return that, otherwise return the compat default.
459 */
460static inline unsigned long
461xfs_preferred_iosize(xfs_mount_t *mp)
462{
463 if (mp->m_flags & XFS_MOUNT_COMPAT_IOSIZE)
464 return PAGE_CACHE_SIZE;
465 return (mp->m_swidth ?
466 (mp->m_swidth << mp->m_sb.sb_blocklog) :
467 ((mp->m_flags & XFS_MOUNT_DFLT_IOSIZE) ?
468 (1 << (int)MAX(mp->m_readio_log, mp->m_writeio_log)) :
469 PAGE_CACHE_SIZE));
470}
471
445#define XFS_MAXIOFFSET(mp) ((mp)->m_maxioffset) 472#define XFS_MAXIOFFSET(mp) ((mp)->m_maxioffset)
446 473
447#define XFS_FORCED_SHUTDOWN(mp) ((mp)->m_flags & XFS_MOUNT_FS_SHUTDOWN) 474#define XFS_FORCED_SHUTDOWN(mp) ((mp)->m_flags & XFS_MOUNT_FS_SHUTDOWN)