mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 01:40:53 +07: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
@ -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 New Issue
Block a user