[Cluster-devel] [GFS2 PATCH v3 04/14] GFS2: Wait for iopen glock dequeues

Steven Whitehouse swhiteho at redhat.com
Fri Oct 30 11:14:51 UTC 2015


Hi,

Acked-by: Steven Whitehouse <swhiteho at redhat.com>

Steve.

On 22/10/15 20:30, Bob Peterson wrote:
> This patch changes every glock_dq for iopen glocks into a dq_wait.
> This makes sure that iopen glocks do not outlive the inode itself.
> In turn, that ensures that anyone trying to unlink the glock will
> be able to find the inode when it receives a remote iopen callback.
>
> Signed-off-by: Bob Peterson <rpeterso at redhat.com>
> ---
>   fs/gfs2/inode.c | 3 ++-
>   fs/gfs2/super.c | 8 +++++---
>   2 files changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
> index c56edb8..ce4b793 100644
> --- a/fs/gfs2/inode.c
> +++ b/fs/gfs2/inode.c
> @@ -191,7 +191,8 @@ struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned int type,
>   fail_refresh:
>   	ip->i_iopen_gh.gh_flags |= GL_NOCACHE;
>   	ip->i_iopen_gh.gh_gl->gl_object = NULL;
> -	gfs2_glock_dq_uninit(&ip->i_iopen_gh);
> +	gfs2_glock_dq_wait(&ip->i_iopen_gh);
> +	gfs2_holder_uninit(&ip->i_iopen_gh);
>   fail_iopen:
>   	if (io_gl)
>   		gfs2_glock_put(io_gl);
> diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
> index a691725..555fea0 100644
> --- a/fs/gfs2/super.c
> +++ b/fs/gfs2/super.c
> @@ -1525,7 +1525,8 @@ static void gfs2_evict_inode(struct inode *inode)
>   	error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, &gh);
>   	if (unlikely(error)) {
>   		ip->i_iopen_gh.gh_flags |= GL_NOCACHE;
> -		gfs2_glock_dq_uninit(&ip->i_iopen_gh);
> +		gfs2_glock_dq_wait(&ip->i_iopen_gh);
> +		gfs2_holder_uninit(&ip->i_iopen_gh);
>   		goto out;
>   	}
>   
> @@ -1597,7 +1598,7 @@ out_unlock:
>   
>   	if (test_bit(HIF_HOLDER, &ip->i_iopen_gh.gh_iflags)) {
>   		ip->i_iopen_gh.gh_flags |= GL_NOCACHE;
> -		gfs2_glock_dq(&ip->i_iopen_gh);
> +		gfs2_glock_dq_wait(&ip->i_iopen_gh);
>   	}
>   	gfs2_holder_uninit(&ip->i_iopen_gh);
>   	gfs2_glock_dq_uninit(&gh);
> @@ -1618,7 +1619,8 @@ out:
>   	if (ip->i_iopen_gh.gh_gl) {
>   		ip->i_iopen_gh.gh_gl->gl_object = NULL;
>   		ip->i_iopen_gh.gh_flags |= GL_NOCACHE;
> -		gfs2_glock_dq_uninit(&ip->i_iopen_gh);
> +		gfs2_glock_dq_wait(&ip->i_iopen_gh);
> +		gfs2_holder_uninit(&ip->i_iopen_gh);
>   	}
>   }
>   




More information about the Cluster-devel mailing list