aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/quota/xfs_qm_syscalls.c
diff options
context:
space:
mode:
authorDave Chinner <david@fromorbit.com>2008-11-10 01:13:23 -0500
committerLachlan McIlroy <lachlan@redback.melbourne.sgi.com>2008-11-10 01:13:23 -0500
commit6307091fe69ae74747298bdcaf43119ad67bda3a (patch)
treec1feb80479b7ae4ebcf9a4336e50dfd18aebcb38 /fs/xfs/quota/xfs_qm_syscalls.c
parentcb4f0d1d4229f609f43c68acec69c7618ed72397 (diff)
[XFS] Avoid using inodes that haven't been completely initialised
The radix tree walks in xfs_sync_inodes_ag and xfs_qm_dqrele_all_inodes() can find inodes that are still undergoing initialisation. Avoid them by checking for the the XFS_INEW() flag once we have a reference on the inode. This flag is cleared once the inode is properly initialised. SGI-PV: 987246 Signed-off-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
Diffstat (limited to 'fs/xfs/quota/xfs_qm_syscalls.c')
-rw-r--r--fs/xfs/quota/xfs_qm_syscalls.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/xfs/quota/xfs_qm_syscalls.c b/fs/xfs/quota/xfs_qm_syscalls.c
index 2c57a6eaff36..68139b38aede 100644
--- a/fs/xfs/quota/xfs_qm_syscalls.c
+++ b/fs/xfs/quota/xfs_qm_syscalls.c
@@ -1080,6 +1080,12 @@ xfs_qm_dqrele_inodes_ag(
1080 } 1080 }
1081 read_unlock(&pag->pag_ici_lock); 1081 read_unlock(&pag->pag_ici_lock);
1082 1082
1083 /* avoid new inodes though we shouldn't find any here */
1084 if (xfs_iflags_test(ip, XFS_INEW)) {
1085 IRELE(ip);
1086 continue;
1087 }
1088
1083 xfs_ilock(ip, XFS_ILOCK_EXCL); 1089 xfs_ilock(ip, XFS_ILOCK_EXCL);
1084 if ((flags & XFS_UQUOTA_ACCT) && ip->i_udquot) { 1090 if ((flags & XFS_UQUOTA_ACCT) && ip->i_udquot) {
1085 xfs_qm_dqrele(ip->i_udquot); 1091 xfs_qm_dqrele(ip->i_udquot);