]> git.baikalelectronics.ru Git - kernel.git/commit
NFS: fix disabling of swap
authorNeilBrown <neilb@suse.de>
Wed, 8 Feb 2023 04:45:38 +0000 (15:45 +1100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Mar 2023 08:33:22 +0000 (09:33 +0100)
commit529a2a19e73fffcbb4edd7e940dc05714dd55322
tree2d16db7027f3b265af6025b0d190e0008bd7f2f5
parentf44bbd38e167b2dcc95732204fea4438b85b6849
NFS: fix disabling of swap

[ Upstream commit 865e151e1c44e557f7bf4a6cfcac8498958bacd3 ]

When swap is activated to a file on an NFSv4 mount we arrange that the
state manager thread is always present as starting a new thread requires
memory allocations that might block waiting for swap.

Unfortunately the code for allowing the state manager thread to exit when
swap is disabled was not tested properly and does not work.
This can be seen by examining /proc/fs/nfsfs/servers after disabling swap
and unmounting the filesystem.  The servers file will still list one
entry.  Also a "ps" listing will show the state manager thread is still
present.

There are two problems.
 1/ rpc_clnt_swap_deactivate() doesn't walk up the ->cl_parent list to
    find the primary client on which the state manager runs.

 2/ The thread is not woken up properly and it immediately goes back to
    sleep without checking whether it is really needed.  Using
    nfs4_schedule_state_manager() ensures a proper wake-up.

Reported-by: Olga Kornievskaia <aglo@umich.edu>
Fixes: 806fbcc1a051 ("NFSv4: keep state manager thread active if swap is enabled")
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/nfs/nfs4proc.c
net/sunrpc/clnt.c