Use the defer framework to schedule cleanups as soon as the command is
executed.

Signed-off-by: Petr Machata <pe...@nvidia.com>
---
 .../selftests/drivers/net/mlxsw/sch_ets.sh    | 26 +++---
 .../selftests/net/forwarding/sch_ets.sh       |  7 +-
 .../selftests/net/forwarding/sch_ets_core.sh  | 81 +++++++------------
 .../selftests/net/forwarding/sch_ets_tests.sh | 14 ++--
 4 files changed, 50 insertions(+), 78 deletions(-)

diff --git a/tools/testing/selftests/drivers/net/mlxsw/sch_ets.sh 
b/tools/testing/selftests/drivers/net/mlxsw/sch_ets.sh
index 139175fd03e7..4aaceb6b2b60 100755
--- a/tools/testing/selftests/drivers/net/mlxsw/sch_ets.sh
+++ b/tools/testing/selftests/drivers/net/mlxsw/sch_ets.sh
@@ -21,6 +21,7 @@ switch_create()
        # Create a bottleneck so that the DWRR process can kick in.
        tc qdisc replace dev $swp2 root handle 3: tbf rate 1gbit \
                burst 128K limit 1G
+       defer tc qdisc del dev $swp2 root handle 3:
 
        ets_switch_create
 
@@ -30,16 +31,27 @@ switch_create()
        # for the DWRR process.
        devlink_port_pool_th_save $swp1 0
        devlink_port_pool_th_set $swp1 0 12
+       defer devlink_port_pool_th_restore $swp1 0
+
        devlink_tc_bind_pool_th_save $swp1 0 ingress
        devlink_tc_bind_pool_th_set $swp1 0 ingress 0 12
+       defer devlink_tc_bind_pool_th_restore $swp1 0 ingress
+
        devlink_port_pool_th_save $swp2 4
        devlink_port_pool_th_set $swp2 4 12
+       defer devlink_port_pool_th_restore $swp2 4
+
        devlink_tc_bind_pool_th_save $swp2 7 egress
        devlink_tc_bind_pool_th_set $swp2 7 egress 4 5
+       defer devlink_tc_bind_pool_th_restore $swp2 7 egress
+
        devlink_tc_bind_pool_th_save $swp2 6 egress
        devlink_tc_bind_pool_th_set $swp2 6 egress 4 5
+       defer devlink_tc_bind_pool_th_restore $swp2 6 egress
+
        devlink_tc_bind_pool_th_save $swp2 5 egress
        devlink_tc_bind_pool_th_set $swp2 5 egress 4 5
+       defer devlink_tc_bind_pool_th_restore $swp2 5 egress
 
        # Note: sch_ets_core.sh uses VLAN ingress-qos-map to assign packet
        # priorities at $swp1 based on their 802.1p headers. ingress-qos-map is
@@ -47,20 +59,6 @@ switch_create()
        # 1:1, which is the mapping currently hard-coded by the driver.
 }
 
-switch_destroy()
-{
-       devlink_tc_bind_pool_th_restore $swp2 5 egress
-       devlink_tc_bind_pool_th_restore $swp2 6 egress
-       devlink_tc_bind_pool_th_restore $swp2 7 egress
-       devlink_port_pool_th_restore $swp2 4
-       devlink_tc_bind_pool_th_restore $swp1 0 ingress
-       devlink_port_pool_th_restore $swp1 0
-
-       ets_switch_destroy
-
-       tc qdisc del dev $swp2 root handle 3:
-}
-
 # Callback from sch_ets_tests.sh
 collect_stats()
 {
diff --git a/tools/testing/selftests/net/forwarding/sch_ets.sh 
b/tools/testing/selftests/net/forwarding/sch_ets.sh
index e60c8b4818cc..1f6f53e284b5 100755
--- a/tools/testing/selftests/net/forwarding/sch_ets.sh
+++ b/tools/testing/selftests/net/forwarding/sch_ets.sh
@@ -24,15 +24,10 @@ switch_create()
        # Create a bottleneck so that the DWRR process can kick in.
        tc qdisc add dev $swp2 root handle 1: tbf \
           rate 1Gbit burst 1Mbit latency 100ms
+       defer tc qdisc del dev $swp2 root
        PARENT="parent 1:"
 }
 
-switch_destroy()
-{
-       ets_switch_destroy
-       tc qdisc del dev $swp2 root
-}
-
 # Callback from sch_ets_tests.sh
 collect_stats()
 {
diff --git a/tools/testing/selftests/net/forwarding/sch_ets_core.sh 
b/tools/testing/selftests/net/forwarding/sch_ets_core.sh
index f906fcc66572..8f9922c695b0 100644
--- a/tools/testing/selftests/net/forwarding/sch_ets_core.sh
+++ b/tools/testing/selftests/net/forwarding/sch_ets_core.sh
@@ -166,89 +166,78 @@ h1_create()
        local i;
 
        simple_if_init $h1
+       defer simple_if_fini $h1
+
        mtu_set $h1 9900
+       defer mtu_restore $h1
+
        for i in {0..2}; do
                vlan_create $h1 1$i v$h1 $(sip $i)/28
+               defer vlan_destroy $h1 1$i
                ip link set dev $h1.1$i type vlan egress 0:$i
        done
 }
 
