Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e26d997

Browse files
Trond Myklebustamschuma-ntap
authored andcommitted
SUNRPC: Clean up scheduling of autoclose
Consolidate duplicated code in xprt_force_disconnect() and xprt_conditional_disconnect(). Signed-off-by: Trond Myklebust <[email protected]> Signed-off-by: Anna Schumaker <[email protected]>
1 parent c2dc3e5 commit e26d997

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

net/sunrpc/xprt.c

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,20 @@ void xprt_disconnect_done(struct rpc_xprt *xprt)
760760
}
761761
EXPORT_SYMBOL_GPL(xprt_disconnect_done);
762762

763+
/**
764+
* xprt_schedule_autoclose_locked - Try to schedule an autoclose RPC call
765+
* @xprt: transport to disconnect
766+
*/
767+
static void xprt_schedule_autoclose_locked(struct rpc_xprt *xprt)
768+
{
769+
set_bit(XPRT_CLOSE_WAIT, &xprt->state);
770+
if (test_and_set_bit(XPRT_LOCKED, &xprt->state) == 0)
771+
queue_work(xprtiod_workqueue, &xprt->task_cleanup);
772+
else if (xprt->snd_task && !test_bit(XPRT_SND_IS_COOKIE, &xprt->state))
773+
rpc_wake_up_queued_task_set_status(&xprt->pending,
774+
xprt->snd_task, -ENOTCONN);
775+
}
776+
763777
/**
764778
* xprt_force_disconnect - force a transport to disconnect
765779
* @xprt: transport to disconnect
@@ -771,13 +785,7 @@ void xprt_force_disconnect(struct rpc_xprt *xprt)
771785

772786
/* Don't race with the test_bit() in xprt_clear_locked() */
773787
spin_lock(&xprt->transport_lock);
774-
set_bit(XPRT_CLOSE_WAIT, &xprt->state);
775-
/* Try to schedule an autoclose RPC call */
776-
if (test_and_set_bit(XPRT_LOCKED, &xprt->state) == 0)
777-
queue_work(xprtiod_workqueue, &xprt->task_cleanup);
778-
else if (xprt->snd_task && !test_bit(XPRT_SND_IS_COOKIE, &xprt->state))
779-
rpc_wake_up_queued_task_set_status(&xprt->pending,
780-
xprt->snd_task, -ENOTCONN);
788+
xprt_schedule_autoclose_locked(xprt);
781789
spin_unlock(&xprt->transport_lock);
782790
}
783791
EXPORT_SYMBOL_GPL(xprt_force_disconnect);
@@ -817,11 +825,7 @@ void xprt_conditional_disconnect(struct rpc_xprt *xprt, unsigned int cookie)
817825
goto out;
818826
if (test_bit(XPRT_CLOSING, &xprt->state))
819827
goto out;
820-
set_bit(XPRT_CLOSE_WAIT, &xprt->state);
821-
/* Try to schedule an autoclose RPC call */
822-
if (test_and_set_bit(XPRT_LOCKED, &xprt->state) == 0)
823-
queue_work(xprtiod_workqueue, &xprt->task_cleanup);
824-
xprt_wake_pending_tasks(xprt, -EAGAIN);
828+
xprt_schedule_autoclose_locked(xprt);
825829
out:
826830
spin_unlock(&xprt->transport_lock);
827831
}

0 commit comments

Comments
 (0)