* [Cluster-devel] [PATCH] gfs2: use pid for plock owner for nfs clients
@ 2007-12-06 15:35 David Teigland
2007-12-07 13:43 ` [Cluster-devel] " Steven Whitehouse
0 siblings, 1 reply; 2+ messages in thread
From: David Teigland @ 2007-12-06 15:35 UTC (permalink / raw)
To: cluster-devel.redhat.com
The fl_owner is that of lockd when posix locks arrive from nfs
clients, so it can't be used to distinguish between lock holders.
Use fl_pid as owner instead; it's the pid of the process on the
nfs client.
Signed-off-by: David Teigland <teigland@redhat.com>
---
fs/gfs2/locking/dlm/plock.c | 18 ++++++++++++++----
1 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/fs/gfs2/locking/dlm/plock.c b/fs/gfs2/locking/dlm/plock.c
index 1f7b038..2ebd374 100644
--- a/fs/gfs2/locking/dlm/plock.c
+++ b/fs/gfs2/locking/dlm/plock.c
@@ -89,15 +89,19 @@ int gdlm_plock(void *lockspace, struct lm_lockname *name,
op->info.number = name->ln_number;
op->info.start = fl->fl_start;
op->info.end = fl->fl_end;
- op->info.owner = (__u64)(long) fl->fl_owner;
if (fl->fl_lmops && fl->fl_lmops->fl_grant) {
+ /* fl_owner is lockd which doesn't distinguish
+ processes on the nfs client */
+ op->info.owner = (__u64) fl->fl_pid;
xop->callback = fl->fl_lmops->fl_grant;
locks_init_lock(&xop->flc);
locks_copy_lock(&xop->flc, fl);
xop->fl = fl;
xop->file = file;
- } else
+ } else {
+ op->info.owner = (__u64)(long) fl->fl_owner;
xop->callback = NULL;
+ }
send_op(op);
@@ -203,7 +207,10 @@ int gdlm_punlock(void *lockspace, struct lm_lockname *name,
op->info.number = name->ln_number;
op->info.start = fl->fl_start;
op->info.end = fl->fl_end;
- op->info.owner = (__u64)(long) fl->fl_owner;
+ if (fl->fl_lmops && fl->fl_lmops->fl_grant)
+ op->info.owner = (__u64) fl->fl_pid;
+ else
+ op->info.owner = (__u64)(long) fl->fl_owner;
send_op(op);
wait_event(recv_wq, (op->done != 0));
@@ -242,7 +249,10 @@ int gdlm_plock_get(void *lockspace, struct lm_lockname *name,
op->info.number = name->ln_number;
op->info.start = fl->fl_start;
op->info.end = fl->fl_end;
- op->info.owner = (__u64)(long) fl->fl_owner;
+ if (fl->fl_lmops && fl->fl_lmops->fl_grant)
+ op->info.owner = (__u64) fl->fl_pid;
+ else
+ op->info.owner = (__u64)(long) fl->fl_owner;
send_op(op);
wait_event(recv_wq, (op->done != 0));
--
1.5.2.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [Cluster-devel] Re: [PATCH] gfs2: use pid for plock owner for nfs clients
2007-12-06 15:35 [Cluster-devel] [PATCH] gfs2: use pid for plock owner for nfs clients David Teigland
@ 2007-12-07 13:43 ` Steven Whitehouse
0 siblings, 0 replies; 2+ messages in thread
From: Steven Whitehouse @ 2007-12-07 13:43 UTC (permalink / raw)
To: cluster-devel.redhat.com
Hi,
Now in the -nmw git tree. Thanks,
Steve.
On Thu, 2007-12-06 at 09:35 -0600, David Teigland wrote:
> The fl_owner is that of lockd when posix locks arrive from nfs
> clients, so it can't be used to distinguish between lock holders.
> Use fl_pid as owner instead; it's the pid of the process on the
> nfs client.
>
> Signed-off-by: David Teigland <teigland@redhat.com>
> ---
> fs/gfs2/locking/dlm/plock.c | 18 ++++++++++++++----
> 1 files changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/fs/gfs2/locking/dlm/plock.c b/fs/gfs2/locking/dlm/plock.c
> index 1f7b038..2ebd374 100644
> --- a/fs/gfs2/locking/dlm/plock.c
> +++ b/fs/gfs2/locking/dlm/plock.c
> @@ -89,15 +89,19 @@ int gdlm_plock(void *lockspace, struct lm_lockname *name,
> op->info.number = name->ln_number;
> op->info.start = fl->fl_start;
> op->info.end = fl->fl_end;
> - op->info.owner = (__u64)(long) fl->fl_owner;
> if (fl->fl_lmops && fl->fl_lmops->fl_grant) {
> + /* fl_owner is lockd which doesn't distinguish
> + processes on the nfs client */
> + op->info.owner = (__u64) fl->fl_pid;
> xop->callback = fl->fl_lmops->fl_grant;
> locks_init_lock(&xop->flc);
> locks_copy_lock(&xop->flc, fl);
> xop->fl = fl;
> xop->file = file;
> - } else
> + } else {
> + op->info.owner = (__u64)(long) fl->fl_owner;
> xop->callback = NULL;
> + }
>
> send_op(op);
>
> @@ -203,7 +207,10 @@ int gdlm_punlock(void *lockspace, struct lm_lockname *name,
> op->info.number = name->ln_number;
> op->info.start = fl->fl_start;
> op->info.end = fl->fl_end;
> - op->info.owner = (__u64)(long) fl->fl_owner;
> + if (fl->fl_lmops && fl->fl_lmops->fl_grant)
> + op->info.owner = (__u64) fl->fl_pid;
> + else
> + op->info.owner = (__u64)(long) fl->fl_owner;
>
> send_op(op);
> wait_event(recv_wq, (op->done != 0));
> @@ -242,7 +249,10 @@ int gdlm_plock_get(void *lockspace, struct lm_lockname *name,
> op->info.number = name->ln_number;
> op->info.start = fl->fl_start;
> op->info.end = fl->fl_end;
> - op->info.owner = (__u64)(long) fl->fl_owner;
> + if (fl->fl_lmops && fl->fl_lmops->fl_grant)
> + op->info.owner = (__u64) fl->fl_pid;
> + else
> + op->info.owner = (__u64)(long) fl->fl_owner;
>
> send_op(op);
> wait_event(recv_wq, (op->done != 0));
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2007-12-07 13:43 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-12-06 15:35 [Cluster-devel] [PATCH] gfs2: use pid for plock owner for nfs clients David Teigland
2007-12-07 13:43 ` [Cluster-devel] " Steven Whitehouse
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.