SUNRPC: Add a helper to return the transport identifier given a netid
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Tue, 10 Nov 2020 14:41:21 +0000 (09:41 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 2 Dec 2020 19:05:52 +0000 (14:05 -0500)
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
include/linux/sunrpc/xprt.h
net/sunrpc/xprt.c

index 3ac5037..f7b75c7 100644 (file)
@@ -386,6 +386,7 @@ xprt_disable_swap(struct rpc_xprt *xprt)
 int                    xprt_register_transport(struct xprt_class *type);
 int                    xprt_unregister_transport(struct xprt_class *type);
 int                    xprt_load_transport(const char *);
+int                    xprt_find_transport_ident(const char *);
 void                   xprt_wait_for_reply_request_def(struct rpc_task *task);
 void                   xprt_wait_for_reply_request_rtt(struct rpc_task *task);
 void                   xprt_wake_pending_tasks(struct rpc_xprt *xprt, int status);
index bf490d0..23452f5 100644 (file)
@@ -219,22 +219,39 @@ xprt_class_find_by_netid(const char *netid)
 }
 
 /**
- * xprt_load_transport - load a transport implementation
+ * xprt_find_transport_ident - convert a netid into a transport identifier
  * @netid: transport to load
  *
  * Returns:
- * 0:          transport successfully loaded
+ * > 0:                transport identifier
  * -ENOENT:    transport module not available
  */
-int xprt_load_transport(const char *netid)
+int xprt_find_transport_ident(const char *netid)
 {
        const struct xprt_class *t;
+       int ret;
 
        t = xprt_class_find_by_netid(netid);
        if (!t)
                return -ENOENT;
+       ret = t->ident;
        xprt_class_release(t);
-       return 0;
+       return ret;
+}
+EXPORT_SYMBOL_GPL(xprt_find_transport_ident);
+
+/**
+ * xprt_load_transport - load a transport implementation
+ * @netid: transport to load
+ *
+ * Returns:
+ * 0:          transport successfully loaded
+ * -ENOENT:    transport module not available
+ */
+int xprt_load_transport(const char *netid)
+{
+       int ret = xprt_find_transport_ident(netid);
+       return ret < 0 ? ret : 0;
 }
 EXPORT_SYMBOL_GPL(xprt_load_transport);