Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 788e69e5 authored by J. Bruce Fields's avatar J. Bruce Fields
Browse files

svcrpc: don't hold sv_lock over svc_xprt_put()



svc_xprt_put() can call tcp_close(), which can sleep, so we shouldn't be
holding this lock.

In fact, only the xpt_list removal and the sv_tmpcnt decrement should
need the sv_lock here.

Reported-by: default avatarMi Jinlong <mijinlong@cn.fujitsu.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
parent a5990ea1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -892,12 +892,12 @@ void svc_delete_xprt(struct svc_xprt *xprt)
	 */
	if (test_bit(XPT_TEMP, &xprt->xpt_flags))
		serv->sv_tmpcnt--;
	spin_unlock_bh(&serv->sv_lock);

	while ((dr = svc_deferred_dequeue(xprt)) != NULL)
		kfree(dr);

	svc_xprt_put(xprt);
	spin_unlock_bh(&serv->sv_lock);
}

void svc_close_xprt(struct svc_xprt *xprt)