27 Sep, 2016
1 commit
-
By design notifier can be registered once only, however nfsd registers
the same inetaddr notifiers per net-namespace. When this happen it
corrupts list of notifiers, as result some notifiers can be not called
on proper event, traverse on list can be cycled forever, and second
unregister can access already freed memory.Cc: stable@vger.kernel.org
fixes: 36684996 ("nfsd: Register callbacks on the inetaddr_chain and inet6addr_chain")
Signed-off-by: Vasily Averin
Reviewed-by: Jeff Layton
Cc: stable@vger.kernel.org
Signed-off-by: J. Bruce Fields
07 Jan, 2016
1 commit
-
Stefan Hajnoczi reports,
nfsd leaks 3 references to the sunrpc module here:# echo -n "asdf 1234" >/proc/fs/nfsd/portlist
bash: echo: write error: Protocol not supportedNow stop nfsd and try unloading the kernel modules:
# systemctl stop nfs-server
# systemctl stop nfs
# systemctl stop proc-fs-nfsd.mount
# systemctl stop var-lib-nfs-rpc_pipefs.mount
# rmmod nfsd
# rmmod nfs_acl
# rmmod lockd
# rmmod auth_rpcgss
# rmmod sunrpc
rmmod: ERROR: Module sunrpc is in use
# lsmod | grep rpc
sunrpc 315392 3It is caused by nfsd don't cleanup rpcb program for nfsd
when destroying svc service after creating xprt fail.Reported-by: Stefan Hajnoczi
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields
23 Dec, 2015
1 commit
-
Register callbacks on inetaddr_chain and inet6addr_chain to trigger
cleanup of nfsd transport sockets when an ip address is deleted.Signed-off-by: Scott Mayhew
Signed-off-by: J. Bruce Fields
11 Aug, 2015
5 commits
-
Add an operation that will do setup of the service. In the case of a
classic thread-based service that means starting up threads. In the case
of a workqueue-based service, the setup will do something different.Signed-off-by: Shirley Ma
Acked-by: Jeff Layton
Tested-by: Shirley Ma
Signed-off-by: J. Bruce Fields -
For now, all services use svc_xprt_do_enqueue, but once we add
workqueue-based service support, we'll need to do something different.Signed-off-by: Shirley Ma
Acked-by: Jeff Layton
Tested-by: Shirley Ma
Signed-off-by: J. Bruce Fields -
...not technically an operation, but it's more convenient and cleaner
to pass the module pointer in this struct.Signed-off-by: Shirley Ma
Acked-by: Jeff Layton
Tested-by: Shirley Ma
Signed-off-by: J. Bruce Fields -
Since we now have a container for holding svc_serv operations, move the
sv_function into it as well.Signed-off-by: Shirley Ma
Acked-by: Jeff Layton
Tested-by: Shirley Ma
Signed-off-by: J. Bruce Fields -
In later patches we'll need to abstract out more operations on a
per-service level, besides sv_shutdown and sv_function.Declare a new svc_serv_ops struct to hold these operations, and move
sv_shutdown into this struct.Signed-off-by: Shirley Ma
Acked-by: Jeff Layton
Tested-by: Shirley Ma
Signed-off-by: J. Bruce Fields
10 Feb, 2015
1 commit
-
The code seems to work. The protocol looks stable. The kernel's
version defaults can be overridden by rpc.nfsd arguments.Signed-off-by: J. Bruce Fields
10 Dec, 2014
1 commit
-
Signed-off-by: Jeff Layton
Signed-off-by: J. Bruce Fields
02 Aug, 2014
1 commit
-
A memory allocation failure could cause nfsd_startup_generic to fail, in
which case nfsd_users wouldn't be incorrectly left elevated.After nfsd restarts nfsd_startup_generic will then succeed without doing
anything--the first consequence is likely nfs4_start_net finding a bad
laundry_wq and crashing.Signed-off-by: Kinglong Mee
Fixes: 4539f14981ce "nfsd: replace boolean nfsd_up flag by users counter"
Cc: stable@vger.kernel.org
Signed-off-by: J. Bruce Fields
09 Jul, 2014
1 commit
-
Currently, the maximum number of connections that nfsd will allow
is based on the number of threads spawned. While this is fine for a
default, there really isn't a clear relationship between the two.The number of threads corresponds to the number of concurrent requests
that we want to allow the server to process at any given time. The
connection limit corresponds to the maximum number of clients that we
want to allow the server to handle. These are two entirely different
quantities.Break the dependency on increasing threads in order to allow for more
connections, by adding a new per-net parameter that can be set to a
non-zero value. The default is still to base it on the number of threads,
so there should be no behavior change for anyone who doesn't use it.Cc: Trond Myklebust
Signed-off-by: Jeff Layton
Signed-off-by: J. Bruce Fields
23 Jun, 2014
1 commit
-
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields
23 May, 2014
1 commit
-
PF_LESS_THROTTLE has a very specific use case: to avoid deadlocks
and live-locks while writing to the page cache in a loop-back
NFS mount situation.It therefore makes sense to *only* set PF_LESS_THROTTLE in this
situation.
We now know when a request came from the local-host so it could be a
loop-back mount. We already know when we are handling write requests,
and when we are doing anything else.So combine those two to allow nfsd to still be throttled (like any
other process) in every situation except when it is known to be
problematic.Signed-off-by: NeilBrown
Signed-off-by: J. Bruce Fields
07 Jan, 2014
1 commit
-
Without CONFIG_NFSD_V3, compile will get warning as,
fs/nfsd/nfssvc.c: In function 'nfsd_svc':
>> fs/nfsd/nfssvc.c:246:60: warning: array subscript is above array bounds [-Warray-bounds]
return (nfsd_versions[2] != NULL) || (nfsd_versions[3] != NULL);
^Reported-by: kbuild test robot
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields
04 Jan, 2014
1 commit
-
When starting without nfsv2 and nfsv3, nfsd does not need to start
lockd (and certainly doesn't need to fail because lockd failed to
register with the portmapper).Reported-by: Gareth Williams
Reviewed-by: Chuck Lever
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields
13 Jul, 2013
1 commit
-
You can turn on or off support for minorversions using e.g.
echo "-4.2" >/proc/fs/nfsd/versions
However, the current implementation is a little wonky. For example, the
above will turn off 4.2 support, but it will also turn *on* 4.1 support.This didn't matter as long as we only had 2 minorversions, which was
true till very recently.And do a little cleanup here.
Signed-off-by: J. Bruce Fields
09 Jul, 2013
1 commit
-
We now have minimal minorversion 1 support; turn it on by default.
This can still be turned off with "echo -4.1 >/proc/fs/nfsd/versions".
Signed-off-by: J. Bruce Fields
01 Mar, 2013
1 commit
-
Pull nfsd changes from J Bruce Fields:
"Miscellaneous bugfixes, plus:- An overhaul of the DRC cache by Jeff Layton. The main effect is
just to make it larger. This decreases the chances of intermittent
errors especially in the UDP case. But we'll need to watch for any
reports of performance regressions.- Containerized nfsd: with some limitations, we now support
per-container nfs-service, thanks to extensive work from Stanislav
Kinsbursky over the last year."Some notes about conflicts, since there were *two* non-data semantic
conflicts here:- idr_remove_all() had been added by a memory leak fix, but has since
become deprecated since idr_destroy() does it for us now.- xs_local_connect() had been added by this branch to make AF_LOCAL
connections be synchronous, but in the meantime Trond had changed the
calling convention in order to avoid a RCU dereference.There were a couple of more obvious actual source-level conflicts due to
the hlist traversal changes and one just due to code changes next to
each other, but those were trivial.* 'for-3.9' of git://linux-nfs.org/~bfields/linux: (49 commits)
SUNRPC: make AF_LOCAL connect synchronous
nfsd: fix compiler warning about ambiguous types in nfsd_cache_csum
svcrpc: fix rpc server shutdown races
svcrpc: make svc_age_temp_xprts enqueue under sv_lock
lockd: nlmclnt_reclaim(): avoid stack overflow
nfsd: enable NFSv4 state in containers
nfsd: disable usermode helper client tracker in container
nfsd: use proper net while reading "exports" file
nfsd: containerize NFSd filesystem
nfsd: fix comments on nfsd_cache_lookup
SUNRPC: move cache_detail->cache_request callback call to cache_read()
SUNRPC: remove "cache_request" argument in sunrpc_cache_pipe_upcall() function
SUNRPC: rework cache upcall logic
SUNRPC: introduce cache_detail->cache_request callback
NFS: simplify and clean cache library
NFS: use SUNRPC cache creation and destruction helper for DNS cache
nfsd4: free_stid can be static
nfsd: keep a checksum of the first 256 bytes of request
sunrpc: trim off trailing checksum before returning decrypted or integrity authenticated buffer
sunrpc: fix comment in struct xdr_buf definition
...
24 Feb, 2013
1 commit
-
The three variables are calculated from nr_free_buffer_pages so change
their types to unsigned long in case of overflow.Signed-off-by: Zhang Yanfei
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
16 Feb, 2013
1 commit
-
This patch makes NFSD file system superblock to be created per net.
This makes possible to get proper network namespace from superblock instead of
using hard-coded "init_net".Note: NFSd fs super-block holds network namespace. This garantees, that
network namespace won't disappear from underneath of it.
This, obviously, means, that in case of kill of a container's "init" (which is not a mount
namespace, but network namespace creator) netowrk namespace won't be
destroyed.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields
04 Feb, 2013
1 commit
-
The reply cache code never returns this status.
Signed-off-by: Jeff Layton
Signed-off-by: J. Bruce Fields
11 Dec, 2012
15 commits
-
Since NFSd service is per-net now, we have to pass proper network
context in nfsd_shutdown() from NFSd kthreads.The simplest way I found is to get proper net from one of transports
with permanent sockets.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
Function nfsd_shutdown is called from two places: nfsd_last_thread (when last
kernel thread is exiting) and nfsd_svc (in case of kthreads starting error).
When calling from nfsd_svc(), we can be sure that per-net resources are
allocated, so we don't need to check per-net nfsd_net_up boolean flag.
This allows us to remove nfsd_shutdown function at all and move check for
per-net nfsd_net_up boolean flag to nfsd_last_thread.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
Since we have generic NFSd resurces, we have to introduce some way how to
allocate and destroy those resources on first per-net NFSd start and on
last per-net NFSd stop respectively.
This patch replaces global boolean nfsd_up flag (which is unused now) by users
counter and use it to determine either we need to allocate generic resources
or destroy them.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
This patch moves nfsd_startup_generic() and nfsd_shutdown_generic()
calls to nfsd_startup_net() and nfsd_shutdown_net() respectively, which
allows us to call nfsd_startup_net() instead of nfsd_startup() and makes
the code look clearer. It also modifies nfsd_svc() and nfsd_shutdown()
to check nn->nfsd_net_up instead of global nfsd_up. The latter is now
used only for generic resources shutdown and is currently useless. It
will replaced by NFSd users counter later in this series.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
NFSd have per-net resources and resources, used globally.
Let's move generic resources init and shutdown to separated functions since
they are going to be allocated on first NFSd service start and destroyed after
last NFSd service shutdown.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
This patch makes main step in NFSd containerisation.
There could be different approaches to how to make NFSd able to handle
incoming RPC request from different network namespaces. The two main
options are:1) Share NFSd kthreads betwween all network namespaces.
2) Create separated pool of threads for each namespace.While first approach looks more flexible, second one is simpler and
non-racy. This patch implements the second option.To make it possible to allocate separate pools of threads, we have to
make it possible to allocate separate NFSd service structures per net.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
This is simple: an NFSd service can be started at different times in
different network environments. So, its "boot time" has to be assigned
per net.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
This patch introduces introduces per-net "nfsd_net_up" boolean flag, which has
the same purpose as general "nfsd_up" flag - skip init or shutdown of per-net
resources in case of they are inited on shutted down respectively.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
NFSd resources are partially per-net and partially globally used.
This patch splits resources init and shutdown and moves per-net code to
separated functions.
Generic and per-net init and shutdown are called sequentially for a while.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
Precursor patch. Hard-coded "init_net" will be replaced by proper one in
future.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
Precursor patch. Hard-coded "init_net" will be replaced by proper one in
future.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
Precursor patch. Hard-coded "init_net" will be replaced by proper one in
future.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
Precursor patch. Hard-coded "init_net" will be replaced by proper one in
future.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
Precursor patch. Hard-coded "init_net" will be replaced by proper one in
future.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
There could be a situation, when NFSd was started in one network namespace, but
stopped in another one.
This will trigger kernel panic, because RPCBIND client is stored on per-net
NFSd data, and will be NULL on NFSd shutdown.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields
28 Nov, 2012
1 commit
-
Split NFSv4 state init and shutdown into two different calls: per-net one and
generic one.
Per-net cwinit/shutdown pair have to be called for any namespace, generic pair
- only once on NSFd kthreads start and shutdown respectively.Refresh of diff-nfsd-call-state-init-twice
Signed-off-by: J. Bruce Fields
26 Nov, 2012
1 commit
-
Very embarassing: 1091006c5eb15cba56785bd5b498a8d0b9546903 "nfsd: turn
on reply cache for NFSv4" missed a line, effectively leaving the reply
cache off in the v4 case. I thought I'd tested that, but I guess not.This time, wrote a pynfs test to confirm it works.
Cc: stable@vger.kernel.org
Signed-off-by: J. Bruce Fields
22 Aug, 2012
1 commit
-
svc_recv() returns only -EINTR or -EAGAIN. If we really want to worry
about the case where it has a bug that causes it to return something
else, we could stick a WARN() in svc_recv. But it's silly to require
every caller to have all this boilerplate to handle that case.Signed-off-by: J. Bruce Fields