Skip to content

Commit

Permalink
[XFS] Avoid using inodes that haven't been completely initialised
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Lachlan McIlroy <[email protected]>
  • Loading branch information
dchinner authored and Lachlan McIlroy committed Nov 10, 2008
1 parent cb4f0d1 commit 6307091
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 3 deletions.
1 change: 0 additions & 1 deletion fs/xfs/linux-2.6/xfs_iops.c
Original file line number Diff line number Diff line change
Expand Up @@ -780,7 +780,6 @@ xfs_setup_inode(
inode->i_ino = ip->i_ino;
inode->i_state = I_NEW|I_LOCK;
inode_add_to_lists(ip->i_mount->m_super, inode);
ASSERT(atomic_read(&inode->i_count) == 1);

inode->i_mode = ip->i_d.di_mode;
inode->i_nlink = ip->i_d.di_nlink;
Expand Down
5 changes: 3 additions & 2 deletions fs/xfs/linux-2.6/xfs_sync.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,9 @@ xfs_sync_inodes_ag(
}
read_unlock(&pag->pag_ici_lock);

/* bad inodes are dealt with elsewhere */
if (is_bad_inode(inode)) {
/* avoid new or bad inodes */
if (is_bad_inode(inode) ||
xfs_iflags_test(ip, XFS_INEW)) {
IRELE(ip);
continue;
}
Expand Down
6 changes: 6 additions & 0 deletions fs/xfs/quota/xfs_qm_syscalls.c
Original file line number Diff line number Diff line change
Expand Up @@ -1080,6 +1080,12 @@ xfs_qm_dqrele_inodes_ag(
}
read_unlock(&pag->pag_ici_lock);

/* avoid new inodes though we shouldn't find any here */
if (xfs_iflags_test(ip, XFS_INEW)) {
IRELE(ip);
continue;
}

xfs_ilock(ip, XFS_ILOCK_EXCL);
if ((flags & XFS_UQUOTA_ACCT) && ip->i_udquot) {
xfs_qm_dqrele(ip->i_udquot);
Expand Down

0 comments on commit 6307091

Please sign in to comment.