[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Cluster-devel] Re: [PATCH] gfs2: use pid for plock owner for nfs clients



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));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]