[Ocfs2-devel] [PATCH 2/6] ocfs2: Move dquot_initialize() in ocfs2_delete_inode() somewhat later

Srinivas Eeda srinivas.eeda at oracle.com
Thu Feb 20 21:14:34 PST 2014


looks good to me

Reviewed-by: Srinivas Eeda <srinivas.eeda at oracle.com>

On 02/20/2014 07:18 AM, Jan Kara wrote:
> Move dquot_initalize() call in ocfs2_delete_inode() after the moment we
> verify inode is actually a sane one to delete. We certainly don't want
> to initialize quota for system inodes etc. This also avoids calling into
> quota code from downconvert thread.
>
> Add more details into the comment why bailing out from
> ocfs2_delete_inode() when we are in downconvert thread is OK.
>
> Signed-off-by: Jan Kara <jack at suse.cz>
> ---
>   fs/ocfs2/inode.c | 16 +++++++++-------
>   1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c
> index b4baaefe4dd4..3b0d722de35e 100644
> --- a/fs/ocfs2/inode.c
> +++ b/fs/ocfs2/inode.c
> @@ -804,11 +804,13 @@ static int ocfs2_inode_is_valid_to_delete(struct inode *inode)
>   		goto bail;
>   	}
>   
> -	/* If we're coming from downconvert_thread we can't go into our own
> -	 * voting [hello, deadlock city!], so unforuntately we just
> -	 * have to skip deleting this guy. That's OK though because
> -	 * the node who's doing the actual deleting should handle it
> -	 * anyway. */
> +	/*
> +	 * If we're coming from downconvert_thread we can't go into our own
> +	 * voting [hello, deadlock city!] so we cannot delete the inode. But
> +	 * since we dropped last inode ref when downconverting dentry lock,
> +	 * we cannot have the file open and thus the node doing unlink will
> +	 * take care of deleting the inode.
> +	 */
>   	if (current == osb->dc_task)
>   		goto bail;
>   
> @@ -954,8 +956,6 @@ static void ocfs2_delete_inode(struct inode *inode)
>   	if (is_bad_inode(inode) || !OCFS2_I(inode)->ip_blkno)
>   		goto bail;
>   
> -	dquot_initialize(inode);
> -
>   	if (!ocfs2_inode_is_valid_to_delete(inode)) {
>   		/* It's probably not necessary to truncate_inode_pages
>   		 * here but we do it for safety anyway (it will most
> @@ -964,6 +964,8 @@ static void ocfs2_delete_inode(struct inode *inode)
>   		goto bail;
>   	}
>   
> +	dquot_initialize(inode);
> +
>   	/* We want to block signals in delete_inode as the lock and
>   	 * messaging paths may return us -ERESTARTSYS. Which would
>   	 * cause us to exit early, resulting in inodes being orphaned




More information about the Ocfs2-devel mailing list