[LTP] [PATCH] nfs_lib.sh: run exportfs at "server side" in LTP_NETNS case
Nikita Yushchenko
nikita.yushchenko@virtuozzo.com
Thu Jan 13 17:27:49 CET 2022
13.01.2022 18:50, Petr Vorel wrote:
> Hi Nikita,
>
> [ Cc Alexey ]
>
>> In LTP_NETNS case, nfs server is the root namespace and nfs client is
>> the ltp namespace.
>
>> Then, exportfs shall be executed locally, without tst_rhost_run.
>
>> Otherwise, things implicitly depend on /var/lib/nfs being the same in
>> the root namespace and the ltp namespace.
> Not sure if I understand your use case. Do you run rpc.statd (or what is using
> /var/lib/nfs) in non-default net namespace?
'exportfs' command maintains /var/lib/nfs/etab file, to be read by rpc.mountd when processing mount
requests.
'exportfs' must be executed in the same environment where rpc.mountd runs
In LTP_NETNS case, rpc.mountd runs on the host's root namespaces
(and mount runs in ltp's non-root namespace).
Thus for correctness, must execute 'exportfs' in the root namespace.
Currently ltp runs 'exportfs' in ltpns, which works only because ltpns does not unshare /var from root
namespace.
But not unsharing /var makes AF_UNIX socket for host's rpcbind to become available inside ltpns. Then,
at nfs3 mount time, kernel creates an instance of lockd for ltpns, and ports for that instance leak to
host's rpcbind and overwrite ports for lockd already active for root namespace. This breaks nfs3 file
locking. But that is not found by nfslock01 test because that test ignores the errors from the very
operations it is intended to test.
This patch, and the patch that makes nfslock01 to actually fail on errors, is part of fixing all that mess.
>> - if ! tst_rhost_run -c "test -d $remote_dir"; then
>> - tst_rhost_run -s -c "mkdir -p $remote_dir; $export_cmd"
>> + if [ -n "$LTP_NETNS" ]; then
> Please use tst_net_use_netns (as in the patch I Cc you just now).
>
> Shouldn't be also $LTP_NFS_NETNS_USE_LO considered?
The rule is - run exportfs in the environment that plays the 'nfs server' role.
I'm not sure about exact semantics of $LTP_NFS_NETNS_USE_LO, but per
what I see in the code, it does not affect how address in $mount_dir is configured. Then, it also shall
not affect the choice of where 'exportfs' runs.
Nikita
More information about the ltp
mailing list