diff options
author | Nathan Scott <nathans@sgi.com> | 2005-11-01 18:34:53 -0500 |
---|---|---|
committer | Nathan Scott <nathans@sgi.com> | 2005-11-01 18:34:53 -0500 |
commit | d8cc890d4095f1eaa7f411a85051015b21262b12 (patch) | |
tree | e13bec06a94a8dc5552dab733e90ef4f4d41fb8b /fs/xfs/xfs_vfsops.c | |
parent | aa82daa06198b27963fe3d6ee8035855b29f6524 (diff) |
[XFS] Ondisk format extension for extended attributes (attr2). Basically,
the data/attr forks now grow up/down from either end of the literal area,
rather than dividing the literal area into two chunks and growing both
upward. Means we can now make much more efficient use of the attribute
space, incl. fitting DMF attributes inline in 256 byte inodes, and large
jumps in dbench3 performance numbers. It is self enabling, but can be
forced on/off via the attr2/noattr2 mount options.
SGI-PV: 941645
SGI-Modid: xfs-linux:xfs-kern:23835a
Signed-off-by: Nathan Scott <nathans@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_vfsops.c')
-rw-r--r-- | fs/xfs/xfs_vfsops.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/fs/xfs/xfs_vfsops.c b/fs/xfs/xfs_vfsops.c index 7227baee8994..07779c5ab42f 100644 --- a/fs/xfs/xfs_vfsops.c +++ b/fs/xfs/xfs_vfsops.c | |||
@@ -268,19 +268,14 @@ xfs_start_flags( | |||
268 | #endif | 268 | #endif |
269 | if (ap->flags & XFSMNT_NOATIME) | 269 | if (ap->flags & XFSMNT_NOATIME) |
270 | mp->m_flags |= XFS_MOUNT_NOATIME; | 270 | mp->m_flags |= XFS_MOUNT_NOATIME; |
271 | |||
272 | if (ap->flags & XFSMNT_RETERR) | 271 | if (ap->flags & XFSMNT_RETERR) |
273 | mp->m_flags |= XFS_MOUNT_RETERR; | 272 | mp->m_flags |= XFS_MOUNT_RETERR; |
274 | |||
275 | if (ap->flags & XFSMNT_NOALIGN) | 273 | if (ap->flags & XFSMNT_NOALIGN) |
276 | mp->m_flags |= XFS_MOUNT_NOALIGN; | 274 | mp->m_flags |= XFS_MOUNT_NOALIGN; |
277 | |||
278 | if (ap->flags & XFSMNT_SWALLOC) | 275 | if (ap->flags & XFSMNT_SWALLOC) |
279 | mp->m_flags |= XFS_MOUNT_SWALLOC; | 276 | mp->m_flags |= XFS_MOUNT_SWALLOC; |
280 | |||
281 | if (ap->flags & XFSMNT_OSYNCISOSYNC) | 277 | if (ap->flags & XFSMNT_OSYNCISOSYNC) |
282 | mp->m_flags |= XFS_MOUNT_OSYNCISOSYNC; | 278 | mp->m_flags |= XFS_MOUNT_OSYNCISOSYNC; |
283 | |||
284 | if (ap->flags & XFSMNT_32BITINODES) | 279 | if (ap->flags & XFSMNT_32BITINODES) |
285 | mp->m_flags |= (XFS_MOUNT_32BITINODES | XFS_MOUNT_32BITINOOPT); | 280 | mp->m_flags |= (XFS_MOUNT_32BITINODES | XFS_MOUNT_32BITINOOPT); |
286 | 281 | ||
@@ -300,15 +295,14 @@ xfs_start_flags( | |||
300 | 295 | ||
301 | if (ap->flags & XFSMNT_IHASHSIZE) | 296 | if (ap->flags & XFSMNT_IHASHSIZE) |
302 | mp->m_flags |= XFS_MOUNT_IHASHSIZE; | 297 | mp->m_flags |= XFS_MOUNT_IHASHSIZE; |
303 | |||
304 | if (ap->flags & XFSMNT_IDELETE) | 298 | if (ap->flags & XFSMNT_IDELETE) |
305 | mp->m_flags |= XFS_MOUNT_IDELETE; | 299 | mp->m_flags |= XFS_MOUNT_IDELETE; |
306 | |||
307 | if (ap->flags & XFSMNT_DIRSYNC) | 300 | if (ap->flags & XFSMNT_DIRSYNC) |
308 | mp->m_flags |= XFS_MOUNT_DIRSYNC; | 301 | mp->m_flags |= XFS_MOUNT_DIRSYNC; |
309 | |||
310 | if (ap->flags & XFSMNT_COMPAT_IOSIZE) | 302 | if (ap->flags & XFSMNT_COMPAT_IOSIZE) |
311 | mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; | 303 | mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; |
304 | if (ap->flags & XFSMNT_COMPAT_ATTR) | ||
305 | mp->m_flags |= XFS_MOUNT_COMPAT_ATTR; | ||
312 | 306 | ||
313 | /* | 307 | /* |
314 | * no recovery flag requires a read-only mount | 308 | * no recovery flag requires a read-only mount |
@@ -1643,7 +1637,7 @@ xfs_vget( | |||
1643 | #define MNTOPT_IHASHSIZE "ihashsize" /* size of inode hash table */ | 1637 | #define MNTOPT_IHASHSIZE "ihashsize" /* size of inode hash table */ |
1644 | #define MNTOPT_NORECOVERY "norecovery" /* don't run XFS recovery */ | 1638 | #define MNTOPT_NORECOVERY "norecovery" /* don't run XFS recovery */ |
1645 | #define MNTOPT_BARRIER "barrier" /* use writer barriers for log write and | 1639 | #define MNTOPT_BARRIER "barrier" /* use writer barriers for log write and |
1646 | unwritten extent conversion */ | 1640 | * unwritten extent conversion */ |
1647 | #define MNTOPT_OSYNCISOSYNC "osyncisosync" /* o_sync is REALLY o_sync */ | 1641 | #define MNTOPT_OSYNCISOSYNC "osyncisosync" /* o_sync is REALLY o_sync */ |
1648 | #define MNTOPT_64BITINODE "inode64" /* inodes can be allocated anywhere */ | 1642 | #define MNTOPT_64BITINODE "inode64" /* inodes can be allocated anywhere */ |
1649 | #define MNTOPT_IKEEP "ikeep" /* do not free empty inode clusters */ | 1643 | #define MNTOPT_IKEEP "ikeep" /* do not free empty inode clusters */ |
@@ -1651,6 +1645,8 @@ xfs_vget( | |||
1651 | #define MNTOPT_LARGEIO "largeio" /* report large I/O sizes in stat() */ | 1645 | #define MNTOPT_LARGEIO "largeio" /* report large I/O sizes in stat() */ |
1652 | #define MNTOPT_NOLARGEIO "nolargeio" /* do not report large I/O sizes | 1646 | #define MNTOPT_NOLARGEIO "nolargeio" /* do not report large I/O sizes |
1653 | * in stat(). */ | 1647 | * in stat(). */ |
1648 | #define MNTOPT_ATTR2 "attr2" /* do use attr2 attribute format */ | ||
1649 | #define MNTOPT_NOATTR2 "noattr2" /* do not use attr2 attribute format */ | ||
1654 | 1650 | ||
1655 | STATIC unsigned long | 1651 | STATIC unsigned long |
1656 | suffix_strtoul(const char *cp, char **endp, unsigned int base) | 1652 | suffix_strtoul(const char *cp, char **endp, unsigned int base) |
@@ -1820,6 +1816,10 @@ xfs_parseargs( | |||
1820 | args->flags &= ~XFSMNT_COMPAT_IOSIZE; | 1816 | args->flags &= ~XFSMNT_COMPAT_IOSIZE; |
1821 | } else if (!strcmp(this_char, MNTOPT_NOLARGEIO)) { | 1817 | } else if (!strcmp(this_char, MNTOPT_NOLARGEIO)) { |
1822 | args->flags |= XFSMNT_COMPAT_IOSIZE; | 1818 | args->flags |= XFSMNT_COMPAT_IOSIZE; |
1819 | } else if (!strcmp(this_char, MNTOPT_ATTR2)) { | ||
1820 | args->flags &= ~XFSMNT_COMPAT_ATTR; | ||
1821 | } else if (!strcmp(this_char, MNTOPT_NOATTR2)) { | ||
1822 | args->flags |= XFSMNT_COMPAT_ATTR; | ||
1823 | } else if (!strcmp(this_char, "osyncisdsync")) { | 1823 | } else if (!strcmp(this_char, "osyncisdsync")) { |
1824 | /* no-op, this is now the default */ | 1824 | /* no-op, this is now the default */ |
1825 | printk("XFS: osyncisdsync is now the default, option is deprecated.\n"); | 1825 | printk("XFS: osyncisdsync is now the default, option is deprecated.\n"); |