[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