diff options
Diffstat (limited to 'fs/lockd/svcproc.c')
| -rw-r--r-- | fs/lockd/svcproc.c | 6 | 
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/lockd/svcproc.c b/fs/lockd/svcproc.c index 4ae4b63b5392..99696d3f6dd6 100644 --- a/fs/lockd/svcproc.c +++ b/fs/lockd/svcproc.c @@ -55,6 +55,7 @@ nlmsvc_retrieve_args(struct svc_rqst *rqstp, struct nlm_args *argp,  	struct nlm_host		*host = NULL;  	struct nlm_file		*file = NULL;  	struct nlm_lock		*lock = &argp->lock; +	int			mode;  	__be32			error = 0;  	/* nfsd callbacks must have been installed for this procedure */ @@ -69,13 +70,14 @@ nlmsvc_retrieve_args(struct svc_rqst *rqstp, struct nlm_args *argp,  	/* Obtain file pointer. Not used by FREE_ALL call. */  	if (filp != NULL) { -		error = cast_status(nlm_lookup_file(rqstp, &file, &lock->fh)); +		error = cast_status(nlm_lookup_file(rqstp, &file, lock));  		if (error != 0)  			goto no_locks;  		*filp = file;  		/* Set up the missing parts of the file_lock structure */ -		lock->fl.fl_file  = file->f_file; +		mode = lock_to_openmode(&lock->fl); +		lock->fl.fl_file  = file->f_file[mode];  		lock->fl.fl_pid = current->tgid;  		lock->fl.fl_lmops = &nlmsvc_lock_operations;  		nlmsvc_locks_init_private(&lock->fl, host, (pid_t)lock->svid);  |