summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2020-11-10 17:41:21 +0300
committerTrond Myklebust <trond.myklebust@hammerspace.com>2020-12-02 22:05:52 +0300
commit1fc5f13186440973e1aa1d85aa263326756af431 (patch)
treebeb742caba6957bf90e414a551ff19387b1e95d6
parent9bccd264611b5345d85138dc7fd55bdeb9e6942e (diff)
downloadlinux-1fc5f13186440973e1aa1d85aa263326756af431.tar.xz
SUNRPC: Add a helper to return the transport identifier given a netid
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
-rw-r--r--include/linux/sunrpc/xprt.h1
-rw-r--r--net/sunrpc/xprt.c25
2 files changed, 22 insertions, 4 deletions
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
index 3ac5037d1c3d..f7b75c72f80e 100644
--- a/include/linux/sunrpc/xprt.h
+++ b/include/linux/sunrpc/xprt.h
@@ -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);
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
index bf490d0c98c6..23452f57d369 100644
--- a/net/sunrpc/xprt.c
+++ b/net/sunrpc/xprt.c
@@ -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);