brintos

brintos / linux-shallow public Read only

0
0
Text · 7.9 KiB · 890d6d9 Raw
325 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 *   Copyright (C) 2020, Microsoft Corporation.4 *5 *   Author(s): Steve French <stfrench@microsoft.com>6 *              David Howells <dhowells@redhat.com>7 */8 9#ifndef _FS_CONTEXT_H10#define _FS_CONTEXT_H11 12#include "cifsglob.h"13#include <linux/parser.h>14#include <linux/fs_parser.h>15 16/* Log errors in fs_context (new mount api) but also in dmesg (old style) */17#define cifs_errorf(fc, fmt, ...)			\18	do {						\19		errorf(fc, fmt, ## __VA_ARGS__);	\20		cifs_dbg(VFS, fmt, ## __VA_ARGS__);	\21	} while (0)22 23enum smb_version {24	Smb_1 = 1,25	Smb_20,26	Smb_21,27	Smb_30,28	Smb_302,29	Smb_311,30	Smb_3any,31	Smb_default,32	Smb_version_err33};34 35enum {36	Opt_cache_loose,37	Opt_cache_strict,38	Opt_cache_none,39	Opt_cache_ro,40	Opt_cache_rw,41	Opt_cache_err42};43 44enum cifs_reparse_parm {45	Opt_reparse_default,46	Opt_reparse_nfs,47	Opt_reparse_wsl,48	Opt_reparse_err49};50 51enum cifs_sec_param {52	Opt_sec_krb5,53	Opt_sec_krb5i,54	Opt_sec_krb5p,55	Opt_sec_ntlmsspi,56	Opt_sec_ntlmssp,57	Opt_sec_ntlmv2,58	Opt_sec_ntlmv2i,59	Opt_sec_none,60 61	Opt_sec_err62};63 64enum cifs_param {65	/* Mount options that take no arguments */66	Opt_user_xattr,67	Opt_forceuid,68	Opt_forcegid,69	Opt_noblocksend,70	Opt_noautotune,71	Opt_nolease,72	Opt_nosparse,73	Opt_hard,74	Opt_soft,75	Opt_perm,76	Opt_nodelete,77	Opt_mapposix,78	Opt_mapchars,79	Opt_nomapchars,80	Opt_sfu,81	Opt_nodfs,82	Opt_posixpaths,83	Opt_unix,84	Opt_nocase,85	Opt_brl,86	Opt_handlecache,87	Opt_forcemandatorylock,88	Opt_setuidfromacl,89	Opt_setuids,90	Opt_dynperm,91	Opt_intr,92	Opt_strictsync,93	Opt_serverino,94	Opt_rwpidforward,95	Opt_cifsacl,96	Opt_acl,97	Opt_locallease,98	Opt_sign,99	Opt_ignore_signature,100	Opt_seal,101	Opt_noac,102	Opt_fsc,103	Opt_mfsymlinks,104	Opt_multiuser,105	Opt_sloppy,106	Opt_nosharesock,107	Opt_persistent,108	Opt_resilient,109	Opt_tcp_nodelay,110	Opt_domainauto,111	Opt_rdma,112	Opt_modesid,113	Opt_rootfs,114	Opt_multichannel,115	Opt_compress,116	Opt_witness,117 118	/* Mount options which take numeric value */119	Opt_backupuid,120	Opt_backupgid,121	Opt_uid,122	Opt_cruid,123	Opt_gid,124	Opt_port,125	Opt_file_mode,126	Opt_dirmode,127	Opt_min_enc_offload,128	Opt_retrans,129	Opt_blocksize,130	Opt_rasize,131	Opt_rsize,132	Opt_wsize,133	Opt_actimeo,134	Opt_acdirmax,135	Opt_acregmax,136	Opt_closetimeo,137	Opt_echo_interval,138	Opt_max_credits,139	Opt_max_cached_dirs,140	Opt_snapshot,141	Opt_max_channels,142	Opt_handletimeout,143 144	/* Mount options which take string value */145	Opt_source,146	Opt_user,147	Opt_pass,148	Opt_pass2,149	Opt_ip,150	Opt_domain,151	Opt_srcaddr,152	Opt_iocharset,153	Opt_netbiosname,154	Opt_servern,155	Opt_ver,156	Opt_vers,157	Opt_sec,158	Opt_cache,159	Opt_reparse,160 161	/* Mount options to be ignored */162	Opt_ignore,163 164	Opt_err165};166 167struct smb3_fs_context {168	bool forceuid_specified;169	bool forcegid_specified;170	bool uid_specified;171	bool cruid_specified;172	bool gid_specified;173	bool sloppy;174	bool got_ip;175	bool got_version;176	bool got_rsize;177	bool got_wsize;178	bool got_bsize;179	unsigned short port;180 181	char *username;182	char *password;183	char *password2;184	char *domainname;185	char *source;186	char *server_hostname;187	char *UNC;188	char *nodename;189	char workstation_name[CIFS_MAX_WORKSTATION_LEN];190	char *iocharset;  /* local code page for mapping to and from Unicode */191	char source_rfc1001_name[RFC1001_NAME_LEN_WITH_NULL]; /* clnt nb name */192	char target_rfc1001_name[RFC1001_NAME_LEN_WITH_NULL]; /* srvr nb name */193	kuid_t cred_uid;194	kuid_t linux_uid;195	kgid_t linux_gid;196	kuid_t backupuid;197	kgid_t backupgid;198	umode_t file_mode;199	umode_t dir_mode;200	enum securityEnum sectype; /* sectype requested via mnt opts */201	bool sign; /* was signing requested via mnt opts? */202	bool ignore_signature:1;203	bool retry:1;204	bool intr:1;205	bool setuids:1;206	bool setuidfromacl:1;207	bool override_uid:1;208	bool override_gid:1;209	bool dynperm:1;210	bool noperm:1;211	bool nodelete:1;212	bool mode_ace:1;213	bool no_psx_acl:1; /* set if posix acl support should be disabled */214	bool cifs_acl:1;215	bool backupuid_specified; /* mount option  backupuid  is specified */216	bool backupgid_specified; /* mount option  backupgid  is specified */217	bool no_xattr:1;   /* set if xattr (EA) support should be disabled*/218	bool server_ino:1; /* use inode numbers from server ie UniqueId */219	bool direct_io:1;220	bool strict_io:1; /* strict cache behavior */221	bool cache_ro:1;222	bool cache_rw:1;223	bool remap:1;      /* set to remap seven reserved chars in filenames */224	bool sfu_remap:1;  /* remap seven reserved chars ala SFU */225	bool posix_paths:1; /* unset to not ask for posix pathnames. */226	bool no_linux_ext:1;227	bool linux_ext:1;228	bool sfu_emul:1;229	bool nullauth:1;   /* attempt to authenticate with null user */230	bool nocase:1;     /* request case insensitive filenames */231	bool nobrl:1;      /* disable sending byte range locks to srv */232	bool nohandlecache:1; /* disable caching dir handles if srvr probs */233	bool mand_lock:1;  /* send mandatory not posix byte range lock reqs */234	bool seal:1;       /* request transport encryption on share */235	bool nodfs:1;      /* Do not request DFS, even if available */236	bool local_lease:1; /* check leases only on local system, not remote */237	bool noblocksnd:1;238	bool noautotune:1;239	bool nostrictsync:1; /* do not force expensive SMBflush on every sync */240	bool no_lease:1;     /* disable requesting leases */241	bool no_sparse:1;    /* do not attempt to set files sparse */242	bool fsc:1;	/* enable fscache */243	bool mfsymlinks:1; /* use Minshall+French Symlinks */244	bool multiuser:1;245	bool rwpidforward:1; /* pid forward for read/write operations */246	bool nosharesock:1;247	bool persistent:1;248	bool nopersistent:1;249	bool resilient:1; /* noresilient not required since not fored for CA */250	bool domainauto:1;251	bool rdma:1;252	bool multichannel:1;253	bool use_client_guid:1;254	/* reuse existing guid for multichannel */255	u8 client_guid[SMB2_CLIENT_GUID_SIZE];256	unsigned int bsize;257	unsigned int rasize;258	unsigned int rsize;259	unsigned int wsize;260	unsigned int min_offload;261	unsigned int retrans;262	bool sockopt_tcp_nodelay:1;263	/* attribute cache timeout for files and directories in jiffies */264	unsigned long acregmax;265	unsigned long acdirmax;266	/* timeout for deferred close of files in jiffies */267	unsigned long closetimeo;268	struct smb_version_operations *ops;269	struct smb_version_values *vals;270	char *prepath;271	struct sockaddr_storage dstaddr; /* destination address */272	struct sockaddr_storage srcaddr; /* allow binding to a local IP */273	struct nls_table *local_nls; /* This is a copy of the pointer in cifs_sb */274	unsigned int echo_interval; /* echo interval in secs */275	__u64 snapshot_time; /* needed for timewarp tokens */276	__u32 handle_timeout; /* persistent and durable handle timeout in ms */277	unsigned int max_credits; /* smb3 max_credits 10 < credits < 60000 */278	unsigned int max_channels;279	unsigned int max_cached_dirs;280	bool compress; /* enable SMB2 messages (READ/WRITE) de/compression */281	bool rootfs:1; /* if it's a SMB root file system */282	bool witness:1; /* use witness protocol */283	char *leaf_fullpath;284	struct cifs_ses *dfs_root_ses;285	bool dfs_automount:1; /* set for dfs automount only */286	enum cifs_reparse_type reparse_type;287	bool dfs_conn:1; /* set for dfs mounts */288};289 290extern const struct fs_parameter_spec smb3_fs_parameters[];291 292extern int smb3_init_fs_context(struct fs_context *fc);293extern void smb3_cleanup_fs_context_contents(struct smb3_fs_context *ctx);294extern void smb3_cleanup_fs_context(struct smb3_fs_context *ctx);295 296static inline struct smb3_fs_context *smb3_fc2context(const struct fs_context *fc)297{298	return fc->fs_private;299}300 301extern int smb3_fs_context_dup(struct smb3_fs_context *new_ctx, struct smb3_fs_context *ctx);302extern void smb3_update_mnt_flags(struct cifs_sb_info *cifs_sb);303 304/*305 * max deferred close timeout (jiffies) - 2^30306 */307#define SMB3_MAX_DCLOSETIMEO (1 << 30)308#define SMB3_DEF_DCLOSETIMEO (1 * HZ) /* even 1 sec enough to help eg open/write/close/open/read */309#define MAX_CACHED_FIDS 16310extern char *cifs_sanitize_prepath(char *prepath, gfp_t gfp);311 312extern struct mutex cifs_mount_mutex;313 314static inline void cifs_mount_lock(void)315{316	mutex_lock(&cifs_mount_mutex);317}318 319static inline void cifs_mount_unlock(void)320{321	mutex_unlock(&cifs_mount_mutex);322}323 324#endif325