]> git.ipfire.org Git - thirdparty/linux.git/blame - fs/smb/client/cifsfs.c
mm, slab: remove last vestiges of SLAB_MEM_SPREAD
[thirdparty/linux.git] / fs / smb / client / cifsfs.c
CommitLineData
929be906 1// SPDX-License-Identifier: LGPL-2.1
1da177e4 2/*
1da177e4 3 *
2b280fab 4 * Copyright (C) International Business Machines Corp., 2002,2008
1da177e4
LT
5 * Author(s): Steve French (sfrench@us.ibm.com)
6 *
7 * Common Internet FileSystem (CIFS) client
8 *
1da177e4
LT
9 */
10
11/* Note that BB means BUGBUG (ie something to fix eventually) */
12
13#include <linux/module.h>
14#include <linux/fs.h>
5970e15d 15#include <linux/filelock.h>
1da177e4
LT
16#include <linux/mount.h>
17#include <linux/slab.h>
18#include <linux/init.h>
19#include <linux/list.h>
20#include <linux/seq_file.h>
21#include <linux/vfs.h>
22#include <linux/mempool.h>
6ab16d24 23#include <linux/delay.h>
45af7a0f 24#include <linux/kthread.h>
7dfb7103 25#include <linux/freezer.h>
fec11dd9 26#include <linux/namei.h>
b8c32dbb 27#include <linux/random.h>
705bcfcb 28#include <linux/splice.h>
c6e970a0 29#include <linux/uuid.h>
a9ae008f 30#include <linux/xattr.h>
dea29037 31#include <uapi/linux/magic.h>
3eb9a889 32#include <net/ipv6.h>
1da177e4
LT
33#include "cifsfs.h"
34#include "cifspdu.h"
35#define DECLARE_GLOBALS_HERE
36#include "cifsglob.h"
37#include "cifsproto.h"
38#include "cifs_debug.h"
39#include "cifs_fs_sb.h"
40#include <linux/mm.h>
84a15b93 41#include <linux/key-type.h>
e545937a 42#include "cifs_spnego.h"
f579cf3c 43#include "fscache.h"
1c780228
PA
44#ifdef CONFIG_CIFS_DFS_UPCALL
45#include "dfs_cache.h"
46#endif
06f08dab
SC
47#ifdef CONFIG_CIFS_SWN_UPCALL
48#include "netlink.h"
49#endif
3fa1c6d1 50#include "fs_context.h"
05b98fd2 51#include "cached_dir.h"
1da177e4 52
cb7a69e6
DD
53/*
54 * DOS dates from 1980/1/1 through 2107/12/31
55 * Protocol specifications indicate the range should be to 119, which
56 * limits maximum year to 2099. But this range has not been checked.
57 */
58#define SMB_DATE_MAX (127<<9 | 12<<5 | 31)
59#define SMB_DATE_MIN (0<<9 | 1<<5 | 1)
60#define SMB_TIME_MAX (23<<11 | 59<<5 | 29)
61
1da177e4 62int cifsFYI = 0;
1404297e 63bool traceSMB;
e7504734 64bool enable_oplocks = true;
1404297e
KC
65bool linuxExtEnabled = true;
66bool lookupCacheEnabled = true;
f92a720e 67bool disable_legacy_dialects; /* false by default */
fee742b5 68bool enable_gcm_256 = true;
fbfd0b46 69bool require_gcm_256; /* false by default */
53d31a3f 70bool enable_negotiate_signing; /* false by default */
04912d6a 71unsigned int global_secflags = CIFSSEC_DEF;
3979877e 72/* unsigned int ntlmv2_support = 0; */
1da177e4 73unsigned int sign_CIFS_PDUs = 1;
1bfa25ee
SF
74
75/*
76 * Global transaction id (XID) information
77 */
78unsigned int GlobalCurrentXid; /* protected by GlobalMid_Sem */
79unsigned int GlobalTotalActiveXid; /* prot by GlobalMid_Sem */
80unsigned int GlobalMaxActiveXid; /* prot by GlobalMid_Sem */
81spinlock_t GlobalMid_Lock; /* protects above & list operations on midQ entries */
82
83/*
84 * Global counters, updated atomically
85 */
86atomic_t sesInfoAllocCount;
87atomic_t tconInfoAllocCount;
88atomic_t tcpSesNextId;
89atomic_t tcpSesAllocCount;
90atomic_t tcpSesReconnectCount;
91atomic_t tconInfoReconnectCount;
92
c2c17ddb
SF
93atomic_t mid_count;
94atomic_t buf_alloc_count;
95atomic_t small_buf_alloc_count;
96#ifdef CONFIG_CIFS_STATS2
97atomic_t total_buf_alloc_count;
98atomic_t total_small_buf_alloc_count;
99#endif/* STATS2 */
89e42f49
SF
100struct list_head cifs_tcp_ses_list;
101spinlock_t cifs_tcp_ses_lock;
ee9b6d61 102static const struct super_operations cifs_super_ops;
1da177e4 103unsigned int CIFSMaxBufSize = CIFS_MAX_MSGSIZE;
cb978ac8 104module_param(CIFSMaxBufSize, uint, 0444);
11911b95
SF
105MODULE_PARM_DESC(CIFSMaxBufSize, "Network buffer size (not including header) "
106 "for CIFS requests. "
63135e08 107 "Default: 16384 Range: 8192 to 130048");
1da177e4 108unsigned int cifs_min_rcv = CIFS_MIN_RCV_POOL;
cb978ac8 109module_param(cifs_min_rcv, uint, 0444);
63135e08
SF
110MODULE_PARM_DESC(cifs_min_rcv, "Network buffers in pool. Default: 4 Range: "
111 "1 to 64");
1da177e4 112unsigned int cifs_min_small = 30;
cb978ac8 113module_param(cifs_min_small, uint, 0444);
63135e08
SF
114MODULE_PARM_DESC(cifs_min_small, "Small network buffers in pool. Default: 30 "
115 "Range: 2 to 256");
1da177e4 116unsigned int cifs_max_pending = CIFS_MAX_REQ;
60654ce0 117module_param(cifs_max_pending, uint, 0444);
11911b95
SF
118MODULE_PARM_DESC(cifs_max_pending, "Simultaneous requests to server for "
119 "CIFS/SMB1 dialect (N/A for SMB3) "
10b9b98e 120 "Default: 32767 Range: 2 to 32767.");
238b351d
SF
121unsigned int dir_cache_timeout = 30;
122module_param(dir_cache_timeout, uint, 0644);
123MODULE_PARM_DESC(dir_cache_timeout, "Number of seconds to cache directory contents for which we have a lease. Default: 30 "
124 "Range: 1 to 65000 seconds, 0 to disable caching dir contents");
00778e22
SF
125#ifdef CONFIG_CIFS_STATS2
126unsigned int slow_rsp_threshold = 1;
127module_param(slow_rsp_threshold, uint, 0644);
128MODULE_PARM_DESC(slow_rsp_threshold, "Amount of time (in seconds) to wait "
129 "before logging that a response is delayed. "
130 "Default: 1 (if set to 0 disables msg).");
131#endif /* STATS2 */
132
e7504734 133module_param(enable_oplocks, bool, 0644);
60654ce0 134MODULE_PARM_DESC(enable_oplocks, "Enable or disable oplocks. Default: y/Y/1");
e7504734 135
29e27923
SF
136module_param(enable_gcm_256, bool, 0644);
137MODULE_PARM_DESC(enable_gcm_256, "Enable requesting strongest (256 bit) GCM encryption. Default: n/N/0");
138
fbfd0b46
SF
139module_param(require_gcm_256, bool, 0644);
140MODULE_PARM_DESC(require_gcm_256, "Require strongest (256 bit) GCM encryption. Default: n/N/0");
141
53d31a3f
SF
142module_param(enable_negotiate_signing, bool, 0644);
143MODULE_PARM_DESC(enable_negotiate_signing, "Enable negotiating packet signing algorithm with server. Default: n/N/0");
144
f92a720e
SF
145module_param(disable_legacy_dialects, bool, 0644);
146MODULE_PARM_DESC(disable_legacy_dialects, "To improve security it may be "
147 "helpful to restrict the ability to "
148 "override the default dialects (SMB2.1, "
149 "SMB3 and SMB3.02) on mount with old "
150 "dialects (CIFS/SMB1 and SMB2) since "
151 "vers=1.0 (CIFS/SMB1) and vers=2.0 are weaker"
152 " and less secure. Default: n/N/0");
153
1da177e4
LT
154extern mempool_t *cifs_sm_req_poolp;
155extern mempool_t *cifs_req_poolp;
156extern mempool_t *cifs_mid_poolp;
157
da472fc8 158struct workqueue_struct *cifsiod_wq;
35cf94a3 159struct workqueue_struct *decrypt_wq;
32546a95 160struct workqueue_struct *fileinfo_put_wq;
3998e6b8 161struct workqueue_struct *cifsoplockd_wq;
860b69a9 162struct workqueue_struct *deferredclose_wq;
3d22462a 163__u32 cifs_lock_secret;
da472fc8 164
24261fc2
MG
165/*
166 * Bumps refcount for cifs super block.
167 * Note that it should be only called if a referece to VFS super block is
168 * already held, e.g. in open-type syscalls context. Otherwise it can race with
169 * atomic_dec_and_test in deactivate_locked_super.
170 */
171void
172cifs_sb_active(struct super_block *sb)
173{
174 struct cifs_sb_info *server = CIFS_SB(sb);
175
176 if (atomic_inc_return(&server->active) == 1)
177 atomic_inc(&sb->s_active);
178}
179
180void
181cifs_sb_deactive(struct super_block *sb)
182{
183 struct cifs_sb_info *server = CIFS_SB(sb);
184
185 if (atomic_dec_and_test(&server->active))
186 deactivate_super(sb);
187}
188
1da177e4 189static int
97d1152a 190cifs_read_super(struct super_block *sb)
1da177e4
LT
191{
192 struct inode *inode;
b2e5cd33 193 struct cifs_sb_info *cifs_sb;
2f6c9479 194 struct cifs_tcon *tcon;
cb7a69e6 195 struct timespec64 ts;
1da177e4 196 int rc = 0;
50c2f753 197
b2e5cd33 198 cifs_sb = CIFS_SB(sb);
2f6c9479 199 tcon = cifs_sb_master_tcon(cifs_sb);
1da177e4 200
2c6292ae 201 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIXACL)
1751e8a6 202 sb->s_flags |= SB_POSIXACL;
2c6292ae 203
8a69e96e
SF
204 if (tcon->snapshot_time)
205 sb->s_flags |= SB_RDONLY;
206
2f6c9479 207 if (tcon->ses->capabilities & tcon->ses->server->vals->cap_large_files)
2c6292ae
AV
208 sb->s_maxbytes = MAX_LFS_FILESIZE;
209 else
210 sb->s_maxbytes = MAX_NON_LFS;
211
553292a6
SF
212 /*
213 * Some very old servers like DOS and OS/2 used 2 second granularity
214 * (while all current servers use 100ns granularity - see MS-DTYP)
215 * but 1 second is the maximum allowed granularity for the VFS
216 * so for old servers set time granularity to 1 second while for
217 * everything else (current servers) set it to 100ns.
218 */
d4cfbf04
SF
219 if ((tcon->ses->server->vals->protocol_id == SMB10_PROT_ID) &&
220 ((tcon->ses->capabilities &
221 tcon->ses->server->vals->cap_nt_find) == 0) &&
222 !tcon->unix_ext) {
223 sb->s_time_gran = 1000000000; /* 1 second is max allowed gran */
224 ts = cnvrtDosUnixTm(cpu_to_le16(SMB_DATE_MIN), 0, 0);
cb7a69e6 225 sb->s_time_min = ts.tv_sec;
d4cfbf04
SF
226 ts = cnvrtDosUnixTm(cpu_to_le16(SMB_DATE_MAX),
227 cpu_to_le16(SMB_TIME_MAX), 0);
cb7a69e6
DD
228 sb->s_time_max = ts.tv_sec;
229 } else {
d4cfbf04
SF
230 /*
231 * Almost every server, including all SMB2+, uses DCE TIME
232 * ie 100 nanosecond units, since 1601. See MS-DTYP and MS-FSCC
233 */
234 sb->s_time_gran = 100;
235 ts = cifs_NTtimeToUnix(0);
cb7a69e6 236 sb->s_time_min = ts.tv_sec;
d4cfbf04 237 ts = cifs_NTtimeToUnix(cpu_to_le64(S64_MAX));
cb7a69e6
DD
238 sb->s_time_max = ts.tv_sec;
239 }
240
dea29037 241 sb->s_magic = CIFS_SUPER_MAGIC;
1da177e4 242 sb->s_op = &cifs_super_ops;
a9ae008f 243 sb->s_xattr = cifs_xattr_handlers;
851ea086
JK
244 rc = super_setup_bdi(sb);
245 if (rc)
246 goto out_no_root;
b8d64f8c 247 /* tune readahead according to rsize if readahead size not set on mount */
06a46656
RS
248 if (cifs_sb->ctx->rsize == 0)
249 cifs_sb->ctx->rsize =
250 tcon->ses->server->ops->negotiate_rsize(tcon, cifs_sb->ctx);
b8d64f8c
SF
251 if (cifs_sb->ctx->rasize)
252 sb->s_bdi->ra_pages = cifs_sb->ctx->rasize / PAGE_SIZE;
253 else
ba8c2b75 254 sb->s_bdi->ra_pages = 2 * (cifs_sb->ctx->rsize / PAGE_SIZE);
851ea086 255
1da177e4
LT
256 sb->s_blocksize = CIFS_MAX_MSGSIZE;
257 sb->s_blocksize_bits = 14; /* default 2**14 = CIFS_MAX_MSGSIZE */
9b6763e0 258 inode = cifs_root_iget(sb);
1da177e4 259
ce634ab2
DH
260 if (IS_ERR(inode)) {
261 rc = PTR_ERR(inode);
1da177e4
LT
262 goto out_no_root;
263 }
264
2f6c9479 265 if (tcon->nocase)
66ffd113
JL
266 sb->s_d_op = &cifs_ci_dentry_ops;
267 else
268 sb->s_d_op = &cifs_dentry_ops;
269
48fde701 270 sb->s_root = d_make_root(inode);
1da177e4
LT
271 if (!sb->s_root) {
272 rc = -ENOMEM;
273 goto out_no_root;
274 }
50c2f753 275
f3a6a60e 276#ifdef CONFIG_CIFS_NFSD_EXPORT
7521a3c5 277 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
f96637be 278 cifs_dbg(FYI, "export ops supported\n");
7521a3c5
SF
279 sb->s_export_op = &cifs_export_ops;
280 }
f3a6a60e 281#endif /* CONFIG_CIFS_NFSD_EXPORT */
1da177e4
LT
282
283 return 0;
284
285out_no_root:
f96637be 286 cifs_dbg(VFS, "%s: get root inode failed\n", __func__);
1da177e4
LT
287 return rc;
288}
289
6d686175
AV
290static void cifs_kill_sb(struct super_block *sb)
291{
292 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
269f67e1 293
5e9c89d4
RS
294 /*
295 * We ned to release all dentries for the cached directories
296 * before we kill the sb.
297 */
269f67e1 298 if (cifs_sb->root) {
05b98fd2 299 close_all_cached_dirs(cifs_sb);
d788e516
SP
300
301 /* finally release root dentry */
269f67e1
RS
302 dput(cifs_sb->root);
303 cifs_sb->root = NULL;
304 }
305
6d686175 306 kill_anon_super(sb);
98ab494d 307 cifs_umount(cifs_sb);
1da177e4
LT
308}
309
310static int
726c3342 311cifs_statfs(struct dentry *dentry, struct kstatfs *buf)
1da177e4 312{
726c3342 313 struct super_block *sb = dentry->d_sb;
39da9847 314 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
96daf2b0 315 struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
76ec5e33 316 struct TCP_Server_Info *server = tcon->ses->server;
6d5786a3 317 unsigned int xid;
76ec5e33 318 int rc = 0;
1da177e4 319
6d5786a3 320 xid = get_xid();
1da177e4 321
21ba3845
SF
322 if (le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength) > 0)
323 buf->f_namelen =
324 le32_to_cpu(tcon->fsAttrInfo.MaxPathNameComponentLength);
325 else
326 buf->f_namelen = PATH_MAX;
327
328 buf->f_fsid.val[0] = tcon->vol_serial_number;
329 /* are using part of create time for more randomness, see man statfs */
330 buf->f_fsid.val[1] = (int)le64_to_cpu(tcon->vol_create_time);
331
1da177e4
LT
332 buf->f_files = 0; /* undefined */
333 buf->f_ffree = 0; /* unlimited */
334
76ec5e33 335 if (server->ops->queryfs)
0f060936 336 rc = server->ops->queryfs(xid, tcon, cifs_sb, buf);
39da9847 337
6d5786a3 338 free_xid(xid);
14302ee3 339 return rc;
1da177e4
LT
340}
341
31742c5a
SF
342static long cifs_fallocate(struct file *file, int mode, loff_t off, loff_t len)
343{
7119e220 344 struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
31742c5a
SF
345 struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
346 struct TCP_Server_Info *server = tcon->ses->server;
347
348 if (server->ops->fallocate)
349 return server->ops->fallocate(file, tcon, mode, off, len);
350
351 return -EOPNOTSUPP;
352}
353
4609e1f1 354static int cifs_permission(struct mnt_idmap *idmap,
549c7297 355 struct inode *inode, int mask)
1da177e4
LT
356{
357 struct cifs_sb_info *cifs_sb;
358
359 cifs_sb = CIFS_SB(inode->i_sb);
360
f696a365
MS
361 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM) {
362 if ((mask & MAY_EXEC) && !execute_ok(inode))
363 return -EACCES;
364 else
365 return 0;
366 } else /* file mode might have been restricted at mount time
50c2f753 367 on the client (above and beyond ACL on servers) for
1da177e4 368 servers which do not support setting and viewing mode bits,
50c2f753 369 so allowing client to check permissions is useful */
4609e1f1 370 return generic_permission(&nop_mnt_idmap, inode, mask);
1da177e4
LT
371}
372
e18b890b
CL
373static struct kmem_cache *cifs_inode_cachep;
374static struct kmem_cache *cifs_req_cachep;
375static struct kmem_cache *cifs_mid_cachep;
e18b890b 376static struct kmem_cache *cifs_sm_req_cachep;
1da177e4
LT
377mempool_t *cifs_sm_req_poolp;
378mempool_t *cifs_req_poolp;
379mempool_t *cifs_mid_poolp;
380
381static struct inode *
382cifs_alloc_inode(struct super_block *sb)
383{
384 struct cifsInodeInfo *cifs_inode;
fd60b288 385 cifs_inode = alloc_inode_sb(sb, cifs_inode_cachep, GFP_KERNEL);
1da177e4
LT
386 if (!cifs_inode)
387 return NULL;
388 cifs_inode->cifsAttrs = 0x20; /* default */
1da177e4 389 cifs_inode->time = 0;
b8c32dbb
PS
390 /*
391 * Until the file is open and we have gotten oplock info back from the
392 * server, can not assume caching of file data or metadata.
393 */
c6723628 394 cifs_set_oplock_level(cifs_inode, 0);
aff8d5ca 395 cifs_inode->flags = 0;
c11f1df5
SP
396 spin_lock_init(&cifs_inode->writers_lock);
397 cifs_inode->writers = 0;
874c8ca1 398 cifs_inode->netfs.inode.i_blkbits = 14; /* 2**14 = CIFS_MAX_MSGSIZE */
966cc171 399 cifs_inode->netfs.remote_i_size = 0;
20054bd6
JL
400 cifs_inode->uniqueid = 0;
401 cifs_inode->createtime = 0;
42873b0a 402 cifs_inode->epoch = 0;
487317c9 403 spin_lock_init(&cifs_inode->open_file_lock);
fa70b87c 404 generate_random_uuid(cifs_inode->lease_key);
76894f3e 405 cifs_inode->symlink_target = NULL;
2a38e120 406
b8c32dbb
PS
407 /*
408 * Can not set i_flags here - they get immediately overwritten to zero
409 * by the VFS.
410 */
874c8ca1 411 /* cifs_inode->netfs.inode.i_flags = S_NOATIME | S_NOCMTIME; */
1da177e4 412 INIT_LIST_HEAD(&cifs_inode->openFileList);
f45d3416 413 INIT_LIST_HEAD(&cifs_inode->llist);
c3f207ab
RS
414 INIT_LIST_HEAD(&cifs_inode->deferred_closes);
415 spin_lock_init(&cifs_inode->deferred_lock);
874c8ca1 416 return &cifs_inode->netfs.inode;
1da177e4
LT
417}
418
419static void
c2e6802e 420cifs_free_inode(struct inode *inode)
1da177e4 421{
76894f3e
PA
422 struct cifsInodeInfo *cinode = CIFS_I(inode);
423
424 if (S_ISLNK(inode->i_mode))
425 kfree(cinode->symlink_target);
426 kmem_cache_free(cifs_inode_cachep, cinode);
1da177e4
LT
427}
428
9451a9a5 429static void
b57922d9 430cifs_evict_inode(struct inode *inode)
9451a9a5 431{
91b0abe3 432 truncate_inode_pages_final(&inode->i_data);
c9c4ff12 433 if (inode->i_state & I_PINNING_NETFS_WB)
70431bfd
DH
434 cifs_fscache_unuse_inode_cookie(inode, true);
435 cifs_fscache_release_inode_cookie(inode);
dbd5768f 436 clear_inode(inode);
9451a9a5
SJ
437}
438
61f98ffd
JL
439static void
440cifs_show_address(struct seq_file *s, struct TCP_Server_Info *server)
441{
a9f1b85e
PS
442 struct sockaddr_in *sa = (struct sockaddr_in *) &server->dstaddr;
443 struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *) &server->dstaddr;
444
571d5972 445 seq_puts(s, ",addr=");
61f98ffd 446
a9f1b85e 447 switch (server->dstaddr.ss_family) {
61f98ffd 448 case AF_INET:
a9f1b85e 449 seq_printf(s, "%pI4", &sa->sin_addr.s_addr);
61f98ffd
JL
450 break;
451 case AF_INET6:
a9f1b85e
PS
452 seq_printf(s, "%pI6", &sa6->sin6_addr.s6_addr);
453 if (sa6->sin6_scope_id)
454 seq_printf(s, "%%%u", sa6->sin6_scope_id);
61f98ffd
JL
455 break;
456 default:
571d5972 457 seq_puts(s, "(unknown)");
61f98ffd 458 }
8339dd32
LL
459 if (server->rdma)
460 seq_puts(s, ",rdma");
61f98ffd
JL
461}
462
3e715513 463static void
28e11bd8 464cifs_show_security(struct seq_file *s, struct cifs_ses *ses)
3e715513 465{
eda2116f
SF
466 if (ses->sectype == Unspecified) {
467 if (ses->user_name == NULL)
468 seq_puts(s, ",sec=none");
28e11bd8 469 return;
eda2116f 470 }
28e11bd8 471
571d5972 472 seq_puts(s, ",sec=");
3e715513 473
28e11bd8 474 switch (ses->sectype) {
3e715513 475 case NTLMv2:
571d5972 476 seq_puts(s, "ntlmv2");
3e715513 477 break;
3e715513 478 case Kerberos:
3f6166aa 479 seq_puts(s, "krb5");
3e715513
JL
480 break;
481 case RawNTLMSSP:
571d5972 482 seq_puts(s, "ntlmssp");
3e715513
JL
483 break;
484 default:
485 /* shouldn't ever happen */
571d5972 486 seq_puts(s, "unknown");
3e715513
JL
487 break;
488 }
489
28e11bd8 490 if (ses->sign)
571d5972 491 seq_puts(s, "i");
3f6166aa
PP
492
493 if (ses->sectype == Kerberos)
494 seq_printf(s, ",cruid=%u",
495 from_kuid_munged(&init_user_ns, ses->cred_uid));
3e715513
JL
496}
497
d06b5056
JL
498static void
499cifs_show_cache_flavor(struct seq_file *s, struct cifs_sb_info *cifs_sb)
500{
571d5972 501 seq_puts(s, ",cache=");
d06b5056
JL
502
503 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO)
571d5972 504 seq_puts(s, "strict");
d06b5056 505 else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO)
571d5972 506 seq_puts(s, "none");
41e033fe
SF
507 else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RW_CACHE)
508 seq_puts(s, "singleclient"); /* assume only one client access */
83bbfa70
SF
509 else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RO_CACHE)
510 seq_puts(s, "ro"); /* read only caching assumed */
d06b5056 511 else
571d5972 512 seq_puts(s, "loose");
d06b5056
JL
513}
514
653a5efb
SF
515/*
516 * cifs_show_devname() is used so we show the mount device name with correct
517 * format (e.g. forward slashes vs. back slashes) in /proc/mounts
518 */
519static int cifs_show_devname(struct seq_file *m, struct dentry *root)
520{
521 struct cifs_sb_info *cifs_sb = CIFS_SB(root->d_sb);
af1a3d2b 522 char *devname = kstrdup(cifs_sb->ctx->source, GFP_KERNEL);
653a5efb
SF
523
524 if (devname == NULL)
525 seq_puts(m, "none");
526 else {
527 convert_delimiter(devname, '/');
0fc9322a
MB
528 /* escape all spaces in share names */
529 seq_escape(m, devname, " \t");
653a5efb
SF
530 kfree(devname);
531 }
532 return 0;
533}
534
1da177e4
LT
535/*
536 * cifs_show_options() is for displaying mount options in /proc/mounts.
537 * Not all settable options are displayed but most of the important
538 * ones are.
539 */
540static int
34c80b1d 541cifs_show_options(struct seq_file *s, struct dentry *root)
1da177e4 542{
34c80b1d 543 struct cifs_sb_info *cifs_sb = CIFS_SB(root->d_sb);
96daf2b0 544 struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
3eb9a889
BG
545 struct sockaddr *srcaddr;
546 srcaddr = (struct sockaddr *)&tcon->ses->server->srcaddr;
8616e0fc 547
a068acf2 548 seq_show_option(s, "vers", tcon->ses->server->vals->version_string);
28e11bd8 549 cifs_show_security(s, tcon->ses);
d06b5056 550 cifs_show_cache_flavor(s, cifs_sb);
3e715513 551
3e7a02d4
SF
552 if (tcon->no_lease)
553 seq_puts(s, ",nolease");
9ccecae8 554 if (cifs_sb->ctx->multiuser)
571d5972 555 seq_puts(s, ",multiuser");
8727c8a8 556 else if (tcon->ses->user_name)
a068acf2 557 seq_show_option(s, "username", tcon->ses->user_name);
29e07c82 558
e55954a5 559 if (tcon->ses->domainName && tcon->ses->domainName[0] != 0)
a068acf2 560 seq_show_option(s, "domain", tcon->ses->domainName);
8616e0fc 561
3eb9a889
BG
562 if (srcaddr->sa_family != AF_UNSPEC) {
563 struct sockaddr_in *saddr4;
564 struct sockaddr_in6 *saddr6;
565 saddr4 = (struct sockaddr_in *)srcaddr;
566 saddr6 = (struct sockaddr_in6 *)srcaddr;
567 if (srcaddr->sa_family == AF_INET6)
568 seq_printf(s, ",srcaddr=%pI6c",
569 &saddr6->sin6_addr);
570 else if (srcaddr->sa_family == AF_INET)
571 seq_printf(s, ",srcaddr=%pI4",
572 &saddr4->sin_addr.s_addr);
573 else
574 seq_printf(s, ",srcaddr=BAD-AF:%i",
575 (int)(srcaddr->sa_family));
576 }
577
1f68233c 578 seq_printf(s, ",uid=%u",
8401e936 579 from_kuid_munged(&init_user_ns, cifs_sb->ctx->linux_uid));
340481a3 580 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_UID)
571d5972 581 seq_puts(s, ",forceuid");
4486d6ed 582 else
571d5972 583 seq_puts(s, ",noforceuid");
340481a3 584
1f68233c 585 seq_printf(s, ",gid=%u",
8401e936 586 from_kgid_munged(&init_user_ns, cifs_sb->ctx->linux_gid));
340481a3 587 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_OVERR_GID)
571d5972 588 seq_puts(s, ",forcegid");
4486d6ed 589 else
571d5972 590 seq_puts(s, ",noforcegid");
8616e0fc 591
61f98ffd 592 cifs_show_address(s, tcon->ses->server);
1da177e4 593
8616e0fc 594 if (!tcon->unix_ext)
5206efd6 595 seq_printf(s, ",file_mode=0%ho,dir_mode=0%ho",
8401e936
RS
596 cifs_sb->ctx->file_mode,
597 cifs_sb->ctx->dir_mode);
7c7ee628
RS
598 if (cifs_sb->ctx->iocharset)
599 seq_printf(s, ",iocharset=%s", cifs_sb->ctx->iocharset);
8616e0fc 600 if (tcon->seal)
571d5972 601 seq_puts(s, ",seal");
ec57010a
SF
602 else if (tcon->ses->server->ignore_signature)
603 seq_puts(s, ",signloosely");
8616e0fc 604 if (tcon->nocase)
571d5972 605 seq_puts(s, ",nocase");
82e9367c
SF
606 if (tcon->nodelete)
607 seq_puts(s, ",nodelete");
52832252
SF
608 if (cifs_sb->ctx->no_sparse)
609 seq_puts(s, ",nosparse");
c8b6ac1a
K
610 if (tcon->local_lease)
611 seq_puts(s, ",locallease");
8616e0fc 612 if (tcon->retry)
571d5972 613 seq_puts(s, ",hard");
6e82e929
RS
614 else
615 seq_puts(s, ",soft");
f16dfa7c
SF
616 if (tcon->use_persistent)
617 seq_puts(s, ",persistenthandles");
592fafe6
SF
618 else if (tcon->use_resilient)
619 seq_puts(s, ",resilienthandles");
b326614e
SF
620 if (tcon->posix_extensions)
621 seq_puts(s, ",posix");
622 else if (tcon->unix_ext)
623 seq_puts(s, ",unix");
624 else
625 seq_puts(s, ",nounix");
8393072b
AA
626 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_DFS)
627 seq_puts(s, ",nodfs");
8616e0fc 628 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
571d5972 629 seq_puts(s, ",posixpaths");
8616e0fc 630 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID)
571d5972 631 seq_puts(s, ",setuids");
95932655
SF
632 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UID_FROM_ACL)
633 seq_puts(s, ",idsfromsid");
8616e0fc 634 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)
571d5972 635 seq_puts(s, ",serverino");
d4ffff1f 636 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
571d5972 637 seq_puts(s, ",rwpidforward");
d4ffff1f 638 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL)
571d5972 639 seq_puts(s, ",forcemand");
8616e0fc 640 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_XATTR)
571d5972 641 seq_puts(s, ",nouser_xattr");
8616e0fc 642 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR)
571d5972 643 seq_puts(s, ",mapchars");
bc8ebdc4
NA
644 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SFM_CHR)
645 seq_puts(s, ",mapposix");
8616e0fc 646 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL)
571d5972 647 seq_puts(s, ",sfu");
8616e0fc 648 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
571d5972 649 seq_puts(s, ",nobrl");
3d4ef9a1
SF
650 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_HANDLE_CACHE)
651 seq_puts(s, ",nohandlecache");
412094a8
SF
652 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MODE_FROM_SID)
653 seq_puts(s, ",modefromsid");
8616e0fc 654 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL)
571d5972 655 seq_puts(s, ",cifsacl");
8616e0fc 656 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM)
571d5972 657 seq_puts(s, ",dynperm");
1751e8a6 658 if (root->d_sb->s_flags & SB_POSIXACL)
571d5972 659 seq_puts(s, ",acl");
736a3320 660 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MF_SYMLINKS)
571d5972 661 seq_puts(s, ",mfsymlinks");
476428f8 662 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_FSCACHE)
571d5972 663 seq_puts(s, ",fsc");
71c424ba 664 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)
571d5972 665 seq_puts(s, ",nostrictsync");
71c424ba 666 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM)
571d5972 667 seq_puts(s, ",noperm");
3c7c87fd 668 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_BACKUPUID)
1f68233c
EB
669 seq_printf(s, ",backupuid=%u",
670 from_kuid_munged(&init_user_ns,
8401e936 671 cifs_sb->ctx->backupuid));
3c7c87fd 672 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_BACKUPGID)
1f68233c
EB
673 seq_printf(s, ",backupgid=%u",
674 from_kgid_munged(&init_user_ns,
8401e936 675 cifs_sb->ctx->backupgid));
8616e0fc 676
0c2b5f7c
SF
677 seq_printf(s, ",rsize=%u", cifs_sb->ctx->rsize);
678 seq_printf(s, ",wsize=%u", cifs_sb->ctx->wsize);
679 seq_printf(s, ",bsize=%u", cifs_sb->ctx->bsize);
b8d64f8c
SF
680 if (cifs_sb->ctx->rasize)
681 seq_printf(s, ",rasize=%u", cifs_sb->ctx->rasize);
563317ec
SF
682 if (tcon->ses->server->min_offload)
683 seq_printf(s, ",esize=%u", tcon->ses->server->min_offload);
ce09f8d8
SP
684 if (tcon->ses->server->retrans)
685 seq_printf(s, ",retrans=%u", tcon->ses->server->retrans);
adfeb3e0
SF
686 seq_printf(s, ",echo_interval=%lu",
687 tcon->ses->server->echo_interval / HZ);
dc179268 688
2bfd8104 689 /* Only display the following if overridden on mount */
dc179268
SF
690 if (tcon->ses->server->max_credits != SMB2_MAX_CREDITS_AVAILABLE)
691 seq_printf(s, ",max_credits=%u", tcon->ses->server->max_credits);
2bfd8104
SF
692 if (tcon->ses->server->tcp_nodelay)
693 seq_puts(s, ",tcpnodelay");
694 if (tcon->ses->server->noautotune)
695 seq_puts(s, ",noautotune");
696 if (tcon->ses->server->noblocksnd)
697 seq_puts(s, ",noblocksend");
dc765027
SP
698 if (tcon->ses->server->nosharesock)
699 seq_puts(s, ",nosharesock");
dc179268 700
8a69e96e
SF
701 if (tcon->snapshot_time)
702 seq_printf(s, ",snapshot=%llu", tcon->snapshot_time);
ca567eb2
SF
703 if (tcon->handle_timeout)
704 seq_printf(s, ",handletimeout=%u", tcon->handle_timeout);
6a50d71d
SF
705 if (tcon->max_cached_dirs != MAX_CACHED_FIDS)
706 seq_printf(s, ",max_cached_dirs=%u", tcon->max_cached_dirs);
57804646
SF
707
708 /*
709 * Display file and directory attribute timeout in seconds.
710 * If file and directory attribute timeout the same then actimeo
711 * was likely specified on mount
712 */
713 if (cifs_sb->ctx->acdirmax == cifs_sb->ctx->acregmax)
714 seq_printf(s, ",actimeo=%lu", cifs_sb->ctx->acregmax / HZ);
715 else {
716 seq_printf(s, ",acdirmax=%lu", cifs_sb->ctx->acdirmax / HZ);
717 seq_printf(s, ",acregmax=%lu", cifs_sb->ctx->acregmax / HZ);
718 }
5efdd912 719 seq_printf(s, ",closetimeo=%lu", cifs_sb->ctx->closetimeo / HZ);
8616e0fc 720
bcc88801 721 if (tcon->ses->chan_max > 1)
7866c177 722 seq_printf(s, ",multichannel,max_channels=%zu",
bcc88801
AA
723 tcon->ses->chan_max);
724
0ac4e291
SC
725 if (tcon->use_witness)
726 seq_puts(s, ",witness");
0ac4e291 727
1da177e4
LT
728 return 0;
729}
730
42faad99 731static void cifs_umount_begin(struct super_block *sb)
68058e75 732{
42faad99 733 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
96daf2b0 734 struct cifs_tcon *tcon;
68058e75 735
4523cc30 736 if (cifs_sb == NULL)
9e2e85f8
SF
737 return;
738
0d424ad0 739 tcon = cifs_sb_master_tcon(cifs_sb);
f1987b44 740
3f9bcca7 741 spin_lock(&cifs_tcp_ses_lock);
d7d7a66a 742 spin_lock(&tcon->tc_lock);
fdf59eb5 743 if ((tcon->tc_count > 1) || (tcon->status == TID_EXITING)) {
ad8034f1 744 /* we have other mounts to same share or we have
491eafce 745 already tried to umount this and woken up
ad8034f1 746 all waiting network requests, nothing to do */
d7d7a66a 747 spin_unlock(&tcon->tc_lock);
3f9bcca7 748 spin_unlock(&cifs_tcp_ses_lock);
ad8034f1 749 return;
491eafce
SF
750 }
751 /*
752 * can not set tcon->status to TID_EXITING yet since we don't know if umount -f will
753 * fail later (e.g. due to open files). TID_EXITING will be set just before tdis req sent
754 */
d7d7a66a 755 spin_unlock(&tcon->tc_lock);
3f9bcca7 756 spin_unlock(&cifs_tcp_ses_lock);
5e1253b5 757
2cb6f968 758 cifs_close_all_deferred_files(tcon);
3a5ff61c 759 /* cancel_brl_requests(tcon); */ /* BB mark all brl mids as exiting */
7b7abfe3 760 /* cancel_notify_requests(tcon); */
50c2f753 761 if (tcon->ses && tcon->ses->server) {
f96637be 762 cifs_dbg(FYI, "wake up tasks now - umount begin not complete\n");
9e2e85f8 763 wake_up_all(&tcon->ses->server->request_q);
6ab16d24
SF
764 wake_up_all(&tcon->ses->server->response_q);
765 msleep(1); /* yield */
766 /* we have to kick the requests once more */
767 wake_up_all(&tcon->ses->server->response_q);
768 msleep(1);
5e1253b5 769 }
68058e75
SF
770
771 return;
772}
68058e75 773
d39fc592
SF
774static int cifs_freeze(struct super_block *sb)
775{
776 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
777 struct cifs_tcon *tcon;
778
779 if (cifs_sb == NULL)
780 return 0;
781
782 tcon = cifs_sb_master_tcon(cifs_sb);
783
784 cifs_close_all_deferred_files(tcon);
785 return 0;
786}
787
bf97d287 788#ifdef CONFIG_CIFS_STATS2
64132379 789static int cifs_show_stats(struct seq_file *s, struct dentry *root)
bf97d287
SF
790{
791 /* BB FIXME */
792 return 0;
793}
794#endif
795
70431bfd
DH
796static int cifs_write_inode(struct inode *inode, struct writeback_control *wbc)
797{
c9c4ff12 798 return netfs_unpin_writeback(inode, wbc);
70431bfd
DH
799}
800
45321ac5 801static int cifs_drop_inode(struct inode *inode)
12420ac3
JL
802{
803 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
804
45321ac5
AV
805 /* no serverino => unconditional eviction */
806 return !(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) ||
807 generic_drop_inode(inode);
12420ac3
JL
808}
809
ee9b6d61 810static const struct super_operations cifs_super_ops = {
1da177e4
LT
811 .statfs = cifs_statfs,
812 .alloc_inode = cifs_alloc_inode,
70431bfd 813 .write_inode = cifs_write_inode,
c2e6802e 814 .free_inode = cifs_free_inode,
12420ac3 815 .drop_inode = cifs_drop_inode,
b57922d9 816 .evict_inode = cifs_evict_inode,
653a5efb
SF
817/* .show_path = cifs_show_path, */ /* Would we ever need show path? */
818 .show_devname = cifs_show_devname,
12420ac3
JL
819/* .delete_inode = cifs_delete_inode, */ /* Do not need above
820 function unless later we add lazy close of inodes or unless the
50c2f753
SF
821 kernel forgets to call us with the same number of releases (closes)
822 as opens */
1da177e4 823 .show_options = cifs_show_options,
7b7abfe3 824 .umount_begin = cifs_umount_begin,
d39fc592 825 .freeze_fs = cifs_freeze,
bf97d287 826#ifdef CONFIG_CIFS_STATS2
f46d3e11 827 .show_stats = cifs_show_stats,
bf97d287 828#endif
1da177e4
LT
829};
830
f87d39d9
SF
831/*
832 * Get root dentry from superblock according to prefix path mount option.
833 * Return dentry with refcount + 1 on success and NULL otherwise.
834 */
835static struct dentry *
3fa1c6d1 836cifs_get_root(struct smb3_fs_context *ctx, struct super_block *sb)
f87d39d9 837{
fec11dd9 838 struct dentry *dentry;
f87d39d9 839 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
fec11dd9
AV
840 char *full_path = NULL;
841 char *s, *p;
f87d39d9
SF
842 char sep;
843
348c1bfa
SP
844 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH)
845 return dget(sb->s_root);
846
3fa1c6d1 847 full_path = cifs_build_path_to_root(ctx, cifs_sb,
374402a2 848 cifs_sb_master_tcon(cifs_sb), 0);
f87d39d9 849 if (full_path == NULL)
9403c9c5 850 return ERR_PTR(-ENOMEM);
f87d39d9 851
f96637be 852 cifs_dbg(FYI, "Get root dentry for %s\n", full_path);
f87d39d9 853
f87d39d9 854 sep = CIFS_DIR_SEP(cifs_sb);
fec11dd9 855 dentry = dget(sb->s_root);
0b66fa77 856 s = full_path;
fec11dd9
AV
857
858 do {
2b0143b5 859 struct inode *dir = d_inode(dentry);
fec11dd9
AV
860 struct dentry *child;
861
ce2ac521
JL
862 if (!S_ISDIR(dir->i_mode)) {
863 dput(dentry);
864 dentry = ERR_PTR(-ENOTDIR);
865 break;
866 }
5b980b01 867
fec11dd9
AV
868 /* skip separators */
869 while (*s == sep)
870 s++;
871 if (!*s)
872 break;
873 p = s++;
874 /* next separator */
875 while (*s && *s != sep)
876 s++;
877
6c2d4798 878 child = lookup_positive_unlocked(p, dentry, s - p);
fec11dd9
AV
879 dput(dentry);
880 dentry = child;
881 } while (!IS_ERR(dentry));
f87d39d9 882 kfree(full_path);
fec11dd9 883 return dentry;
f87d39d9
SF
884}
885
ee01a14d
AV
886static int cifs_set_super(struct super_block *sb, void *data)
887{
888 struct cifs_mnt_data *mnt_data = data;
889 sb->s_fs_info = mnt_data->cifs_sb;
890 return set_anon_super(sb, NULL);
891}
892
24e0a1ef 893struct dentry *
c7c137b9 894cifs_smb3_do_mount(struct file_system_type *fs_type,
24e0a1ef 895 int flags, struct smb3_fs_context *old_ctx)
1da177e4 896{
25c7f41e 897 struct cifs_mnt_data mnt_data;
12c30f33
PA
898 struct cifs_sb_info *cifs_sb;
899 struct super_block *sb;
724d9f1c 900 struct dentry *root;
12c30f33 901 int rc;
1da177e4 902
1810769e
PA
903 if (cifsFYI) {
904 cifs_dbg(FYI, "%s: devname=%s flags=0x%x\n", __func__,
905 old_ctx->source, flags);
906 } else {
907 cifs_info("Attempting to mount %s\n", old_ctx->source);
908 }
24e0a1ef 909
12c30f33
PA
910 cifs_sb = kzalloc(sizeof(*cifs_sb), GFP_KERNEL);
911 if (!cifs_sb)
912 return ERR_PTR(-ENOMEM);
1da177e4 913
d17abdf7
RS
914 cifs_sb->ctx = kzalloc(sizeof(struct smb3_fs_context), GFP_KERNEL);
915 if (!cifs_sb->ctx) {
916 root = ERR_PTR(-ENOMEM);
917 goto out;
918 }
919 rc = smb3_fs_context_dup(cifs_sb->ctx, old_ctx);
24e0a1ef
RS
920 if (rc) {
921 root = ERR_PTR(rc);
922 goto out;
923 }
724d9f1c 924
51acd208 925 rc = cifs_setup_cifs_sb(cifs_sb);
4214ebf4
SP
926 if (rc) {
927 root = ERR_PTR(rc);
d17abdf7 928 goto out;
a6b5058f
AA
929 }
930
d17abdf7 931 rc = cifs_mount(cifs_sb, cifs_sb->ctx);
97d1152a 932 if (rc) {
1751e8a6 933 if (!(flags & SB_SILENT))
f96637be
JP
934 cifs_dbg(VFS, "cifs_mount failed w/return code = %d\n",
935 rc);
97d1152a 936 root = ERR_PTR(rc);
d17abdf7 937 goto out;
97d1152a
AV
938 }
939
d17abdf7 940 mnt_data.ctx = cifs_sb->ctx;
25c7f41e
PS
941 mnt_data.cifs_sb = cifs_sb;
942 mnt_data.flags = flags;
943
9249e17f 944 /* BB should we make this contingent on mount parm? */
1751e8a6 945 flags |= SB_NODIRATIME | SB_NOATIME;
9249e17f
DH
946
947 sb = sget(fs_type, cifs_match_super, cifs_set_super, flags, &mnt_data);
724d9f1c 948 if (IS_ERR(sb)) {
97d1152a 949 cifs_umount(cifs_sb);
12c30f33 950 return ERR_CAST(sb);
724d9f1c 951 }
1da177e4 952
ee01a14d 953 if (sb->s_root) {
f96637be 954 cifs_dbg(FYI, "Use existing superblock\n");
97d1152a 955 cifs_umount(cifs_sb);
6cf5abbf 956 cifs_sb = NULL;
5c4f1ad7 957 } else {
5c4f1ad7
AV
958 rc = cifs_read_super(sb);
959 if (rc) {
960 root = ERR_PTR(rc);
961 goto out_super;
962 }
b2e5cd33 963
1751e8a6 964 sb->s_flags |= SB_ACTIVE;
1da177e4 965 }
724d9f1c 966
6cf5abbf 967 root = cifs_get_root(cifs_sb ? cifs_sb->ctx : old_ctx, sb);
9403c9c5 968 if (IS_ERR(root))
f87d39d9 969 goto out_super;
25c7f41e 970
269f67e1
RS
971 if (cifs_sb)
972 cifs_sb->root = dget(root);
973
f96637be 974 cifs_dbg(FYI, "dentry root is: %p\n", root);
d17abdf7 975 return root;
724d9f1c 976
641a58d6 977out_super:
641a58d6 978 deactivate_locked_super(sb);
3d6cc989 979 return root;
641a58d6 980out:
12c30f33
PA
981 kfree(cifs_sb->prepath);
982 smb3_cleanup_fs_context(cifs_sb->ctx);
983 kfree(cifs_sb);
724d9f1c 984 return root;
1da177e4
LT
985}
986
c7c137b9 987
08bc0353
JL
988static ssize_t
989cifs_loose_read_iter(struct kiocb *iocb, struct iov_iter *iter)
990{
991 ssize_t rc;
992 struct inode *inode = file_inode(iocb->ki_filp);
993
994fd530 994 if (iocb->ki_flags & IOCB_DIRECT)
882137c4
RL
995 return cifs_user_readv(iocb, iter);
996
08bc0353
JL
997 rc = cifs_revalidate_mapping(inode);
998 if (rc)
999 return rc;
1000
1001 return generic_file_read_iter(iocb, iter);
1002}
1003
3dae8750 1004static ssize_t cifs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
1da177e4 1005{
496ad9aa 1006 struct inode *inode = file_inode(iocb->ki_filp);
c11f1df5 1007 struct cifsInodeInfo *cinode = CIFS_I(inode);
1da177e4 1008 ssize_t written;
72432ffc 1009 int rc;
1da177e4 1010
882137c4
RL
1011 if (iocb->ki_filp->f_flags & O_DIRECT) {
1012 written = cifs_user_writev(iocb, from);
1013 if (written > 0 && CIFS_CACHE_READ(cinode)) {
1014 cifs_zap_mapping(inode);
1015 cifs_dbg(FYI,
1016 "Set no oplock for inode=%p after a write operation\n",
1017 inode);
1018 cinode->oplock = 0;
1019 }
1020 return written;
1021 }
1022
c11f1df5
SP
1023 written = cifs_get_writer(cinode);
1024 if (written)
1025 return written;
1026
3dae8750 1027 written = generic_file_write_iter(iocb, from);
72432ffc 1028
18cceb6a 1029 if (CIFS_CACHE_WRITE(CIFS_I(inode)))
c11f1df5 1030 goto out;
72432ffc
PS
1031
1032 rc = filemap_fdatawrite(inode->i_mapping);
1033 if (rc)
3dae8750 1034 cifs_dbg(FYI, "cifs_file_write_iter: %d rc on %p inode\n",
f96637be 1035 rc, inode);
72432ffc 1036
c11f1df5
SP
1037out:
1038 cifs_put_writer(cinode);
1da177e4
LT
1039 return written;
1040}
1041
965c8e59 1042static loff_t cifs_llseek(struct file *file, loff_t offset, int whence)
c32a0b68 1043{
dece44e3
RS
1044 struct cifsFileInfo *cfile = file->private_data;
1045 struct cifs_tcon *tcon;
1046
06222e49 1047 /*
965c8e59 1048 * whence == SEEK_END || SEEK_DATA || SEEK_HOLE => we must revalidate
06222e49
JB
1049 * the cached file length
1050 */
965c8e59 1051 if (whence != SEEK_SET && whence != SEEK_CUR) {
6feb9891 1052 int rc;
496ad9aa 1053 struct inode *inode = file_inode(file);
6feb9891
PS
1054
1055 /*
1056 * We need to be sure that all dirty pages are written and the
1057 * server has the newest file length.
1058 */
18cceb6a 1059 if (!CIFS_CACHE_READ(CIFS_I(inode)) && inode->i_mapping &&
6feb9891
PS
1060 inode->i_mapping->nrpages != 0) {
1061 rc = filemap_fdatawait(inode->i_mapping);
156ecb2d
SF
1062 if (rc) {
1063 mapping_set_error(inode->i_mapping, rc);
1064 return rc;
1065 }
6feb9891
PS
1066 }
1067 /*
1068 * Some applications poll for the file length in this strange
1069 * way so we must seek to end on non-oplocked files by
1070 * setting the revalidate time to zero.
1071 */
1072 CIFS_I(inode)->time = 0;
1073
1074 rc = cifs_revalidate_file_attr(file);
1075 if (rc < 0)
1076 return (loff_t)rc;
c32a0b68 1077 }
dece44e3
RS
1078 if (cfile && cfile->tlink) {
1079 tcon = tlink_tcon(cfile->tlink);
1080 if (tcon->ses->server->ops->llseek)
1081 return tcon->ses->server->ops->llseek(file, tcon,
1082 offset, whence);
1083 }
965c8e59 1084 return generic_file_llseek(file, offset, whence);
c32a0b68
SF
1085}
1086
e6f5c789 1087static int
c69ff407 1088cifs_setlease(struct file *file, int arg, struct file_lease **lease, void **priv)
84210e91 1089{
18cceb6a
PS
1090 /*
1091 * Note that this is called by vfs setlease with i_lock held to
1092 * protect *lease from going away.
1093 */
496ad9aa 1094 struct inode *inode = file_inode(file);
ba00ba64 1095 struct cifsFileInfo *cfile = file->private_data;
84210e91 1096
02440806
JL
1097 /* Check if file is oplocked if this is request for new lease */
1098 if (arg == F_UNLCK ||
1099 ((arg == F_RDLCK) && CIFS_CACHE_READ(CIFS_I(inode))) ||
18cceb6a 1100 ((arg == F_WRLCK) && CIFS_CACHE_WRITE(CIFS_I(inode))))
e6f5c789 1101 return generic_setlease(file, arg, lease, priv);
13cfb733 1102 else if (tlink_tcon(cfile->tlink)->local_lease &&
18cceb6a
PS
1103 !CIFS_CACHE_READ(CIFS_I(inode)))
1104 /*
1105 * If the server claims to support oplock on this file, then we
1106 * still need to check oplock even if the local_lease mount
1107 * option is set, but there are servers which do not support
1108 * oplock for which this mount option may be useful if the user
1109 * knows that the file won't be changed on the server by anyone
1110 * else.
1111 */
e6f5c789 1112 return generic_setlease(file, arg, lease, priv);
51ee4b84 1113 else
84210e91
SF
1114 return -EAGAIN;
1115}
84210e91 1116
e6ab1582 1117struct file_system_type cifs_fs_type = {
1da177e4
LT
1118 .owner = THIS_MODULE,
1119 .name = "cifs",
24e0a1ef
RS
1120 .init_fs_context = smb3_init_fs_context,
1121 .parameters = smb3_fs_parameters,
6d686175 1122 .kill_sb = cifs_kill_sb,
c7e9f78f 1123 .fs_flags = FS_RENAME_DOES_D_MOVE,
1da177e4 1124};
3e64fe5b 1125MODULE_ALIAS_FS("cifs");
49218b4f 1126
c36ee7da 1127struct file_system_type smb3_fs_type = {
49218b4f
SF
1128 .owner = THIS_MODULE,
1129 .name = "smb3",
24e0a1ef
RS
1130 .init_fs_context = smb3_init_fs_context,
1131 .parameters = smb3_fs_parameters,
49218b4f 1132 .kill_sb = cifs_kill_sb,
c7e9f78f 1133 .fs_flags = FS_RENAME_DOES_D_MOVE,
49218b4f
SF
1134};
1135MODULE_ALIAS_FS("smb3");
1136MODULE_ALIAS("smb3");
1137
754661f1 1138const struct inode_operations cifs_dir_inode_ops = {
1da177e4 1139 .create = cifs_create,
d2c12719 1140 .atomic_open = cifs_atomic_open,
1da177e4
LT
1141 .lookup = cifs_lookup,
1142 .getattr = cifs_getattr,
1143 .unlink = cifs_unlink,
1144 .link = cifs_hardlink,
1145 .mkdir = cifs_mkdir,
1146 .rmdir = cifs_rmdir,
2773bf00 1147 .rename = cifs_rename2,
1da177e4 1148 .permission = cifs_permission,
1da177e4
LT
1149 .setattr = cifs_setattr,
1150 .symlink = cifs_symlink,
1151 .mknod = cifs_mknod,
1da177e4 1152 .listxattr = cifs_listxattr,
bd9684b0 1153 .get_acl = cifs_get_acl,
dc1af4c4 1154 .set_acl = cifs_set_acl,
1da177e4
LT
1155};
1156
754661f1 1157const struct inode_operations cifs_file_inode_ops = {
1da177e4 1158 .setattr = cifs_setattr,
48a77aa7 1159 .getattr = cifs_getattr,
1da177e4 1160 .permission = cifs_permission,
1da177e4 1161 .listxattr = cifs_listxattr,
2f3ebaba 1162 .fiemap = cifs_fiemap,
bd9684b0 1163 .get_acl = cifs_get_acl,
dc1af4c4 1164 .set_acl = cifs_set_acl,
1da177e4
LT
1165};
1166
542228db
C
1167const char *cifs_get_link(struct dentry *dentry, struct inode *inode,
1168 struct delayed_call *done)
1169{
1170 char *target_path;
1171
0511fdb4
AV
1172 if (!dentry)
1173 return ERR_PTR(-ECHILD);
1174
542228db
C
1175 target_path = kmalloc(PATH_MAX, GFP_KERNEL);
1176 if (!target_path)
1177 return ERR_PTR(-ENOMEM);
1178
1179 spin_lock(&inode->i_lock);
1180 if (likely(CIFS_I(inode)->symlink_target)) {
1181 strscpy(target_path, CIFS_I(inode)->symlink_target, PATH_MAX);
1182 } else {
1183 kfree(target_path);
1184 target_path = ERR_PTR(-EOPNOTSUPP);
1185 }
1186 spin_unlock(&inode->i_lock);
1187
1188 if (!IS_ERR(target_path))
1189 set_delayed_call(done, kfree_link, target_path);
1190
1191 return target_path;
1192}
1193
754661f1 1194const struct inode_operations cifs_symlink_inode_ops = {
542228db 1195 .get_link = cifs_get_link,
475efd98 1196 .setattr = cifs_setattr,
1da177e4 1197 .permission = cifs_permission,
1da177e4 1198 .listxattr = cifs_listxattr,
1da177e4
LT
1199};
1200
7b2404a8
DH
1201/*
1202 * Advance the EOF marker to after the source range.
1203 */
1204static int cifs_precopy_set_eof(struct inode *src_inode, struct cifsInodeInfo *src_cifsi,
1205 struct cifs_tcon *src_tcon,
1206 unsigned int xid, loff_t src_end)
1207{
1208 struct cifsFileInfo *writeable_srcfile;
1209 int rc = -EINVAL;
1210
1211 writeable_srcfile = find_writable_file(src_cifsi, FIND_WR_FSUID_ONLY);
1212 if (writeable_srcfile) {
1213 if (src_tcon->ses->server->ops->set_file_size)
1214 rc = src_tcon->ses->server->ops->set_file_size(
1215 xid, src_tcon, writeable_srcfile,
1216 src_inode->i_size, true /* no need to set sparse */);
1217 else
1218 rc = -ENOSYS;
1219 cifsFileInfo_put(writeable_srcfile);
1220 cifs_dbg(FYI, "SetFSize for copychunk rc = %d\n", rc);
1221 }
1222
1223 if (rc < 0)
1224 goto set_failed;
1225
100ccd18 1226 netfs_resize_file(&src_cifsi->netfs, src_end, true);
7b2404a8
DH
1227 fscache_resize_cookie(cifs_inode_cookie(src_inode), src_end);
1228 return 0;
1229
1230set_failed:
1231 return filemap_write_and_wait(src_inode->i_mapping);
1232}
1233
1234/*
1235 * Flush out either the folio that overlaps the beginning of a range in which
1236 * pos resides or the folio that overlaps the end of a range unless that folio
1237 * is entirely within the range we're going to invalidate. We extend the flush
1238 * bounds to encompass the folio.
1239 */
1240static int cifs_flush_folio(struct inode *inode, loff_t pos, loff_t *_fstart, loff_t *_fend,
1241 bool first)
1242{
1243 struct folio *folio;
1244 unsigned long long fpos, fend;
1245 pgoff_t index = pos / PAGE_SIZE;
1246 size_t size;
1247 int rc = 0;
1248
1249 folio = filemap_get_folio(inode->i_mapping, index);
1250 if (IS_ERR(folio))
1251 return 0;
1252
1253 size = folio_size(folio);
1254 fpos = folio_pos(folio);
1255 fend = fpos + size - 1;
1256 *_fstart = min_t(unsigned long long, *_fstart, fpos);
1257 *_fend = max_t(unsigned long long, *_fend, fend);
1258 if ((first && pos == fpos) || (!first && pos == fend))
1259 goto out;
1260
1261 rc = filemap_write_and_wait_range(inode->i_mapping, fpos, fend);
1262out:
1263 folio_put(folio);
1264 return rc;
1265}
1266
42ec3d4c
DW
1267static loff_t cifs_remap_file_range(struct file *src_file, loff_t off,
1268 struct file *dst_file, loff_t destoff, loff_t len,
2e5dfc99 1269 unsigned int remap_flags)
04b38d60
CH
1270{
1271 struct inode *src_inode = file_inode(src_file);
1272 struct inode *target_inode = file_inode(dst_file);
c54fc3a4
DH
1273 struct cifsInodeInfo *src_cifsi = CIFS_I(src_inode);
1274 struct cifsInodeInfo *target_cifsi = CIFS_I(target_inode);
04b38d60 1275 struct cifsFileInfo *smb_file_src = src_file->private_data;
c54fc3a4
DH
1276 struct cifsFileInfo *smb_file_target = dst_file->private_data;
1277 struct cifs_tcon *target_tcon, *src_tcon;
1278 unsigned long long destend, fstart, fend, new_size;
04b38d60
CH
1279 unsigned int xid;
1280 int rc;
1281
691a41d8
DH
1282 if (remap_flags & REMAP_FILE_DEDUP)
1283 return -EOPNOTSUPP;
1284 if (remap_flags & ~REMAP_FILE_ADVISORY)
2e5dfc99
DW
1285 return -EINVAL;
1286
04b38d60
CH
1287 cifs_dbg(FYI, "clone range\n");
1288
1289 xid = get_xid();
1290
c54fc3a4 1291 if (!smb_file_src || !smb_file_target) {
04b38d60
CH
1292 rc = -EBADF;
1293 cifs_dbg(VFS, "missing cifsFileInfo on copy range src file\n");
1294 goto out;
1295 }
1296
c54fc3a4 1297 src_tcon = tlink_tcon(smb_file_src->tlink);
8c6c9bed
CIK
1298 target_tcon = tlink_tcon(smb_file_target->tlink);
1299
04b38d60
CH
1300 /*
1301 * Note: cifs case is easier than btrfs since server responsible for
1302 * checks for proper open modes and file type and if it wants
1303 * server could even support copy of range where source = target
1304 */
1305 lock_two_nondirectories(target_inode, src_inode);
1306
1307 if (len == 0)
1308 len = src_inode->i_size - off;
1309
c54fc3a4
DH
1310 cifs_dbg(FYI, "clone range\n");
1311
1312 /* Flush the source buffer */
1313 rc = filemap_write_and_wait_range(src_inode->i_mapping, off,
1314 off + len - 1);
1315 if (rc)
1316 goto unlock;
1317
1318 /* The server-side copy will fail if the source crosses the EOF marker.
1319 * Advance the EOF marker after the flush above to the end of the range
1320 * if it's short of that.
1321 */
1322 if (src_cifsi->netfs.remote_i_size < off + len) {
1323 rc = cifs_precopy_set_eof(src_inode, src_cifsi, src_tcon, xid, off + len);
1324 if (rc < 0)
1325 goto unlock;
1326 }
1327
1328 new_size = destoff + len;
1329 destend = destoff + len - 1;
04b38d60 1330
c54fc3a4
DH
1331 /* Flush the folios at either end of the destination range to prevent
1332 * accidental loss of dirty data outside of the range.
1333 */
1334 fstart = destoff;
1335 fend = destend;
1336
1337 rc = cifs_flush_folio(target_inode, destoff, &fstart, &fend, true);
1338 if (rc)
1339 goto unlock;
1340 rc = cifs_flush_folio(target_inode, destend, &fstart, &fend, false);
1341 if (rc)
1342 goto unlock;
1343
1344 /* Discard all the folios that overlap the destination region. */
1345 cifs_dbg(FYI, "about to discard pages %llx-%llx\n", fstart, fend);
1346 truncate_inode_pages_range(&target_inode->i_data, fstart, fend);
1347
1348 fscache_invalidate(cifs_inode_cookie(target_inode), NULL,
1349 i_size_read(target_inode), 0);
1350
1351 rc = -EOPNOTSUPP;
1352 if (target_tcon->ses->server->ops->duplicate_extents) {
04b38d60
CH
1353 rc = target_tcon->ses->server->ops->duplicate_extents(xid,
1354 smb_file_src, smb_file_target, off, len, destoff);
c54fc3a4
DH
1355 if (rc == 0 && new_size > i_size_read(target_inode)) {
1356 truncate_setsize(target_inode, new_size);
100ccd18 1357 netfs_resize_file(&target_cifsi->netfs, new_size, true);
c54fc3a4
DH
1358 fscache_resize_cookie(cifs_inode_cookie(target_inode),
1359 new_size);
1360 }
1361 }
04b38d60
CH
1362
1363 /* force revalidate of size and timestamps of target file now
1364 that target is updated on the server */
1365 CIFS_I(target_inode)->time = 0;
c54fc3a4 1366unlock:
04b38d60
CH
1367 /* although unlocking in the reverse order from locking is not
1368 strictly necessary here it is a little cleaner to be consistent */
1369 unlock_two_nondirectories(src_inode, target_inode);
1370out:
1371 free_xid(xid);
42ec3d4c 1372 return rc < 0 ? rc : len;
04b38d60
CH
1373}
1374
620d8745
SP
1375ssize_t cifs_file_copychunk_range(unsigned int xid,
1376 struct file *src_file, loff_t off,
1377 struct file *dst_file, loff_t destoff,
1378 size_t len, unsigned int flags)
1379{
1380 struct inode *src_inode = file_inode(src_file);
1381 struct inode *target_inode = file_inode(dst_file);
7b2404a8 1382 struct cifsInodeInfo *src_cifsi = CIFS_I(src_inode);
966cc171 1383 struct cifsInodeInfo *target_cifsi = CIFS_I(target_inode);
620d8745
SP
1384 struct cifsFileInfo *smb_file_src;
1385 struct cifsFileInfo *smb_file_target;
1386 struct cifs_tcon *src_tcon;
1387 struct cifs_tcon *target_tcon;
7b2404a8 1388 unsigned long long destend, fstart, fend;
620d8745
SP
1389 ssize_t rc;
1390
1391 cifs_dbg(FYI, "copychunk range\n");
1392
620d8745
SP
1393 if (!src_file->private_data || !dst_file->private_data) {
1394 rc = -EBADF;
1395 cifs_dbg(VFS, "missing cifsFileInfo on copy range src file\n");
1396 goto out;
1397 }
1398
1399 rc = -EXDEV;
1400 smb_file_target = dst_file->private_data;
1401 smb_file_src = src_file->private_data;
1402 src_tcon = tlink_tcon(smb_file_src->tlink);
1403 target_tcon = tlink_tcon(smb_file_target->tlink);
1404
1405 if (src_tcon->ses != target_tcon->ses) {
1406 cifs_dbg(VFS, "source and target of copy not on same server\n");
1407 goto out;
1408 }
1409
bf3c90ee
AG
1410 rc = -EOPNOTSUPP;
1411 if (!target_tcon->ses->server->ops->copychunk_range)
1412 goto out;
1413
620d8745
SP
1414 /*
1415 * Note: cifs case is easier than btrfs since server responsible for
1416 * checks for proper open modes and file type and if it wants
1417 * server could even support copy of range where source = target
1418 */
1419 lock_two_nondirectories(target_inode, src_inode);
1420
1421 cifs_dbg(FYI, "about to flush pages\n");
3e3761f1
SF
1422
1423 rc = filemap_write_and_wait_range(src_inode->i_mapping, off,
1424 off + len - 1);
1425 if (rc)
50248784 1426 goto unlock;
3e3761f1 1427
7b2404a8
DH
1428 /* The server-side copy will fail if the source crosses the EOF marker.
1429 * Advance the EOF marker after the flush above to the end of the range
1430 * if it's short of that.
1431 */
966cc171 1432 if (src_cifsi->netfs.remote_i_size < off + len) {
7b2404a8
DH
1433 rc = cifs_precopy_set_eof(src_inode, src_cifsi, src_tcon, xid, off + len);
1434 if (rc < 0)
1435 goto unlock;
1436 }
1437
1438 destend = destoff + len - 1;
1439
1440 /* Flush the folios at either end of the destination range to prevent
1441 * accidental loss of dirty data outside of the range.
1442 */
1443 fstart = destoff;
1444 fend = destend;
1445
1446 rc = cifs_flush_folio(target_inode, destoff, &fstart, &fend, true);
1447 if (rc)
1448 goto unlock;
1449 rc = cifs_flush_folio(target_inode, destend, &fstart, &fend, false);
1450 if (rc)
1451 goto unlock;
1452
1453 /* Discard all the folios that overlap the destination region. */
1454 truncate_inode_pages_range(&target_inode->i_data, fstart, fend);
620d8745 1455
966cc171
DH
1456 fscache_invalidate(cifs_inode_cookie(target_inode), NULL,
1457 i_size_read(target_inode), 0);
1458
bf3c90ee 1459 rc = file_modified(dst_file);
7b2404a8 1460 if (!rc) {
620d8745
SP
1461 rc = target_tcon->ses->server->ops->copychunk_range(xid,
1462 smb_file_src, smb_file_target, off, len, destoff);
966cc171 1463 if (rc > 0 && destoff + rc > i_size_read(target_inode)) {
7b2404a8 1464 truncate_setsize(target_inode, destoff + rc);
966cc171
DH
1465 netfs_resize_file(&target_cifsi->netfs,
1466 i_size_read(target_inode), true);
1467 fscache_resize_cookie(cifs_inode_cookie(target_inode),
1468 i_size_read(target_inode));
1469 }
1470 if (rc > 0 && destoff + rc > target_cifsi->netfs.zero_point)
1471 target_cifsi->netfs.zero_point = destoff + rc;
7b2404a8 1472 }
bf3c90ee
AG
1473
1474 file_accessed(src_file);
620d8745
SP
1475
1476 /* force revalidate of size and timestamps of target file now
1477 * that target is updated on the server
1478 */
1479 CIFS_I(target_inode)->time = 0;
50248784
C
1480
1481unlock:
620d8745
SP
1482 /* although unlocking in the reverse order from locking is not
1483 * strictly necessary here it is a little cleaner to be consistent
1484 */
1485 unlock_two_nondirectories(src_inode, target_inode);
1486
1487out:
1488 return rc;
1489}
1490
6e70c267
SF
1491/*
1492 * Directory operations under CIFS/SMB2/SMB3 are synchronous, so fsync()
1493 * is a dummy operation.
1494 */
1495static int cifs_dir_fsync(struct file *file, loff_t start, loff_t end, int datasync)
1496{
1497 cifs_dbg(FYI, "Sync directory - name: %pD datasync: 0x%x\n",
1498 file, datasync);
1499
1500 return 0;
1501}
1502
620d8745
SP
1503static ssize_t cifs_copy_file_range(struct file *src_file, loff_t off,
1504 struct file *dst_file, loff_t destoff,
1505 size_t len, unsigned int flags)
1506{
1507 unsigned int xid = get_xid();
1508 ssize_t rc;
4e8aea30
SF
1509 struct cifsFileInfo *cfile = dst_file->private_data;
1510
9a97df40
ZX
1511 if (cfile->swapfile) {
1512 rc = -EOPNOTSUPP;
1513 free_xid(xid);
1514 return rc;
1515 }
620d8745
SP
1516
1517 rc = cifs_file_copychunk_range(xid, src_file, off, dst_file, destoff,
1518 len, flags);
1519 free_xid(xid);
64bf5ff5 1520
5dae222a 1521 if (rc == -EOPNOTSUPP || rc == -EXDEV)
705bcfcb
AG
1522 rc = splice_copy_file_range(src_file, off, dst_file,
1523 destoff, len);
620d8745
SP
1524 return rc;
1525}
1526
4b6f5d20 1527const struct file_operations cifs_file_ops = {
08bc0353 1528 .read_iter = cifs_loose_read_iter,
3dae8750 1529 .write_iter = cifs_file_write_iter,
1da177e4
LT
1530 .open = cifs_open,
1531 .release = cifs_close,
1532 .lock = cifs_lock,
d0677992 1533 .flock = cifs_flock,
1da177e4
LT
1534 .fsync = cifs_fsync,
1535 .flush = cifs_flush,
1536 .mmap = cifs_file_mmap,
ab825131 1537 .splice_read = filemap_splice_read,
cd1aca29 1538 .splice_write = iter_file_splice_write,
c32a0b68 1539 .llseek = cifs_llseek,
f9ddcca4 1540 .unlocked_ioctl = cifs_ioctl,
620d8745 1541 .copy_file_range = cifs_copy_file_range,
2e5dfc99 1542 .remap_file_range = cifs_remap_file_range,
84210e91 1543 .setlease = cifs_setlease,
31742c5a 1544 .fallocate = cifs_fallocate,
1da177e4
LT
1545};
1546
8be7e6ba 1547const struct file_operations cifs_file_strict_ops = {
e6a7bcb4 1548 .read_iter = cifs_strict_readv,
3dae8750 1549 .write_iter = cifs_strict_writev,
8be7e6ba
PS
1550 .open = cifs_open,
1551 .release = cifs_close,
1552 .lock = cifs_lock,
d0677992 1553 .flock = cifs_flock,
8be7e6ba
PS
1554 .fsync = cifs_strict_fsync,
1555 .flush = cifs_flush,
7a6a19b1 1556 .mmap = cifs_file_strict_mmap,
ab825131 1557 .splice_read = filemap_splice_read,
cd1aca29 1558 .splice_write = iter_file_splice_write,
8be7e6ba 1559 .llseek = cifs_llseek,
8be7e6ba 1560 .unlocked_ioctl = cifs_ioctl,
620d8745 1561 .copy_file_range = cifs_copy_file_range,
2e5dfc99 1562 .remap_file_range = cifs_remap_file_range,
8be7e6ba 1563 .setlease = cifs_setlease,
31742c5a 1564 .fallocate = cifs_fallocate,
8be7e6ba
PS
1565};
1566
4b6f5d20 1567const struct file_operations cifs_file_direct_ops = {
be4eb688
LL
1568 .read_iter = cifs_direct_readv,
1569 .write_iter = cifs_direct_writev,
1da177e4
LT
1570 .open = cifs_open,
1571 .release = cifs_close,
1572 .lock = cifs_lock,
d0677992 1573 .flock = cifs_flock,
1da177e4
LT
1574 .fsync = cifs_fsync,
1575 .flush = cifs_flush,
a994b8fa 1576 .mmap = cifs_file_mmap,
69df79a4 1577 .splice_read = copy_splice_read,
cd1aca29 1578 .splice_write = iter_file_splice_write,
f9ddcca4 1579 .unlocked_ioctl = cifs_ioctl,
620d8745 1580 .copy_file_range = cifs_copy_file_range,
2e5dfc99 1581 .remap_file_range = cifs_remap_file_range,
c32a0b68 1582 .llseek = cifs_llseek,
84210e91 1583 .setlease = cifs_setlease,
31742c5a 1584 .fallocate = cifs_fallocate,
1da177e4 1585};
8be7e6ba 1586
4b6f5d20 1587const struct file_operations cifs_file_nobrl_ops = {
08bc0353 1588 .read_iter = cifs_loose_read_iter,
3dae8750 1589 .write_iter = cifs_file_write_iter,
87c89dd7
SF
1590 .open = cifs_open,
1591 .release = cifs_close,
1592 .fsync = cifs_fsync,
1593 .flush = cifs_flush,
1594 .mmap = cifs_file_mmap,
ab825131 1595 .splice_read = filemap_splice_read,
cd1aca29 1596 .splice_write = iter_file_splice_write,
c32a0b68 1597 .llseek = cifs_llseek,
f9ddcca4 1598 .unlocked_ioctl = cifs_ioctl,
620d8745 1599 .copy_file_range = cifs_copy_file_range,
2e5dfc99 1600 .remap_file_range = cifs_remap_file_range,
84210e91 1601 .setlease = cifs_setlease,
31742c5a 1602 .fallocate = cifs_fallocate,
8b94bcb9
SF
1603};
1604
8be7e6ba 1605const struct file_operations cifs_file_strict_nobrl_ops = {
e6a7bcb4 1606 .read_iter = cifs_strict_readv,
3dae8750 1607 .write_iter = cifs_strict_writev,
8be7e6ba
PS
1608 .open = cifs_open,
1609 .release = cifs_close,
1610 .fsync = cifs_strict_fsync,
1611 .flush = cifs_flush,
7a6a19b1 1612 .mmap = cifs_file_strict_mmap,
ab825131 1613 .splice_read = filemap_splice_read,
cd1aca29 1614 .splice_write = iter_file_splice_write,
8be7e6ba 1615 .llseek = cifs_llseek,
8be7e6ba 1616 .unlocked_ioctl = cifs_ioctl,
620d8745 1617 .copy_file_range = cifs_copy_file_range,
2e5dfc99 1618 .remap_file_range = cifs_remap_file_range,
8be7e6ba 1619 .setlease = cifs_setlease,
31742c5a 1620 .fallocate = cifs_fallocate,
8be7e6ba
PS
1621};
1622
4b6f5d20 1623const struct file_operations cifs_file_direct_nobrl_ops = {
be4eb688
LL
1624 .read_iter = cifs_direct_readv,
1625 .write_iter = cifs_direct_writev,
87c89dd7
SF
1626 .open = cifs_open,
1627 .release = cifs_close,
1628 .fsync = cifs_fsync,
1629 .flush = cifs_flush,
810627a0 1630 .mmap = cifs_file_mmap,
69df79a4 1631 .splice_read = copy_splice_read,
cd1aca29 1632 .splice_write = iter_file_splice_write,
f9ddcca4 1633 .unlocked_ioctl = cifs_ioctl,
620d8745 1634 .copy_file_range = cifs_copy_file_range,
2e5dfc99 1635 .remap_file_range = cifs_remap_file_range,
c32a0b68 1636 .llseek = cifs_llseek,
84210e91 1637 .setlease = cifs_setlease,
31742c5a 1638 .fallocate = cifs_fallocate,
8b94bcb9 1639};
1da177e4 1640
4b6f5d20 1641const struct file_operations cifs_dir_ops = {
3125d265 1642 .iterate_shared = cifs_readdir,
1da177e4
LT
1643 .release = cifs_closedir,
1644 .read = generic_read_dir,
f9ddcca4 1645 .unlocked_ioctl = cifs_ioctl,
620d8745 1646 .copy_file_range = cifs_copy_file_range,
2e5dfc99 1647 .remap_file_range = cifs_remap_file_range,
3222a3e5 1648 .llseek = generic_file_llseek,
6e70c267 1649 .fsync = cifs_dir_fsync,
1da177e4
LT
1650};
1651
1652static void
51cc5068 1653cifs_init_once(void *inode)
1da177e4
LT
1654{
1655 struct cifsInodeInfo *cifsi = inode;
1656
874c8ca1 1657 inode_init_once(&cifsi->netfs.inode);
1b4b55a1 1658 init_rwsem(&cifsi->lock_sem);
1da177e4
LT
1659}
1660
9ee108b2 1661static int __init
1da177e4
LT
1662cifs_init_inodecache(void)
1663{
1664 cifs_inode_cachep = kmem_cache_create("cifs_inode_cache",
26f57364 1665 sizeof(struct cifsInodeInfo),
fffb60f9 1666 0, (SLAB_RECLAIM_ACCOUNT|
f88c3fb8 1667 SLAB_ACCOUNT),
20c2df83 1668 cifs_init_once);
1da177e4
LT
1669 if (cifs_inode_cachep == NULL)
1670 return -ENOMEM;
1671
1672 return 0;
1673}
1674
1675static void
1676cifs_destroy_inodecache(void)
1677{
8c0a8537
KS
1678 /*
1679 * Make sure all delayed rcu free inodes are flushed before we
1680 * destroy cache.
1681 */
1682 rcu_barrier();
1a1d92c1 1683 kmem_cache_destroy(cifs_inode_cachep);
1da177e4
LT
1684}
1685
1686static int
1687cifs_init_request_bufs(void)
1688{
3792c173
PS
1689 /*
1690 * SMB2 maximum header size is bigger than CIFS one - no problems to
1691 * allocate some more bytes for CIFS.
1692 */
2a38e120
SF
1693 size_t max_hdr_size = MAX_SMB2_HDR_SIZE;
1694
4523cc30 1695 if (CIFSMaxBufSize < 8192) {
1da177e4
LT
1696 /* Buffer size can not be smaller than 2 * PATH_MAX since maximum
1697 Unicode path name has to fit in any SMB/CIFS path based frames */
1698 CIFSMaxBufSize = 8192;
1699 } else if (CIFSMaxBufSize > 1024*127) {
1700 CIFSMaxBufSize = 1024 * 127;
1701 } else {
1702 CIFSMaxBufSize &= 0x1FE00; /* Round size to even 512 byte mult*/
1703 }
f96637be
JP
1704/*
1705 cifs_dbg(VFS, "CIFSMaxBufSize %d 0x%x\n",
1706 CIFSMaxBufSize, CIFSMaxBufSize);
1707*/
de046449 1708 cifs_req_cachep = kmem_cache_create_usercopy("cifs_request",
3792c173 1709 CIFSMaxBufSize + max_hdr_size, 0,
de046449
DW
1710 SLAB_HWCACHE_ALIGN, 0,
1711 CIFSMaxBufSize + max_hdr_size,
1712 NULL);
1da177e4
LT
1713 if (cifs_req_cachep == NULL)
1714 return -ENOMEM;
1715
4523cc30 1716 if (cifs_min_rcv < 1)
1da177e4
LT
1717 cifs_min_rcv = 1;
1718 else if (cifs_min_rcv > 64) {
1719 cifs_min_rcv = 64;
f96637be 1720 cifs_dbg(VFS, "cifs_min_rcv set to maximum (64)\n");
1da177e4
LT
1721 }
1722
93d2341c
MD
1723 cifs_req_poolp = mempool_create_slab_pool(cifs_min_rcv,
1724 cifs_req_cachep);
1da177e4 1725
4523cc30 1726 if (cifs_req_poolp == NULL) {
1da177e4
LT
1727 kmem_cache_destroy(cifs_req_cachep);
1728 return -ENOMEM;
1729 }
ec637e3f 1730 /* MAX_CIFS_SMALL_BUFFER_SIZE bytes is enough for most SMB responses and
1da177e4
LT
1731 almost all handle based requests (but not write response, nor is it
1732 sufficient for path based requests). A smaller size would have
50c2f753 1733 been more efficient (compacting multiple slab items on one 4k page)
1da177e4
LT
1734 for the case in which debug was on, but this larger size allows
1735 more SMBs to use small buffer alloc and is still much more
6dc0f87e 1736 efficient to alloc 1 per page off the slab compared to 17K (5page)
1da177e4 1737 alloc of large cifs buffers even when page debugging is on */
de046449 1738 cifs_sm_req_cachep = kmem_cache_create_usercopy("cifs_small_rq",
6dc0f87e 1739 MAX_CIFS_SMALL_BUFFER_SIZE, 0, SLAB_HWCACHE_ALIGN,
de046449 1740 0, MAX_CIFS_SMALL_BUFFER_SIZE, NULL);
1da177e4
LT
1741 if (cifs_sm_req_cachep == NULL) {
1742 mempool_destroy(cifs_req_poolp);
1743 kmem_cache_destroy(cifs_req_cachep);
6dc0f87e 1744 return -ENOMEM;
1da177e4
LT
1745 }
1746
4523cc30 1747 if (cifs_min_small < 2)
1da177e4
LT
1748 cifs_min_small = 2;
1749 else if (cifs_min_small > 256) {
1750 cifs_min_small = 256;
f96637be 1751 cifs_dbg(FYI, "cifs_min_small set to maximum (256)\n");
1da177e4
LT
1752 }
1753
93d2341c
MD
1754 cifs_sm_req_poolp = mempool_create_slab_pool(cifs_min_small,
1755 cifs_sm_req_cachep);
1da177e4 1756
4523cc30 1757 if (cifs_sm_req_poolp == NULL) {
1da177e4
LT
1758 mempool_destroy(cifs_req_poolp);
1759 kmem_cache_destroy(cifs_req_cachep);
1760 kmem_cache_destroy(cifs_sm_req_cachep);
1761 return -ENOMEM;
1762 }
1763
1764 return 0;
1765}
1766
1767static void
1768cifs_destroy_request_bufs(void)
1769{
1770 mempool_destroy(cifs_req_poolp);
1a1d92c1 1771 kmem_cache_destroy(cifs_req_cachep);
1da177e4 1772 mempool_destroy(cifs_sm_req_poolp);
1a1d92c1 1773 kmem_cache_destroy(cifs_sm_req_cachep);
1da177e4
LT
1774}
1775
f5fd3f28 1776static int init_mids(void)
1da177e4
LT
1777{
1778 cifs_mid_cachep = kmem_cache_create("cifs_mpx_ids",
26f57364
SF
1779 sizeof(struct mid_q_entry), 0,
1780 SLAB_HWCACHE_ALIGN, NULL);
1da177e4
LT
1781 if (cifs_mid_cachep == NULL)
1782 return -ENOMEM;
1783
93d2341c
MD
1784 /* 3 is a reasonable minimum number of simultaneous operations */
1785 cifs_mid_poolp = mempool_create_slab_pool(3, cifs_mid_cachep);
4523cc30 1786 if (cifs_mid_poolp == NULL) {
1da177e4
LT
1787 kmem_cache_destroy(cifs_mid_cachep);
1788 return -ENOMEM;
1789 }
1790
1da177e4
LT
1791 return 0;
1792}
1793
f5fd3f28 1794static void destroy_mids(void)
1da177e4
LT
1795{
1796 mempool_destroy(cifs_mid_poolp);
1a1d92c1 1797 kmem_cache_destroy(cifs_mid_cachep);
1da177e4
LT
1798}
1799
1da177e4
LT
1800static int __init
1801init_cifs(void)
1802{
1803 int rc = 0;
1da177e4 1804 cifs_proc_init();
e7ddee90 1805 INIT_LIST_HEAD(&cifs_tcp_ses_list);
1da177e4
LT
1806/*
1807 * Initialize Global counters
1808 */
1809 atomic_set(&sesInfoAllocCount, 0);
1810 atomic_set(&tconInfoAllocCount, 0);
6d82c27a 1811 atomic_set(&tcpSesNextId, 0);
6dc0f87e 1812 atomic_set(&tcpSesAllocCount, 0);
1da177e4
LT
1813 atomic_set(&tcpSesReconnectCount, 0);
1814 atomic_set(&tconInfoReconnectCount, 0);
1815
c2c17ddb
SF
1816 atomic_set(&buf_alloc_count, 0);
1817 atomic_set(&small_buf_alloc_count, 0);
4498eed5 1818#ifdef CONFIG_CIFS_STATS2
c2c17ddb
SF
1819 atomic_set(&total_buf_alloc_count, 0);
1820 atomic_set(&total_small_buf_alloc_count, 0);
00778e22
SF
1821 if (slow_rsp_threshold < 1)
1822 cifs_dbg(FYI, "slow_response_threshold msgs disabled\n");
1823 else if (slow_rsp_threshold > 32767)
1824 cifs_dbg(VFS,
1825 "slow response threshold set higher than recommended (0 to 32767)\n");
4498eed5
SF
1826#endif /* CONFIG_CIFS_STATS2 */
1827
c2c17ddb 1828 atomic_set(&mid_count, 0);
1da177e4
LT
1829 GlobalCurrentXid = 0;
1830 GlobalTotalActiveXid = 0;
1831 GlobalMaxActiveXid = 0;
3f9bcca7 1832 spin_lock_init(&cifs_tcp_ses_lock);
1da177e4
LT
1833 spin_lock_init(&GlobalMid_Lock);
1834
51b0817b 1835 cifs_lock_secret = get_random_u32();
3d22462a 1836
4523cc30 1837 if (cifs_max_pending < 2) {
1da177e4 1838 cifs_max_pending = 2;
f96637be 1839 cifs_dbg(FYI, "cifs_max_pending set to min of 2\n");
10b9b98e
PS
1840 } else if (cifs_max_pending > CIFS_MAX_REQ) {
1841 cifs_max_pending = CIFS_MAX_REQ;
f96637be
JP
1842 cifs_dbg(FYI, "cifs_max_pending set to max of %u\n",
1843 CIFS_MAX_REQ);
1da177e4
LT
1844 }
1845
238b351d
SF
1846 /* Limit max to about 18 hours, and setting to zero disables directory entry caching */
1847 if (dir_cache_timeout > 65000) {
1848 dir_cache_timeout = 65000;
1849 cifs_dbg(VFS, "dir_cache_timeout set to max of 65000 seconds\n");
1850 }
1851
da472fc8
JL
1852 cifsiod_wq = alloc_workqueue("cifsiod", WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1853 if (!cifsiod_wq) {
1854 rc = -ENOMEM;
1855 goto out_clean_proc;
1856 }
1857
35cf94a3 1858 /*
10328c44
SF
1859 * Consider in future setting limit!=0 maybe to min(num_of_cores - 1, 3)
1860 * so that we don't launch too many worker threads but
0ac624f4 1861 * Documentation/core-api/workqueue.rst recommends setting it to 0
35cf94a3 1862 */
10328c44
SF
1863
1864 /* WQ_UNBOUND allows decrypt tasks to run on any CPU */
35cf94a3 1865 decrypt_wq = alloc_workqueue("smb3decryptd",
10328c44 1866 WQ_UNBOUND|WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
35cf94a3
SF
1867 if (!decrypt_wq) {
1868 rc = -ENOMEM;
1869 goto out_destroy_cifsiod_wq;
1870 }
1871
32546a95
RS
1872 fileinfo_put_wq = alloc_workqueue("cifsfileinfoput",
1873 WQ_UNBOUND|WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1874 if (!fileinfo_put_wq) {
1875 rc = -ENOMEM;
1876 goto out_destroy_decrypt_wq;
1877 }
1878
3998e6b8
RV
1879 cifsoplockd_wq = alloc_workqueue("cifsoplockd",
1880 WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1881 if (!cifsoplockd_wq) {
1882 rc = -ENOMEM;
32546a95 1883 goto out_destroy_fileinfo_put_wq;
3998e6b8
RV
1884 }
1885
c3f207ab
RS
1886 deferredclose_wq = alloc_workqueue("deferredclose",
1887 WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
1888 if (!deferredclose_wq) {
1889 rc = -ENOMEM;
1890 goto out_destroy_cifsoplockd_wq;
1891 }
1892
1da177e4 1893 rc = cifs_init_inodecache();
45af7a0f 1894 if (rc)
70431bfd 1895 goto out_destroy_deferredclose_wq;
45af7a0f 1896
f5fd3f28 1897 rc = init_mids();
45af7a0f
SF
1898 if (rc)
1899 goto out_destroy_inodecache;
1900
1901 rc = cifs_init_request_bufs();
1902 if (rc)
1903 goto out_destroy_mids;
1904
1c780228
PA
1905#ifdef CONFIG_CIFS_DFS_UPCALL
1906 rc = dfs_cache_init();
1907 if (rc)
1908 goto out_destroy_request_bufs;
1909#endif /* CONFIG_CIFS_DFS_UPCALL */
84a15b93 1910#ifdef CONFIG_CIFS_UPCALL
b74cb9a8 1911 rc = init_cifs_spnego();
84a15b93 1912 if (rc)
1c780228 1913 goto out_destroy_dfs_cache;
4d79dba0 1914#endif /* CONFIG_CIFS_UPCALL */
06f08dab
SC
1915#ifdef CONFIG_CIFS_SWN_UPCALL
1916 rc = cifs_genl_init();
1917 if (rc)
1918 goto out_register_key_type;
1919#endif /* CONFIG_CIFS_SWN_UPCALL */
4d79dba0 1920
4d79dba0
SP
1921 rc = init_cifs_idmap();
1922 if (rc)
06f08dab 1923 goto out_cifs_swn_init;
4d79dba0
SP
1924
1925 rc = register_filesystem(&cifs_fs_type);
1926 if (rc)
c4aca0c0 1927 goto out_init_cifs_idmap;
45af7a0f 1928
49218b4f
SF
1929 rc = register_filesystem(&smb3_fs_type);
1930 if (rc) {
1931 unregister_filesystem(&cifs_fs_type);
1932 goto out_init_cifs_idmap;
1933 }
1934
45af7a0f
SF
1935 return 0;
1936
c4aca0c0 1937out_init_cifs_idmap:
4d79dba0 1938 exit_cifs_idmap();
06f08dab
SC
1939out_cifs_swn_init:
1940#ifdef CONFIG_CIFS_SWN_UPCALL
1941 cifs_genl_exit();
c4aca0c0 1942out_register_key_type:
06f08dab 1943#endif
84a15b93 1944#ifdef CONFIG_CIFS_UPCALL
b74cb9a8 1945 exit_cifs_spnego();
1c780228
PA
1946out_destroy_dfs_cache:
1947#endif
1948#ifdef CONFIG_CIFS_DFS_UPCALL
1949 dfs_cache_destroy();
c4aca0c0 1950out_destroy_request_bufs:
1fc7995d 1951#endif
45af7a0f 1952 cifs_destroy_request_bufs();
d3bf5221 1953out_destroy_mids:
f5fd3f28 1954 destroy_mids();
d3bf5221 1955out_destroy_inodecache:
45af7a0f 1956 cifs_destroy_inodecache();
c3f207ab
RS
1957out_destroy_deferredclose_wq:
1958 destroy_workqueue(deferredclose_wq);
3998e6b8
RV
1959out_destroy_cifsoplockd_wq:
1960 destroy_workqueue(cifsoplockd_wq);
32546a95
RS
1961out_destroy_fileinfo_put_wq:
1962 destroy_workqueue(fileinfo_put_wq);
35cf94a3
SF
1963out_destroy_decrypt_wq:
1964 destroy_workqueue(decrypt_wq);
3998e6b8 1965out_destroy_cifsiod_wq:
da472fc8 1966 destroy_workqueue(cifsiod_wq);
d3bf5221
SF
1967out_clean_proc:
1968 cifs_proc_clean();
1da177e4
LT
1969 return rc;
1970}
1971
1972static void __exit
1973exit_cifs(void)
1974{
49218b4f 1975 cifs_dbg(NOISY, "exit_smb3\n");
3dd93306 1976 unregister_filesystem(&cifs_fs_type);
49218b4f 1977 unregister_filesystem(&smb3_fs_type);
0a049935 1978 cifs_release_automount_timer();
4d79dba0 1979 exit_cifs_idmap();
06f08dab
SC
1980#ifdef CONFIG_CIFS_SWN_UPCALL
1981 cifs_genl_exit();
1982#endif
84a15b93 1983#ifdef CONFIG_CIFS_UPCALL
94183331 1984 exit_cifs_spnego();
1c780228
PA
1985#endif
1986#ifdef CONFIG_CIFS_DFS_UPCALL
1987 dfs_cache_destroy();
1da177e4 1988#endif
1da177e4 1989 cifs_destroy_request_bufs();
f5fd3f28 1990 destroy_mids();
3dd93306 1991 cifs_destroy_inodecache();
c3f207ab 1992 destroy_workqueue(deferredclose_wq);
3998e6b8 1993 destroy_workqueue(cifsoplockd_wq);
35cf94a3 1994 destroy_workqueue(decrypt_wq);
32546a95 1995 destroy_workqueue(fileinfo_put_wq);
da472fc8 1996 destroy_workqueue(cifsiod_wq);
3dd93306 1997 cifs_proc_clean();
1da177e4
LT
1998}
1999
1c3a13a3 2000MODULE_AUTHOR("Steve French");
6dc0f87e 2001MODULE_LICENSE("GPL"); /* combination of LGPL + GPL source behaves as GPL */
1da177e4 2002MODULE_DESCRIPTION
1c3a13a3
SF
2003 ("VFS to access SMB3 servers e.g. Samba, Macs, Azure and Windows (and "
2004 "also older servers complying with the SNIA CIFS Specification)");
1da177e4 2005MODULE_VERSION(CIFS_VERSION);
3591bb83
RS
2006MODULE_SOFTDEP("ecb");
2007MODULE_SOFTDEP("hmac");
3591bb83
RS
2008MODULE_SOFTDEP("md5");
2009MODULE_SOFTDEP("nls");
2010MODULE_SOFTDEP("aes");
2011MODULE_SOFTDEP("cmac");
2012MODULE_SOFTDEP("sha256");
2013MODULE_SOFTDEP("sha512");
2014MODULE_SOFTDEP("aead2");
2015MODULE_SOFTDEP("ccm");
2016MODULE_SOFTDEP("gcm");
1da177e4
LT
2017module_init(init_cifs)
2018module_exit(exit_cifs)