mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 04:33:26 +02:00
svcrdma: Add a "deferred close" helper
Refactor a bit of commonly used logic so that every site that wants a close deferred to an nfsd thread does all the right things (set_bit(XPT_CLOSE) then enqueue). Also, once XPT_CLOSE is set on a transport, it is never cleared. If XPT_CLOSE is already set, then the close is already being handled and the enqueue can be skipped. Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
@@ -139,6 +139,20 @@ int svc_print_xprts(char *buf, int maxlen)
|
||||
return len;
|
||||
}
|
||||
|
||||
/**
|
||||
* svc_xprt_deferred_close - Close a transport
|
||||
* @xprt: transport instance
|
||||
*
|
||||
* Used in contexts that need to defer the work of shutting down
|
||||
* the transport to an nfsd thread.
|
||||
*/
|
||||
void svc_xprt_deferred_close(struct svc_xprt *xprt)
|
||||
{
|
||||
if (!test_and_set_bit(XPT_CLOSE, &xprt->xpt_flags))
|
||||
svc_xprt_enqueue(xprt);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(svc_xprt_deferred_close);
|
||||
|
||||
static void svc_xprt_free(struct kref *kref)
|
||||
{
|
||||
struct svc_xprt *xprt =
|
||||
|
Reference in New Issue
Block a user