123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- #!/bin/sh
- # SPDX-License-Identifier: GPL-2.0-or-later
- # Copyright (c) 2015-2018 Oracle and/or its affiliates. All Rights Reserved.
- # Copyright (c) International Business Machines Corp., 2001
- VERSION=${VERSION:=3}
- NFILES=${NFILES:=1000}
- SOCKET_TYPE="${SOCKET_TYPE:-udp}"
- NFS_TYPE=${NFS_TYPE:=nfs}
- nfs_usage()
- {
- echo "-t x Socket type, tcp or udp, default is udp"
- echo "-v x NFS version, default is '3'"
- }
- nfs_parse_args()
- {
- case "$1" in
- v) VERSION="$(echo $2 | tr ',' ' ')";;
- t) SOCKET_TYPE="$(echo $2 | tr ',' ' ')";;
- esac
- }
- TST_OPTS="v:t:"
- TST_PARSE_ARGS=nfs_parse_args
- TST_USAGE=nfs_usage
- TST_NEEDS_TMPDIR=1
- TST_NEEDS_ROOT=1
- TST_NEEDS_CMDS="$TST_NEEDS_CMDS mount exportfs"
- TST_SETUP="${TST_SETUP:-nfs_setup}"
- TST_CLEANUP="${TST_CLEANUP:-nfs_cleanup}"
- # When set and test is using netns ($TST_USE_NETNS set) NFS traffic will go
- # through lo interface instead of ltp_ns_veth* netns interfaces (useful for
- # debugging whether test failures are related to veth/netns).
- LTP_NFS_NETNS_USE_LO=${LTP_NFS_NETNS_USE_LO:-}
- . tst_net.sh
- get_socket_type()
- {
- local t
- local k=0
- for t in $SOCKET_TYPE; do
- if [ "$k" -eq "$1" ]; then
- echo "${t}${TST_IPV6}"
- return
- fi
- k=$(( k + 1 ))
- done
- }
- nfs_server_udp_enabled()
- {
- local config f
- tst_rhost_run -c "[ -f /etc/nfs.conf ]" || return 0
- config=$(tst_rhost_run -c 'for f in $(grep ^include.*= '/etc/nfs.conf' | cut -d = -f2); do [ -f $f ] && printf "$f "; done')
- tst_rhost_run -c "grep -q \"^[# ]*udp *= *y\" /etc/nfs.conf $config"
- }
- nfs_setup_server()
- {
- local export_cmd="exportfs -i -o fsid=$$,no_root_squash,rw *:$remote_dir"
- if ! tst_rhost_run -c "test -d $remote_dir"; then
- tst_rhost_run -s -c "mkdir -p $remote_dir; $export_cmd"
- fi
- }
- nfs_mount()
- {
- local host_type=rhost
- local mount_dir
- [ -n "$LTP_NETNS" ] && host_type=
- if [ $TST_IPV6 ]; then
- mount_dir="[$(tst_ipaddr $host_type)]:$remote_dir"
- else
- mount_dir="$(tst_ipaddr $host_type):$remote_dir"
- fi
- local mnt_cmd="mount -t nfs $opts $mount_dir $local_dir"
- tst_res TINFO "Mounting NFS: $mnt_cmd"
- if [ -n "$LTP_NETNS" ] && [ -z "$LTP_NFS_NETNS_USE_LO" ]; then
- tst_rhost_run -c "$mnt_cmd"
- else
- $mnt_cmd > /dev/null
- fi
- if [ $? -ne 0 ]; then
- if [ "$type" = "udp" -o "$type" = "udp6" ] && tst_kvcmp -ge 5.6; then
- tst_brk TCONF "UDP support disabled with the kernel config NFS_DISABLE_UDP_SUPPORT?"
- fi
- tst_brk TBROK "mount command failed"
- fi
- }
- nfs_setup()
- {
- # Check if current filesystem is NFS
- if [ "$(stat -f . | grep "Type: nfs")" ]; then
- tst_brk TCONF "Cannot run nfs-stress test on mounted NFS"
- fi
- local i
- local type
- local n=0
- local opts
- local local_dir
- local remote_dir
- local mount_dir
- for i in $VERSION; do
- type=$(get_socket_type $n)
- tst_res TINFO "setup NFSv$i, socket type $type"
- if [ "$type" = "udp" -o "$type" = "udp6" ] && ! nfs_server_udp_enabled; then
- tst_brk TCONF "UDP support disabled on NFS server"
- fi
- local_dir="$TST_TMPDIR/$i/$n"
- remote_dir="$TST_TMPDIR/$i/$type"
- mkdir -p $local_dir
- nfs_setup_server
- opts="-o proto=$type,vers=$i"
- nfs_mount
- n=$(( n + 1 ))
- done
- if [ "$n" -eq 1 ]; then
- cd ${VERSION}/0
- fi
- }
- nfs_cleanup()
- {
- tst_res TINFO "Cleaning up testcase"
- cd $LTPROOT
- local i
- local type
- local local_dir
- local remote_dir
- local n=0
- for i in $VERSION; do
- local_dir="$TST_TMPDIR/$i/$n"
- grep -q "$local_dir" /proc/mounts && umount $local_dir
- n=$(( n + 1 ))
- done
- n=0
- for i in $VERSION; do
- type=$(get_socket_type $n)
- remote_dir="$TST_TMPDIR/$i/$type"
- tst_rhost_run -c "test -d $remote_dir && exportfs -u *:$remote_dir"
- tst_rhost_run -c "test -d $remote_dir && rm -rf $remote_dir"
- n=$(( n + 1 ))
- done
- }
|