[Cluster-devel] [GFS2 PATCH] GFS2: Only wait for demote when last holder is dequeued

Steven Whitehouse swhiteho at redhat.com
Fri Jun 20 14:18:03 UTC 2014


Hi,

Now in the -nmw tree. Thanks,

Steve.

On 20/06/14 14:36, Bob Peterson wrote:
> Hi,
>
> Function gfs2_glock_dq_wait is supposed to dequeue a glock and then
> wait for the lock to be demoted. The problem is, if this is a shared
> lock, its demote will depend on the other holders, which means you
> might end up waiting forever because the other process is blocked.
> This problem is especially apparent when dealing with nested flocks.
>
> Regards,
>
> Bob Peterson
> Red Hat File Systems
>
> Signed-off-by: Bob Peterson <rpeterso at redhat.com>
> ---
> diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
> index aec7f73..22ce2f0 100644
> --- a/fs/gfs2/glock.c
> +++ b/fs/gfs2/glock.c
> @@ -1128,7 +1128,9 @@ void gfs2_glock_dq_wait(struct gfs2_holder *gh)
>   	struct gfs2_glock *gl = gh->gh_gl;
>   	gfs2_glock_dq(gh);
>   	might_sleep();
> -	wait_on_bit(&gl->gl_flags, GLF_DEMOTE, gfs2_glock_demote_wait, TASK_UNINTERRUPTIBLE);
> +	if (!find_first_holder(gl))
> +		wait_on_bit(&gl->gl_flags, GLF_DEMOTE, gfs2_glock_demote_wait,
> +			    TASK_UNINTERRUPTIBLE);
>   }
>   
>   /**
>




More information about the Cluster-devel mailing list