aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs')
-rw-r--r--fs/xfs/linux-2.6/xfs_export.c4
-rw-r--r--fs/xfs/linux-2.6/xfs_file.c14
-rw-r--r--fs/xfs/linux-2.6/xfs_super.c5
-rw-r--r--fs/xfs/linux-2.6/xfs_vfs.c3
-rw-r--r--fs/xfs/linux-2.6/xfs_vfs.h8
-rw-r--r--fs/xfs/quota/xfs_qm.c3
-rw-r--r--fs/xfs/quota/xfs_qm_syscalls.c16
-rw-r--r--fs/xfs/xfs_dmapi.h2
-rw-r--r--fs/xfs/xfs_inode.c2
-rw-r--r--fs/xfs/xfs_inode.h5
-rw-r--r--fs/xfs/xfs_log.c13
-rw-r--r--fs/xfs/xfs_mount.c8
-rw-r--r--fs/xfs/xfs_mount.h8
-rw-r--r--fs/xfs/xfs_qmops.c2
-rw-r--r--fs/xfs/xfs_vfsops.c36
-rw-r--r--fs/xfs/xfs_vnodeops.c6
16 files changed, 59 insertions, 76 deletions
diff --git a/fs/xfs/linux-2.6/xfs_export.c b/fs/xfs/linux-2.6/xfs_export.c
index 4ed28a6767bb..726449d4fd22 100644
--- a/fs/xfs/linux-2.6/xfs_export.c
+++ b/fs/xfs/linux-2.6/xfs_export.c
@@ -102,9 +102,7 @@ xfs_fs_encode_fh(
102 int len; 102 int len;
103 int is64 = 0; 103 int is64 = 0;
104#if XFS_BIG_INUMS 104#if XFS_BIG_INUMS
105 bhv_vfs_t *vfs = vfs_from_sb(inode->i_sb); 105 if (!(XFS_M(inode->i_sb)->m_flags & XFS_MOUNT_SMALL_INUMS)) {
106
107 if (!(vfs->vfs_flag & VFS_32BITINODES)) {
108 /* filesystem may contain 64bit inode numbers */ 106 /* filesystem may contain 64bit inode numbers */
109 is64 = XFS_FILEID_TYPE_64FLAG; 107 is64 = XFS_FILEID_TYPE_64FLAG;
110 } 108 }
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c
index 123659e74b53..fb8dd34041eb 100644
--- a/fs/xfs/linux-2.6/xfs_file.c
+++ b/fs/xfs/linux-2.6/xfs_file.c
@@ -259,7 +259,7 @@ xfs_file_mmap(
259 vma->vm_flags |= VM_CAN_NONLINEAR; 259 vma->vm_flags |= VM_CAN_NONLINEAR;
260 260
261#ifdef CONFIG_XFS_DMAPI 261#ifdef CONFIG_XFS_DMAPI
262 if (vfs_from_sb(filp->f_path.dentry->d_inode->i_sb)->vfs_flag & VFS_DMI) 262 if (XFS_M(filp->f_path.dentry->d_inode->i_sb)->m_flags & XFS_MOUNT_DMAPI)
263 vma->vm_ops = &xfs_dmapi_file_vm_ops; 263 vma->vm_ops = &xfs_dmapi_file_vm_ops;
264#endif /* CONFIG_XFS_DMAPI */ 264#endif /* CONFIG_XFS_DMAPI */
265 265
@@ -317,13 +317,13 @@ xfs_vm_mprotect(
317 unsigned int newflags) 317 unsigned int newflags)
318{ 318{
319 struct inode *inode = vma->vm_file->f_path.dentry->d_inode; 319 struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
320 bhv_vfs_t *vfsp = vfs_from_sb(inode->i_sb); 320 struct xfs_mount *mp = XFS_M(inode->i_sb);
321 int error = 0; 321 int error = 0;
322 322
323 if (vfsp->vfs_flag & VFS_DMI) { 323 if (mp->m_flags & XFS_MOUNT_DMAPI) {
324 if ((vma->vm_flags & VM_MAYSHARE) && 324 if ((vma->vm_flags & VM_MAYSHARE) &&
325 (newflags & VM_WRITE) && !(vma->vm_flags & VM_WRITE)) 325 (newflags & VM_WRITE) && !(vma->vm_flags & VM_WRITE))
326 error = XFS_SEND_MMAP(XFS_VFSTOM(vfsp), vma, VM_WRITE); 326 error = XFS_SEND_MMAP(mp, vma, VM_WRITE);
327 } 327 }
328 return error; 328 return error;
329} 329}
@@ -340,13 +340,13 @@ STATIC int
340xfs_file_open_exec( 340xfs_file_open_exec(
341 struct inode *inode) 341 struct inode *inode)
342{ 342{
343 bhv_vfs_t *vfsp = vfs_from_sb(inode->i_sb); 343 struct xfs_mount *mp = XFS_M(inode->i_sb);
344 344
345 if (unlikely(vfsp->vfs_flag & VFS_DMI)) { 345 if (unlikely(mp->m_flags & XFS_MOUNT_DMAPI)) {
346 if (DM_EVENT_ENABLED(XFS_I(inode), DM_EVENT_READ)) { 346 if (DM_EVENT_ENABLED(XFS_I(inode), DM_EVENT_READ)) {
347 bhv_vnode_t *vp = vn_from_inode(inode); 347 bhv_vnode_t *vp = vn_from_inode(inode);
348 348
349 return -XFS_SEND_DATA(XFS_VFSTOM(vfsp), DM_EVENT_READ, 349 return -XFS_SEND_DATA(mp, DM_EVENT_READ,
350 vp, 0, 0, 0, NULL); 350 vp, 0, 0, 0, NULL);
351 } 351 }
352 } 352 }
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c
index 24bc0afb003c..e275b7a82bc1 100644
--- a/fs/xfs/linux-2.6/xfs_super.c
+++ b/fs/xfs/linux-2.6/xfs_super.c
@@ -534,7 +534,7 @@ vfs_sync_worker(
534{ 534{
535 int error; 535 int error;
536 536
537 if (!(vfsp->vfs_flag & VFS_RDONLY)) 537 if (!(XFS_VFSTOM(vfsp)->m_flags & XFS_MOUNT_RDONLY))
538 error = xfs_sync(XFS_VFSTOM(vfsp), SYNC_FSDATA | SYNC_BDFLUSH | \ 538 error = xfs_sync(XFS_VFSTOM(vfsp), SYNC_FSDATA | SYNC_BDFLUSH | \
539 SYNC_ATTR | SYNC_REFCACHE | SYNC_SUPER); 539 SYNC_ATTR | SYNC_REFCACHE | SYNC_SUPER);
540 vfsp->vfs_sync_seq++; 540 vfsp->vfs_sync_seq++;
@@ -793,6 +793,9 @@ xfs_fs_fill_super(
793 mp->m_vfsp = vfsp; 793 mp->m_vfsp = vfsp;
794 vfsp->vfs_mount = mp; 794 vfsp->vfs_mount = mp;
795 795
796 if (sb->s_flags & MS_RDONLY)
797 mp->m_flags |= XFS_MOUNT_RDONLY;
798
796 error = xfs_parseargs(mp, (char *)data, args, 0); 799 error = xfs_parseargs(mp, (char *)data, args, 0);
797 if (error) 800 if (error)
798 goto fail_vfsop; 801 goto fail_vfsop;
diff --git a/fs/xfs/linux-2.6/xfs_vfs.c b/fs/xfs/linux-2.6/xfs_vfs.c
index 573e52a24072..b098e0903353 100644
--- a/fs/xfs/linux-2.6/xfs_vfs.c
+++ b/fs/xfs/linux-2.6/xfs_vfs.c
@@ -211,9 +211,6 @@ vfs_allocate(
211 vfsp->vfs_super = sb; 211 vfsp->vfs_super = sb;
212 sb->s_fs_info = vfsp; 212 sb->s_fs_info = vfsp;
213 213
214 if (sb->s_flags & MS_RDONLY)
215 vfsp->vfs_flag |= VFS_RDONLY;
216
217 return vfsp; 214 return vfsp;
218} 215}
219 216
diff --git a/fs/xfs/linux-2.6/xfs_vfs.h b/fs/xfs/linux-2.6/xfs_vfs.h
index 943f581bdb47..5c4996356226 100644
--- a/fs/xfs/linux-2.6/xfs_vfs.h
+++ b/fs/xfs/linux-2.6/xfs_vfs.h
@@ -43,7 +43,6 @@ typedef struct bhv_vfs_sync_work {
43 43
44typedef struct bhv_vfs { 44typedef struct bhv_vfs {
45 struct xfs_mount *vfs_mount; 45 struct xfs_mount *vfs_mount;
46 u_int vfs_flag; /* flags */
47 struct super_block *vfs_super; /* generic superblock pointer */ 46 struct super_block *vfs_super; /* generic superblock pointer */
48 struct task_struct *vfs_sync_task; /* generalised sync thread */ 47 struct task_struct *vfs_sync_task; /* generalised sync thread */
49 bhv_vfs_sync_work_t vfs_sync_work; /* work item for VFS_SYNC */ 48 bhv_vfs_sync_work_t vfs_sync_work; /* work item for VFS_SYNC */
@@ -53,13 +52,6 @@ typedef struct bhv_vfs {
53 wait_queue_head_t vfs_wait_single_sync_task; 52 wait_queue_head_t vfs_wait_single_sync_task;
54} bhv_vfs_t; 53} bhv_vfs_t;
55 54
56#define VFS_RDONLY 0x0001 /* read-only vfs */
57#define VFS_GRPID 0x0002 /* group-ID assigned from directory */
58#define VFS_DMI 0x0004 /* filesystem has the DMI enabled */
59/* ---- VFS_UMOUNT ---- 0x0008 -- unneeded, fixed via kthread APIs */
60#define VFS_32BITINODES 0x0010 /* do not use inums above 32 bits */
61#define VFS_END 0x0010 /* max flag */
62
63#define SYNC_ATTR 0x0001 /* sync attributes */ 55#define SYNC_ATTR 0x0001 /* sync attributes */
64#define SYNC_CLOSE 0x0002 /* close file system down */ 56#define SYNC_CLOSE 0x0002 /* close file system down */
65#define SYNC_DELWRI 0x0004 /* look at delayed writes */ 57#define SYNC_DELWRI 0x0004 /* look at delayed writes */
diff --git a/fs/xfs/quota/xfs_qm.c b/fs/xfs/quota/xfs_qm.c
index 8f5a43669297..b5f91281b707 100644
--- a/fs/xfs/quota/xfs_qm.c
+++ b/fs/xfs/quota/xfs_qm.c
@@ -2417,8 +2417,7 @@ xfs_qm_vop_dqalloc(
2417 lockflags = XFS_ILOCK_EXCL; 2417 lockflags = XFS_ILOCK_EXCL;
2418 xfs_ilock(ip, lockflags); 2418 xfs_ilock(ip, lockflags);
2419 2419
2420 if ((flags & XFS_QMOPT_INHERIT) && 2420 if ((flags & XFS_QMOPT_INHERIT) && XFS_INHERIT_GID(ip))
2421 XFS_INHERIT_GID(ip, XFS_MTOVFS(mp)))
2422 gid = ip->i_d.di_gid; 2421 gid = ip->i_d.di_gid;
2423 2422
2424 /* 2423 /*
diff --git a/fs/xfs/quota/xfs_qm_syscalls.c b/fs/xfs/quota/xfs_qm_syscalls.c
index e0d024e73453..ad5579d4eac4 100644
--- a/fs/xfs/quota/xfs_qm_syscalls.c
+++ b/fs/xfs/quota/xfs_qm_syscalls.c
@@ -86,10 +86,8 @@ xfs_qm_quotactl(
86 int id, 86 int id,
87 xfs_caddr_t addr) 87 xfs_caddr_t addr)
88{ 88{
89 bhv_vfs_t *vfsp = XFS_MTOVFS(mp);
90 int error; 89 int error;
91 90
92
93 ASSERT(addr != NULL || cmd == Q_XQUOTASYNC); 91 ASSERT(addr != NULL || cmd == Q_XQUOTASYNC);
94 92
95 /* 93 /*
@@ -102,7 +100,7 @@ xfs_qm_quotactl(
102 */ 100 */
103 if (XFS_IS_QUOTA_ON(mp)) 101 if (XFS_IS_QUOTA_ON(mp))
104 return XFS_ERROR(EINVAL); 102 return XFS_ERROR(EINVAL);
105 if (vfsp->vfs_flag & VFS_RDONLY) 103 if (mp->m_flags & XFS_MOUNT_RDONLY)
106 return XFS_ERROR(EROFS); 104 return XFS_ERROR(EROFS);
107 return (xfs_qm_scall_trunc_qfiles(mp, 105 return (xfs_qm_scall_trunc_qfiles(mp,
108 xfs_qm_import_qtype_flags(*(uint *)addr))); 106 xfs_qm_import_qtype_flags(*(uint *)addr)));
@@ -118,13 +116,13 @@ xfs_qm_quotactl(
118 * QUOTAON - enabling quota enforcement. 116 * QUOTAON - enabling quota enforcement.
119 * Quota accounting must be turned on at mount time. 117 * Quota accounting must be turned on at mount time.
120 */ 118 */
121 if (vfsp->vfs_flag & VFS_RDONLY) 119 if (mp->m_flags & XFS_MOUNT_RDONLY)
122 return XFS_ERROR(EROFS); 120 return XFS_ERROR(EROFS);
123 return (xfs_qm_scall_quotaon(mp, 121 return (xfs_qm_scall_quotaon(mp,
124 xfs_qm_import_flags(*(uint *)addr))); 122 xfs_qm_import_flags(*(uint *)addr)));
125 123
126 case Q_XQUOTAOFF: 124 case Q_XQUOTAOFF:
127 if (vfsp->vfs_flag & VFS_RDONLY) 125 if (mp->m_flags & XFS_MOUNT_RDONLY)
128 return XFS_ERROR(EROFS); 126 return XFS_ERROR(EROFS);
129 break; 127 break;
130 128
@@ -140,7 +138,7 @@ xfs_qm_quotactl(
140 138
141 switch (cmd) { 139 switch (cmd) {
142 case Q_XQUOTAOFF: 140 case Q_XQUOTAOFF:
143 if (vfsp->vfs_flag & VFS_RDONLY) 141 if (mp->m_flags & XFS_MOUNT_RDONLY)
144 return XFS_ERROR(EROFS); 142 return XFS_ERROR(EROFS);
145 error = xfs_qm_scall_quotaoff(mp, 143 error = xfs_qm_scall_quotaoff(mp,
146 xfs_qm_import_flags(*(uint *)addr), 144 xfs_qm_import_flags(*(uint *)addr),
@@ -161,19 +159,19 @@ xfs_qm_quotactl(
161 break; 159 break;
162 160
163 case Q_XSETQLIM: 161 case Q_XSETQLIM:
164 if (vfsp->vfs_flag & VFS_RDONLY) 162 if (mp->m_flags & XFS_MOUNT_RDONLY)
165 return XFS_ERROR(EROFS); 163 return XFS_ERROR(EROFS);
166 error = xfs_qm_scall_setqlim(mp, (xfs_dqid_t)id, XFS_DQ_USER, 164 error = xfs_qm_scall_setqlim(mp, (xfs_dqid_t)id, XFS_DQ_USER,
167 (fs_disk_quota_t *)addr); 165 (fs_disk_quota_t *)addr);
168 break; 166 break;
169 case Q_XSETGQLIM: 167 case Q_XSETGQLIM:
170 if (vfsp->vfs_flag & VFS_RDONLY) 168 if (mp->m_flags & XFS_MOUNT_RDONLY)
171 return XFS_ERROR(EROFS); 169 return XFS_ERROR(EROFS);
172 error = xfs_qm_scall_setqlim(mp, (xfs_dqid_t)id, XFS_DQ_GROUP, 170 error = xfs_qm_scall_setqlim(mp, (xfs_dqid_t)id, XFS_DQ_GROUP,
173 (fs_disk_quota_t *)addr); 171 (fs_disk_quota_t *)addr);
174 break; 172 break;
175 case Q_XSETPQLIM: 173 case Q_XSETPQLIM:
176 if (vfsp->vfs_flag & VFS_RDONLY) 174 if (mp->m_flags & XFS_MOUNT_RDONLY)
177 return XFS_ERROR(EROFS); 175 return XFS_ERROR(EROFS);
178 error = xfs_qm_scall_setqlim(mp, (xfs_dqid_t)id, XFS_DQ_PROJ, 176 error = xfs_qm_scall_setqlim(mp, (xfs_dqid_t)id, XFS_DQ_PROJ,
179 (fs_disk_quota_t *)addr); 177 (fs_disk_quota_t *)addr);
diff --git a/fs/xfs/xfs_dmapi.h b/fs/xfs/xfs_dmapi.h
index 029f96d7d3a0..f71784ab6a60 100644
--- a/fs/xfs/xfs_dmapi.h
+++ b/fs/xfs/xfs_dmapi.h
@@ -69,7 +69,7 @@ typedef enum {
69/* Defines for determining if an event message should be sent. */ 69/* Defines for determining if an event message should be sent. */
70#ifdef HAVE_DMAPI 70#ifdef HAVE_DMAPI
71#define DM_EVENT_ENABLED(ip, event) ( \ 71#define DM_EVENT_ENABLED(ip, event) ( \
72 unlikely (XFS_MTOVFS((ip)->i_mount)->vfs_flag & VFS_DMI) && \ 72 unlikely ((ip)->i_mount->m_flags & XFS_MOUNT_DMAPI) && \
73 ( ((ip)->i_d.di_dmevmask & (1 << event)) || \ 73 ( ((ip)->i_d.di_dmevmask & (1 << event)) || \
74 ((ip)->i_mount->m_dmevmask & (1 << event)) ) \ 74 ((ip)->i_mount->m_dmevmask & (1 << event)) ) \
75 ) 75 )
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index 0c376bd9e173..3d8ba8fec191 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -1158,7 +1158,7 @@ xfs_ialloc(
1158 if ((prid != 0) && (ip->i_d.di_version == XFS_DINODE_VERSION_1)) 1158 if ((prid != 0) && (ip->i_d.di_version == XFS_DINODE_VERSION_1))
1159 xfs_bump_ino_vers2(tp, ip); 1159 xfs_bump_ino_vers2(tp, ip);
1160 1160
1161 if (pip && XFS_INHERIT_GID(pip, XFS_MTOVFS(pip->i_mount))) { 1161 if (pip && XFS_INHERIT_GID(pip)) {
1162 ip->i_d.di_gid = pip->i_d.di_gid; 1162 ip->i_d.di_gid = pip->i_d.di_gid;
1163 if ((pip->i_d.di_mode & S_ISGID) && (mode & S_IFMT) == S_IFDIR) { 1163 if ((pip->i_d.di_mode & S_ISGID) && (mode & S_IFMT) == S_IFDIR) {
1164 ip->i_d.di_mode |= S_ISGID; 1164 ip->i_d.di_mode |= S_ISGID;
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h
index 10eaee77379f..e5aff929cc65 100644
--- a/fs/xfs/xfs_inode.h
+++ b/fs/xfs/xfs_inode.h
@@ -492,8 +492,9 @@ xfs_iflags_test_and_clear(xfs_inode_t *ip, unsigned short flags)
492 * directory, group of new file is set to that of the parent, and 492 * directory, group of new file is set to that of the parent, and
493 * new subdirectory gets S_ISGID bit from parent. 493 * new subdirectory gets S_ISGID bit from parent.
494 */ 494 */
495#define XFS_INHERIT_GID(pip, vfsp) \ 495#define XFS_INHERIT_GID(pip) \
496 (((vfsp)->vfs_flag & VFS_GRPID) || ((pip)->i_d.di_mode & S_ISGID)) 496 (((pip)->i_mount->m_flags & XFS_MOUNT_GRPID) || \
497 ((pip)->i_d.di_mode & S_ISGID))
497 498
498/* 499/*
499 * Flags for xfs_iget() 500 * Flags for xfs_iget()
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
index 4f4d20b2721c..d170fffd7402 100644
--- a/fs/xfs/xfs_log.c
+++ b/fs/xfs/xfs_log.c
@@ -486,7 +486,7 @@ xfs_log_mount(xfs_mount_t *mp,
486 cmn_err(CE_NOTE, 486 cmn_err(CE_NOTE,
487 "!Mounting filesystem \"%s\" in no-recovery mode. Filesystem will be inconsistent.", 487 "!Mounting filesystem \"%s\" in no-recovery mode. Filesystem will be inconsistent.",
488 mp->m_fsname); 488 mp->m_fsname);
489 ASSERT(XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY); 489 ASSERT(mp->m_flags & XFS_MOUNT_RDONLY);
490 } 490 }
491 491
492 mp->m_log = xlog_alloc_log(mp, log_target, blk_offset, num_bblks); 492 mp->m_log = xlog_alloc_log(mp, log_target, blk_offset, num_bblks);
@@ -496,16 +496,15 @@ xfs_log_mount(xfs_mount_t *mp,
496 * just worked. 496 * just worked.
497 */ 497 */
498 if (!(mp->m_flags & XFS_MOUNT_NORECOVERY)) { 498 if (!(mp->m_flags & XFS_MOUNT_NORECOVERY)) {
499 bhv_vfs_t *vfsp = XFS_MTOVFS(mp); 499 int error, readonly = (mp->m_flags & XFS_MOUNT_RDONLY);
500 int error, readonly = (vfsp->vfs_flag & VFS_RDONLY);
501 500
502 if (readonly) 501 if (readonly)
503 vfsp->vfs_flag &= ~VFS_RDONLY; 502 mp->m_flags &= ~XFS_MOUNT_RDONLY;
504 503
505 error = xlog_recover(mp->m_log); 504 error = xlog_recover(mp->m_log);
506 505
507 if (readonly) 506 if (readonly)
508 vfsp->vfs_flag |= VFS_RDONLY; 507 mp->m_flags |= XFS_MOUNT_RDONLY;
509 if (error) { 508 if (error) {
510 cmn_err(CE_WARN, "XFS: log mount/recovery failed: error %d", error); 509 cmn_err(CE_WARN, "XFS: log mount/recovery failed: error %d", error);
511 xlog_dealloc_log(mp->m_log); 510 xlog_dealloc_log(mp->m_log);
@@ -537,7 +536,7 @@ xfs_log_mount_finish(xfs_mount_t *mp, int mfsi_flags)
537 error = xlog_recover_finish(mp->m_log, mfsi_flags); 536 error = xlog_recover_finish(mp->m_log, mfsi_flags);
538 else { 537 else {
539 error = 0; 538 error = 0;
540 ASSERT(XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY); 539 ASSERT(mp->m_flags & XFS_MOUNT_RDONLY);
541 } 540 }
542 541
543 return error; 542 return error;
@@ -597,7 +596,7 @@ xfs_log_unmount_write(xfs_mount_t *mp)
597 * Don't write out unmount record on read-only mounts. 596 * Don't write out unmount record on read-only mounts.
598 * Or, if we are doing a forced umount (typically because of IO errors). 597 * Or, if we are doing a forced umount (typically because of IO errors).
599 */ 598 */
600 if (XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY) 599 if (mp->m_flags & XFS_MOUNT_RDONLY)
601 return 0; 600 return 0;
602 601
603 xfs_log_force(mp, 0, XFS_LOG_FORCE|XFS_LOG_SYNC); 602 xfs_log_force(mp, 0, XFS_LOG_FORCE|XFS_LOG_SYNC);
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
index 87bc9280b786..6b1aa7d6f434 100644
--- a/fs/xfs/xfs_mount.c
+++ b/fs/xfs/xfs_mount.c
@@ -359,7 +359,7 @@ xfs_initialize_perag(
359 /* Clear the mount flag if no inode can overflow 32 bits 359 /* Clear the mount flag if no inode can overflow 32 bits
360 * on this filesystem, or if specifically requested.. 360 * on this filesystem, or if specifically requested..
361 */ 361 */
362 if ((vfs->vfs_flag & VFS_32BITINODES) && ino > max_inum) { 362 if ((mp->m_flags & XFS_MOUNT_SMALL_INUMS) && ino > max_inum) {
363 mp->m_flags |= XFS_MOUNT_32BITINODES; 363 mp->m_flags |= XFS_MOUNT_32BITINODES;
364 } else { 364 } else {
365 mp->m_flags &= ~XFS_MOUNT_32BITINODES; 365 mp->m_flags &= ~XFS_MOUNT_32BITINODES;
@@ -1116,7 +1116,7 @@ xfs_mountfs(
1116 * If fs is not mounted readonly, then update the superblock 1116 * If fs is not mounted readonly, then update the superblock
1117 * unit and width changes. 1117 * unit and width changes.
1118 */ 1118 */
1119 if (update_flags && !(vfsp->vfs_flag & VFS_RDONLY)) 1119 if (update_flags && !(mp->m_flags & XFS_MOUNT_RDONLY))
1120 xfs_mount_log_sbunit(mp, update_flags); 1120 xfs_mount_log_sbunit(mp, update_flags);
1121 1121
1122 /* 1122 /*
@@ -1289,7 +1289,7 @@ xfs_fs_writable(xfs_mount_t *mp)
1289 bhv_vfs_t *vfsp = XFS_MTOVFS(mp); 1289 bhv_vfs_t *vfsp = XFS_MTOVFS(mp);
1290 1290
1291 return !(vfs_test_for_freeze(vfsp) || XFS_FORCED_SHUTDOWN(mp) || 1291 return !(vfs_test_for_freeze(vfsp) || XFS_FORCED_SHUTDOWN(mp) ||
1292 (vfsp->vfs_flag & VFS_RDONLY)); 1292 (mp->m_flags & XFS_MOUNT_RDONLY));
1293} 1293}
1294 1294
1295/* 1295/*
@@ -1367,7 +1367,7 @@ xfs_unmountfs_writesb(xfs_mount_t *mp)
1367 * skip superblock write if fs is read-only, or 1367 * skip superblock write if fs is read-only, or
1368 * if we are doing a forced umount. 1368 * if we are doing a forced umount.
1369 */ 1369 */
1370 if (!(XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY || 1370 if (!((mp->m_flags & XFS_MOUNT_RDONLY) ||
1371 XFS_FORCED_SHUTDOWN(mp))) { 1371 XFS_FORCED_SHUTDOWN(mp))) {
1372 1372
1373 sbp = xfs_getsb(mp, 0); 1373 sbp = xfs_getsb(mp, 0);
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
index 8fefad022ae6..f37060bcde53 100644
--- a/fs/xfs/xfs_mount.h
+++ b/fs/xfs/xfs_mount.h
@@ -442,7 +442,7 @@ typedef struct xfs_mount {
442 must be synchronous except 442 must be synchronous except
443 for space allocations */ 443 for space allocations */
444#define XFS_MOUNT_INO64 (1ULL << 1) 444#define XFS_MOUNT_INO64 (1ULL << 1)
445 /* (1ULL << 2) -- currently unused */ 445#define XFS_MOUNT_DMAPI (1ULL << 2) /* dmapi is enabled */
446#define XFS_MOUNT_WAS_CLEAN (1ULL << 3) 446#define XFS_MOUNT_WAS_CLEAN (1ULL << 3)
447#define XFS_MOUNT_FS_SHUTDOWN (1ULL << 4) /* atomic stop of all filesystem 447#define XFS_MOUNT_FS_SHUTDOWN (1ULL << 4) /* atomic stop of all filesystem
448 operations, typically for 448 operations, typically for
@@ -452,7 +452,7 @@ typedef struct xfs_mount {
452#define XFS_MOUNT_NOALIGN (1ULL << 7) /* turn off stripe alignment 452#define XFS_MOUNT_NOALIGN (1ULL << 7) /* turn off stripe alignment
453 allocations */ 453 allocations */
454#define XFS_MOUNT_ATTR2 (1ULL << 8) /* allow use of attr2 format */ 454#define XFS_MOUNT_ATTR2 (1ULL << 8) /* allow use of attr2 format */
455 /* (1ULL << 9) -- currently unused */ 455#define XFS_MOUNT_GRPID (1ULL << 9) /* group-ID assigned from directory */
456#define XFS_MOUNT_NORECOVERY (1ULL << 10) /* no recovery - dirty fs */ 456#define XFS_MOUNT_NORECOVERY (1ULL << 10) /* no recovery - dirty fs */
457#define XFS_MOUNT_SHARED (1ULL << 11) /* shared mount */ 457#define XFS_MOUNT_SHARED (1ULL << 11) /* shared mount */
458#define XFS_MOUNT_DFLT_IOSIZE (1ULL << 12) /* set default i/o size */ 458#define XFS_MOUNT_DFLT_IOSIZE (1ULL << 12) /* set default i/o size */
@@ -460,13 +460,13 @@ typedef struct xfs_mount {
460 /* osyncisdsync is now default*/ 460 /* osyncisdsync is now default*/
461#define XFS_MOUNT_32BITINODES (1ULL << 14) /* do not create inodes above 461#define XFS_MOUNT_32BITINODES (1ULL << 14) /* do not create inodes above
462 * 32 bits in size */ 462 * 32 bits in size */
463 /* (1ULL << 15) -- currently unused */ 463#define XFS_MOUNT_SMALL_INUMS (1ULL << 15) /* users wants 32bit inodes */
464#define XFS_MOUNT_NOUUID (1ULL << 16) /* ignore uuid during mount */ 464#define XFS_MOUNT_NOUUID (1ULL << 16) /* ignore uuid during mount */
465#define XFS_MOUNT_BARRIER (1ULL << 17) 465#define XFS_MOUNT_BARRIER (1ULL << 17)
466#define XFS_MOUNT_IDELETE (1ULL << 18) /* delete empty inode clusters*/ 466#define XFS_MOUNT_IDELETE (1ULL << 18) /* delete empty inode clusters*/
467#define XFS_MOUNT_SWALLOC (1ULL << 19) /* turn on stripe width 467#define XFS_MOUNT_SWALLOC (1ULL << 19) /* turn on stripe width
468 * allocation */ 468 * allocation */
469 /* (1ULL << 20) -- currently unused */ 469#define XFS_MOUNT_RDONLY (1ULL << 20) /* read-only fs */
470#define XFS_MOUNT_DIRSYNC (1ULL << 21) /* synchronous directory ops */ 470#define XFS_MOUNT_DIRSYNC (1ULL << 21) /* synchronous directory ops */
471#define XFS_MOUNT_COMPAT_IOSIZE (1ULL << 22) /* don't report large preferred 471#define XFS_MOUNT_COMPAT_IOSIZE (1ULL << 22) /* don't report large preferred
472 * I/O size in stat() */ 472 * I/O size in stat() */
diff --git a/fs/xfs/xfs_qmops.c b/fs/xfs/xfs_qmops.c
index ea08bd8e8b80..c266a0184b42 100644
--- a/fs/xfs/xfs_qmops.c
+++ b/fs/xfs/xfs_qmops.c
@@ -66,7 +66,7 @@ xfs_mount_reset_sbqflags(xfs_mount_t *mp)
66 * if the fs is readonly, let the incore superblock run 66 * if the fs is readonly, let the incore superblock run
67 * with quotas off but don't flush the update out to disk 67 * with quotas off but don't flush the update out to disk
68 */ 68 */
69 if (XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY) 69 if (mp->m_flags & XFS_MOUNT_RDONLY)
70 return 0; 70 return 0;
71#ifdef QUOTADEBUG 71#ifdef QUOTADEBUG
72 xfs_fs_cmn_err(CE_NOTE, mp, "Writing superblock quota changes"); 72 xfs_fs_cmn_err(CE_NOTE, mp, "Writing superblock quota changes");
diff --git a/fs/xfs/xfs_vfsops.c b/fs/xfs/xfs_vfsops.c
index 593e6e2b3921..febfd8367e13 100644
--- a/fs/xfs/xfs_vfsops.c
+++ b/fs/xfs/xfs_vfsops.c
@@ -307,7 +307,7 @@ xfs_start_flags(
307 * no recovery flag requires a read-only mount 307 * no recovery flag requires a read-only mount
308 */ 308 */
309 if (ap->flags & XFSMNT_NORECOVERY) { 309 if (ap->flags & XFSMNT_NORECOVERY) {
310 if (!(vfs->vfs_flag & VFS_RDONLY)) { 310 if (!(mp->m_flags & XFS_MOUNT_RDONLY)) {
311 cmn_err(CE_WARN, 311 cmn_err(CE_WARN,
312 "XFS: tried to mount a FS read-write without recovery!"); 312 "XFS: tried to mount a FS read-write without recovery!");
313 return XFS_ERROR(EINVAL); 313 return XFS_ERROR(EINVAL);
@@ -326,7 +326,7 @@ xfs_start_flags(
326 mp->m_flags |= XFS_MOUNT_FILESTREAMS; 326 mp->m_flags |= XFS_MOUNT_FILESTREAMS;
327 327
328 if (ap->flags & XFSMNT_DMAPI) 328 if (ap->flags & XFSMNT_DMAPI)
329 vfs->vfs_flag |= VFS_DMI; 329 mp->m_flags |= XFS_MOUNT_DMAPI;
330 return 0; 330 return 0;
331} 331}
332 332
@@ -340,7 +340,7 @@ xfs_finish_flags(
340 struct xfs_mount_args *ap, 340 struct xfs_mount_args *ap,
341 struct xfs_mount *mp) 341 struct xfs_mount *mp)
342{ 342{
343 int ronly = (vfs->vfs_flag & VFS_RDONLY); 343 int ronly = (mp->m_flags & XFS_MOUNT_RDONLY);
344 344
345 /* Fail a mount where the logbuf is smaller then the log stripe */ 345 /* Fail a mount where the logbuf is smaller then the log stripe */
346 if (XFS_SB_VERSION_HASLOGV2(&mp->m_sb)) { 346 if (XFS_SB_VERSION_HASLOGV2(&mp->m_sb)) {
@@ -589,7 +589,7 @@ xfs_unmount(
589 rvp = XFS_ITOV(rip); 589 rvp = XFS_ITOV(rip);
590 590
591#ifdef HAVE_DMAPI 591#ifdef HAVE_DMAPI
592 if (vfsp->vfs_flag & VFS_DMI) { 592 if (mp->m_flags & XFS_MOUNT_DMAPI) {
593 error = XFS_SEND_PREUNMOUNT(mp, vfsp, 593 error = XFS_SEND_PREUNMOUNT(mp, vfsp,
594 rvp, DM_RIGHT_NULL, rvp, DM_RIGHT_NULL, 594 rvp, DM_RIGHT_NULL, rvp, DM_RIGHT_NULL,
595 NULL, NULL, 0, 0, 595 NULL, NULL, 0, 0,
@@ -723,22 +723,20 @@ xfs_mntupdate(
723 int *flags, 723 int *flags,
724 struct xfs_mount_args *args) 724 struct xfs_mount_args *args)
725{ 725{
726 struct bhv_vfs *vfsp = XFS_MTOVFS(mp);
727
728 if (!(*flags & MS_RDONLY)) { /* rw/ro -> rw */ 726 if (!(*flags & MS_RDONLY)) { /* rw/ro -> rw */
729 if (vfsp->vfs_flag & VFS_RDONLY) 727 if (mp->m_flags & XFS_MOUNT_RDONLY)
730 vfsp->vfs_flag &= ~VFS_RDONLY; 728 mp->m_flags &= ~XFS_MOUNT_RDONLY;
731 if (args->flags & XFSMNT_BARRIER) { 729 if (args->flags & XFSMNT_BARRIER) {
732 mp->m_flags |= XFS_MOUNT_BARRIER; 730 mp->m_flags |= XFS_MOUNT_BARRIER;
733 xfs_mountfs_check_barriers(mp); 731 xfs_mountfs_check_barriers(mp);
734 } else { 732 } else {
735 mp->m_flags &= ~XFS_MOUNT_BARRIER; 733 mp->m_flags &= ~XFS_MOUNT_BARRIER;
736 } 734 }
737 } else if (!(vfsp->vfs_flag & VFS_RDONLY)) { /* rw -> ro */ 735 } else if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { /* rw -> ro */
738 xfs_filestream_flush(mp); 736 xfs_filestream_flush(mp);
739 xfs_sync(mp, SYNC_DATA_QUIESCE); 737 xfs_sync(mp, SYNC_DATA_QUIESCE);
740 xfs_attr_quiesce(mp); 738 xfs_attr_quiesce(mp);
741 vfsp->vfs_flag |= VFS_RDONLY; 739 mp->m_flags |= XFS_MOUNT_RDONLY;
742 } 740 }
743 return 0; 741 return 0;
744} 742}
@@ -1053,7 +1051,7 @@ xfs_sync_inodes(
1053 1051
1054 if (bypassed) 1052 if (bypassed)
1055 *bypassed = 0; 1053 *bypassed = 0;
1056 if (XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY) 1054 if (mp->m_flags & XFS_MOUNT_RDONLY)
1057 return 0; 1055 return 0;
1058 error = 0; 1056 error = 0;
1059 last_error = 0; 1057 last_error = 0;
@@ -1766,7 +1764,6 @@ xfs_parseargs(
1766 struct xfs_mount_args *args, 1764 struct xfs_mount_args *args,
1767 int update) 1765 int update)
1768{ 1766{
1769 bhv_vfs_t *vfsp = XFS_MTOVFS(mp);
1770 char *this_char, *value, *eov; 1767 char *this_char, *value, *eov;
1771 int dsunit, dswidth, vol_dsunit, vol_dswidth; 1768 int dsunit, dswidth, vol_dsunit, vol_dswidth;
1772 int iosize; 1769 int iosize;
@@ -1859,10 +1856,10 @@ xfs_parseargs(
1859 args->iosizelog = ffs(iosize) - 1; 1856 args->iosizelog = ffs(iosize) - 1;
1860 } else if (!strcmp(this_char, MNTOPT_GRPID) || 1857 } else if (!strcmp(this_char, MNTOPT_GRPID) ||
1861 !strcmp(this_char, MNTOPT_BSDGROUPS)) { 1858 !strcmp(this_char, MNTOPT_BSDGROUPS)) {
1862 vfsp->vfs_flag |= VFS_GRPID; 1859 mp->m_flags |= XFS_MOUNT_GRPID;
1863 } else if (!strcmp(this_char, MNTOPT_NOGRPID) || 1860 } else if (!strcmp(this_char, MNTOPT_NOGRPID) ||
1864 !strcmp(this_char, MNTOPT_SYSVGROUPS)) { 1861 !strcmp(this_char, MNTOPT_SYSVGROUPS)) {
1865 vfsp->vfs_flag &= ~VFS_GRPID; 1862 mp->m_flags &= ~XFS_MOUNT_GRPID;
1866 } else if (!strcmp(this_char, MNTOPT_WSYNC)) { 1863 } else if (!strcmp(this_char, MNTOPT_WSYNC)) {
1867 args->flags |= XFSMNT_WSYNC; 1864 args->flags |= XFSMNT_WSYNC;
1868 } else if (!strcmp(this_char, MNTOPT_OSYNCISOSYNC)) { 1865 } else if (!strcmp(this_char, MNTOPT_OSYNCISOSYNC)) {
@@ -1972,7 +1969,7 @@ xfs_parseargs(
1972 } 1969 }
1973 1970
1974 if (args->flags & XFSMNT_NORECOVERY) { 1971 if (args->flags & XFSMNT_NORECOVERY) {
1975 if ((vfsp->vfs_flag & VFS_RDONLY) == 0) { 1972 if ((mp->m_flags & XFS_MOUNT_RDONLY) == 0) {
1976 cmn_err(CE_WARN, 1973 cmn_err(CE_WARN,
1977 "XFS: no-recovery mounts must be read-only."); 1974 "XFS: no-recovery mounts must be read-only.");
1978 return EINVAL; 1975 return EINVAL;
@@ -2025,7 +2022,7 @@ xfs_parseargs(
2025 2022
2026done: 2023done:
2027 if (args->flags & XFSMNT_32BITINODES) 2024 if (args->flags & XFSMNT_32BITINODES)
2028 vfsp->vfs_flag |= VFS_32BITINODES; 2025 mp->m_flags |= XFS_MOUNT_SMALL_INUMS;
2029 if (args->flags2) 2026 if (args->flags2)
2030 args->flags |= XFSMNT_FLAGS2; 2027 args->flags |= XFSMNT_FLAGS2;
2031 return 0; 2028 return 0;
@@ -2051,7 +2048,6 @@ xfs_showargs(
2051 { 0, NULL } 2048 { 0, NULL }
2052 }; 2049 };
2053 struct proc_xfs_info *xfs_infop; 2050 struct proc_xfs_info *xfs_infop;
2054 struct bhv_vfs *vfsp = XFS_MTOVFS(mp);
2055 2051
2056 for (xfs_infop = xfs_info; xfs_infop->flag; xfs_infop++) { 2052 for (xfs_infop = xfs_info; xfs_infop->flag; xfs_infop++) {
2057 if (mp->m_flags & xfs_infop->flag) 2053 if (mp->m_flags & xfs_infop->flag)
@@ -2084,9 +2080,9 @@ xfs_showargs(
2084 if (!(mp->m_flags & XFS_MOUNT_COMPAT_IOSIZE)) 2080 if (!(mp->m_flags & XFS_MOUNT_COMPAT_IOSIZE))
2085 seq_printf(m, "," MNTOPT_LARGEIO); 2081 seq_printf(m, "," MNTOPT_LARGEIO);
2086 2082
2087 if (!(vfsp->vfs_flag & VFS_32BITINODES)) 2083 if (!(mp->m_flags & XFS_MOUNT_SMALL_INUMS))
2088 seq_printf(m, "," MNTOPT_64BITINODE); 2084 seq_printf(m, "," MNTOPT_64BITINODE);
2089 if (vfsp->vfs_flag & VFS_GRPID) 2085 if (mp->m_flags & XFS_MOUNT_GRPID)
2090 seq_printf(m, "," MNTOPT_GRPID); 2086 seq_printf(m, "," MNTOPT_GRPID);
2091 2087
2092 if (mp->m_qflags & XFS_UQUOTA_ACCT) { 2088 if (mp->m_qflags & XFS_UQUOTA_ACCT) {
@@ -2113,7 +2109,7 @@ xfs_showargs(
2113 if (!(mp->m_qflags & XFS_ALL_QUOTA_ACCT)) 2109 if (!(mp->m_qflags & XFS_ALL_QUOTA_ACCT))
2114 seq_puts(m, "," MNTOPT_NOQUOTA); 2110 seq_puts(m, "," MNTOPT_NOQUOTA);
2115 2111
2116 if (vfsp->vfs_flag & VFS_DMI) 2112 if (mp->m_flags & XFS_MOUNT_DMAPI)
2117 seq_puts(m, "," MNTOPT_DMAPI); 2113 seq_puts(m, "," MNTOPT_DMAPI);
2118 return 0; 2114 return 0;
2119} 2115}
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c
index 98653793b34a..83cc1cb4089a 100644
--- a/fs/xfs/xfs_vnodeops.c
+++ b/fs/xfs/xfs_vnodeops.c
@@ -230,7 +230,7 @@ xfs_setattr(
230 230
231 vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); 231 vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address);
232 232
233 if (XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY) 233 if (mp->m_flags & XFS_MOUNT_RDONLY)
234 return XFS_ERROR(EROFS); 234 return XFS_ERROR(EROFS);
235 235
236 /* 236 /*
@@ -1515,7 +1515,7 @@ xfs_release(
1515 return 0; 1515 return 0;
1516 1516
1517 /* If this is a read-only mount, don't do this (would generate I/O) */ 1517 /* If this is a read-only mount, don't do this (would generate I/O) */
1518 if (XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY) 1518 if (mp->m_flags & XFS_MOUNT_RDONLY)
1519 return 0; 1519 return 0;
1520 1520
1521 if (!XFS_FORCED_SHUTDOWN(mp)) { 1521 if (!XFS_FORCED_SHUTDOWN(mp)) {
@@ -1624,7 +1624,7 @@ xfs_inactive(
1624 error = 0; 1624 error = 0;
1625 1625
1626 /* If this is a read-only mount, don't do this (would generate I/O) */ 1626 /* If this is a read-only mount, don't do this (would generate I/O) */
1627 if (XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY) 1627 if (mp->m_flags & XFS_MOUNT_RDONLY)
1628 goto out; 1628 goto out;
1629 1629
1630 if (ip->i_d.di_nlink != 0) { 1630 if (ip->i_d.di_nlink != 0) {