[PATCH 3/8] xfs: initialise xfssync work before running quotachecks
Mark Tinguely
tinguely at sgi.com
Fri Mar 23 08:34:31 CDT 2012
On 03/22/12 16:07, Dave Chinner wrote:
> On Thu, Mar 22, 2012 at 10:15:48AM -0500, Ben Myers wrote:
>> On Thu, Mar 22, 2012 at 04:15:08PM +1100, Dave Chinner wrote:
>>> From: Dave Chinner<dchinner at redhat.com>
>>>
>>> Because the mount process can run a quotacheck and consume lots of
>>> inodes, we need to be able to run periodic inode reclaim during the
>>> mount process. This will prevent running the system out of memory
>>> during quota checks.
>>>
>>> This essentially reverts 2bcf6e97, but that is safe to do now that
>>> the quota sync code that was causing problems during long quotacheck
>>> executions is now gone.
>>
>> Dave, I've held off on #s 3 and 4 because they appear to be racy. Being
>
> What race?
>
> Cheers,
>
> Dave
2 of the sync workers use iterators
xfs_inode_ag_iterator()
xfs_perag_get()
radix_tree_lookup(&mp->m_perag_tree, agno)
The race I was worried about was in xfs_mount() to initialize the
mp->m_perag_lock, and the radix tree initialization:
INIT_RADIX_TREE(&mp->m_perag_tree, GFP_ATOMIC)).
There is a lock and 2 or 3 unbuffered I/O are performed in xfs_mountfs()
before the mp->m_perag_tree is initialized.
I was also looking at the xfs_perag_t being allocated in mountfs() and
being deallocated in umountfs(), but it turns out that is not important,
xfs_perag_get() will return NULL if these have not been allocated yet or
have been removed for the required ag.
Mark Tinguely.
More information about the xfs
mailing list