net/p9: load default transports
authorThomas Weißschuh <linux@weissschuh.net>
Wed, 3 Nov 2021 19:38:23 +0000 (20:38 +0100)
committerDominique Martinet <asmadeus@codewreck.org>
Mon, 10 Jan 2022 01:00:09 +0000 (10:00 +0900)
Now that all transports are split into modules it may happen that no
transports are registered when v9fs_get_default_trans() is called.
When that is the case try to load more transports from modules.

Link: https://lkml.kernel.org/r/20211103193823.111007-5-linux@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
[Dominique: constify v9fs_get_trans_by_name argument as per patch1v2]
Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
include/net/9p/transport.h
net/9p/mod.c

index 15a4e6a9dbf7d8f2f8665a7403b1836265e084c2..ff842f9630718bb8ee6885385775badaef700906 100644 (file)
@@ -54,7 +54,7 @@ struct p9_trans_module {
 
 void v9fs_register_trans(struct p9_trans_module *m);
 void v9fs_unregister_trans(struct p9_trans_module *m);
-struct p9_trans_module *v9fs_get_trans_by_name(char *s);
+struct p9_trans_module *v9fs_get_trans_by_name(const char *s);
 struct p9_trans_module *v9fs_get_default_trans(void);
 void v9fs_put_trans(struct p9_trans_module *m);
 
index 521e0925fbd6a339cfb7700c85f8385ffb49bd39..55576c1866fa68ffcb9f2f7579493f78d221ca30 100644 (file)
@@ -83,7 +83,7 @@ void v9fs_unregister_trans(struct p9_trans_module *m)
 }
 EXPORT_SYMBOL(v9fs_unregister_trans);
 
-static struct p9_trans_module *_p9_get_trans_by_name(char *s)
+static struct p9_trans_module *_p9_get_trans_by_name(const char *s)
 {
        struct p9_trans_module *t, *found = NULL;
 
@@ -106,7 +106,7 @@ static struct p9_trans_module *_p9_get_trans_by_name(char *s)
  * @s: string identifying transport
  *
  */
-struct p9_trans_module *v9fs_get_trans_by_name(char *s)
+struct p9_trans_module *v9fs_get_trans_by_name(const char *s)
 {
        struct p9_trans_module *found = NULL;
 
@@ -123,6 +123,10 @@ struct p9_trans_module *v9fs_get_trans_by_name(char *s)
 }
 EXPORT_SYMBOL(v9fs_get_trans_by_name);
 
+static const char * const v9fs_default_transports[] = {
+       "virtio", "tcp", "fd", "unix", "xen", "rdma",
+};
+
 /**
  * v9fs_get_default_trans - get the default transport
  *
@@ -131,6 +135,7 @@ EXPORT_SYMBOL(v9fs_get_trans_by_name);
 struct p9_trans_module *v9fs_get_default_trans(void)
 {
        struct p9_trans_module *t, *found = NULL;
+       int i;
 
        spin_lock(&v9fs_trans_lock);
 
@@ -148,6 +153,10 @@ struct p9_trans_module *v9fs_get_default_trans(void)
                        }
 
        spin_unlock(&v9fs_trans_lock);
+
+       for (i = 0; !found && i < ARRAY_SIZE(v9fs_default_transports); i++)
+               found = v9fs_get_trans_by_name(v9fs_default_transports[i]);
+
        return found;
 }
 EXPORT_SYMBOL(v9fs_get_default_trans);