[Ocfs2-devel] [PATCH 4/6] ocfs2: Implement delayed dropping of last dquot reference
Mark Fasheh
mfasheh at suse.de
Tue Feb 25 11:01:34 PST 2014
On Fri, Feb 21, 2014 at 10:45:02AM +0100, Jan Kara wrote:
> We cannot drop last dquot reference from downconvert thread as that
> creates the following deadlock:
>
> NODE 1 NODE2
> holds dentry lock for 'foo'
> holds inode lock for GLOBAL_BITMAP_SYSTEM_INODE
> dquot_initialize(bar)
> ocfs2_dquot_acquire()
> ocfs2_inode_lock(USER_QUOTA_SYSTEM_INODE)
> ...
> downconvert thread (triggered from another
> node or a different process from NODE2)
> ocfs2_dentry_post_unlock()
> ...
> iput(foo)
> ocfs2_evict_inode(foo)
> ocfs2_clear_inode(foo)
> dquot_drop(inode)
> ...
> ocfs2_dquot_release()
> ocfs2_inode_lock(USER_QUOTA_SYSTEM_INODE)
> - blocks
> finds we need more space in
> quota file
> ...
> ocfs2_extend_no_holes()
> ocfs2_inode_lock(GLOBAL_BITMAP_SYSTEM_INODE)
> - deadlocks waiting for
> downconvert thread
>
> We solve the problem by postponing dropping of the last dquot reference
> to a workqueue if it happens from the downconvert thread.
>
> Reviewed-by: Srinivas Eeda <srinivas.eeda at oracle.com>
> Signed-off-by: Jan Kara <jack at suse.cz>
Looks good, I especially like the usuage of llist.
Reviewed-by: Mark Fasheh <mfasheh at suse.de>
--Mark
--
Mark Fasheh
More information about the Ocfs2-devel
mailing list