From: David Teigland <teigland@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH] gfs2: fix lock cancelling
Date: Thu, 20 Sep 2007 10:31:54 -0500 [thread overview]
Message-ID: <20070920153153.GB22130@redhat.com> (raw)
In-Reply-To: <20070920145529.GA17195@fieldses.org>
On Thu, Sep 20, 2007 at 10:55:29AM -0400, J. Bruce Fields wrote:
> +int gdlm_plock_cancel(void *lockspace, struct lm_lockname *name,
> + struct file *file, struct file_lock *fl)
> +{
> + struct gdlm_ls *ls = lockspace;
> + struct plock_xop *xop;
> + struct plock_op *op;
> +
> + spin_lock(&ops_lock);
> + list_for_each_entry(op, &recv_list, list) {
> + xop = (struct plock_xop *xop)op;
> + if (!xop->callback)
> + continue;
> + if (xop->fl != fl)
> + continue;
> + list_del_init(&op->list);
> + goto found;
> + }
If found on the recv_list, it means the op has been sent up to the lock
manager in userspace and is still floating around up there. If we remove
the op from the recv_list, it means, as you say, that the lock manager
could get an error back later when it does dev_write() to complete the op.
(dev_write() just prints an error message currently, doesn't return an
error to userspace.)
This assumes, of course, that seeing an error, the lock manager could do
something sensible to bring itself back in sync with the application... as
we've discussed before, that's a hard problem that we may never solve :-)
> + list_for_each_entry(op, &send_list, list) {
> + xop = (struct plock_xop *xop)op;
> + if (!xop->callback)
> + continue;
> + if (xop->fl != fl)
> + continue;
> + list_del_init(&op->list);
> + goto found;
> + }
If found on the send_list, it means the op hasn't been sent up to the lock
manager yet, so the cancel can be considered a success.
> + spin_unlock(&ops_lock);
> + /* Too late; the lock's probably already been granted. */
> + return -ENOENT;
It's up to the caller to sort out what happens in this case.
> +found:
> + spin_unlock(&ops_lock);
> + /* XXX: Is any other cleanup necessary here? */
> + kfree(op);
> + return 0;
> +}
> +
next prev parent reply other threads:[~2007-09-20 15:31 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-20 14:55 [Cluster-devel] [PATCH] gfs2: fix lock cancelling J. Bruce Fields
2007-09-20 15:31 ` David Teigland [this message]
2007-09-20 15:48 ` J. Bruce Fields
2007-09-20 15:54 ` David Teigland
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070920153153.GB22130@redhat.com \
--to=teigland@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).