mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 08:31:55 +00:00
665e89ab7c
The below-mentioned patch was intended to simplify refcounting on the
svc_serv used by locked. The goal was to only ever have a single
reference from the single thread. To that end we dropped a call to
lockd_start_svc() (except when creating thread) which would take a
reference, and dropped the svc_put(serv) that would drop that reference.
Unfortunately we didn't also remove the svc_get() from
lockd_create_svc() in the case where the svc_serv already existed.
So after the patch:
- on the first call the svc_serv was allocated and the one reference
was given to the thread, so there are no extra references
- on subsequent calls svc_get() was called so there is now an extra
reference.
This is clearly not consistent.
The inconsistency is also clear in the current code in lockd_get()
takes *two* references, one on nlmsvc_serv and one by incrementing
nlmsvc_users. This clearly does not match lockd_put().
So: drop that svc_get() from lockd_get() (which used to be in
lockd_create_svc().
Reported-by: Ido Schimmel <idosch@idosch.org>
Closes: https://lore.kernel.org/linux-nfs/ZHsI%2FH16VX9kJQX1@shredder/T/#u
Fixes:
|
||
---|---|---|
.. | ||
clnt4xdr.c | ||
clntlock.c | ||
clntproc.c | ||
clntxdr.c | ||
host.c | ||
Makefile | ||
mon.c | ||
netns.h | ||
procfs.c | ||
procfs.h | ||
svc4proc.c | ||
svc.c | ||
svclock.c | ||
svcproc.c | ||
svcshare.c | ||
svcsubs.c | ||
svcxdr.h | ||
trace.c | ||
trace.h | ||
xdr4.c | ||
xdr.c |