diff options
Diffstat (limited to 'fs/xfs/xfs_vfsops.c')
-rw-r--r-- | fs/xfs/xfs_vfsops.c | 181 |
1 files changed, 106 insertions, 75 deletions
diff --git a/fs/xfs/xfs_vfsops.c b/fs/xfs/xfs_vfsops.c index f1a904e23ade..7bdbd991ab1c 100644 --- a/fs/xfs/xfs_vfsops.c +++ b/fs/xfs/xfs_vfsops.c | |||
@@ -1,74 +1,58 @@ | |||
1 | /* | 1 | /* |
2 | * XFS filesystem operations. | 2 | * Copyright (c) 2000-2005 Silicon Graphics, Inc. |
3 | * All Rights Reserved. | ||
3 | * | 4 | * |
4 | * Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. | 5 | * This program is free software; you can redistribute it and/or |
5 | * | 6 | * modify it under the terms of the GNU General Public License as |
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of version 2 of the GNU General Public License as | ||
8 | * published by the Free Software Foundation. | 7 | * published by the Free Software Foundation. |
9 | * | 8 | * |
10 | * This program is distributed in the hope that it would be useful, but | 9 | * This program is distributed in the hope that it would be useful, |
11 | * WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | * | 12 | * GNU General Public License for more details. |
14 | * Further, this software is distributed without any warranty that it is | ||
15 | * free of the rightful claim of any third person regarding infringement | ||
16 | * or the like. Any license provided herein, whether implied or | ||
17 | * otherwise, applies only to this software file. Patent licenses, if | ||
18 | * any, provided herein do not apply to combinations of this program with | ||
19 | * other software, or any other product whatsoever. | ||
20 | * | ||
21 | * You should have received a copy of the GNU General Public License along | ||
22 | * with this program; if not, write the Free Software Foundation, Inc., 59 | ||
23 | * Temple Place - Suite 330, Boston MA 02111-1307, USA. | ||
24 | * | ||
25 | * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, | ||
26 | * Mountain View, CA 94043, or: | ||
27 | * | 13 | * |
28 | * http://www.sgi.com | 14 | * You should have received a copy of the GNU General Public License |
29 | * | 15 | * along with this program; if not, write the Free Software Foundation, |
30 | * For further information regarding this notice, see: | 16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
31 | * | ||
32 | * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ | ||
33 | */ | 17 | */ |
34 | |||
35 | #include "xfs.h" | 18 | #include "xfs.h" |
36 | #include "xfs_macros.h" | 19 | #include "xfs_fs.h" |
37 | #include "xfs_types.h" | 20 | #include "xfs_types.h" |
38 | #include "xfs_inum.h" | 21 | #include "xfs_bit.h" |
39 | #include "xfs_log.h" | 22 | #include "xfs_log.h" |
23 | #include "xfs_inum.h" | ||
40 | #include "xfs_trans.h" | 24 | #include "xfs_trans.h" |
41 | #include "xfs_sb.h" | 25 | #include "xfs_sb.h" |
26 | #include "xfs_ag.h" | ||
42 | #include "xfs_dir.h" | 27 | #include "xfs_dir.h" |
43 | #include "xfs_dir2.h" | 28 | #include "xfs_dir2.h" |
44 | #include "xfs_dmapi.h" | 29 | #include "xfs_dmapi.h" |
45 | #include "xfs_mount.h" | 30 | #include "xfs_mount.h" |
31 | #include "xfs_da_btree.h" | ||
46 | #include "xfs_bmap_btree.h" | 32 | #include "xfs_bmap_btree.h" |
47 | #include "xfs_ialloc_btree.h" | 33 | #include "xfs_ialloc_btree.h" |
48 | #include "xfs_alloc_btree.h" | 34 | #include "xfs_alloc_btree.h" |
49 | #include "xfs_btree.h" | ||
50 | #include "xfs_alloc.h" | ||
51 | #include "xfs_ialloc.h" | ||
52 | #include "xfs_attr_sf.h" | ||
53 | #include "xfs_dir_sf.h" | 35 | #include "xfs_dir_sf.h" |
54 | #include "xfs_dir2_sf.h" | 36 | #include "xfs_dir2_sf.h" |
37 | #include "xfs_attr_sf.h" | ||
55 | #include "xfs_dinode.h" | 38 | #include "xfs_dinode.h" |
56 | #include "xfs_inode_item.h" | ||
57 | #include "xfs_inode.h" | 39 | #include "xfs_inode.h" |
58 | #include "xfs_ag.h" | 40 | #include "xfs_inode_item.h" |
41 | #include "xfs_btree.h" | ||
42 | #include "xfs_alloc.h" | ||
43 | #include "xfs_ialloc.h" | ||
44 | #include "xfs_quota.h" | ||
59 | #include "xfs_error.h" | 45 | #include "xfs_error.h" |
60 | #include "xfs_bmap.h" | 46 | #include "xfs_bmap.h" |
61 | #include "xfs_da_btree.h" | ||
62 | #include "xfs_rw.h" | 47 | #include "xfs_rw.h" |
63 | #include "xfs_refcache.h" | 48 | #include "xfs_refcache.h" |
64 | #include "xfs_buf_item.h" | 49 | #include "xfs_buf_item.h" |
65 | #include "xfs_extfree_item.h" | 50 | #include "xfs_log_priv.h" |
66 | #include "xfs_quota.h" | ||
67 | #include "xfs_dir2_trace.h" | 51 | #include "xfs_dir2_trace.h" |
52 | #include "xfs_extfree_item.h" | ||
68 | #include "xfs_acl.h" | 53 | #include "xfs_acl.h" |
69 | #include "xfs_attr.h" | 54 | #include "xfs_attr.h" |
70 | #include "xfs_clnt.h" | 55 | #include "xfs_clnt.h" |
71 | #include "xfs_log_priv.h" | ||
72 | 56 | ||
73 | STATIC int xfs_sync(bhv_desc_t *, int, cred_t *); | 57 | STATIC int xfs_sync(bhv_desc_t *, int, cred_t *); |
74 | 58 | ||
@@ -230,9 +214,7 @@ xfs_start_flags( | |||
230 | } | 214 | } |
231 | 215 | ||
232 | if (ap->logbufs != -1 && | 216 | if (ap->logbufs != -1 && |
233 | #if defined(DEBUG) || defined(XLOG_NOLOG) | ||
234 | ap->logbufs != 0 && | 217 | ap->logbufs != 0 && |
235 | #endif | ||
236 | (ap->logbufs < XLOG_MIN_ICLOGS || | 218 | (ap->logbufs < XLOG_MIN_ICLOGS || |
237 | ap->logbufs > XLOG_MAX_ICLOGS)) { | 219 | ap->logbufs > XLOG_MAX_ICLOGS)) { |
238 | cmn_err(CE_WARN, | 220 | cmn_err(CE_WARN, |
@@ -242,6 +224,7 @@ xfs_start_flags( | |||
242 | } | 224 | } |
243 | mp->m_logbufs = ap->logbufs; | 225 | mp->m_logbufs = ap->logbufs; |
244 | if (ap->logbufsize != -1 && | 226 | if (ap->logbufsize != -1 && |
227 | ap->logbufsize != 0 && | ||
245 | ap->logbufsize != 16 * 1024 && | 228 | ap->logbufsize != 16 * 1024 && |
246 | ap->logbufsize != 32 * 1024 && | 229 | ap->logbufsize != 32 * 1024 && |
247 | ap->logbufsize != 64 * 1024 && | 230 | ap->logbufsize != 64 * 1024 && |
@@ -257,6 +240,14 @@ xfs_start_flags( | |||
257 | mp->m_fsname_len = strlen(ap->fsname) + 1; | 240 | mp->m_fsname_len = strlen(ap->fsname) + 1; |
258 | mp->m_fsname = kmem_alloc(mp->m_fsname_len, KM_SLEEP); | 241 | mp->m_fsname = kmem_alloc(mp->m_fsname_len, KM_SLEEP); |
259 | strcpy(mp->m_fsname, ap->fsname); | 242 | strcpy(mp->m_fsname, ap->fsname); |
243 | if (ap->rtname[0]) { | ||
244 | mp->m_rtname = kmem_alloc(strlen(ap->rtname) + 1, KM_SLEEP); | ||
245 | strcpy(mp->m_rtname, ap->rtname); | ||
246 | } | ||
247 | if (ap->logname[0]) { | ||
248 | mp->m_logname = kmem_alloc(strlen(ap->logname) + 1, KM_SLEEP); | ||
249 | strcpy(mp->m_logname, ap->logname); | ||
250 | } | ||
260 | 251 | ||
261 | if (ap->flags & XFSMNT_WSYNC) | 252 | if (ap->flags & XFSMNT_WSYNC) |
262 | mp->m_flags |= XFS_MOUNT_WSYNC; | 253 | mp->m_flags |= XFS_MOUNT_WSYNC; |
@@ -268,21 +259,16 @@ xfs_start_flags( | |||
268 | #endif | 259 | #endif |
269 | if (ap->flags & XFSMNT_NOATIME) | 260 | if (ap->flags & XFSMNT_NOATIME) |
270 | mp->m_flags |= XFS_MOUNT_NOATIME; | 261 | mp->m_flags |= XFS_MOUNT_NOATIME; |
271 | |||
272 | if (ap->flags & XFSMNT_RETERR) | 262 | if (ap->flags & XFSMNT_RETERR) |
273 | mp->m_flags |= XFS_MOUNT_RETERR; | 263 | mp->m_flags |= XFS_MOUNT_RETERR; |
274 | |||
275 | if (ap->flags & XFSMNT_NOALIGN) | 264 | if (ap->flags & XFSMNT_NOALIGN) |
276 | mp->m_flags |= XFS_MOUNT_NOALIGN; | 265 | mp->m_flags |= XFS_MOUNT_NOALIGN; |
277 | |||
278 | if (ap->flags & XFSMNT_SWALLOC) | 266 | if (ap->flags & XFSMNT_SWALLOC) |
279 | mp->m_flags |= XFS_MOUNT_SWALLOC; | 267 | mp->m_flags |= XFS_MOUNT_SWALLOC; |
280 | |||
281 | if (ap->flags & XFSMNT_OSYNCISOSYNC) | 268 | if (ap->flags & XFSMNT_OSYNCISOSYNC) |
282 | mp->m_flags |= XFS_MOUNT_OSYNCISOSYNC; | 269 | mp->m_flags |= XFS_MOUNT_OSYNCISOSYNC; |
283 | |||
284 | if (ap->flags & XFSMNT_32BITINODES) | 270 | if (ap->flags & XFSMNT_32BITINODES) |
285 | mp->m_flags |= (XFS_MOUNT_32BITINODES | XFS_MOUNT_32BITINOOPT); | 271 | mp->m_flags |= XFS_MOUNT_32BITINODES; |
286 | 272 | ||
287 | if (ap->flags & XFSMNT_IOSIZE) { | 273 | if (ap->flags & XFSMNT_IOSIZE) { |
288 | if (ap->iosizelog > XFS_MAX_IO_LOG || | 274 | if (ap->iosizelog > XFS_MAX_IO_LOG || |
@@ -300,12 +286,15 @@ xfs_start_flags( | |||
300 | 286 | ||
301 | if (ap->flags & XFSMNT_IHASHSIZE) | 287 | if (ap->flags & XFSMNT_IHASHSIZE) |
302 | mp->m_flags |= XFS_MOUNT_IHASHSIZE; | 288 | mp->m_flags |= XFS_MOUNT_IHASHSIZE; |
303 | |||
304 | if (ap->flags & XFSMNT_IDELETE) | 289 | if (ap->flags & XFSMNT_IDELETE) |
305 | mp->m_flags |= XFS_MOUNT_IDELETE; | 290 | mp->m_flags |= XFS_MOUNT_IDELETE; |
306 | |||
307 | if (ap->flags & XFSMNT_DIRSYNC) | 291 | if (ap->flags & XFSMNT_DIRSYNC) |
308 | mp->m_flags |= XFS_MOUNT_DIRSYNC; | 292 | mp->m_flags |= XFS_MOUNT_DIRSYNC; |
293 | if (ap->flags & XFSMNT_COMPAT_ATTR) | ||
294 | mp->m_flags |= XFS_MOUNT_COMPAT_ATTR; | ||
295 | |||
296 | if (ap->flags2 & XFSMNT2_COMPAT_IOSIZE) | ||
297 | mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; | ||
309 | 298 | ||
310 | /* | 299 | /* |
311 | * no recovery flag requires a read-only mount | 300 | * no recovery flag requires a read-only mount |
@@ -321,8 +310,8 @@ xfs_start_flags( | |||
321 | 310 | ||
322 | if (ap->flags & XFSMNT_NOUUID) | 311 | if (ap->flags & XFSMNT_NOUUID) |
323 | mp->m_flags |= XFS_MOUNT_NOUUID; | 312 | mp->m_flags |= XFS_MOUNT_NOUUID; |
324 | if (ap->flags & XFSMNT_NOLOGFLUSH) | 313 | if (ap->flags & XFSMNT_BARRIER) |
325 | mp->m_flags |= XFS_MOUNT_NOLOGFLUSH; | 314 | mp->m_flags |= XFS_MOUNT_BARRIER; |
326 | 315 | ||
327 | return 0; | 316 | return 0; |
328 | } | 317 | } |
@@ -393,6 +382,10 @@ xfs_finish_flags( | |||
393 | return XFS_ERROR(EINVAL); | 382 | return XFS_ERROR(EINVAL); |
394 | } | 383 | } |
395 | 384 | ||
385 | if (XFS_SB_VERSION_HASATTR2(&mp->m_sb)) { | ||
386 | mp->m_flags &= ~XFS_MOUNT_COMPAT_ATTR; | ||
387 | } | ||
388 | |||
396 | return 0; | 389 | return 0; |
397 | } | 390 | } |
398 | 391 | ||
@@ -512,8 +505,14 @@ xfs_mount( | |||
512 | goto error2; | 505 | goto error2; |
513 | 506 | ||
514 | error = XFS_IOINIT(vfsp, args, flags); | 507 | error = XFS_IOINIT(vfsp, args, flags); |
515 | if (!error) | 508 | if (error) |
516 | return 0; | 509 | goto error2; |
510 | |||
511 | if ((args->flags & XFSMNT_BARRIER) && | ||
512 | !(XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY)) | ||
513 | xfs_mountfs_check_barriers(mp); | ||
514 | return 0; | ||
515 | |||
517 | error2: | 516 | error2: |
518 | if (mp->m_sb_bp) | 517 | if (mp->m_sb_bp) |
519 | xfs_freesb(mp); | 518 | xfs_freesb(mp); |
@@ -656,19 +655,24 @@ xfs_mntupdate( | |||
656 | else | 655 | else |
657 | mp->m_flags &= ~XFS_MOUNT_NOATIME; | 656 | mp->m_flags &= ~XFS_MOUNT_NOATIME; |
658 | 657 | ||
659 | if (!(vfsp->vfs_flag & VFS_RDONLY)) { | 658 | if ((vfsp->vfs_flag & VFS_RDONLY) && |
660 | VFS_SYNC(vfsp, SYNC_FSDATA|SYNC_BDFLUSH|SYNC_ATTR, NULL, error); | 659 | !(*flags & MS_RDONLY)) { |
660 | vfsp->vfs_flag &= ~VFS_RDONLY; | ||
661 | |||
662 | if (args->flags & XFSMNT_BARRIER) | ||
663 | xfs_mountfs_check_barriers(mp); | ||
661 | } | 664 | } |
662 | 665 | ||
663 | if (*flags & MS_RDONLY) { | 666 | if (!(vfsp->vfs_flag & VFS_RDONLY) && |
667 | (*flags & MS_RDONLY)) { | ||
668 | VFS_SYNC(vfsp, SYNC_FSDATA|SYNC_BDFLUSH|SYNC_ATTR, NULL, error); | ||
669 | |||
664 | xfs_quiesce_fs(mp); | 670 | xfs_quiesce_fs(mp); |
665 | 671 | ||
666 | /* Ok now write out an unmount record */ | 672 | /* Ok now write out an unmount record */ |
667 | xfs_log_unmount_write(mp); | 673 | xfs_log_unmount_write(mp); |
668 | xfs_unmountfs_writesb(mp); | 674 | xfs_unmountfs_writesb(mp); |
669 | vfsp->vfs_flag |= VFS_RDONLY; | 675 | vfsp->vfs_flag |= VFS_RDONLY; |
670 | } else { | ||
671 | vfsp->vfs_flag &= ~VFS_RDONLY; | ||
672 | } | 676 | } |
673 | 677 | ||
674 | return 0; | 678 | return 0; |
@@ -892,7 +896,7 @@ xfs_sync( | |||
892 | * only available by calling this routine. | 896 | * only available by calling this routine. |
893 | * | 897 | * |
894 | */ | 898 | */ |
895 | STATIC int | 899 | int |
896 | xfs_sync_inodes( | 900 | xfs_sync_inodes( |
897 | xfs_mount_t *mp, | 901 | xfs_mount_t *mp, |
898 | int flags, | 902 | int flags, |
@@ -976,7 +980,7 @@ xfs_sync_inodes( | |||
976 | ipointer = (xfs_iptr_t *)kmem_zalloc(sizeof(xfs_iptr_t), KM_SLEEP); | 980 | ipointer = (xfs_iptr_t *)kmem_zalloc(sizeof(xfs_iptr_t), KM_SLEEP); |
977 | 981 | ||
978 | fflag = XFS_B_ASYNC; /* default is don't wait */ | 982 | fflag = XFS_B_ASYNC; /* default is don't wait */ |
979 | if (flags & SYNC_BDFLUSH) | 983 | if (flags & (SYNC_BDFLUSH | SYNC_DELWRI)) |
980 | fflag = XFS_B_DELWRI; | 984 | fflag = XFS_B_DELWRI; |
981 | if (flags & SYNC_WAIT) | 985 | if (flags & SYNC_WAIT) |
982 | fflag = 0; /* synchronous overrides all */ | 986 | fflag = 0; /* synchronous overrides all */ |
@@ -1628,11 +1632,17 @@ xfs_vget( | |||
1628 | #define MNTOPT_ALLOCSIZE "allocsize" /* preferred allocation size */ | 1632 | #define MNTOPT_ALLOCSIZE "allocsize" /* preferred allocation size */ |
1629 | #define MNTOPT_IHASHSIZE "ihashsize" /* size of inode hash table */ | 1633 | #define MNTOPT_IHASHSIZE "ihashsize" /* size of inode hash table */ |
1630 | #define MNTOPT_NORECOVERY "norecovery" /* don't run XFS recovery */ | 1634 | #define MNTOPT_NORECOVERY "norecovery" /* don't run XFS recovery */ |
1631 | #define MNTOPT_NOLOGFLUSH "nologflush" /* don't hard flush on log writes */ | 1635 | #define MNTOPT_BARRIER "barrier" /* use writer barriers for log write and |
1636 | * unwritten extent conversion */ | ||
1632 | #define MNTOPT_OSYNCISOSYNC "osyncisosync" /* o_sync is REALLY o_sync */ | 1637 | #define MNTOPT_OSYNCISOSYNC "osyncisosync" /* o_sync is REALLY o_sync */ |
1633 | #define MNTOPT_64BITINODE "inode64" /* inodes can be allocated anywhere */ | 1638 | #define MNTOPT_64BITINODE "inode64" /* inodes can be allocated anywhere */ |
1634 | #define MNTOPT_IKEEP "ikeep" /* do not free empty inode clusters */ | 1639 | #define MNTOPT_IKEEP "ikeep" /* do not free empty inode clusters */ |
1635 | #define MNTOPT_NOIKEEP "noikeep" /* free empty inode clusters */ | 1640 | #define MNTOPT_NOIKEEP "noikeep" /* free empty inode clusters */ |
1641 | #define MNTOPT_LARGEIO "largeio" /* report large I/O sizes in stat() */ | ||
1642 | #define MNTOPT_NOLARGEIO "nolargeio" /* do not report large I/O sizes | ||
1643 | * in stat(). */ | ||
1644 | #define MNTOPT_ATTR2 "attr2" /* do use attr2 attribute format */ | ||
1645 | #define MNTOPT_NOATTR2 "noattr2" /* do not use attr2 attribute format */ | ||
1636 | 1646 | ||
1637 | STATIC unsigned long | 1647 | STATIC unsigned long |
1638 | suffix_strtoul(const char *cp, char **endp, unsigned int base) | 1648 | suffix_strtoul(const char *cp, char **endp, unsigned int base) |
@@ -1669,12 +1679,15 @@ xfs_parseargs( | |||
1669 | int dsunit, dswidth, vol_dsunit, vol_dswidth; | 1679 | int dsunit, dswidth, vol_dsunit, vol_dswidth; |
1670 | int iosize; | 1680 | int iosize; |
1671 | 1681 | ||
1682 | args->flags2 |= XFSMNT2_COMPAT_IOSIZE; | ||
1683 | args->flags |= XFSMNT_COMPAT_ATTR; | ||
1684 | |||
1672 | #if 0 /* XXX: off by default, until some remaining issues ironed out */ | 1685 | #if 0 /* XXX: off by default, until some remaining issues ironed out */ |
1673 | args->flags |= XFSMNT_IDELETE; /* default to on */ | 1686 | args->flags |= XFSMNT_IDELETE; /* default to on */ |
1674 | #endif | 1687 | #endif |
1675 | 1688 | ||
1676 | if (!options) | 1689 | if (!options) |
1677 | return 0; | 1690 | goto done; |
1678 | 1691 | ||
1679 | iosize = dsunit = dswidth = vol_dsunit = vol_dswidth = 0; | 1692 | iosize = dsunit = dswidth = vol_dsunit = vol_dswidth = 0; |
1680 | 1693 | ||
@@ -1791,12 +1804,20 @@ xfs_parseargs( | |||
1791 | #endif | 1804 | #endif |
1792 | } else if (!strcmp(this_char, MNTOPT_NOUUID)) { | 1805 | } else if (!strcmp(this_char, MNTOPT_NOUUID)) { |
1793 | args->flags |= XFSMNT_NOUUID; | 1806 | args->flags |= XFSMNT_NOUUID; |
1794 | } else if (!strcmp(this_char, MNTOPT_NOLOGFLUSH)) { | 1807 | } else if (!strcmp(this_char, MNTOPT_BARRIER)) { |
1795 | args->flags |= XFSMNT_NOLOGFLUSH; | 1808 | args->flags |= XFSMNT_BARRIER; |
1796 | } else if (!strcmp(this_char, MNTOPT_IKEEP)) { | 1809 | } else if (!strcmp(this_char, MNTOPT_IKEEP)) { |
1797 | args->flags &= ~XFSMNT_IDELETE; | 1810 | args->flags &= ~XFSMNT_IDELETE; |
1798 | } else if (!strcmp(this_char, MNTOPT_NOIKEEP)) { | 1811 | } else if (!strcmp(this_char, MNTOPT_NOIKEEP)) { |
1799 | args->flags |= XFSMNT_IDELETE; | 1812 | args->flags |= XFSMNT_IDELETE; |
1813 | } else if (!strcmp(this_char, MNTOPT_LARGEIO)) { | ||
1814 | args->flags2 &= ~XFSMNT2_COMPAT_IOSIZE; | ||
1815 | } else if (!strcmp(this_char, MNTOPT_NOLARGEIO)) { | ||
1816 | args->flags2 |= XFSMNT2_COMPAT_IOSIZE; | ||
1817 | } else if (!strcmp(this_char, MNTOPT_ATTR2)) { | ||
1818 | args->flags &= ~XFSMNT_COMPAT_ATTR; | ||
1819 | } else if (!strcmp(this_char, MNTOPT_NOATTR2)) { | ||
1820 | args->flags |= XFSMNT_COMPAT_ATTR; | ||
1800 | } else if (!strcmp(this_char, "osyncisdsync")) { | 1821 | } else if (!strcmp(this_char, "osyncisdsync")) { |
1801 | /* no-op, this is now the default */ | 1822 | /* no-op, this is now the default */ |
1802 | printk("XFS: osyncisdsync is now the default, option is deprecated.\n"); | 1823 | printk("XFS: osyncisdsync is now the default, option is deprecated.\n"); |
@@ -1846,6 +1867,11 @@ printk("XFS: irixsgid is now a sysctl(2) variable, option is deprecated.\n"); | |||
1846 | args->sunit = args->swidth = 0; | 1867 | args->sunit = args->swidth = 0; |
1847 | } | 1868 | } |
1848 | 1869 | ||
1870 | done: | ||
1871 | if (args->flags & XFSMNT_32BITINODES) | ||
1872 | vfsp->vfs_flag |= VFS_32BITINODES; | ||
1873 | if (args->flags2) | ||
1874 | args->flags |= XFSMNT_FLAGS2; | ||
1849 | return 0; | 1875 | return 0; |
1850 | } | 1876 | } |
1851 | 1877 | ||
@@ -1866,7 +1892,7 @@ xfs_showargs( | |||
1866 | { XFS_MOUNT_NOUUID, "," MNTOPT_NOUUID }, | 1892 | { XFS_MOUNT_NOUUID, "," MNTOPT_NOUUID }, |
1867 | { XFS_MOUNT_NORECOVERY, "," MNTOPT_NORECOVERY }, | 1893 | { XFS_MOUNT_NORECOVERY, "," MNTOPT_NORECOVERY }, |
1868 | { XFS_MOUNT_OSYNCISOSYNC, "," MNTOPT_OSYNCISOSYNC }, | 1894 | { XFS_MOUNT_OSYNCISOSYNC, "," MNTOPT_OSYNCISOSYNC }, |
1869 | { XFS_MOUNT_NOLOGFLUSH, "," MNTOPT_NOLOGFLUSH }, | 1895 | { XFS_MOUNT_BARRIER, "," MNTOPT_BARRIER }, |
1870 | { XFS_MOUNT_IDELETE, "," MNTOPT_NOIKEEP }, | 1896 | { XFS_MOUNT_IDELETE, "," MNTOPT_NOIKEEP }, |
1871 | { 0, NULL } | 1897 | { 0, NULL } |
1872 | }; | 1898 | }; |
@@ -1883,21 +1909,20 @@ xfs_showargs( | |||
1883 | seq_printf(m, "," MNTOPT_IHASHSIZE "=%d", mp->m_ihsize); | 1909 | seq_printf(m, "," MNTOPT_IHASHSIZE "=%d", mp->m_ihsize); |
1884 | 1910 | ||
1885 | if (mp->m_flags & XFS_MOUNT_DFLT_IOSIZE) | 1911 | if (mp->m_flags & XFS_MOUNT_DFLT_IOSIZE) |
1886 | seq_printf(m, "," MNTOPT_ALLOCSIZE "=%d", 1<<mp->m_writeio_log); | 1912 | seq_printf(m, "," MNTOPT_ALLOCSIZE "=%dk", |
1913 | (int)(1 << mp->m_writeio_log) >> 10); | ||
1887 | 1914 | ||
1888 | if (mp->m_logbufs > 0) | 1915 | if (mp->m_logbufs > 0) |
1889 | seq_printf(m, "," MNTOPT_LOGBUFS "=%d", mp->m_logbufs); | 1916 | seq_printf(m, "," MNTOPT_LOGBUFS "=%d", mp->m_logbufs); |
1890 | 1917 | ||
1891 | if (mp->m_logbsize > 0) | 1918 | if (mp->m_logbsize > 0) |
1892 | seq_printf(m, "," MNTOPT_LOGBSIZE "=%d", mp->m_logbsize); | 1919 | seq_printf(m, "," MNTOPT_LOGBSIZE "=%dk", mp->m_logbsize >> 10); |
1893 | 1920 | ||
1894 | if (mp->m_ddev_targp != mp->m_logdev_targp) | 1921 | if (mp->m_logname) |
1895 | seq_printf(m, "," MNTOPT_LOGDEV "=%s", | 1922 | seq_printf(m, "," MNTOPT_LOGDEV "=%s", mp->m_logname); |
1896 | XFS_BUFTARG_NAME(mp->m_logdev_targp)); | ||
1897 | 1923 | ||
1898 | if (mp->m_rtdev_targp && mp->m_ddev_targp != mp->m_rtdev_targp) | 1924 | if (mp->m_rtname) |
1899 | seq_printf(m, "," MNTOPT_RTDEV "=%s", | 1925 | seq_printf(m, "," MNTOPT_RTDEV "=%s", mp->m_rtname); |
1900 | XFS_BUFTARG_NAME(mp->m_rtdev_targp)); | ||
1901 | 1926 | ||
1902 | if (mp->m_dalign > 0) | 1927 | if (mp->m_dalign > 0) |
1903 | seq_printf(m, "," MNTOPT_SUNIT "=%d", | 1928 | seq_printf(m, "," MNTOPT_SUNIT "=%d", |
@@ -1907,7 +1932,13 @@ xfs_showargs( | |||
1907 | seq_printf(m, "," MNTOPT_SWIDTH "=%d", | 1932 | seq_printf(m, "," MNTOPT_SWIDTH "=%d", |
1908 | (int)XFS_FSB_TO_BB(mp, mp->m_swidth)); | 1933 | (int)XFS_FSB_TO_BB(mp, mp->m_swidth)); |
1909 | 1934 | ||
1910 | if (!(mp->m_flags & XFS_MOUNT_32BITINOOPT)) | 1935 | if (!(mp->m_flags & XFS_MOUNT_COMPAT_ATTR)) |
1936 | seq_printf(m, "," MNTOPT_ATTR2); | ||
1937 | |||
1938 | if (!(mp->m_flags & XFS_MOUNT_COMPAT_IOSIZE)) | ||
1939 | seq_printf(m, "," MNTOPT_LARGEIO); | ||
1940 | |||
1941 | if (!(vfsp->vfs_flag & VFS_32BITINODES)) | ||
1911 | seq_printf(m, "," MNTOPT_64BITINODE); | 1942 | seq_printf(m, "," MNTOPT_64BITINODE); |
1912 | 1943 | ||
1913 | if (vfsp->vfs_flag & VFS_GRPID) | 1944 | if (vfsp->vfs_flag & VFS_GRPID) |