aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_vfsops.c
diff options
context:
space:
mode:
authorNathan Scott <nathans@sgi.com>2005-11-01 18:34:53 -0500
committerNathan Scott <nathans@sgi.com>2005-11-01 18:34:53 -0500
commitd8cc890d4095f1eaa7f411a85051015b21262b12 (patch)
treee13bec06a94a8dc5552dab733e90ef4f4d41fb8b /fs/xfs/xfs_vfsops.c
parentaa82daa06198b27963fe3d6ee8035855b29f6524 (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.c18
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
1655STATIC unsigned long 1651STATIC unsigned long
1656suffix_strtoul(const char *cp, char **endp, unsigned int base) 1652suffix_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 */
1825printk("XFS: osyncisdsync is now the default, option is deprecated.\n"); 1825printk("XFS: osyncisdsync is now the default, option is deprecated.\n");