]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
9p: create a v9fs_context structure to hold parsed options
authorEric Sandeen <sandeen@redhat.com>
Fri, 10 Oct 2025 21:36:18 +0000 (16:36 -0500)
committerDominique Martinet <asmadeus@codewreck.org>
Mon, 3 Nov 2025 07:49:53 +0000 (16:49 +0900)
This patch creates a new v9fs_context structure which includes
new p9_session_opts and p9_client_opts structures, as well as
re-using the existing p9_fd_opts and p9_rdma_opts to store options
during parsing. The new structure will be used in the next
commit to pass all parsed options to the appropriate transports.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Message-ID: <20251010214222.1347785-4-sandeen@redhat.com>
Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
include/net/9p/client.h
include/net/9p/transport.h

index 2d46f8017bd579f70791021e21e4fb532edc74b0..cc18443f7d5165442572bd61731d55d897156a24 100644 (file)
@@ -132,6 +132,96 @@ struct p9_client {
        char name[__NEW_UTS_LEN + 1];
 };
 
+/**
+ * struct p9_fd_opts - holds client options during parsing
+ * @msize: maximum data size negotiated by protocol
+ * @prot-Oversion: 9P protocol version to use
+ * @trans_mod: module API instantiated with this client
+ *
+ * These parsed options get transferred into client in
+ * apply_client_options()
+ */
+struct p9_client_opts {
+       unsigned int msize;
+       unsigned char proto_version;
+       struct p9_trans_module *trans_mod;
+};
+
+/**
+ * struct p9_fd_opts - per-transport options for fd transport
+ * @rfd: file descriptor for reading (trans=fd)
+ * @wfd: file descriptor for writing (trans=fd)
+ * @port: port to connect to (trans=tcp)
+ * @privport: port is privileged
+ */
+struct p9_fd_opts {
+       int rfd;
+       int wfd;
+       u16 port;
+       bool privport;
+};
+
+/**
+ * struct p9_rdma_opts - Collection of mount options for rdma transport
+ * @port: port of connection
+ * @privport: Whether a privileged port may be used
+ * @sq_depth: The requested depth of the SQ. This really doesn't need
+ * to be any deeper than the number of threads used in the client
+ * @rq_depth: The depth of the RQ. Should be greater than or equal to SQ depth
+ * @timeout: Time to wait in msecs for CM events
+ */
+struct p9_rdma_opts {
+       short port;
+       bool privport;
+       int sq_depth;
+       int rq_depth;
+       long timeout;
+};
+
+/**
+ * struct p9_session_opts - holds parsed options for v9fs_session_info
+ * @flags: session options of type &p9_session_flags
+ * @nodev: set to 1 to disable device mapping
+ * @debug: debug level
+ * @afid: authentication handle
+ * @cache: cache mode of type &p9_cache_bits
+ * @cachetag: the tag of the cache associated with this session
+ * @uname: string user name to mount hierarchy as
+ * @aname: mount specifier for remote hierarchy
+ * @dfltuid: default numeric userid to mount hierarchy as
+ * @dfltgid: default numeric groupid to mount hierarchy as
+ * @uid: if %V9FS_ACCESS_SINGLE, the numeric uid which mounted the hierarchy
+ * @session_lock_timeout: retry interval for blocking locks
+ *
+ * This strucure holds options which are parsed and will be transferred
+ * to the v9fs_session_info structure when mounted, and therefore largely
+ * duplicates struct v9fs_session_info.
+ */
+struct p9_session_opts {
+       unsigned int flags;
+       unsigned char nodev;
+       unsigned short debug;
+       unsigned int afid;
+       unsigned int cache;
+#ifdef CONFIG_9P_FSCACHE
+       char *cachetag;
+#endif
+       char *uname;
+       char *aname;
+       kuid_t dfltuid;
+       kgid_t dfltgid;
+       kuid_t uid;
+       long session_lock_timeout;
+};
+
+/* Used by mount API to store parsed mount options */
+struct v9fs_context {
+       struct p9_client_opts   client_opts;
+       struct p9_fd_opts       fd_opts;
+       struct p9_rdma_opts     rdma_opts;
+       struct p9_session_opts  session_opts;
+};
+
 /**
  * struct p9_fid - file system entity handle
  * @clnt: back pointer to instantiating &p9_client
index db6ad369a171f9fae3d7d8917e337670d293736e..898a432a806313649b770666ca34d102b753d13b 100644 (file)
 #define P9_RDMA_RQ_DEPTH       32
 #define P9_RDMA_TIMEOUT                30000           /* 30 seconds */
 
-/**
- * struct p9_fd_opts - per-transport options for fd transport
- * @rfd: file descriptor for reading (trans=fd)
- * @wfd: file descriptor for writing (trans=fd)
- * @port: port to connect to (trans=tcp)
- * @privport: port is privileged
- */
-
-struct p9_fd_opts {
-       int rfd;
-       int wfd;
-       u16 port;
-       bool privport;
-};
-
-/**
- * struct p9_rdma_opts - Collection of mount options for rdma transport
- * @port: port of connection
- * @privport: Whether a privileged port may be used
- * @sq_depth: The requested depth of the SQ. This really doesn't need
- * to be any deeper than the number of threads used in the client
- * @rq_depth: The depth of the RQ. Should be greater than or equal to SQ depth
- * @timeout: Time to wait in msecs for CM events
- */
-struct p9_rdma_opts {
-       short port;
-       bool privport;
-       int sq_depth;
-       int rq_depth;
-       long timeout;
-};
-
 /**
  * struct p9_trans_module - transport module interface
  * @list: used to maintain a list of currently available transports