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 <[EMAIL PROTECTED]> > --- > 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));