[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