From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fabio M. Di Nitto Date: Fri, 19 Aug 2011 08:36:53 +0200 Subject: [Cluster-devel] [PATCH] dlm_controld: fix plock dev_write no op In-Reply-To: <20110818193837.GA315@redhat.com> References: <20110818193837.GA315@redhat.com> Message-ID: <4E4E0485.7070102@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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 > --- > 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)