mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	lockd: Show pid of lockd for remote locks
Use the pid of lockd instead of the remote lock's svid for the fl_pid for local POSIX locks. This allows proper enumeration of which local process owns which lock. The svid is meaningless to local lock readers. Signed-off-by: Benjamin Coddington <bcodding@redhat.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
		
							parent
							
								
									9adfac6d73
								
							
						
					
					
						commit
						646d73e91b
					
				
					 5 changed files with 4 additions and 6 deletions
				
			
		| 
						 | 
					@ -46,6 +46,7 @@ nlm4svc_retrieve_args(struct svc_rqst *rqstp, struct nlm_args *argp,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Set up the missing parts of the file_lock structure */
 | 
							/* Set up the missing parts of the file_lock structure */
 | 
				
			||||||
		lock->fl.fl_file  = file->f_file;
 | 
							lock->fl.fl_file  = file->f_file;
 | 
				
			||||||
 | 
							lock->fl.fl_pid = current->tgid;
 | 
				
			||||||
		lock->fl.fl_lmops = &nlmsvc_lock_operations;
 | 
							lock->fl.fl_lmops = &nlmsvc_lock_operations;
 | 
				
			||||||
		nlmsvc_locks_init_private(&lock->fl, host, (pid_t)lock->svid);
 | 
							nlmsvc_locks_init_private(&lock->fl, host, (pid_t)lock->svid);
 | 
				
			||||||
		if (!lock->fl.fl_owner) {
 | 
							if (!lock->fl.fl_owner) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -432,7 +432,7 @@ static int nlmsvc_setgrantargs(struct nlm_rqst *call, struct nlm_lock *lock)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* set default data area */
 | 
						/* set default data area */
 | 
				
			||||||
	call->a_args.lock.oh.data = call->a_owner;
 | 
						call->a_args.lock.oh.data = call->a_owner;
 | 
				
			||||||
	call->a_args.lock.svid = lock->fl.fl_pid;
 | 
						call->a_args.lock.svid = ((struct nlm_lockowner *)lock->fl.fl_owner)->pid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (lock->oh.len > NLMCLNT_OHSIZE) {
 | 
						if (lock->oh.len > NLMCLNT_OHSIZE) {
 | 
				
			||||||
		void *data = kmalloc(lock->oh.len, GFP_KERNEL);
 | 
							void *data = kmalloc(lock->oh.len, GFP_KERNEL);
 | 
				
			||||||
| 
						 | 
					@ -634,7 +634,7 @@ nlmsvc_testlock(struct svc_rqst *rqstp, struct nlm_file *file,
 | 
				
			||||||
	conflock->caller = "somehost";	/* FIXME */
 | 
						conflock->caller = "somehost";	/* FIXME */
 | 
				
			||||||
	conflock->len = strlen(conflock->caller);
 | 
						conflock->len = strlen(conflock->caller);
 | 
				
			||||||
	conflock->oh.len = 0;		/* don't return OH info */
 | 
						conflock->oh.len = 0;		/* don't return OH info */
 | 
				
			||||||
	conflock->svid = lock->fl.fl_pid;
 | 
						conflock->svid = ((struct nlm_lockowner *)lock->fl.fl_owner)->pid;
 | 
				
			||||||
	conflock->fl.fl_type = lock->fl.fl_type;
 | 
						conflock->fl.fl_type = lock->fl.fl_type;
 | 
				
			||||||
	conflock->fl.fl_start = lock->fl.fl_start;
 | 
						conflock->fl.fl_start = lock->fl.fl_start;
 | 
				
			||||||
	conflock->fl.fl_end = lock->fl.fl_end;
 | 
						conflock->fl.fl_end = lock->fl.fl_end;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,6 +76,7 @@ nlmsvc_retrieve_args(struct svc_rqst *rqstp, struct nlm_args *argp,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Set up the missing parts of the file_lock structure */
 | 
							/* Set up the missing parts of the file_lock structure */
 | 
				
			||||||
		lock->fl.fl_file  = file->f_file;
 | 
							lock->fl.fl_file  = file->f_file;
 | 
				
			||||||
 | 
							lock->fl.fl_pid = current->tgid;
 | 
				
			||||||
		lock->fl.fl_lmops = &nlmsvc_lock_operations;
 | 
							lock->fl.fl_lmops = &nlmsvc_lock_operations;
 | 
				
			||||||
		nlmsvc_locks_init_private(&lock->fl, host, (pid_t)lock->svid);
 | 
							nlmsvc_locks_init_private(&lock->fl, host, (pid_t)lock->svid);
 | 
				
			||||||
		if (!lock->fl.fl_owner) {
 | 
							if (!lock->fl.fl_owner) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -126,7 +126,6 @@ nlm_decode_lock(__be32 *p, struct nlm_lock *lock)
 | 
				
			||||||
	lock->svid  = ntohl(*p++);
 | 
						lock->svid  = ntohl(*p++);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	locks_init_lock(fl);
 | 
						locks_init_lock(fl);
 | 
				
			||||||
	fl->fl_pid   = (pid_t)lock->svid;
 | 
					 | 
				
			||||||
	fl->fl_flags = FL_POSIX;
 | 
						fl->fl_flags = FL_POSIX;
 | 
				
			||||||
	fl->fl_type  = F_RDLCK;		/* as good as anything else */
 | 
						fl->fl_type  = F_RDLCK;		/* as good as anything else */
 | 
				
			||||||
	start = ntohl(*p++);
 | 
						start = ntohl(*p++);
 | 
				
			||||||
| 
						 | 
					@ -268,7 +267,6 @@ nlmsvc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p)
 | 
				
			||||||
	memset(lock, 0, sizeof(*lock));
 | 
						memset(lock, 0, sizeof(*lock));
 | 
				
			||||||
	locks_init_lock(&lock->fl);
 | 
						locks_init_lock(&lock->fl);
 | 
				
			||||||
	lock->svid = ~(u32) 0;
 | 
						lock->svid = ~(u32) 0;
 | 
				
			||||||
	lock->fl.fl_pid = (pid_t)lock->svid;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!(p = nlm_decode_cookie(p, &argp->cookie))
 | 
						if (!(p = nlm_decode_cookie(p, &argp->cookie))
 | 
				
			||||||
	 || !(p = xdr_decode_string_inplace(p, &lock->caller,
 | 
						 || !(p = xdr_decode_string_inplace(p, &lock->caller,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -118,7 +118,6 @@ nlm4_decode_lock(__be32 *p, struct nlm_lock *lock)
 | 
				
			||||||
	lock->svid  = ntohl(*p++);
 | 
						lock->svid  = ntohl(*p++);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	locks_init_lock(fl);
 | 
						locks_init_lock(fl);
 | 
				
			||||||
	fl->fl_pid   = (pid_t)lock->svid;
 | 
					 | 
				
			||||||
	fl->fl_flags = FL_POSIX;
 | 
						fl->fl_flags = FL_POSIX;
 | 
				
			||||||
	fl->fl_type  = F_RDLCK;		/* as good as anything else */
 | 
						fl->fl_type  = F_RDLCK;		/* as good as anything else */
 | 
				
			||||||
	p = xdr_decode_hyper(p, &start);
 | 
						p = xdr_decode_hyper(p, &start);
 | 
				
			||||||
| 
						 | 
					@ -265,7 +264,6 @@ nlm4svc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p)
 | 
				
			||||||
	memset(lock, 0, sizeof(*lock));
 | 
						memset(lock, 0, sizeof(*lock));
 | 
				
			||||||
	locks_init_lock(&lock->fl);
 | 
						locks_init_lock(&lock->fl);
 | 
				
			||||||
	lock->svid = ~(u32) 0;
 | 
						lock->svid = ~(u32) 0;
 | 
				
			||||||
	lock->fl.fl_pid = (pid_t)lock->svid;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!(p = nlm4_decode_cookie(p, &argp->cookie))
 | 
						if (!(p = nlm4_decode_cookie(p, &argp->cookie))
 | 
				
			||||||
	 || !(p = xdr_decode_string_inplace(p, &lock->caller,
 | 
						 || !(p = xdr_decode_string_inplace(p, &lock->caller,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue