@@ -2554,57 +2554,39 @@ void rpc_show_tasks(struct net *net)
2554
2554
#endif
2555
2555
2556
2556
#if IS_ENABLED (CONFIG_SUNRPC_SWAP )
2557
+ static int
2558
+ rpc_clnt_swap_activate_callback (struct rpc_clnt * clnt ,
2559
+ struct rpc_xprt * xprt ,
2560
+ void * dummy )
2561
+ {
2562
+ return xprt_enable_swap (xprt );
2563
+ }
2564
+
2557
2565
int
2558
2566
rpc_clnt_swap_activate (struct rpc_clnt * clnt )
2559
2567
{
2560
- int ret = 0 ;
2561
- struct rpc_xprt * xprt ;
2562
-
2563
- if (atomic_inc_return (& clnt -> cl_swapper ) == 1 ) {
2564
- retry :
2565
- rcu_read_lock ();
2566
- xprt = xprt_get (rcu_dereference (clnt -> cl_xprt ));
2567
- rcu_read_unlock ();
2568
- if (!xprt ) {
2569
- /*
2570
- * If we didn't get a reference, then we likely are
2571
- * racing with a migration event. Wait for a grace
2572
- * period and try again.
2573
- */
2574
- synchronize_rcu ();
2575
- goto retry ;
2576
- }
2577
-
2578
- ret = xprt_enable_swap (xprt );
2579
- xprt_put (xprt );
2580
- }
2581
- return ret ;
2568
+ if (atomic_inc_return (& clnt -> cl_swapper ) == 1 )
2569
+ return rpc_clnt_iterate_for_each_xprt (clnt ,
2570
+ rpc_clnt_swap_activate_callback , NULL );
2571
+ return 0 ;
2582
2572
}
2583
2573
EXPORT_SYMBOL_GPL (rpc_clnt_swap_activate );
2584
2574
2575
+ static int
2576
+ rpc_clnt_swap_deactivate_callback (struct rpc_clnt * clnt ,
2577
+ struct rpc_xprt * xprt ,
2578
+ void * dummy )
2579
+ {
2580
+ xprt_disable_swap (xprt );
2581
+ return 0 ;
2582
+ }
2583
+
2585
2584
void
2586
2585
rpc_clnt_swap_deactivate (struct rpc_clnt * clnt )
2587
2586
{
2588
- struct rpc_xprt * xprt ;
2589
-
2590
- if (atomic_dec_if_positive (& clnt -> cl_swapper ) == 0 ) {
2591
- retry :
2592
- rcu_read_lock ();
2593
- xprt = xprt_get (rcu_dereference (clnt -> cl_xprt ));
2594
- rcu_read_unlock ();
2595
- if (!xprt ) {
2596
- /*
2597
- * If we didn't get a reference, then we likely are
2598
- * racing with a migration event. Wait for a grace
2599
- * period and try again.
2600
- */
2601
- synchronize_rcu ();
2602
- goto retry ;
2603
- }
2604
-
2605
- xprt_disable_swap (xprt );
2606
- xprt_put (xprt );
2607
- }
2587
+ if (atomic_dec_if_positive (& clnt -> cl_swapper ) == 0 )
2588
+ rpc_clnt_iterate_for_each_xprt (clnt ,
2589
+ rpc_clnt_swap_deactivate_callback , NULL );
2608
2590
}
2609
2591
EXPORT_SYMBOL_GPL (rpc_clnt_swap_deactivate );
2610
2592
#endif /* CONFIG_SUNRPC_SWAP */
0 commit comments