SUNRPC: Export svc_xprt_received()
authorChuck Lever <chuck.lever@oracle.com>
Fri, 29 Jan 2021 18:04:04 +0000 (13:04 -0500)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 22 Mar 2021 17:22:13 +0000 (13:22 -0400)
Prepare svc_xprt_received() to be called from transport code instead
of from generic RPC server code.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
include/linux/sunrpc/svc_xprt.h
include/trace/events/sunrpc.h
net/sunrpc/svc_xprt.c

index 34dacad..571f605 100644 (file)
@@ -130,6 +130,7 @@ void        svc_xprt_init(struct net *, struct svc_xprt_class *, struct svc_xprt *,
 int    svc_create_xprt(struct svc_serv *, const char *, struct net *,
                        const int, const unsigned short, int,
                        const struct cred *);
+void   svc_xprt_received(struct svc_xprt *xprt);
 void   svc_xprt_do_enqueue(struct svc_xprt *xprt);
 void   svc_xprt_enqueue(struct svc_xprt *xprt);
 void   svc_xprt_put(struct svc_xprt *xprt);
index 036eb1f..bda16e9 100644 (file)
@@ -1781,6 +1781,7 @@ DECLARE_EVENT_CLASS(svc_xprt_event,
                        ), \
                        TP_ARGS(xprt))
 
+DEFINE_SVC_XPRT_EVENT(received);
 DEFINE_SVC_XPRT_EVENT(no_write_space);
 DEFINE_SVC_XPRT_EVENT(close);
 DEFINE_SVC_XPRT_EVENT(detach);
index b134fc5..9d1374e 100644 (file)
@@ -247,21 +247,25 @@ static struct svc_xprt *__svc_xpo_create(struct svc_xprt_class *xcl,
        return xprt;
 }
 
-/*
- * svc_xprt_received conditionally queues the transport for processing
- * by another thread. The caller must hold the XPT_BUSY bit and must
+/**
+ * svc_xprt_received - start next receiver thread
+ * @xprt: controlling transport
+ *
+ * The caller must hold the XPT_BUSY bit and must
  * not thereafter touch transport data.
  *
  * Note: XPT_DATA only gets cleared when a read-attempt finds no (or
  * insufficient) data.
  */
-static void svc_xprt_received(struct svc_xprt *xprt)
+void svc_xprt_received(struct svc_xprt *xprt)
 {
        if (!test_bit(XPT_BUSY, &xprt->xpt_flags)) {
                WARN_ONCE(1, "xprt=0x%p already busy!", xprt);
                return;
        }
 
+       trace_svc_xprt_received(xprt);
+
        /* As soon as we clear busy, the xprt could be closed and
         * 'put', so we need a reference to call svc_enqueue_xprt with:
         */
@@ -271,6 +275,7 @@ static void svc_xprt_received(struct svc_xprt *xprt)
        xprt->xpt_server->sv_ops->svo_enqueue_xprt(xprt);
        svc_xprt_put(xprt);
 }
+EXPORT_SYMBOL_GPL(svc_xprt_received);
 
 void svc_add_new_perm_xprt(struct svc_serv *serv, struct svc_xprt *new)
 {