Commit 075e8bd4 authored by Eric Sandeen's avatar Eric Sandeen Committed by Dominique Martinet
Browse files

9p: create a v9fs_context structure to hold parsed options



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: default avatarEric Sandeen <sandeen@redhat.com>
Message-ID: <20251010214222.1347785-4-sandeen@redhat.com>
Signed-off-by: default avatarDominique Martinet <asmadeus@codewreck.org>
parent c44393d8
Loading
Loading
Loading
Loading
+90 −0
Original line number Diff line number Diff line
@@ -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
+0 −32
Original line number Diff line number Diff line
@@ -21,38 +21,6 @@
#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