-h1_destroy()
-{
-       local i
-
-       for i in {0..2}; do
-               vlan_destroy $h1 1$i
-       done
-       mtu_restore $h1
-       simple_if_fini $h1
-}
-
 h2_create()
 {
        local i
 
        simple_if_init $h2
+       defer simple_if_fini $h2
+
        mtu_set $h2 9900
+       defer mtu_restore $h2
+
        for i in {0..2}; do
                vlan_create $h2 1$i v$h2 $(dip $i)/28
+               defer vlan_destroy $h2 1$i
        done
 }
 
-h2_destroy()
-{
-       local i
-
-       for i in {0..2}; do
-               vlan_destroy $h2 1$i
-       done
-       mtu_restore $h2
-       simple_if_fini $h2
-}
-
 ets_switch_create()
 {
        local i
 
        ip link set dev $swp1 up
+       defer ip link set dev $swp1 down
+
        mtu_set $swp1 9900
+       defer mtu_restore $swp1
 
        ip link set dev $swp2 up
+       defer ip link set dev $swp2 down
+
        mtu_set $swp2 9900
+       defer mtu_restore $swp2
 
        for i in {0..2}; do
                vlan_create $swp1 1$i
+               defer vlan_destroy $swp1 1$i
                ip link set dev $swp1.1$i type vlan ingress 0:0 1:1 2:2
 
                vlan_create $swp2 1$i
+               defer vlan_destroy $swp2 1$i
 
                ip link add dev br1$i type bridge
+               defer ip link del dev br1$i
+
                ip link set dev $swp1.1$i master br1$i
+               defer ip link set dev $swp1.1$i nomaster
+
                ip link set dev $swp2.1$i master br1$i
+               defer ip link set dev $swp2.1$i nomaster
 
                ip link set dev br1$i up
+               defer ip link set dev br1$i down
+
                ip link set dev $swp1.1$i up
+               defer ip link set dev $swp1.1$i down
+
                ip link set dev $swp2.1$i up
+               defer ip link set dev $swp2.1$i down
        done
-}
 
-ets_switch_destroy()
-{
-       local i
-
-       ets_delete_qdisc
-
-       for i in {0..2}; do
-               ip link del dev br1$i
-               vlan_destroy $swp2 1$i
-               vlan_destroy $swp1 1$i
-       done
-
-       mtu_restore $swp2
-       ip link set dev $swp2 down
-
-       mtu_restore $swp1
-       ip link set dev $swp1 down
+       defer ets_delete_qdisc
 }
 
 setup_prepare()
@@ -263,23 +252,13 @@ setup_prepare()
        hut=$h2
 
        vrf_prepare
+       defer vrf_cleanup
 
        h1_create
        h2_create
        switch_create
 }
 
-cleanup()
-{
-       pre_cleanup
-
-       switch_destroy
-       h2_destroy
-       h1_destroy
-
-       vrf_cleanup
-}
-
 ping_ipv4()
 {
        ping_test $h1.10 $(dip 0) " vlan 10"
diff --git a/tools/testing/selftests/net/forwarding/sch_ets_tests.sh 
b/tools/testing/selftests/net/forwarding/sch_ets_tests.sh
index f9d26a7911bb..08240d3e3c87 100644
--- a/tools/testing/selftests/net/forwarding/sch_ets_tests.sh
+++ b/tools/testing/selftests/net/forwarding/sch_ets_tests.sh
@@ -90,6 +90,7 @@ __ets_dwrr_test()
 
        for stream in ${streams[@]}; do
                ets_start_traffic $stream
+               defer stop_traffic $!
        done
 
        sleep 10
@@ -120,25 +121,24 @@ __ets_dwrr_test()
                                       ${d[0]} ${d[$i]}
                fi
        done
-
-       for stream in ${streams[@]}; do
-               stop_traffic
-       done
 }
 
 ets_dwrr_test_012()
 {
-       __ets_dwrr_test 0 1 2
+       in_defer_scope \
+               __ets_dwrr_test 0 1 2
 }
 
 ets_dwrr_test_01()
 {
-       __ets_dwrr_test 0 1
+       in_defer_scope \
+               __ets_dwrr_test 0 1
 }
 
 ets_dwrr_test_12()
 {
-       __ets_dwrr_test 1 2
+       in_defer_scope \
+               __ets_dwrr_test 1 2
 }
 
 ets_qdisc_setup()
-- 
2.45.0


Reply via email to