On Fri, 2020-06-05 at 10:10 +0800, Zhengbin (OSKernel) wrote:
> The complete process is like this:
>
> xprt_destroy
>wait_on_bit_lock(&xprt->state, XPRT_LOCKED,
> TASK_UNINTERRUPTIBLE)
> -->getlock
>del_timer_sync(&xprt->timer) -->del xprt->timer
>INIT_WORK(&xprt->task_cleanup, xpr
The issue trigger like this:
mount_fs
nfs_try_mount
nfs_create_server
nfs_init_server
nfs_init_client
nfs_create_rpc_client
rpc_create
xprt_create_transport
xs_setup_udp
xs_setup_xprt
INIT_DELAYED_WORK(xs_udp_setup_socket)//timer
The complete process is like this:
xprt_destroy
wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_UNINTERRUPTIBLE)
-->getlock
del_timer_sync(&xprt->timer) -->del xprt->timer
INIT_WORK(&xprt->task_cleanup, xprt_destroy_cb)
xprt_destroy_cb
xs_destroy(xprt->ops->destroy)
cancel_dela
On Thu, 2020-06-04 at 22:49 +0800, Zheng Bin wrote:
> If RPC use udp as it's transport protocol, transport->connect_worker
> will call xs_udp_setup_socket.
> xs_udp_setup_socket
> sock = xs_create_sock
> if (IS_ERR(sock))
> goto out;
> out:
> xprt_unlock_connect
> xprt_schedule_
If RPC use udp as it's transport protocol, transport->connect_worker
will call xs_udp_setup_socket.
xs_udp_setup_socket
sock = xs_create_sock
if (IS_ERR(sock))
goto out;
out:
xprt_unlock_connect
xprt_schedule_autodisconnect
mod_timer
internal_add_timer -->inse