[LTP] [PATCH] nfs_lib: Skip NFS versions disabled on server
Avinesh Kumar
avinesh.kumar@suse.com
Tue Aug 11 10:48:25 CEST 2026
Hi Petr,
Thanks for your review.
>
> Thanks for handling this!
>
> LGTM? few notes below.
> Reviewed-by: Petr Vorel <pvorel@suse.cz>
> ...
>
>> -get_socket_type()
>> +get_socket_type_raw()
> very nit: slightly confusing type, because there is a "raw" socket SOCK_RAW.
> I guess any network programmer seeing this will think of that socket, e.g.:
> socket(PF_INET, SOCK_RAW, ...);
> socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
>
> But of course it can stay.
How about get_socket_type_bare() ?
>
>> {
>> local t
>> local k=0
>> for t in $SOCKET_TYPE; do
>> if [ "$k" -eq "$1" ]; then
>> - echo "${t}${TST_IPV6}"
>> + echo "$t"
>> return
>> fi
>> k=$(( k + 1 ))
>> done
>> }
>> +nfs_server_vers_enabled()
>> +{
>> + local vers="$1"
>> + local versions=" $(tst_rhost_run -c 'cat /proc/fs/nfsd/versions 2>/dev/null') "
>> +
>> + case "$versions" in
>> + *" -$vers "*) return 1;;
>> + esac
>
> very nit: I was thinking if having the space in case would be slightly more
> readable, but probably not. I consider spaces in both versions as unnecessary
> (i.e. formatting error) but of course they are necessary.
>
> local versions="$(tst_rhost_run -c 'cat /proc/fs/nfsd/versions 2>/dev/null')"
>
> case " $versions " in
>
>> +
>> + return 0
>> +}
>> +
>> +# Drops NFS versions the server explicitly disabled from $VERSION, keeping
>> +# $SOCKET_TYPE entries aligned by position with what remains.
>> +nfs_filter_versions()
>> +{
>> + local v type
>> + local n=0
>> + local new_version=
>> + local new_socket_type=
> nit: it should be safe to use it without '=', right?
> local v type new_version new_socket_type
+1
>
>> +
>> + for v in $VERSION; do
>> + type=$(get_socket_type_raw $n)
>> +
>> + if nfs_server_vers_enabled "$v"; then
>> + new_version="$new_version $v"
>> + new_socket_type="$new_socket_type $type"
>> + else
>> + tst_res TINFO "NFSv$v disabled on server, skipping"
>
> Could this be TCONF so that results summary at the end shows some TCONF?
> That indicates something was skipped.
+1
>
> + tst_res TINFO "NFSv$v disabled on server, skipping"
> + tst_res TCONF "NFSv$v disabled on server, skipping"
>
>> + fi
>> +
>> + n=$(( n + 1 ))
>> + done
>> +
>> + [ -z "$new_version" ] && \
>> + tst_brk TCONF "none of the requested NFS versions ($VERSION) are enabled on server"
> nit: I would expect this would quit the test on system with
> set -o errexit (equivalent of set -e), but magically it works.
> FYI normally it's better if any test line exit with 0 => use || (or if ...; then
> ... fi) instead && i.e.
>
> [ ... ] || tst_brk TCONF
>
> But because it works it can stay.
+1. I will switch to below for consistency.
[ "$new_version" ] || \
tst_brk TCONF ...
>
>> +
>> + VERSION="${new_version# }"
>> + SOCKET_TYPE="${new_socket_type# }"
>
> Fortunately removing leading space works also on dash, although at least some
> string operations aren't part of POSIX [1].
>
> If this is ever problematic, we can fix it with:
>
> [ "$new_version" ] && new_version="$new_version $v" || new_version="$v"
> [ "$new_socket_type" ] && new_socket_type="$new_socket_type $type" || new_socket_type="$type"
>
> But because removing leading space is not needed, because later code for t in
> $SOCKET_TYPE; do will handle that, I'd remove this part entirely.
Actually we need to remove the leading space, otherwise we break
nfsstat01 where $VERSION is being used as whole scalar value.
case $VERSION in
I can switch to the solution you suggested here.
>
> FYI: (no leading/trailing space in parameters, no $t having just empty space:
> SOCKET_TYPE=' udp tcp '; for t in $SOCKET_TYPE; do echo "'$t'"; done
> 'udp'
> 'tcp'
>
> [1] https://mywiki.wooledge.org/Bashism#Parameter_Expansions
>
> Kind regards,
> Petr
Regards,
Avinesh
More information about the ltp
mailing list