[Cluster-devel] [PATCH] dlm_controld: fix plock dev_write no op

Fabio M. Di Nitto fdinitto at redhat.com
Fri Aug 19 06:36:53 UTC 2011


The patch looks simple and safe. Does it apply only to rhel6 or also
upstream?

Fabio

On 8/18/2011 9:38 PM, David Teigland wrote:
> When a plock unlock is received due to the file
> being closed (the CLOSE flag is set), we should
> not write an unlock result back to the kernel.
> If we do, the kernel, which does not expect a
> reply, will report the error "dev_write no op".
> 
> In cases where dlm_controld encounters and error
> handling the unlock operation, it was writing
> the error result back to the kernel, even though
> the unlock was flagged with CLOSE.  The fix is
> to check for the CLOSE flag and skip writing
> the error result, as we do with normal results.
> 
> This problem is especially visible when using
> flocks (not plocks).  This is because the kernel
> generates extraneous plock unlock requests
> when files are closed with flocks.  Because
> dlm_controld finds no plocks on the files,
> it replies to the kernel with an error, rather
> than skipping the reply to do CLOSE.
> 
> bz 731775
> 
> Signed-off-by: David Teigland <teigland at redhat.com>
> ---
>  group/dlm_controld/plock.c |    6 ++++--
>  1 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/group/dlm_controld/plock.c b/group/dlm_controld/plock.c
> index 6d5dea8..556993b 100644
> --- a/group/dlm_controld/plock.c
> +++ b/group/dlm_controld/plock.c
> @@ -1583,8 +1583,10 @@ void process_plocks(int ci)
>  	return;
>  
>   fail:
> -	info.rv = rv;
> -	rv = write(plock_device_fd, &info, sizeof(info));
> +	if (!(info.flags & DLM_PLOCK_FL_CLOSE)) {
> +		info.rv = rv;
> +		rv = write(plock_device_fd, &info, sizeof(info));
> +	}
>  }
>  
>  void process_saved_plocks(struct lockspace *ls)




More information about the Cluster-devel mailing list