xref: /linux/fs/smb/client/file.c (revision c27e360545373b7aee9862a5beef3b9fb3df0c25)
1 // SPDX-License-Identifier: LGPL-2.1
2 /*
3  *
4  *   vfs operations that deal with files
5  *
6  *   Copyright (C) International Business Machines  Corp., 2002,2010
7  *   Author(s): Steve French (sfrench@us.ibm.com)
8  *              Jeremy Allison (jra@samba.org)
9  *
10  */
11 #include <linux/fs.h>
12 #include <linux/fs_struct.h>
13 #include <linux/filelock.h>
14 #include <linux/backing-dev.h>
15 #include <linux/stat.h>
16 #include <linux/fcntl.h>
17 #include <linux/pagemap.h>
18 #include <linux/writeback.h>
19 #include <linux/task_io_accounting_ops.h>
20 #include <linux/delay.h>
21 #include <linux/mount.h>
22 #include <linux/slab.h>
23 #include <linux/swap.h>
24 #include <linux/mm.h>
25 #include <asm/div64.h>
26 #include "cifsfs.h"
27 #include "cifsglob.h"
28 #include "cifsproto.h"
29 #include "smb2proto.h"
30 #include "cifs_unicode.h"
31 #include "cifs_debug.h"
32 #include "cifs_fs_sb.h"
33 #include "fscache.h"
34 #include "smbdirect.h"
35 #include "fs_context.h"
36 #include "cifs_ioctl.h"
37 #include "cached_dir.h"
38 #include <trace/events/netfs.h>
39 
40 static int cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush);
41 
42 /*
43  * Prepare a subrequest to upload to the server.  We need to allocate credits
44  * so that we know the maximum amount of data that we can include in it.
45  */
46 static void cifs_prepare_write(struct netfs_io_subrequest *subreq)
47 {
48 	struct cifs_io_subrequest *wdata =
49 		container_of(subreq, struct cifs_io_subrequest, subreq);
50 	struct cifs_io_request *req = wdata->req;
51 	struct netfs_io_stream *stream = &req->rreq.io_streams[subreq->stream_nr];
52 	struct TCP_Server_Info *server;
53 	struct cifsFileInfo *open_file = req->cfile;
54 	struct cifs_sb_info *cifs_sb = CIFS_SB(wdata->rreq->inode->i_sb);
55 	size_t wsize = req->rreq.wsize;
56 	int rc;
57 
58 	if (!wdata->have_xid) {
59 		wdata->xid = get_xid();
60 		wdata->have_xid = true;
61 	}
62 
63 	server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses);
64 	wdata->server = server;
65 
66 	if (cifs_sb->ctx->wsize == 0)
67 		cifs_negotiate_wsize(server, cifs_sb->ctx,
68 				     tlink_tcon(req->cfile->tlink));
69 
70 retry:
71 	if (open_file->invalidHandle) {
72 		rc = cifs_reopen_file(open_file, false);
73 		if (rc < 0) {
74 			if (rc == -EAGAIN)
75 				goto retry;
76 			subreq->error = rc;
77 			return netfs_prepare_write_failed(subreq);
78 		}
79 	}
80 
81 	rc = server->ops->wait_mtu_credits(server, wsize, &stream->sreq_max_len,
82 					   &wdata->credits);
83 	if (rc < 0) {
84 		subreq->error = rc;
85 		return netfs_prepare_write_failed(subreq);
86 	}
87 
88 	wdata->credits.rreq_debug_id = subreq->rreq->debug_id;
89 	wdata->credits.rreq_debug_index = subreq->debug_index;
90 	wdata->credits.in_flight_check = 1;
91 	trace_smb3_rw_credits(wdata->rreq->debug_id,
92 			      wdata->subreq.debug_index,
93 			      wdata->credits.value,
94 			      server->credits, server->in_flight,
95 			      wdata->credits.value,
96 			      cifs_trace_rw_credits_write_prepare);
97 
98 #ifdef CONFIG_CIFS_SMB_DIRECT
99 	if (server->smbd_conn) {
100 		const struct smbdirect_socket_parameters *sp =
101 			smbd_get_parameters(server->smbd_conn);
102 
103 		stream->sreq_max_segs = sp->max_frmr_depth;
104 	}
105 #endif
106 }
107 
108 /*
109  * Issue a subrequest to upload to the server.
110  */
111 static void cifs_issue_write(struct netfs_io_subrequest *subreq)
112 {
113 	struct cifs_io_subrequest *wdata =
114 		container_of(subreq, struct cifs_io_subrequest, subreq);
115 	struct cifs_sb_info *sbi = CIFS_SB(subreq->rreq->inode->i_sb);
116 	int rc;
117 
118 	if (cifs_forced_shutdown(sbi)) {
119 		rc = smb_EIO(smb_eio_trace_forced_shutdown);
120 		goto fail;
121 	}
122 
123 	rc = adjust_credits(wdata->server, wdata, cifs_trace_rw_credits_issue_write_adjust);
124 	if (rc)
125 		goto fail;
126 
127 	rc = -EAGAIN;
128 	if (wdata->req->cfile->invalidHandle)
129 		goto fail;
130 
131 	wdata->server->ops->async_writev(wdata);
132 out:
133 	return;
134 
135 fail:
136 	if (rc == -EAGAIN)
137 		trace_netfs_sreq(subreq, netfs_sreq_trace_retry);
138 	else
139 		trace_netfs_sreq(subreq, netfs_sreq_trace_fail);
140 	add_credits_and_wake_if(wdata->server, &wdata->credits, 0);
141 	cifs_write_subrequest_terminated(wdata, rc);
142 	goto out;
143 }
144 
145 static void cifs_netfs_invalidate_cache(struct netfs_io_request *wreq)
146 {
147 	cifs_invalidate_cache(wreq->inode, 0);
148 }
149 
150 /*
151  * Negotiate the size of a read operation on behalf of the netfs library.
152  */
153 static int cifs_prepare_read(struct netfs_io_subrequest *subreq)
154 {
155 	struct netfs_io_request *rreq = subreq->rreq;
156 	struct cifs_io_subrequest *rdata = container_of(subreq, struct cifs_io_subrequest, subreq);
157 	struct cifs_io_request *req = container_of(subreq->rreq, struct cifs_io_request, rreq);
158 	struct TCP_Server_Info *server;
159 	struct cifs_sb_info *cifs_sb = CIFS_SB(rreq->inode->i_sb);
160 	size_t size;
161 	int rc = 0;
162 
163 	if (!rdata->have_xid) {
164 		rdata->xid = get_xid();
165 		rdata->have_xid = true;
166 	}
167 
168 	server = cifs_pick_channel(tlink_tcon(req->cfile->tlink)->ses);
169 	rdata->server = server;
170 
171 	if (cifs_sb->ctx->rsize == 0)
172 		cifs_negotiate_rsize(server, cifs_sb->ctx,
173 				     tlink_tcon(req->cfile->tlink));
174 
175 	rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize,
176 					   &size, &rdata->credits);
177 	if (rc)
178 		return rc;
179 
180 	rreq->io_streams[0].sreq_max_len = size;
181 
182 	rdata->credits.in_flight_check = 1;
183 	rdata->credits.rreq_debug_id = rreq->debug_id;
184 	rdata->credits.rreq_debug_index = subreq->debug_index;
185 
186 	trace_smb3_rw_credits(rdata->rreq->debug_id,
187 			      rdata->subreq.debug_index,
188 			      rdata->credits.value,
189 			      server->credits, server->in_flight, 0,
190 			      cifs_trace_rw_credits_read_submit);
191 
192 #ifdef CONFIG_CIFS_SMB_DIRECT
193 	if (server->smbd_conn) {
194 		const struct smbdirect_socket_parameters *sp =
195 			smbd_get_parameters(server->smbd_conn);
196 
197 		rreq->io_streams[0].sreq_max_segs = sp->max_frmr_depth;
198 	}
199 #endif
200 	return 0;
201 }
202 
203 /*
204  * Issue a read operation on behalf of the netfs helper functions.  We're asked
205  * to make a read of a certain size at a point in the file.  We are permitted
206  * to only read a portion of that, but as long as we read something, the netfs
207  * helper will call us again so that we can issue another read.
208  */
209 static void cifs_issue_read(struct netfs_io_subrequest *subreq)
210 {
211 	struct netfs_io_request *rreq = subreq->rreq;
212 	struct cifs_io_subrequest *rdata = container_of(subreq, struct cifs_io_subrequest, subreq);
213 	struct cifs_io_request *req = container_of(subreq->rreq, struct cifs_io_request, rreq);
214 	struct TCP_Server_Info *server = rdata->server;
215 	int rc = 0;
216 
217 	cifs_dbg(FYI, "%s: op=%08x[%x] mapping=%p len=%zu/%zu\n",
218 		 __func__, rreq->debug_id, subreq->debug_index, rreq->mapping,
219 		 subreq->transferred, subreq->len);
220 
221 	rc = adjust_credits(server, rdata, cifs_trace_rw_credits_issue_read_adjust);
222 	if (rc)
223 		goto failed;
224 
225 	if (req->cfile->invalidHandle) {
226 		do {
227 			rc = cifs_reopen_file(req->cfile, true);
228 		} while (rc == -EAGAIN);
229 		if (rc)
230 			goto failed;
231 	}
232 
233 	if (subreq->rreq->origin != NETFS_UNBUFFERED_READ &&
234 	    subreq->rreq->origin != NETFS_DIO_READ)
235 		__set_bit(NETFS_SREQ_CLEAR_TAIL, &subreq->flags);
236 
237 	trace_netfs_sreq(subreq, netfs_sreq_trace_submit);
238 	rc = rdata->server->ops->async_readv(rdata);
239 	if (rc)
240 		goto failed;
241 	return;
242 
243 failed:
244 	add_credits_and_wake_if(rdata->server, &rdata->credits, 0);
245 	subreq->error = rc;
246 	netfs_read_subreq_terminated(subreq);
247 }
248 
249 /*
250  * Writeback calls this when it finds a folio that needs uploading.  This isn't
251  * called if writeback only has copy-to-cache to deal with.
252  */
253 static void cifs_begin_writeback(struct netfs_io_request *wreq)
254 {
255 	struct cifs_io_request *req = container_of(wreq, struct cifs_io_request, rreq);
256 	int ret;
257 
258 	ret = cifs_get_writable_file(CIFS_I(wreq->inode), FIND_ANY, &req->cfile);
259 	if (ret) {
260 		cifs_dbg(VFS, "No writable handle in writepages ret=%d\n", ret);
261 		return;
262 	}
263 
264 	wreq->io_streams[0].avail = true;
265 }
266 
267 /*
268  * Initialise a request.
269  */
270 static int cifs_init_request(struct netfs_io_request *rreq, struct file *file)
271 {
272 	struct cifs_io_request *req = container_of(rreq, struct cifs_io_request, rreq);
273 	struct cifs_sb_info *cifs_sb = CIFS_SB(rreq->inode);
274 	struct cifsFileInfo *open_file = NULL;
275 
276 	rreq->rsize = cifs_sb->ctx->rsize;
277 	rreq->wsize = cifs_sb->ctx->wsize;
278 	req->pid = current->tgid; // Ummm...  This may be a workqueue
279 
280 	if (file) {
281 		open_file = file->private_data;
282 		rreq->netfs_priv = file->private_data;
283 		req->cfile = cifsFileInfo_get(open_file);
284 		if (cifs_sb_flags(cifs_sb) & CIFS_MOUNT_RWPIDFORWARD)
285 			req->pid = req->cfile->pid;
286 	} else if (rreq->origin != NETFS_WRITEBACK) {
287 		WARN_ON_ONCE(1);
288 		return smb_EIO1(smb_eio_trace_not_netfs_writeback, rreq->origin);
289 	}
290 
291 	atomic_inc(&cifs_sb->outstanding_rreq);
292 	return 0;
293 }
294 
295 /*
296  * Completion of a request operation.
297  */
298 static void cifs_rreq_done(struct netfs_io_request *rreq)
299 {
300 	struct timespec64 atime, mtime;
301 	struct inode *inode = rreq->inode;
302 
303 	/* we do not want atime to be less than mtime, it broke some apps */
304 	atime = inode_set_atime_to_ts(inode, current_time(inode));
305 	mtime = inode_get_mtime(inode);
306 	if (timespec64_compare(&atime, &mtime) < 0)
307 		inode_set_atime_to_ts(inode, inode_get_mtime(inode));
308 }
309 
310 static void cifs_free_request(struct netfs_io_request *rreq)
311 {
312 	struct cifs_io_request *req = container_of(rreq, struct cifs_io_request, rreq);
313 	struct cifs_sb_info *cifs_sb = CIFS_SB(rreq->inode->i_sb);
314 
315 	if (req->cfile)
316 		cifsFileInfo_put(req->cfile);
317 
318 	if (atomic_dec_and_test(&cifs_sb->outstanding_rreq))
319 		wake_up_var(&cifs_sb->outstanding_rreq);
320 }
321 
322 static void cifs_free_subrequest(struct netfs_io_subrequest *subreq)
323 {
324 	struct cifs_io_subrequest *rdata =
325 		container_of(subreq, struct cifs_io_subrequest, subreq);
326 	int rc = subreq->error;
327 
328 	if (rdata->subreq.source == NETFS_DOWNLOAD_FROM_SERVER) {
329 #ifdef CONFIG_CIFS_SMB_DIRECT
330 		if (rdata->mr) {
331 			smbd_deregister_mr(rdata->mr);
332 			rdata->mr = NULL;
333 		}
334 #endif
335 	}
336 
337 	if (rdata->credits.value != 0) {
338 		trace_smb3_rw_credits(rdata->rreq->debug_id,
339 				      rdata->subreq.debug_index,
340 				      rdata->credits.value,
341 				      rdata->server ? rdata->server->credits : 0,
342 				      rdata->server ? rdata->server->in_flight : 0,
343 				      -rdata->credits.value,
344 				      cifs_trace_rw_credits_free_subreq);
345 		if (rdata->server)
346 			add_credits_and_wake_if(rdata->server, &rdata->credits, 0);
347 		else
348 			rdata->credits.value = 0;
349 	}
350 
351 	if (rdata->have_xid)
352 		free_xid(rdata->xid);
353 }
354 
355 const struct netfs_request_ops cifs_req_ops = {
356 	.request_pool		= &cifs_io_request_pool,
357 	.subrequest_pool	= &cifs_io_subrequest_pool,
358 	.init_request		= cifs_init_request,
359 	.free_request		= cifs_free_request,
360 	.free_subrequest	= cifs_free_subrequest,
361 	.prepare_read		= cifs_prepare_read,
362 	.issue_read		= cifs_issue_read,
363 	.done			= cifs_rreq_done,
364 	.begin_writeback	= cifs_begin_writeback,
365 	.prepare_write		= cifs_prepare_write,
366 	.issue_write		= cifs_issue_write,
367 	.invalidate_cache	= cifs_netfs_invalidate_cache,
368 };
369 
370 /*
371  * Mark as invalid, all open files on tree connections since they
372  * were closed when session to server was lost.
373  */
374 void
375 cifs_mark_open_files_invalid(struct cifs_tcon *tcon)
376 {
377 	struct cifsFileInfo *open_file = NULL;
378 	struct list_head *tmp;
379 	struct list_head *tmp1;
380 
381 	/* only send once per connect */
382 	spin_lock(&tcon->tc_lock);
383 	if (tcon->need_reconnect)
384 		tcon->status = TID_NEED_RECON;
385 
386 	if (tcon->status != TID_NEED_RECON) {
387 		spin_unlock(&tcon->tc_lock);
388 		return;
389 	}
390 	tcon->status = TID_IN_FILES_INVALIDATE;
391 	spin_unlock(&tcon->tc_lock);
392 
393 	/* list all files open on tree connection and mark them invalid */
394 	spin_lock(&tcon->open_file_lock);
395 	list_for_each_safe(tmp, tmp1, &tcon->openFileList) {
396 		open_file = list_entry(tmp, struct cifsFileInfo, tlist);
397 		open_file->invalidHandle = true;
398 		open_file->oplock_break_cancelled = true;
399 	}
400 	spin_unlock(&tcon->open_file_lock);
401 
402 	invalidate_all_cached_dirs(tcon, true);
403 	spin_lock(&tcon->tc_lock);
404 	if (tcon->status == TID_IN_FILES_INVALIDATE)
405 		tcon->status = TID_NEED_TCON;
406 	spin_unlock(&tcon->tc_lock);
407 
408 	/*
409 	 * BB Add call to evict_inodes(sb) for all superblocks mounted
410 	 * to this tcon.
411 	 */
412 }
413 
414 static inline int cifs_convert_flags(unsigned int oflags, int rdwr_for_fscache)
415 {
416 	int flags = 0;
417 
418 	if (oflags & O_TMPFILE)
419 		flags |= DELETE;
420 
421 	if ((oflags & O_ACCMODE) == O_RDONLY)
422 		return flags | GENERIC_READ;
423 	if ((oflags & O_ACCMODE) == O_WRONLY) {
424 		return flags | (rdwr_for_fscache == 1 ?
425 				(GENERIC_READ | GENERIC_WRITE) : GENERIC_WRITE);
426 	}
427 	if ((oflags & O_ACCMODE) == O_RDWR) {
428 		/* GENERIC_ALL is too much permission to request
429 		   can cause unnecessary access denied on create */
430 		/* return GENERIC_ALL; */
431 		return flags | GENERIC_READ | GENERIC_WRITE;
432 	}
433 
434 	return flags | READ_CONTROL | FILE_WRITE_ATTRIBUTES |
435 		FILE_READ_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA |
436 		FILE_WRITE_DATA | FILE_READ_DATA;
437 }
438 
439 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
440 static u32 cifs_posix_convert_flags(unsigned int flags)
441 {
442 	u32 posix_flags = 0;
443 
444 	if ((flags & O_ACCMODE) == O_RDONLY)
445 		posix_flags = SMB_O_RDONLY;
446 	else if ((flags & O_ACCMODE) == O_WRONLY)
447 		posix_flags = SMB_O_WRONLY;
448 	else if ((flags & O_ACCMODE) == O_RDWR)
449 		posix_flags = SMB_O_RDWR;
450 
451 	if (flags & O_CREAT) {
452 		posix_flags |= SMB_O_CREAT;
453 		if (flags & O_EXCL)
454 			posix_flags |= SMB_O_EXCL;
455 	} else if (flags & O_EXCL)
456 		cifs_dbg(FYI, "Application %s pid %d has incorrectly set O_EXCL flag but not O_CREAT on file open. Ignoring O_EXCL\n",
457 			 current->comm, current->tgid);
458 
459 	if (flags & O_TRUNC)
460 		posix_flags |= SMB_O_TRUNC;
461 	/* be safe and imply O_SYNC for O_DSYNC */
462 	if (flags & O_DSYNC)
463 		posix_flags |= SMB_O_SYNC;
464 	if (flags & O_DIRECTORY)
465 		posix_flags |= SMB_O_DIRECTORY;
466 	if (flags & O_NOFOLLOW)
467 		posix_flags |= SMB_O_NOFOLLOW;
468 	if (flags & O_DIRECT)
469 		posix_flags |= SMB_O_DIRECT;
470 
471 	return posix_flags;
472 }
473 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
474 
475 static inline int cifs_get_disposition(unsigned int flags)
476 {
477 	if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
478 		return FILE_CREATE;
479 	else if ((flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
480 		return FILE_OVERWRITE_IF;
481 	else if ((flags & O_CREAT) == O_CREAT)
482 		return FILE_OPEN_IF;
483 	else if ((flags & O_TRUNC) == O_TRUNC)
484 		return FILE_OVERWRITE;
485 	else
486 		return FILE_OPEN;
487 }
488 
489 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
490 int cifs_posix_open(const char *full_path, struct inode **pinode,
491 			struct super_block *sb, int mode, unsigned int f_flags,
492 			__u32 *poplock, __u16 *pnetfid, unsigned int xid)
493 {
494 	int rc;
495 	FILE_UNIX_BASIC_INFO *presp_data;
496 	__u32 posix_flags = 0;
497 	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
498 	struct cifs_fattr fattr;
499 	struct tcon_link *tlink;
500 	struct cifs_tcon *tcon;
501 
502 	cifs_dbg(FYI, "posix open %s\n", full_path);
503 
504 	presp_data = kzalloc_obj(FILE_UNIX_BASIC_INFO);
505 	if (presp_data == NULL)
506 		return -ENOMEM;
507 
508 	tlink = cifs_sb_tlink(cifs_sb);
509 	if (IS_ERR(tlink)) {
510 		rc = PTR_ERR(tlink);
511 		goto posix_open_ret;
512 	}
513 
514 	tcon = tlink_tcon(tlink);
515 	mode &= ~current_umask();
516 
517 	posix_flags = cifs_posix_convert_flags(f_flags);
518 	rc = CIFSPOSIXCreate(xid, tcon, posix_flags, mode, pnetfid, presp_data,
519 			     poplock, full_path, cifs_sb->local_nls,
520 			     cifs_remap(cifs_sb));
521 	cifs_put_tlink(tlink);
522 
523 	if (rc)
524 		goto posix_open_ret;
525 
526 	if (presp_data->Type == cpu_to_le32(-1))
527 		goto posix_open_ret; /* open ok, caller does qpathinfo */
528 
529 	if (!pinode)
530 		goto posix_open_ret; /* caller does not need info */
531 
532 	cifs_unix_basic_to_fattr(&fattr, presp_data, cifs_sb);
533 
534 	/* get new inode and set it up */
535 	if (*pinode == NULL) {
536 		cifs_fill_uniqueid(sb, &fattr);
537 		*pinode = cifs_iget(sb, &fattr);
538 		if (!*pinode) {
539 			rc = -ENOMEM;
540 			goto posix_open_ret;
541 		}
542 	} else {
543 		cifs_revalidate_mapping(*pinode);
544 		rc = cifs_fattr_to_inode(*pinode, &fattr, false);
545 	}
546 
547 posix_open_ret:
548 	kfree(presp_data);
549 	return rc;
550 }
551 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
552 
553 static int cifs_nt_open(const char *full_path, struct inode *inode, struct cifs_sb_info *cifs_sb,
554 			struct cifs_tcon *tcon, unsigned int f_flags, __u32 *oplock,
555 			struct cifs_fid *fid, unsigned int xid, struct cifs_open_info_data *buf)
556 {
557 	int rc;
558 	int desired_access;
559 	int disposition;
560 	int create_options = CREATE_NOT_DIR;
561 	struct TCP_Server_Info *server = tcon->ses->server;
562 	struct cifs_open_parms oparms;
563 	int rdwr_for_fscache = 0;
564 
565 	if (!server->ops->open)
566 		return -ENOSYS;
567 
568 	/* If we're caching, we need to be able to fill in around partial writes. */
569 	if (cifs_fscache_enabled(inode) && (f_flags & O_ACCMODE) == O_WRONLY)
570 		rdwr_for_fscache = 1;
571 
572 	desired_access = cifs_convert_flags(f_flags, rdwr_for_fscache);
573 
574 /*********************************************************************
575  *  open flag mapping table:
576  *
577  *	POSIX Flag            CIFS Disposition
578  *	----------            ----------------
579  *	O_CREAT               FILE_OPEN_IF
580  *	O_CREAT | O_EXCL      FILE_CREATE
581  *	O_CREAT | O_TRUNC     FILE_OVERWRITE_IF
582  *	O_TRUNC               FILE_OVERWRITE
583  *	none of the above     FILE_OPEN
584  *
585  *	Note that there is not a direct match between disposition
586  *	FILE_SUPERSEDE (ie create whether or not file exists although
587  *	O_CREAT | O_TRUNC is similar but truncates the existing
588  *	file rather than creating a new file as FILE_SUPERSEDE does
589  *	(which uses the attributes / metadata passed in on open call)
590  *?
591  *?  O_SYNC is a reasonable match to CIFS writethrough flag
592  *?  and the read write flags match reasonably.  O_LARGEFILE
593  *?  is irrelevant because largefile support is always used
594  *?  by this client. Flags O_APPEND, O_DIRECT, O_DIRECTORY,
595  *	 O_FASYNC, O_NOFOLLOW, O_NONBLOCK need further investigation
596  *********************************************************************/
597 
598 	disposition = cifs_get_disposition(f_flags);
599 	/* BB pass O_SYNC flag through on file attributes .. BB */
600 	create_options |= cifs_open_create_options(f_flags, create_options);
601 
602 retry_open:
603 	oparms = (struct cifs_open_parms) {
604 		.tcon = tcon,
605 		.cifs_sb = cifs_sb,
606 		.desired_access = desired_access,
607 		.create_options = cifs_create_options(cifs_sb, create_options),
608 		.disposition = disposition,
609 		.path = full_path,
610 		.fid = fid,
611 	};
612 
613 	rc = server->ops->open(xid, &oparms, oplock, buf);
614 	if (rc) {
615 		if (rc == -EACCES && rdwr_for_fscache == 1) {
616 			desired_access = cifs_convert_flags(f_flags, 0);
617 			rdwr_for_fscache = 2;
618 			goto retry_open;
619 		}
620 		return rc;
621 	}
622 	if (rdwr_for_fscache == 2)
623 		cifs_invalidate_cache(inode, FSCACHE_INVAL_DIO_WRITE);
624 
625 	/* TODO: Add support for calling posix query info but with passing in fid */
626 	if (tcon->unix_ext)
627 		rc = cifs_get_inode_info_unix(&inode, full_path, inode->i_sb,
628 					      xid);
629 	else
630 		rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb,
631 					 xid, fid);
632 
633 	if (rc) {
634 		server->ops->close(xid, tcon, fid);
635 		if (rc == -ESTALE)
636 			rc = -EOPENSTALE;
637 	}
638 
639 	return rc;
640 }
641 
642 static bool
643 cifs_has_mand_locks(struct cifsInodeInfo *cinode)
644 {
645 	struct cifs_fid_locks *cur;
646 	bool has_locks = false;
647 
648 	down_read(&cinode->lock_sem);
649 	list_for_each_entry(cur, &cinode->llist, llist) {
650 		if (!list_empty(&cur->locks)) {
651 			has_locks = true;
652 			break;
653 		}
654 	}
655 	up_read(&cinode->lock_sem);
656 	return has_locks;
657 }
658 
659 void
660 cifs_down_write(struct rw_semaphore *sem)
661 {
662 	while (!down_write_trylock(sem))
663 		msleep(10);
664 }
665 
666 static void cifsFileInfo_put_work(struct work_struct *work);
667 void serverclose_work(struct work_struct *work);
668 
669 struct cifsFileInfo *cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
670 				       struct tcon_link *tlink, __u32 oplock,
671 				       const char *symlink_target)
672 {
673 	struct dentry *dentry = file_dentry(file);
674 	struct inode *inode = d_inode(dentry);
675 	struct cifsInodeInfo *cinode = CIFS_I(inode);
676 	struct cifsFileInfo *cfile;
677 	struct cifs_fid_locks *fdlocks;
678 	struct cifs_tcon *tcon = tlink_tcon(tlink);
679 	struct TCP_Server_Info *server = tcon->ses->server;
680 
681 	cfile = kzalloc_obj(struct cifsFileInfo);
682 	if (cfile == NULL)
683 		return cfile;
684 
685 	fdlocks = kzalloc_obj(struct cifs_fid_locks);
686 	if (!fdlocks) {
687 		kfree(cfile);
688 		return NULL;
689 	}
690 
691 	if (symlink_target) {
692 		cfile->symlink_target = kstrdup(symlink_target, GFP_KERNEL);
693 		if (!cfile->symlink_target) {
694 			kfree(fdlocks);
695 			kfree(cfile);
696 			return NULL;
697 		}
698 	}
699 
700 	INIT_LIST_HEAD(&fdlocks->locks);
701 	fdlocks->cfile = cfile;
702 	cfile->llist = fdlocks;
703 
704 	cfile->count = 1;
705 	cfile->pid = current->tgid;
706 	cfile->uid = current_fsuid();
707 	cfile->dentry = dget(dentry);
708 	cfile->f_flags = file->f_flags;
709 	cfile->invalidHandle = false;
710 	cfile->deferred_close_scheduled = false;
711 	cfile->status_file_deleted = file->f_flags & O_TMPFILE;
712 	cfile->tlink = cifs_get_tlink(tlink);
713 	INIT_WORK(&cfile->oplock_break, cifs_oplock_break);
714 	INIT_WORK(&cfile->put, cifsFileInfo_put_work);
715 	INIT_WORK(&cfile->serverclose, serverclose_work);
716 	INIT_DELAYED_WORK(&cfile->deferred, smb2_deferred_work_close);
717 	mutex_init(&cfile->fh_mutex);
718 	spin_lock_init(&cfile->file_info_lock);
719 
720 	/*
721 	 * If the server returned a read oplock and we have mandatory brlocks,
722 	 * set oplock level to None.
723 	 */
724 	if (server->ops->is_read_op(oplock) && cifs_has_mand_locks(cinode)) {
725 		cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n");
726 		oplock = 0;
727 	}
728 
729 	cifs_down_write(&cinode->lock_sem);
730 	list_add(&fdlocks->llist, &cinode->llist);
731 	up_write(&cinode->lock_sem);
732 
733 	spin_lock(&tcon->open_file_lock);
734 	if (fid->pending_open->oplock != CIFS_OPLOCK_NO_CHANGE && oplock)
735 		oplock = fid->pending_open->oplock;
736 	list_del(&fid->pending_open->olist);
737 
738 	list_add(&cfile->tlist, &tcon->openFileList);
739 	atomic_inc(&tcon->num_local_opens);
740 
741 	/* if readable file instance put first in list*/
742 	spin_lock(&cinode->open_file_lock);
743 	if (file->f_flags & O_TMPFILE)
744 		set_bit(CIFS_INO_TMPFILE, &cinode->flags);
745 	fid->purge_cache = false;
746 	server->ops->set_fid(cfile, fid, oplock);
747 
748 	if (file->f_mode & FMODE_READ)
749 		list_add(&cfile->flist, &cinode->openFileList);
750 	else
751 		list_add_tail(&cfile->flist, &cinode->openFileList);
752 	spin_unlock(&cinode->open_file_lock);
753 	spin_unlock(&tcon->open_file_lock);
754 
755 	if (fid->purge_cache)
756 		cifs_zap_mapping(inode);
757 
758 	file->private_data = cfile;
759 	return cfile;
760 }
761 
762 struct cifsFileInfo *
763 cifsFileInfo_get(struct cifsFileInfo *cifs_file)
764 {
765 	spin_lock(&cifs_file->file_info_lock);
766 	cifsFileInfo_get_locked(cifs_file);
767 	spin_unlock(&cifs_file->file_info_lock);
768 	return cifs_file;
769 }
770 
771 static void cifsFileInfo_put_final(struct cifsFileInfo *cifs_file)
772 {
773 	struct inode *inode = d_inode(cifs_file->dentry);
774 	struct cifsInodeInfo *cifsi = CIFS_I(inode);
775 	struct cifsLockInfo *li, *tmp;
776 
777 	/*
778 	 * Delete any outstanding lock records. We'll lose them when the file
779 	 * is closed anyway.
780 	 */
781 	cifs_down_write(&cifsi->lock_sem);
782 	list_for_each_entry_safe(li, tmp, &cifs_file->llist->locks, llist) {
783 		list_del(&li->llist);
784 		cifs_del_lock_waiters(li);
785 		kfree(li);
786 	}
787 	list_del(&cifs_file->llist->llist);
788 	kfree(cifs_file->llist);
789 	up_write(&cifsi->lock_sem);
790 
791 	cifs_put_tlink(cifs_file->tlink);
792 	dput(cifs_file->dentry);
793 	kfree(cifs_file->symlink_target);
794 	kfree(cifs_file);
795 }
796 
797 static void cifsFileInfo_put_work(struct work_struct *work)
798 {
799 	struct cifsFileInfo *cifs_file = container_of(work,
800 			struct cifsFileInfo, put);
801 
802 	cifsFileInfo_put_final(cifs_file);
803 }
804 
805 void serverclose_work(struct work_struct *work)
806 {
807 	struct cifsFileInfo *cifs_file = container_of(work,
808 			struct cifsFileInfo, serverclose);
809 
810 	struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
811 
812 	struct TCP_Server_Info *server = tcon->ses->server;
813 	int rc = 0;
814 	int retries = 0;
815 	int MAX_RETRIES = 4;
816 
817 	do {
818 		if (server->ops->close_getattr)
819 			rc = server->ops->close_getattr(0, tcon, cifs_file);
820 		else if (server->ops->close)
821 			rc = server->ops->close(0, tcon, &cifs_file->fid);
822 
823 		if (rc == -EBUSY || rc == -EAGAIN) {
824 			retries++;
825 			msleep(250);
826 		}
827 	} while ((rc == -EBUSY || rc == -EAGAIN) && (retries < MAX_RETRIES)
828 	);
829 
830 	if (retries == MAX_RETRIES)
831 		pr_warn("Serverclose failed %d times, giving up\n", MAX_RETRIES);
832 
833 	if (cifs_file->offload)
834 		queue_work(fileinfo_put_wq, &cifs_file->put);
835 	else
836 		cifsFileInfo_put_final(cifs_file);
837 }
838 
839 /**
840  * cifsFileInfo_put - release a reference of file priv data
841  *
842  * Always potentially wait for oplock handler. See _cifsFileInfo_put().
843  *
844  * @cifs_file:	cifs/smb3 specific info (eg refcounts) for an open file
845  */
846 void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
847 {
848 	_cifsFileInfo_put(cifs_file, true, true);
849 }
850 
851 /**
852  * _cifsFileInfo_put - release a reference of file priv data
853  *
854  * This may involve closing the filehandle @cifs_file out on the
855  * server. Must be called without holding tcon->open_file_lock,
856  * cinode->open_file_lock and cifs_file->file_info_lock.
857  *
858  * If @wait_for_oplock_handler is true and we are releasing the last
859  * reference, wait for any running oplock break handler of the file
860  * and cancel any pending one.
861  *
862  * @cifs_file:	cifs/smb3 specific info (eg refcounts) for an open file
863  * @wait_oplock_handler: must be false if called from oplock_break_handler
864  * @offload:	not offloaded on close and oplock breaks
865  *
866  */
867 void _cifsFileInfo_put(struct cifsFileInfo *cifs_file,
868 		       bool wait_oplock_handler, bool offload)
869 {
870 	struct inode *inode = d_inode(cifs_file->dentry);
871 	struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
872 	struct TCP_Server_Info *server = tcon->ses->server;
873 	struct cifsInodeInfo *cifsi = CIFS_I(inode);
874 	struct super_block *sb = inode->i_sb;
875 	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
876 	struct cifs_fid fid = {};
877 	struct cifs_pending_open open;
878 	bool oplock_break_cancelled;
879 	bool serverclose_offloaded = false;
880 
881 	spin_lock(&tcon->open_file_lock);
882 	spin_lock(&cifsi->open_file_lock);
883 	spin_lock(&cifs_file->file_info_lock);
884 
885 	cifs_file->offload = offload;
886 	if (--cifs_file->count > 0) {
887 		spin_unlock(&cifs_file->file_info_lock);
888 		spin_unlock(&cifsi->open_file_lock);
889 		spin_unlock(&tcon->open_file_lock);
890 		return;
891 	}
892 	spin_unlock(&cifs_file->file_info_lock);
893 
894 	if (server->ops->get_lease_key)
895 		server->ops->get_lease_key(inode, &fid);
896 
897 	/* store open in pending opens to make sure we don't miss lease break */
898 	cifs_add_pending_open_locked(&fid, cifs_file->tlink, &open);
899 
900 	/* remove it from the lists */
901 	list_del(&cifs_file->flist);
902 	list_del(&cifs_file->tlist);
903 	atomic_dec(&tcon->num_local_opens);
904 
905 	if (list_empty(&cifsi->openFileList)) {
906 		cifs_dbg(FYI, "closing last open instance for inode %p\n",
907 			 d_inode(cifs_file->dentry));
908 		/*
909 		 * In strict cache mode we need invalidate mapping on the last
910 		 * close  because it may cause a error when we open this file
911 		 * again and get at least level II oplock.
912 		 */
913 		if (cifs_sb_flags(cifs_sb) & CIFS_MOUNT_STRICT_IO)
914 			set_bit(CIFS_INO_INVALID_MAPPING, &cifsi->flags);
915 		cifs_set_oplock_level(cifsi, 0);
916 	}
917 
918 	spin_unlock(&cifsi->open_file_lock);
919 	spin_unlock(&tcon->open_file_lock);
920 
921 	oplock_break_cancelled = wait_oplock_handler ?
922 		cancel_work_sync(&cifs_file->oplock_break) : false;
923 
924 	if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
925 		struct TCP_Server_Info *server = tcon->ses->server;
926 		unsigned int xid;
927 		int rc = 0;
928 
929 		xid = get_xid();
930 		if (server->ops->close_getattr)
931 			rc = server->ops->close_getattr(xid, tcon, cifs_file);
932 		else if (server->ops->close)
933 			rc = server->ops->close(xid, tcon, &cifs_file->fid);
934 		_free_xid(xid);
935 
936 		if (rc == -EBUSY || rc == -EAGAIN) {
937 			// Server close failed, hence offloading it as an async op
938 			queue_work(serverclose_wq, &cifs_file->serverclose);
939 			serverclose_offloaded = true;
940 		}
941 	}
942 
943 	if (oplock_break_cancelled)
944 		cifs_done_oplock_break(cifsi);
945 
946 	cifs_del_pending_open(&open);
947 
948 	// if serverclose has been offloaded to wq (on failure), it will
949 	// handle offloading put as well. If serverclose not offloaded,
950 	// we need to handle offloading put here.
951 	if (!serverclose_offloaded) {
952 		if (offload)
953 			queue_work(fileinfo_put_wq, &cifs_file->put);
954 		else
955 			cifsFileInfo_put_final(cifs_file);
956 	}
957 }
958 
959 int cifs_file_flush(const unsigned int xid, struct inode *inode,
960 		    struct cifsFileInfo *cfile)
961 {
962 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode);
963 	struct cifs_tcon *tcon;
964 	int rc;
965 
966 	if (cifs_sb_flags(cifs_sb) & CIFS_MOUNT_NOSSYNC)
967 		return 0;
968 
969 	if (cfile && (OPEN_FMODE(cfile->f_flags) & FMODE_WRITE)) {
970 		tcon = tlink_tcon(cfile->tlink);
971 		return tcon->ses->server->ops->flush(xid, tcon,
972 						     &cfile->fid);
973 	}
974 	rc = cifs_get_writable_file(CIFS_I(inode), FIND_ANY, &cfile);
975 	if (!rc) {
976 		tcon = tlink_tcon(cfile->tlink);
977 		rc = tcon->ses->server->ops->flush(xid, tcon, &cfile->fid);
978 		cifsFileInfo_put(cfile);
979 	} else if (rc == -EBADF) {
980 		rc = 0;
981 	}
982 	return rc;
983 }
984 
985 static int cifs_do_truncate(const unsigned int xid, struct dentry *dentry)
986 {
987 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(dentry));
988 	struct inode *inode = d_inode(dentry);
989 	struct cifsFileInfo *cfile = NULL;
990 	struct TCP_Server_Info *server;
991 	struct cifs_tcon *tcon;
992 	int rc;
993 
994 	rc = filemap_write_and_wait(inode->i_mapping);
995 	if (is_interrupt_error(rc))
996 		return -ERESTARTSYS;
997 	mapping_set_error(inode->i_mapping, rc);
998 
999 	cfile = find_writable_file(cinode, FIND_FSUID_ONLY);
1000 	rc = cifs_file_flush(xid, inode, cfile);
1001 	if (!rc) {
1002 		if (cfile) {
1003 			tcon = tlink_tcon(cfile->tlink);
1004 			server = tcon->ses->server;
1005 			rc = server->ops->set_file_size(xid, tcon,
1006 							cfile, 0, false);
1007 		}
1008 		if (!rc) {
1009 			netfs_resize_file(&cinode->netfs, 0, true);
1010 			cifs_setsize(inode, 0);
1011 		}
1012 	}
1013 	if (cfile)
1014 		cifsFileInfo_put(cfile);
1015 	return rc;
1016 }
1017 
1018 int cifs_open(struct inode *inode, struct file *file)
1019 
1020 {
1021 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode);
1022 	struct cifs_open_info_data data = {};
1023 	struct cifsFileInfo *cfile = NULL;
1024 	struct TCP_Server_Info *server;
1025 	struct cifs_pending_open open;
1026 	bool posix_open_ok = false;
1027 	struct cifs_fid fid = {};
1028 	struct tcon_link *tlink;
1029 	struct cifs_tcon *tcon;
1030 	const char *full_path;
1031 	unsigned int sbflags;
1032 	int rc = -EACCES;
1033 	unsigned int xid;
1034 	__u32 oplock;
1035 	void *page;
1036 
1037 	xid = get_xid();
1038 
1039 	if (unlikely(cifs_forced_shutdown(cifs_sb))) {
1040 		free_xid(xid);
1041 		return smb_EIO(smb_eio_trace_forced_shutdown);
1042 	}
1043 
1044 	tlink = cifs_sb_tlink(cifs_sb);
1045 	if (IS_ERR(tlink)) {
1046 		free_xid(xid);
1047 		return PTR_ERR(tlink);
1048 	}
1049 	tcon = tlink_tcon(tlink);
1050 	server = tcon->ses->server;
1051 
1052 	page = alloc_dentry_path();
1053 	full_path = build_path_from_dentry(file_dentry(file), page);
1054 	if (IS_ERR(full_path)) {
1055 		rc = PTR_ERR(full_path);
1056 		goto out;
1057 	}
1058 
1059 	cifs_dbg(FYI, "inode = 0x%p file flags are 0x%x for %s\n",
1060 		 inode, file->f_flags, full_path);
1061 
1062 	sbflags = cifs_sb_flags(cifs_sb);
1063 	if ((file->f_flags & O_DIRECT) && (sbflags & CIFS_MOUNT_STRICT_IO)) {
1064 		if (sbflags & CIFS_MOUNT_NO_BRL)
1065 			file->f_op = &cifs_file_direct_nobrl_ops;
1066 		else
1067 			file->f_op = &cifs_file_direct_ops;
1068 	}
1069 
1070 	if (file->f_flags & O_TRUNC) {
1071 		rc = cifs_do_truncate(xid, file_dentry(file));
1072 		if (rc)
1073 			goto out;
1074 	}
1075 
1076 	/* Get the cached handle as SMB2 close is deferred */
1077 	if (OPEN_FMODE(file->f_flags) & FMODE_WRITE) {
1078 		rc = __cifs_get_writable_file(CIFS_I(inode),
1079 					      FIND_FSUID_ONLY |
1080 					      FIND_NO_PENDING_DELETE |
1081 					      FIND_OPEN_FLAGS,
1082 					      file->f_flags, &cfile);
1083 	} else {
1084 		cfile = __find_readable_file(CIFS_I(inode),
1085 					     FIND_NO_PENDING_DELETE |
1086 					     FIND_OPEN_FLAGS,
1087 					     file->f_flags);
1088 		rc = cfile ? 0 : -ENOENT;
1089 	}
1090 	if (rc == 0) {
1091 		trace_smb3_open_cached(xid, tcon->tid, tcon->ses->Suid,
1092 				       cfile->fid.persistent_fid,
1093 				       file->f_flags, cfile->f_flags);
1094 		file->private_data = cfile;
1095 		spin_lock(&CIFS_I(inode)->deferred_lock);
1096 		cifs_del_deferred_close(cfile);
1097 		spin_unlock(&CIFS_I(inode)->deferred_lock);
1098 		goto use_cache;
1099 	}
1100 	/* hard link on the deferred close file */
1101 	rc = cifs_get_hardlink_path(tcon, inode, file);
1102 	if (rc)
1103 		cifs_close_deferred_file(CIFS_I(inode));
1104 
1105 	if (server->oplocks)
1106 		oplock = REQ_OPLOCK;
1107 	else
1108 		oplock = 0;
1109 
1110 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1111 	if (!tcon->broken_posix_open && tcon->unix_ext &&
1112 	    cap_unix(tcon->ses) && (CIFS_UNIX_POSIX_PATH_OPS_CAP &
1113 				le64_to_cpu(tcon->fsUnixInfo.Capability))) {
1114 		/* can not refresh inode info since size could be stale */
1115 		rc = cifs_posix_open(full_path, &inode, inode->i_sb,
1116 				cifs_sb->ctx->file_mode /* ignored */,
1117 				file->f_flags, &oplock, &fid.netfid, xid);
1118 		if (rc == 0) {
1119 			cifs_dbg(FYI, "posix open succeeded\n");
1120 			posix_open_ok = true;
1121 		} else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) {
1122 			if (tcon->ses->serverNOS)
1123 				cifs_dbg(VFS, "server %s of type %s returned unexpected error on SMB posix open, disabling posix open support. Check if server update available.\n",
1124 					 tcon->ses->ip_addr,
1125 					 tcon->ses->serverNOS);
1126 			tcon->broken_posix_open = true;
1127 		} else if ((rc != -EIO) && (rc != -EREMOTE) &&
1128 			 (rc != -EOPNOTSUPP)) /* path not found or net err */
1129 			goto out;
1130 		/*
1131 		 * Else fallthrough to retry open the old way on network i/o
1132 		 * or DFS errors.
1133 		 */
1134 	}
1135 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1136 
1137 	if (server->ops->get_lease_key)
1138 		server->ops->get_lease_key(inode, &fid);
1139 
1140 	cifs_add_pending_open(&fid, tlink, &open);
1141 
1142 	if (!posix_open_ok) {
1143 		if (server->ops->get_lease_key)
1144 			server->ops->get_lease_key(inode, &fid);
1145 
1146 		rc = cifs_nt_open(full_path, inode, cifs_sb, tcon, file->f_flags, &oplock, &fid,
1147 				  xid, &data);
1148 		if (rc) {
1149 			cifs_del_pending_open(&open);
1150 			goto out;
1151 		}
1152 	}
1153 
1154 	cfile = cifs_new_fileinfo(&fid, file, tlink, oplock, data.symlink_target);
1155 	if (cfile == NULL) {
1156 		if (server->ops->close)
1157 			server->ops->close(xid, tcon, &fid);
1158 		cifs_del_pending_open(&open);
1159 		rc = -ENOMEM;
1160 		goto out;
1161 	}
1162 
1163 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1164 	if ((oplock & CIFS_CREATE_ACTION) && !posix_open_ok && tcon->unix_ext) {
1165 		/*
1166 		 * Time to set mode which we can not set earlier due to
1167 		 * problems creating new read-only files.
1168 		 */
1169 		struct cifs_unix_set_info_args args = {
1170 			.mode	= inode->i_mode,
1171 			.uid	= INVALID_UID, /* no change */
1172 			.gid	= INVALID_GID, /* no change */
1173 			.ctime	= NO_CHANGE_64,
1174 			.atime	= NO_CHANGE_64,
1175 			.mtime	= NO_CHANGE_64,
1176 			.device	= 0,
1177 		};
1178 		CIFSSMBUnixSetFileInfo(xid, tcon, &args, fid.netfid,
1179 				       cfile->pid);
1180 	}
1181 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1182 
1183 use_cache:
1184 	fscache_use_cookie(cifs_inode_cookie(file_inode(file)),
1185 			   file->f_mode & FMODE_WRITE);
1186 	if (!(file->f_flags & O_DIRECT))
1187 		goto out;
1188 	if ((file->f_flags & (O_ACCMODE | O_APPEND)) == O_RDONLY)
1189 		goto out;
1190 	cifs_invalidate_cache(file_inode(file), FSCACHE_INVAL_DIO_WRITE);
1191 
1192 out:
1193 	free_dentry_path(page);
1194 	free_xid(xid);
1195 	cifs_put_tlink(tlink);
1196 	cifs_free_open_info(&data);
1197 	return rc;
1198 }
1199 
1200 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1201 static int cifs_push_posix_locks(struct cifsFileInfo *cfile);
1202 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1203 
1204 /*
1205  * Try to reacquire byte range locks that were released when session
1206  * to server was lost.
1207  */
1208 static int
1209 cifs_relock_file(struct cifsFileInfo *cfile)
1210 {
1211 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1212 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1213 	int rc = 0;
1214 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1215 	struct cifs_sb_info *cifs_sb = CIFS_SB(cinode);
1216 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1217 
1218 	down_read_nested(&cinode->lock_sem, SINGLE_DEPTH_NESTING);
1219 	if (cinode->can_cache_brlcks) {
1220 		/* can cache locks - no need to relock */
1221 		up_read(&cinode->lock_sem);
1222 		return rc;
1223 	}
1224 
1225 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1226 	if (cap_unix(tcon->ses) &&
1227 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1228 	    ((cifs_sb_flags(cifs_sb) & CIFS_MOUNT_NOPOSIXBRL) == 0))
1229 		rc = cifs_push_posix_locks(cfile);
1230 	else
1231 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1232 		rc = tcon->ses->server->ops->push_mand_locks(cfile);
1233 
1234 	up_read(&cinode->lock_sem);
1235 	return rc;
1236 }
1237 
1238 static int
1239 cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush)
1240 {
1241 	int rc = -EACCES;
1242 	unsigned int xid;
1243 	__u32 oplock;
1244 	struct cifs_sb_info *cifs_sb;
1245 	struct cifs_tcon *tcon;
1246 	struct TCP_Server_Info *server;
1247 	struct cifsInodeInfo *cinode;
1248 	struct inode *inode;
1249 	void *page;
1250 	const char *full_path;
1251 	int desired_access;
1252 	int disposition = FILE_OPEN;
1253 	int create_options = CREATE_NOT_DIR;
1254 	struct cifs_open_parms oparms;
1255 	int rdwr_for_fscache = 0;
1256 
1257 	xid = get_xid();
1258 	mutex_lock(&cfile->fh_mutex);
1259 	if (!cfile->invalidHandle) {
1260 		mutex_unlock(&cfile->fh_mutex);
1261 		free_xid(xid);
1262 		return 0;
1263 	}
1264 
1265 	inode = d_inode(cfile->dentry);
1266 	cifs_sb = CIFS_SB(inode->i_sb);
1267 	tcon = tlink_tcon(cfile->tlink);
1268 	server = tcon->ses->server;
1269 
1270 	/*
1271 	 * Can not grab rename sem here because various ops, including those
1272 	 * that already have the rename sem can end up causing writepage to get
1273 	 * called and if the server was down that means we end up here, and we
1274 	 * can never tell if the caller already has the rename_sem.
1275 	 */
1276 	page = alloc_dentry_path();
1277 	full_path = build_path_from_dentry(cfile->dentry, page);
1278 	if (IS_ERR(full_path)) {
1279 		mutex_unlock(&cfile->fh_mutex);
1280 		free_dentry_path(page);
1281 		free_xid(xid);
1282 		return PTR_ERR(full_path);
1283 	}
1284 
1285 	cifs_dbg(FYI, "inode = 0x%p file flags 0x%x for %s\n",
1286 		 inode, cfile->f_flags, full_path);
1287 
1288 	if (tcon->ses->server->oplocks)
1289 		oplock = REQ_OPLOCK;
1290 	else
1291 		oplock = 0;
1292 
1293 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1294 	if (tcon->unix_ext && cap_unix(tcon->ses) &&
1295 	    (CIFS_UNIX_POSIX_PATH_OPS_CAP &
1296 				le64_to_cpu(tcon->fsUnixInfo.Capability))) {
1297 		/*
1298 		 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the
1299 		 * original open. Must mask them off for a reopen.
1300 		 */
1301 		unsigned int oflags = cfile->f_flags &
1302 						~(O_CREAT | O_EXCL | O_TRUNC);
1303 
1304 		rc = cifs_posix_open(full_path, NULL, inode->i_sb,
1305 				     cifs_sb->ctx->file_mode /* ignored */,
1306 				     oflags, &oplock, &cfile->fid.netfid, xid);
1307 		if (rc == 0) {
1308 			cifs_dbg(FYI, "posix reopen succeeded\n");
1309 			oparms.reconnect = true;
1310 			goto reopen_success;
1311 		}
1312 		/*
1313 		 * fallthrough to retry open the old way on errors, especially
1314 		 * in the reconnect path it is important to retry hard
1315 		 */
1316 	}
1317 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1318 
1319 	/* If we're caching, we need to be able to fill in around partial writes. */
1320 	if (cifs_fscache_enabled(inode) && (cfile->f_flags & O_ACCMODE) == O_WRONLY)
1321 		rdwr_for_fscache = 1;
1322 
1323 	desired_access = cifs_convert_flags(cfile->f_flags, rdwr_for_fscache);
1324 	create_options |= cifs_open_create_options(cfile->f_flags,
1325 						   create_options);
1326 
1327 	if (server->ops->get_lease_key)
1328 		server->ops->get_lease_key(inode, &cfile->fid);
1329 
1330 retry_open:
1331 	oparms = (struct cifs_open_parms) {
1332 		.tcon = tcon,
1333 		.cifs_sb = cifs_sb,
1334 		.desired_access = desired_access,
1335 		.create_options = cifs_create_options(cifs_sb, create_options),
1336 		.disposition = disposition,
1337 		.path = full_path,
1338 		.fid = &cfile->fid,
1339 		.reconnect = true,
1340 	};
1341 
1342 	/*
1343 	 * Can not refresh inode by passing in file_info buf to be returned by
1344 	 * ops->open and then calling get_inode_info with returned buf since
1345 	 * file might have write behind data that needs to be flushed and server
1346 	 * version of file size can be stale. If we knew for sure that inode was
1347 	 * not dirty locally we could do this.
1348 	 */
1349 	rc = server->ops->open(xid, &oparms, &oplock, NULL);
1350 	if (rc == -ENOENT && oparms.reconnect == false) {
1351 		/* durable handle timeout is expired - open the file again */
1352 		rc = server->ops->open(xid, &oparms, &oplock, NULL);
1353 		/* indicate that we need to relock the file */
1354 		oparms.reconnect = true;
1355 	}
1356 	if (rc == -EACCES && rdwr_for_fscache == 1) {
1357 		desired_access = cifs_convert_flags(cfile->f_flags, 0);
1358 		rdwr_for_fscache = 2;
1359 		goto retry_open;
1360 	}
1361 
1362 	if (rc) {
1363 		mutex_unlock(&cfile->fh_mutex);
1364 		cifs_dbg(FYI, "cifs_reopen returned 0x%x\n", rc);
1365 		cifs_dbg(FYI, "oplock: %d\n", oplock);
1366 		goto reopen_error_exit;
1367 	}
1368 
1369 	if (rdwr_for_fscache == 2)
1370 		cifs_invalidate_cache(inode, FSCACHE_INVAL_DIO_WRITE);
1371 
1372 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1373 reopen_success:
1374 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1375 	cfile->invalidHandle = false;
1376 	mutex_unlock(&cfile->fh_mutex);
1377 	cinode = CIFS_I(inode);
1378 
1379 	if (can_flush) {
1380 		rc = filemap_write_and_wait(inode->i_mapping);
1381 		if (!is_interrupt_error(rc))
1382 			mapping_set_error(inode->i_mapping, rc);
1383 
1384 		if (tcon->posix_extensions) {
1385 			rc = smb311_posix_get_inode_info(&inode, full_path,
1386 							 NULL, inode->i_sb, xid);
1387 		} else if (tcon->unix_ext) {
1388 			rc = cifs_get_inode_info_unix(&inode, full_path,
1389 						      inode->i_sb, xid);
1390 		} else {
1391 			rc = cifs_get_inode_info(&inode, full_path, NULL,
1392 						 inode->i_sb, xid, NULL);
1393 		}
1394 	}
1395 	/*
1396 	 * Else we are writing out data to server already and could deadlock if
1397 	 * we tried to flush data, and since we do not know if we have data that
1398 	 * would invalidate the current end of file on the server we can not go
1399 	 * to the server to get the new inode info.
1400 	 */
1401 
1402 	/*
1403 	 * If the server returned a read oplock and we have mandatory brlocks,
1404 	 * set oplock level to None.
1405 	 */
1406 	if (server->ops->is_read_op(oplock) && cifs_has_mand_locks(cinode)) {
1407 		cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n");
1408 		oplock = 0;
1409 	}
1410 
1411 	scoped_guard(spinlock, &cinode->open_file_lock)
1412 		server->ops->set_fid(cfile, &cfile->fid, oplock);
1413 	if (oparms.reconnect)
1414 		cifs_relock_file(cfile);
1415 
1416 reopen_error_exit:
1417 	free_dentry_path(page);
1418 	free_xid(xid);
1419 	return rc;
1420 }
1421 
1422 void smb2_deferred_work_close(struct work_struct *work)
1423 {
1424 	struct cifsFileInfo *cfile = container_of(work,
1425 			struct cifsFileInfo, deferred.work);
1426 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1427 
1428 	spin_lock(&cinode->deferred_lock);
1429 	cifs_del_deferred_close(cfile);
1430 	cfile->deferred_close_scheduled = false;
1431 	spin_unlock(&cinode->deferred_lock);
1432 	/*
1433 	 * Refresh time_last_write immediately before the actual server close
1434 	 * so the protection window is anchored to the real close time, not
1435 	 * the earlier userspace close time stored by cifs_close().
1436 	 */
1437 	if (OPEN_FMODE(cfile->f_flags) & FMODE_WRITE) {
1438 		/* Pairs with smp_load_acquire() in is_size_safe_to_change(). */
1439 		smp_store_release(&cinode->time_last_write, jiffies);
1440 	}
1441 	_cifsFileInfo_put(cfile, true, false);
1442 }
1443 
1444 static bool
1445 smb2_can_defer_close(struct inode *inode, struct cifs_deferred_close *dclose)
1446 {
1447 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
1448 	struct cifsInodeInfo *cinode = CIFS_I(inode);
1449 	unsigned int oplock = READ_ONCE(cinode->oplock);
1450 
1451 	return cifs_sb->ctx->closetimeo && cinode->lease_granted && dclose &&
1452 		(oplock == CIFS_CACHE_RHW_FLG || oplock == CIFS_CACHE_RH_FLG) &&
1453 		!test_bit(CIFS_INO_CLOSE_ON_LOCK, &cinode->flags);
1454 
1455 }
1456 
1457 int cifs_close(struct inode *inode, struct file *file)
1458 {
1459 	struct cifsFileInfo *cfile;
1460 	struct cifsInodeInfo *cinode = CIFS_I(inode);
1461 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
1462 	struct cifs_deferred_close *dclose;
1463 	struct cifs_tcon *tcon;
1464 
1465 	cifs_fscache_unuse_inode_cookie(inode, file->f_mode & FMODE_WRITE);
1466 
1467 	if (file->private_data != NULL) {
1468 		cfile = file->private_data;
1469 		file->private_data = NULL;
1470 		if (file->f_mode & FMODE_WRITE) {
1471 			/* Pairs with smp_load_acquire() in is_size_safe_to_change(). */
1472 			smp_store_release(&cinode->time_last_write, jiffies);
1473 		}
1474 		dclose = kmalloc_obj(struct cifs_deferred_close);
1475 		if ((cfile->status_file_deleted == false) &&
1476 		    (smb2_can_defer_close(inode, dclose))) {
1477 			if (test_and_clear_bit(NETFS_ICTX_MODIFIED_ATTR, &cinode->netfs.flags)) {
1478 				inode_set_mtime_to_ts(inode,
1479 						      inode_set_ctime_current(inode));
1480 			}
1481 			spin_lock(&cinode->deferred_lock);
1482 			cifs_add_deferred_close(cfile, dclose);
1483 			if (cfile->deferred_close_scheduled &&
1484 			    delayed_work_pending(&cfile->deferred)) {
1485 				/*
1486 				 * If there is no pending work, mod_delayed_work queues new work.
1487 				 * So, Increase the ref count to avoid use-after-free.
1488 				 */
1489 				if (!mod_delayed_work(deferredclose_wq,
1490 						&cfile->deferred, cifs_sb->ctx->closetimeo))
1491 					cifsFileInfo_get(cfile);
1492 			} else {
1493 				/* Deferred close for files */
1494 				tcon = tlink_tcon(cfile->tlink);
1495 				trace_smb3_close_cached(tcon->tid, tcon->ses->Suid,
1496 						cfile->fid.persistent_fid,
1497 						cifs_sb->ctx->closetimeo);
1498 				queue_delayed_work(deferredclose_wq,
1499 						&cfile->deferred, cifs_sb->ctx->closetimeo);
1500 				cfile->deferred_close_scheduled = true;
1501 				spin_unlock(&cinode->deferred_lock);
1502 				return 0;
1503 			}
1504 			spin_unlock(&cinode->deferred_lock);
1505 			_cifsFileInfo_put(cfile, true, false);
1506 		} else {
1507 			_cifsFileInfo_put(cfile, true, false);
1508 			kfree(dclose);
1509 		}
1510 	}
1511 
1512 	/* return code from the ->release op is always ignored */
1513 	return 0;
1514 }
1515 
1516 void
1517 cifs_reopen_persistent_handles(struct cifs_tcon *tcon)
1518 {
1519 	struct cifsFileInfo *open_file, *tmp;
1520 	LIST_HEAD(tmp_list);
1521 
1522 	if (!tcon->use_persistent || !tcon->need_reopen_files)
1523 		return;
1524 
1525 	tcon->need_reopen_files = false;
1526 
1527 	cifs_dbg(FYI, "Reopen persistent handles\n");
1528 
1529 	/* list all files open on tree connection, reopen resilient handles  */
1530 	spin_lock(&tcon->open_file_lock);
1531 	list_for_each_entry(open_file, &tcon->openFileList, tlist) {
1532 		if (!open_file->invalidHandle)
1533 			continue;
1534 		cifsFileInfo_get(open_file);
1535 		list_add_tail(&open_file->rlist, &tmp_list);
1536 	}
1537 	spin_unlock(&tcon->open_file_lock);
1538 
1539 	list_for_each_entry_safe(open_file, tmp, &tmp_list, rlist) {
1540 		if (cifs_reopen_file(open_file, false /* do not flush */))
1541 			tcon->need_reopen_files = true;
1542 		list_del_init(&open_file->rlist);
1543 		cifsFileInfo_put(open_file);
1544 	}
1545 }
1546 
1547 int cifs_closedir(struct inode *inode, struct file *file)
1548 {
1549 	int rc = 0;
1550 	unsigned int xid;
1551 	struct cifsFileInfo *cfile = file->private_data;
1552 	struct cifs_tcon *tcon;
1553 	struct TCP_Server_Info *server;
1554 	char *buf;
1555 
1556 	cifs_dbg(FYI, "Closedir inode = 0x%p\n", inode);
1557 
1558 	if (cfile == NULL)
1559 		return rc;
1560 
1561 	xid = get_xid();
1562 	tcon = tlink_tcon(cfile->tlink);
1563 	server = tcon->ses->server;
1564 
1565 	cifs_dbg(FYI, "Freeing private data in close dir\n");
1566 	spin_lock(&cfile->file_info_lock);
1567 	if (server->ops->dir_needs_close(cfile)) {
1568 		cfile->invalidHandle = true;
1569 		spin_unlock(&cfile->file_info_lock);
1570 		if (server->ops->close_dir)
1571 			rc = server->ops->close_dir(xid, tcon, &cfile->fid);
1572 		else
1573 			rc = -ENOSYS;
1574 		cifs_dbg(FYI, "Closing uncompleted readdir with rc %d\n", rc);
1575 		/* not much we can do if it fails anyway, ignore rc */
1576 		rc = 0;
1577 	} else
1578 		spin_unlock(&cfile->file_info_lock);
1579 
1580 	buf = cfile->srch_inf.ntwrk_buf_start;
1581 	if (buf) {
1582 		cifs_dbg(FYI, "closedir free smb buf in srch struct\n");
1583 		cfile->srch_inf.ntwrk_buf_start = NULL;
1584 		if (cfile->srch_inf.smallBuf)
1585 			cifs_small_buf_release(buf);
1586 		else if (cfile->srch_inf.is_dynamic_buf)
1587 			kfree(buf);
1588 		else
1589 			cifs_buf_release(buf);
1590 	}
1591 
1592 	cifs_put_tlink(cfile->tlink);
1593 	kfree(file->private_data);
1594 	file->private_data = NULL;
1595 	/* BB can we lock the filestruct while this is going on? */
1596 	free_xid(xid);
1597 	return rc;
1598 }
1599 
1600 static struct cifsLockInfo *
1601 cifs_lock_init(__u64 offset, __u64 length, __u8 type, __u16 flags)
1602 {
1603 	struct cifsLockInfo *lock =
1604 		kmalloc_obj(struct cifsLockInfo);
1605 	if (!lock)
1606 		return lock;
1607 	lock->offset = offset;
1608 	lock->length = length;
1609 	lock->type = type;
1610 	lock->pid = current->tgid;
1611 	lock->flags = flags;
1612 	INIT_LIST_HEAD(&lock->blist);
1613 	init_waitqueue_head(&lock->block_q);
1614 	return lock;
1615 }
1616 
1617 void
1618 cifs_del_lock_waiters(struct cifsLockInfo *lock)
1619 {
1620 	struct cifsLockInfo *li, *tmp;
1621 	list_for_each_entry_safe(li, tmp, &lock->blist, blist) {
1622 		list_del_init(&li->blist);
1623 		wake_up(&li->block_q);
1624 	}
1625 }
1626 
1627 #define CIFS_LOCK_OP	0
1628 #define CIFS_READ_OP	1
1629 #define CIFS_WRITE_OP	2
1630 
1631 /* @rw_check : 0 - no op, 1 - read, 2 - write */
1632 static bool
1633 cifs_find_fid_lock_conflict(struct cifs_fid_locks *fdlocks, __u64 offset,
1634 			    __u64 length, __u8 type, __u16 flags,
1635 			    struct cifsFileInfo *cfile,
1636 			    struct cifsLockInfo **conf_lock, int rw_check)
1637 {
1638 	struct cifsLockInfo *li;
1639 	struct cifsFileInfo *cur_cfile = fdlocks->cfile;
1640 	struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
1641 
1642 	list_for_each_entry(li, &fdlocks->locks, llist) {
1643 		if (offset + length <= li->offset ||
1644 		    offset >= li->offset + li->length)
1645 			continue;
1646 		if (rw_check != CIFS_LOCK_OP && current->tgid == li->pid &&
1647 		    server->ops->compare_fids(cfile, cur_cfile)) {
1648 			/* shared lock prevents write op through the same fid */
1649 			if (!(li->type & server->vals->shared_lock_type) ||
1650 			    rw_check != CIFS_WRITE_OP)
1651 				continue;
1652 		}
1653 		if ((type & server->vals->shared_lock_type) &&
1654 		    ((server->ops->compare_fids(cfile, cur_cfile) &&
1655 		     current->tgid == li->pid) || type == li->type))
1656 			continue;
1657 		if (rw_check == CIFS_LOCK_OP &&
1658 		    (flags & FL_OFDLCK) && (li->flags & FL_OFDLCK) &&
1659 		    server->ops->compare_fids(cfile, cur_cfile))
1660 			continue;
1661 		if (conf_lock)
1662 			*conf_lock = li;
1663 		trace_smb3_lock_conflict(cfile->fid.persistent_fid,
1664 					 offset, length, type,
1665 					 li->offset, li->length, li->type, li->pid);
1666 		return true;
1667 	}
1668 	return false;
1669 }
1670 
1671 bool
1672 cifs_find_lock_conflict(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
1673 			__u8 type, __u16 flags,
1674 			struct cifsLockInfo **conf_lock, int rw_check)
1675 {
1676 	bool rc = false;
1677 	struct cifs_fid_locks *cur;
1678 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1679 
1680 	list_for_each_entry(cur, &cinode->llist, llist) {
1681 		rc = cifs_find_fid_lock_conflict(cur, offset, length, type,
1682 						 flags, cfile, conf_lock,
1683 						 rw_check);
1684 		if (rc)
1685 			break;
1686 	}
1687 
1688 	return rc;
1689 }
1690 
1691 /*
1692  * Check if there is another lock that prevents us to set the lock (mandatory
1693  * style). If such a lock exists, update the flock structure with its
1694  * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
1695  * or leave it the same if we can't. Returns 0 if we don't need to request to
1696  * the server or 1 otherwise.
1697  */
1698 static int
1699 cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
1700 	       __u8 type, struct file_lock *flock)
1701 {
1702 	int rc = 0;
1703 	struct cifsLockInfo *conf_lock;
1704 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1705 	struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
1706 	bool exist;
1707 
1708 	down_read(&cinode->lock_sem);
1709 
1710 	exist = cifs_find_lock_conflict(cfile, offset, length, type,
1711 					flock->c.flc_flags, &conf_lock,
1712 					CIFS_LOCK_OP);
1713 	if (exist) {
1714 		flock->fl_start = conf_lock->offset;
1715 		flock->fl_end = conf_lock->offset + conf_lock->length - 1;
1716 		flock->c.flc_pid = conf_lock->pid;
1717 		if (conf_lock->type & server->vals->shared_lock_type)
1718 			flock->c.flc_type = F_RDLCK;
1719 		else
1720 			flock->c.flc_type = F_WRLCK;
1721 	} else if (!cinode->can_cache_brlcks)
1722 		rc = 1;
1723 	else
1724 		flock->c.flc_type = F_UNLCK;
1725 
1726 	up_read(&cinode->lock_sem);
1727 	return rc;
1728 }
1729 
1730 static void
1731 cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock)
1732 {
1733 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1734 	cifs_down_write(&cinode->lock_sem);
1735 	list_add_tail(&lock->llist, &cfile->llist->locks);
1736 	up_write(&cinode->lock_sem);
1737 }
1738 
1739 /*
1740  * Set the byte-range lock (mandatory style). Returns:
1741  * 1) 0, if we set the lock and don't need to request to the server;
1742  * 2) 1, if no locks prevent us but we need to request to the server;
1743  * 3) -EACCES, if there is a lock that prevents us and wait is false.
1744  */
1745 static int
1746 cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock,
1747 		 bool wait, unsigned int xid)
1748 {
1749 	struct cifsLockInfo *conf_lock;
1750 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1751 	bool exist;
1752 	int rc = 0;
1753 
1754 try_again:
1755 	exist = false;
1756 	cifs_down_write(&cinode->lock_sem);
1757 
1758 	exist = cifs_find_lock_conflict(cfile, lock->offset, lock->length,
1759 					lock->type, lock->flags, &conf_lock,
1760 					CIFS_LOCK_OP);
1761 	if (!exist && cinode->can_cache_brlcks) {
1762 		struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1763 
1764 		list_add_tail(&lock->llist, &cfile->llist->locks);
1765 		trace_smb3_lock_cached(xid, cfile->fid.persistent_fid,
1766 				       tcon->tid, tcon->ses->Suid,
1767 				       lock->offset, lock->length,
1768 				       lock->type, 1, 0);
1769 		up_write(&cinode->lock_sem);
1770 		return rc;
1771 	}
1772 
1773 	if (!exist)
1774 		rc = 1;
1775 	else if (!wait)
1776 		rc = -EACCES;
1777 	else {
1778 		list_add_tail(&lock->blist, &conf_lock->blist);
1779 		up_write(&cinode->lock_sem);
1780 		rc = wait_event_interruptible(lock->block_q,
1781 					(lock->blist.prev == &lock->blist) &&
1782 					(lock->blist.next == &lock->blist));
1783 		if (!rc)
1784 			goto try_again;
1785 		cifs_down_write(&cinode->lock_sem);
1786 		list_del_init(&lock->blist);
1787 	}
1788 
1789 	up_write(&cinode->lock_sem);
1790 	return rc;
1791 }
1792 
1793 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1794 /*
1795  * Check if there is another lock that prevents us to set the lock (posix
1796  * style). If such a lock exists, update the flock structure with its
1797  * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
1798  * or leave it the same if we can't. Returns 0 if we don't need to request to
1799  * the server or 1 otherwise.
1800  */
1801 static int
1802 cifs_posix_lock_test(struct file *file, struct file_lock *flock)
1803 {
1804 	int rc = 0;
1805 	struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1806 	unsigned char saved_type = flock->c.flc_type;
1807 
1808 	if ((flock->c.flc_flags & FL_POSIX) == 0)
1809 		return 1;
1810 
1811 	down_read(&cinode->lock_sem);
1812 	posix_test_lock(file, flock);
1813 
1814 	if (lock_is_unlock(flock) && !cinode->can_cache_brlcks) {
1815 		flock->c.flc_type = saved_type;
1816 		rc = 1;
1817 	}
1818 
1819 	up_read(&cinode->lock_sem);
1820 	return rc;
1821 }
1822 
1823 /*
1824  * Set the byte-range lock (posix style). Returns:
1825  * 1) <0, if the error occurs while setting the lock;
1826  * 2) 0, if we set the lock and don't need to request to the server;
1827  * 3) FILE_LOCK_DEFERRED, if we will wait for some other file_lock;
1828  * 4) FILE_LOCK_DEFERRED + 1, if we need to request to the server.
1829  */
1830 static int
1831 cifs_posix_lock_set(struct file *file, struct file_lock *flock)
1832 {
1833 	struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1834 	int rc = FILE_LOCK_DEFERRED + 1;
1835 
1836 	if ((flock->c.flc_flags & FL_POSIX) == 0)
1837 		return rc;
1838 
1839 	cifs_down_write(&cinode->lock_sem);
1840 	if (!cinode->can_cache_brlcks) {
1841 		up_write(&cinode->lock_sem);
1842 		return rc;
1843 	}
1844 
1845 	rc = posix_lock_file(file, flock, NULL);
1846 	up_write(&cinode->lock_sem);
1847 	return rc;
1848 }
1849 
1850 int
1851 cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
1852 {
1853 	unsigned int xid;
1854 	int rc = 0, stored_rc;
1855 	struct cifsLockInfo *li, *tmp;
1856 	struct cifs_tcon *tcon;
1857 	unsigned int num, max_num, max_buf;
1858 	LOCKING_ANDX_RANGE *buf, *cur;
1859 	static const int types[] = {
1860 		LOCKING_ANDX_LARGE_FILES,
1861 		LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES
1862 	};
1863 	int i;
1864 
1865 	xid = get_xid();
1866 	tcon = tlink_tcon(cfile->tlink);
1867 
1868 	/*
1869 	 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1870 	 * and check it before using.
1871 	 */
1872 	max_buf = tcon->ses->server->maxBuf;
1873 	if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) {
1874 		free_xid(xid);
1875 		return -EINVAL;
1876 	}
1877 
1878 	BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
1879 		     PAGE_SIZE);
1880 	max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
1881 			PAGE_SIZE);
1882 	max_num = (max_buf - sizeof(struct smb_hdr)) /
1883 						sizeof(LOCKING_ANDX_RANGE);
1884 	buf = kzalloc_objs(LOCKING_ANDX_RANGE, max_num);
1885 	if (!buf) {
1886 		free_xid(xid);
1887 		return -ENOMEM;
1888 	}
1889 
1890 	for (i = 0; i < 2; i++) {
1891 		cur = buf;
1892 		num = 0;
1893 		list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1894 			if (li->type != types[i])
1895 				continue;
1896 			cur->Pid = cpu_to_le16(li->pid);
1897 			cur->LengthLow = cpu_to_le32((u32)li->length);
1898 			cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1899 			cur->OffsetLow = cpu_to_le32((u32)li->offset);
1900 			cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1901 			if (++num == max_num) {
1902 				stored_rc = cifs_lockv(xid, tcon,
1903 						       cfile->fid.netfid,
1904 						       (__u8)li->type, 0, num,
1905 						       buf);
1906 				if (stored_rc)
1907 					rc = stored_rc;
1908 				cur = buf;
1909 				num = 0;
1910 			} else
1911 				cur++;
1912 		}
1913 
1914 		if (num) {
1915 			stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1916 					       (__u8)types[i], 0, num, buf);
1917 			if (stored_rc)
1918 				rc = stored_rc;
1919 		}
1920 	}
1921 
1922 	kfree(buf);
1923 	free_xid(xid);
1924 	return rc;
1925 }
1926 
1927 static __u32
1928 hash_lockowner(fl_owner_t owner)
1929 {
1930 	return cifs_lock_secret ^ hash32_ptr((const void *)owner);
1931 }
1932 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1933 
1934 struct lock_to_push {
1935 	struct list_head llist;
1936 	__u64 offset;
1937 	__u64 length;
1938 	__u32 pid;
1939 	__u16 netfid;
1940 	__u8 type;
1941 };
1942 
1943 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1944 static int
1945 cifs_push_posix_locks(struct cifsFileInfo *cfile)
1946 {
1947 	struct inode *inode = d_inode(cfile->dentry);
1948 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1949 	struct file_lock *flock;
1950 	struct file_lock_context *flctx = locks_inode_context(inode);
1951 	unsigned int count = 0, i;
1952 	int rc = 0, xid, type;
1953 	struct list_head locks_to_send, *el;
1954 	struct lock_to_push *lck, *tmp;
1955 	__u64 length;
1956 
1957 	xid = get_xid();
1958 
1959 	if (!flctx)
1960 		goto out;
1961 
1962 	spin_lock(&flctx->flc_lock);
1963 	list_for_each(el, &flctx->flc_posix) {
1964 		count++;
1965 	}
1966 	spin_unlock(&flctx->flc_lock);
1967 
1968 	INIT_LIST_HEAD(&locks_to_send);
1969 
1970 	/*
1971 	 * Allocating count locks is enough because no FL_POSIX locks can be
1972 	 * added to the list while we are holding cinode->lock_sem that
1973 	 * protects locking operations of this inode.
1974 	 */
1975 	for (i = 0; i < count; i++) {
1976 		lck = kmalloc_obj(struct lock_to_push);
1977 		if (!lck) {
1978 			rc = -ENOMEM;
1979 			goto err_out;
1980 		}
1981 		list_add_tail(&lck->llist, &locks_to_send);
1982 	}
1983 
1984 	el = locks_to_send.next;
1985 	spin_lock(&flctx->flc_lock);
1986 	for_each_file_lock(flock, &flctx->flc_posix) {
1987 		unsigned char ftype = flock->c.flc_type;
1988 
1989 		if (el == &locks_to_send) {
1990 			/*
1991 			 * The list ended. We don't have enough allocated
1992 			 * structures - something is really wrong.
1993 			 */
1994 			cifs_dbg(VFS, "Can't push all brlocks!\n");
1995 			break;
1996 		}
1997 		length = cifs_flock_len(flock);
1998 		if (ftype == F_RDLCK || ftype == F_SHLCK)
1999 			type = CIFS_RDLCK;
2000 		else
2001 			type = CIFS_WRLCK;
2002 		lck = list_entry(el, struct lock_to_push, llist);
2003 		lck->pid = hash_lockowner(flock->c.flc_owner);
2004 		lck->netfid = cfile->fid.netfid;
2005 		lck->length = length;
2006 		lck->type = type;
2007 		lck->offset = flock->fl_start;
2008 	}
2009 	spin_unlock(&flctx->flc_lock);
2010 
2011 	list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
2012 		int stored_rc;
2013 
2014 		stored_rc = CIFSSMBPosixLock(xid, tcon, lck->netfid, lck->pid,
2015 					     lck->offset, lck->length, NULL,
2016 					     lck->type, 0);
2017 		if (stored_rc)
2018 			rc = stored_rc;
2019 		list_del(&lck->llist);
2020 		kfree(lck);
2021 	}
2022 
2023 out:
2024 	free_xid(xid);
2025 	return rc;
2026 err_out:
2027 	list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
2028 		list_del(&lck->llist);
2029 		kfree(lck);
2030 	}
2031 	goto out;
2032 }
2033 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
2034 
2035 static int
2036 cifs_push_locks(struct cifsFileInfo *cfile)
2037 {
2038 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
2039 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
2040 	int rc = 0;
2041 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
2042 	struct cifs_sb_info *cifs_sb = CIFS_SB(cinode);
2043 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
2044 
2045 	/* we are going to update can_cache_brlcks here - need a write access */
2046 	cifs_down_write(&cinode->lock_sem);
2047 	if (!cinode->can_cache_brlcks) {
2048 		up_write(&cinode->lock_sem);
2049 		return rc;
2050 	}
2051 
2052 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
2053 	if (cap_unix(tcon->ses) &&
2054 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
2055 	    ((cifs_sb_flags(cifs_sb) & CIFS_MOUNT_NOPOSIXBRL) == 0))
2056 		rc = cifs_push_posix_locks(cfile);
2057 	else
2058 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
2059 		rc = tcon->ses->server->ops->push_mand_locks(cfile);
2060 
2061 	cinode->can_cache_brlcks = false;
2062 	up_write(&cinode->lock_sem);
2063 	return rc;
2064 }
2065 
2066 static void
2067 cifs_read_flock(struct file_lock *flock, __u32 *type, int *lock, int *unlock,
2068 		bool *wait_flag, struct TCP_Server_Info *server)
2069 {
2070 	if (flock->c.flc_flags & FL_POSIX)
2071 		cifs_dbg(FYI, "Posix\n");
2072 	if (flock->c.flc_flags & FL_FLOCK)
2073 		cifs_dbg(FYI, "Flock\n");
2074 	if (flock->c.flc_flags & FL_SLEEP) {
2075 		cifs_dbg(FYI, "Blocking lock\n");
2076 		*wait_flag = true;
2077 	}
2078 	if (flock->c.flc_flags & FL_ACCESS)
2079 		cifs_dbg(FYI, "Process suspended by mandatory locking - not implemented yet\n");
2080 	if (flock->c.flc_flags & FL_LEASE)
2081 		cifs_dbg(FYI, "Lease on file - not implemented yet\n");
2082 	if (flock->c.flc_flags &
2083 	    (~(FL_POSIX | FL_FLOCK | FL_SLEEP |
2084 	       FL_ACCESS | FL_LEASE | FL_CLOSE | FL_OFDLCK)))
2085 		cifs_dbg(FYI, "Unknown lock flags 0x%x\n",
2086 		         flock->c.flc_flags);
2087 
2088 	*type = server->vals->large_lock_type;
2089 	if (lock_is_write(flock)) {
2090 		cifs_dbg(FYI, "F_WRLCK\n");
2091 		*type |= server->vals->exclusive_lock_type;
2092 		*lock = 1;
2093 	} else if (lock_is_unlock(flock)) {
2094 		cifs_dbg(FYI, "F_UNLCK\n");
2095 		*type |= server->vals->unlock_lock_type;
2096 		*unlock = 1;
2097 		/* Check if unlock includes more than one lock range */
2098 	} else if (lock_is_read(flock)) {
2099 		cifs_dbg(FYI, "F_RDLCK\n");
2100 		*type |= server->vals->shared_lock_type;
2101 		*lock = 1;
2102 	} else if (flock->c.flc_type == F_EXLCK) {
2103 		cifs_dbg(FYI, "F_EXLCK\n");
2104 		*type |= server->vals->exclusive_lock_type;
2105 		*lock = 1;
2106 	} else if (flock->c.flc_type == F_SHLCK) {
2107 		cifs_dbg(FYI, "F_SHLCK\n");
2108 		*type |= server->vals->shared_lock_type;
2109 		*lock = 1;
2110 	} else
2111 		cifs_dbg(FYI, "Unknown type of lock\n");
2112 }
2113 
2114 static int
2115 cifs_getlk(struct file *file, struct file_lock *flock, __u32 type,
2116 	   bool wait_flag, bool posix_lck, unsigned int xid)
2117 {
2118 	int rc = 0;
2119 	__u64 length = cifs_flock_len(flock);
2120 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
2121 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
2122 	struct TCP_Server_Info *server = tcon->ses->server;
2123 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
2124 	__u16 netfid = cfile->fid.netfid;
2125 
2126 	if (posix_lck) {
2127 		int posix_lock_type;
2128 
2129 		rc = cifs_posix_lock_test(file, flock);
2130 		if (!rc)
2131 			return rc;
2132 
2133 		if (type & server->vals->shared_lock_type)
2134 			posix_lock_type = CIFS_RDLCK;
2135 		else
2136 			posix_lock_type = CIFS_WRLCK;
2137 		rc = CIFSSMBPosixLock(xid, tcon, netfid,
2138 				      hash_lockowner(flock->c.flc_owner),
2139 				      flock->fl_start, length, flock,
2140 				      posix_lock_type, wait_flag);
2141 		return rc;
2142 	}
2143 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
2144 
2145 	rc = cifs_lock_test(cfile, flock->fl_start, length, type, flock);
2146 	if (!rc)
2147 		return rc;
2148 
2149 	/* BB we could chain these into one lock request BB */
2150 	rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length, type,
2151 				    1, 0, false);
2152 	if (rc == 0) {
2153 		rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
2154 					    type, 0, 1, false);
2155 		flock->c.flc_type = F_UNLCK;
2156 		if (rc != 0)
2157 			cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
2158 				 rc);
2159 		return 0;
2160 	}
2161 
2162 	if (type & server->vals->shared_lock_type) {
2163 		flock->c.flc_type = F_WRLCK;
2164 		return 0;
2165 	}
2166 
2167 	type &= ~server->vals->exclusive_lock_type;
2168 
2169 	rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
2170 				    type | server->vals->shared_lock_type,
2171 				    1, 0, false);
2172 	if (rc == 0) {
2173 		rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
2174 			type | server->vals->shared_lock_type, 0, 1, false);
2175 		flock->c.flc_type = F_RDLCK;
2176 		if (rc != 0)
2177 			cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
2178 				 rc);
2179 	} else
2180 		flock->c.flc_type = F_WRLCK;
2181 
2182 	return 0;
2183 }
2184 
2185 void
2186 cifs_move_llist(struct list_head *source, struct list_head *dest)
2187 {
2188 	struct list_head *li, *tmp;
2189 	list_for_each_safe(li, tmp, source)
2190 		list_move(li, dest);
2191 }
2192 
2193 int
2194 cifs_get_hardlink_path(struct cifs_tcon *tcon, struct inode *inode,
2195 				struct file *file)
2196 {
2197 	struct cifsFileInfo *open_file = NULL;
2198 	struct cifsInodeInfo *cinode = CIFS_I(inode);
2199 	int rc = 0;
2200 
2201 	spin_lock(&tcon->open_file_lock);
2202 	spin_lock(&cinode->open_file_lock);
2203 
2204 	list_for_each_entry(open_file, &cinode->openFileList, flist) {
2205 		if (file->f_flags == open_file->f_flags) {
2206 			rc = -EINVAL;
2207 			break;
2208 		}
2209 	}
2210 
2211 	spin_unlock(&cinode->open_file_lock);
2212 	spin_unlock(&tcon->open_file_lock);
2213 	return rc;
2214 }
2215 
2216 void
2217 cifs_free_llist(struct list_head *llist)
2218 {
2219 	struct cifsLockInfo *li, *tmp;
2220 	list_for_each_entry_safe(li, tmp, llist, llist) {
2221 		cifs_del_lock_waiters(li);
2222 		list_del(&li->llist);
2223 		kfree(li);
2224 	}
2225 }
2226 
2227 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
2228 int
2229 cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
2230 		  unsigned int xid)
2231 {
2232 	int rc = 0, stored_rc;
2233 	static const int types[] = {
2234 		LOCKING_ANDX_LARGE_FILES,
2235 		LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES
2236 	};
2237 	unsigned int i;
2238 	unsigned int max_num, num, max_buf;
2239 	LOCKING_ANDX_RANGE *buf, *cur;
2240 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
2241 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
2242 	struct cifsLockInfo *li, *tmp;
2243 	__u64 length = cifs_flock_len(flock);
2244 	LIST_HEAD(tmp_llist);
2245 
2246 	/*
2247 	 * Accessing maxBuf is racy with cifs_reconnect - need to store value
2248 	 * and check it before using.
2249 	 */
2250 	max_buf = tcon->ses->server->maxBuf;
2251 	if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE)))
2252 		return -EINVAL;
2253 
2254 	BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
2255 		     PAGE_SIZE);
2256 	max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
2257 			PAGE_SIZE);
2258 	max_num = (max_buf - sizeof(struct smb_hdr)) /
2259 						sizeof(LOCKING_ANDX_RANGE);
2260 	buf = kzalloc_objs(LOCKING_ANDX_RANGE, max_num);
2261 	if (!buf)
2262 		return -ENOMEM;
2263 
2264 	cifs_down_write(&cinode->lock_sem);
2265 	for (i = 0; i < 2; i++) {
2266 		cur = buf;
2267 		num = 0;
2268 		list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
2269 			if (flock->fl_start > li->offset ||
2270 			    (flock->fl_start + length) <
2271 			    (li->offset + li->length))
2272 				continue;
2273 			if (current->tgid != li->pid)
2274 				continue;
2275 			if (types[i] != li->type)
2276 				continue;
2277 			if (cinode->can_cache_brlcks) {
2278 				/*
2279 				 * We can cache brlock requests - simply remove
2280 				 * a lock from the file's list.
2281 				 */
2282 				list_del(&li->llist);
2283 				cifs_del_lock_waiters(li);
2284 				kfree(li);
2285 				continue;
2286 			}
2287 			cur->Pid = cpu_to_le16(li->pid);
2288 			cur->LengthLow = cpu_to_le32((u32)li->length);
2289 			cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
2290 			cur->OffsetLow = cpu_to_le32((u32)li->offset);
2291 			cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
2292 			/*
2293 			 * We need to save a lock here to let us add it again to
2294 			 * the file's list if the unlock range request fails on
2295 			 * the server.
2296 			 */
2297 			list_move(&li->llist, &tmp_llist);
2298 			if (++num == max_num) {
2299 				stored_rc = cifs_lockv(xid, tcon,
2300 						       cfile->fid.netfid,
2301 						       li->type, num, 0, buf);
2302 				if (stored_rc) {
2303 					/*
2304 					 * We failed on the unlock range
2305 					 * request - add all locks from the tmp
2306 					 * list to the head of the file's list.
2307 					 */
2308 					cifs_move_llist(&tmp_llist,
2309 							&cfile->llist->locks);
2310 					rc = stored_rc;
2311 				} else
2312 					/*
2313 					 * The unlock range request succeed -
2314 					 * free the tmp list.
2315 					 */
2316 					cifs_free_llist(&tmp_llist);
2317 				cur = buf;
2318 				num = 0;
2319 			} else
2320 				cur++;
2321 		}
2322 		if (num) {
2323 			stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
2324 					       types[i], num, 0, buf);
2325 			if (stored_rc) {
2326 				cifs_move_llist(&tmp_llist,
2327 						&cfile->llist->locks);
2328 				rc = stored_rc;
2329 			} else
2330 				cifs_free_llist(&tmp_llist);
2331 		}
2332 	}
2333 
2334 	up_write(&cinode->lock_sem);
2335 	kfree(buf);
2336 	return rc;
2337 }
2338 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
2339 
2340 static int
2341 cifs_setlk(struct file *file, struct file_lock *flock, __u32 type,
2342 	   bool wait_flag, bool posix_lck, int lock, int unlock,
2343 	   unsigned int xid)
2344 {
2345 	int rc = 0;
2346 	__u64 length = cifs_flock_len(flock);
2347 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
2348 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
2349 	struct TCP_Server_Info *server = tcon->ses->server;
2350 	struct inode *inode = d_inode(cfile->dentry);
2351 
2352 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
2353 	if (posix_lck) {
2354 		int posix_lock_type;
2355 
2356 		rc = cifs_posix_lock_set(file, flock);
2357 		if (rc <= FILE_LOCK_DEFERRED)
2358 			return rc;
2359 
2360 		if (type & server->vals->shared_lock_type)
2361 			posix_lock_type = CIFS_RDLCK;
2362 		else
2363 			posix_lock_type = CIFS_WRLCK;
2364 
2365 		if (unlock == 1)
2366 			posix_lock_type = CIFS_UNLCK;
2367 
2368 		rc = CIFSSMBPosixLock(xid, tcon, cfile->fid.netfid,
2369 				      hash_lockowner(flock->c.flc_owner),
2370 				      flock->fl_start, length,
2371 				      NULL, posix_lock_type, wait_flag);
2372 		goto out;
2373 	}
2374 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
2375 	if (lock) {
2376 		struct cifsLockInfo *lock;
2377 
2378 		lock = cifs_lock_init(flock->fl_start, length, type,
2379 				      flock->c.flc_flags);
2380 		if (!lock)
2381 			return -ENOMEM;
2382 
2383 		rc = cifs_lock_add_if(cfile, lock, wait_flag, xid);
2384 		if (rc < 0) {
2385 			kfree(lock);
2386 			return rc;
2387 		}
2388 		if (!rc)
2389 			goto out;
2390 
2391 		/*
2392 		 * Windows 7 server can delay breaking lease from read to None
2393 		 * if we set a byte-range lock on a file - break it explicitly
2394 		 * before sending the lock to the server to be sure the next
2395 		 * read won't conflict with non-overlapted locks due to
2396 		 * pagereading.
2397 		 */
2398 		if (!CIFS_CACHE_WRITE(CIFS_I(inode)) &&
2399 					CIFS_CACHE_READ(CIFS_I(inode))) {
2400 			cifs_zap_mapping(inode);
2401 			cifs_dbg(FYI, "Set no oplock for inode=%p due to mand locks\n",
2402 				 inode);
2403 			cifs_reset_oplock(CIFS_I(inode));
2404 		}
2405 
2406 		rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
2407 					    type, 1, 0, wait_flag);
2408 		if (rc) {
2409 			kfree(lock);
2410 			return rc;
2411 		}
2412 
2413 		cifs_lock_add(cfile, lock);
2414 	} else if (unlock)
2415 		rc = server->ops->mand_unlock_range(cfile, flock, xid);
2416 
2417 out:
2418 	if ((flock->c.flc_flags & FL_POSIX) || (flock->c.flc_flags & FL_FLOCK)) {
2419 		/*
2420 		 * If this is a request to remove all locks because we
2421 		 * are closing the file, it doesn't matter if the
2422 		 * unlocking failed as both cifs.ko and the SMB server
2423 		 * remove the lock on file close
2424 		 */
2425 		if (rc) {
2426 			cifs_dbg(VFS, "%s failed rc=%d\n", __func__, rc);
2427 			if (!(flock->c.flc_flags & FL_CLOSE))
2428 				return rc;
2429 		}
2430 		rc = locks_lock_file_wait(file, flock);
2431 	}
2432 	return rc;
2433 }
2434 
2435 int cifs_flock(struct file *file, int cmd, struct file_lock *fl)
2436 {
2437 	int rc, xid;
2438 	int lock = 0, unlock = 0;
2439 	bool wait_flag = false;
2440 	bool posix_lck = false;
2441 	struct cifs_sb_info *cifs_sb;
2442 	struct cifs_tcon *tcon;
2443 	struct cifsFileInfo *cfile;
2444 	__u32 type;
2445 
2446 	xid = get_xid();
2447 
2448 	if (!(fl->c.flc_flags & FL_FLOCK)) {
2449 		rc = -ENOLCK;
2450 		free_xid(xid);
2451 		return rc;
2452 	}
2453 
2454 	cfile = (struct cifsFileInfo *)file->private_data;
2455 	tcon = tlink_tcon(cfile->tlink);
2456 
2457 	cifs_read_flock(fl, &type, &lock, &unlock, &wait_flag,
2458 			tcon->ses->server);
2459 	cifs_sb = CIFS_SB(file);
2460 
2461 	if (cap_unix(tcon->ses) &&
2462 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
2463 	    ((cifs_sb_flags(cifs_sb) & CIFS_MOUNT_NOPOSIXBRL) == 0))
2464 		posix_lck = true;
2465 
2466 	if (!lock && !unlock) {
2467 		/*
2468 		 * if no lock or unlock then nothing to do since we do not
2469 		 * know what it is
2470 		 */
2471 		rc = -EOPNOTSUPP;
2472 		free_xid(xid);
2473 		return rc;
2474 	}
2475 
2476 	rc = cifs_setlk(file, fl, type, wait_flag, posix_lck, lock, unlock,
2477 			xid);
2478 	free_xid(xid);
2479 	return rc;
2480 
2481 
2482 }
2483 
2484 int cifs_lock(struct file *file, int cmd, struct file_lock *flock)
2485 {
2486 	struct cifs_sb_info *cifs_sb = CIFS_SB(file);
2487 	struct cifsFileInfo *cfile;
2488 	int lock = 0, unlock = 0;
2489 	bool wait_flag = false;
2490 	bool posix_lck = false;
2491 	struct cifs_tcon *tcon;
2492 	__u32 type;
2493 	int rc, xid;
2494 
2495 	rc = -EACCES;
2496 	xid = get_xid();
2497 
2498 	cifs_dbg(FYI, "%s: %pD2 cmd=0x%x type=0x%x flags=0x%x r=%lld:%lld\n", __func__, file, cmd,
2499 		 flock->c.flc_flags, flock->c.flc_type,
2500 		 (long long)flock->fl_start,
2501 		 (long long)flock->fl_end);
2502 
2503 	cfile = (struct cifsFileInfo *)file->private_data;
2504 	tcon = tlink_tcon(cfile->tlink);
2505 
2506 	cifs_read_flock(flock, &type, &lock, &unlock, &wait_flag,
2507 			tcon->ses->server);
2508 	set_bit(CIFS_INO_CLOSE_ON_LOCK, &CIFS_I(d_inode(cfile->dentry))->flags);
2509 
2510 	if (cap_unix(tcon->ses) &&
2511 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
2512 	    ((cifs_sb_flags(cifs_sb) & CIFS_MOUNT_NOPOSIXBRL) == 0))
2513 		posix_lck = true;
2514 	/*
2515 	 * BB add code here to normalize offset and length to account for
2516 	 * negative length which we can not accept over the wire.
2517 	 */
2518 	if (IS_GETLK(cmd)) {
2519 		rc = cifs_getlk(file, flock, type, wait_flag, posix_lck, xid);
2520 		free_xid(xid);
2521 		return rc;
2522 	}
2523 
2524 	if (!lock && !unlock) {
2525 		/*
2526 		 * if no lock or unlock then nothing to do since we do not
2527 		 * know what it is
2528 		 */
2529 		free_xid(xid);
2530 		return -EOPNOTSUPP;
2531 	}
2532 
2533 	rc = cifs_setlk(file, flock, type, wait_flag, posix_lck, lock, unlock,
2534 			xid);
2535 	free_xid(xid);
2536 	return rc;
2537 }
2538 
2539 static void cifs_update_i_blocks_for_write(struct inode *inode, loff_t start,
2540 					     loff_t end)
2541 {
2542 	struct cifsInodeInfo *cinode = CIFS_I(inode);
2543 	u64 allocated_end = CIFS_INO_BYTES(inode->i_blocks);
2544 	u64 blocks;
2545 
2546 	if (cinode->cifsAttrs & FILE_ATTRIBUTE_SPARSE_FILE)
2547 		return;
2548 
2549 	/*
2550 	 * Grow the local estimate only across the currently known allocated
2551 	 * prefix. A write beyond that may leave a hole.
2552 	 */
2553 	if ((u64)start > allocated_end)
2554 		return;
2555 
2556 	blocks = CIFS_INO_BLOCKS(end);
2557 	if ((u64)inode->i_blocks < blocks)
2558 		inode->i_blocks = blocks;
2559 }
2560 
2561 static void cifs_update_i_blocks_after_write(struct kiocb *iocb,
2562 						ssize_t written)
2563 {
2564 	struct inode *inode = file_inode(iocb->ki_filp);
2565 	loff_t end = iocb->ki_pos;
2566 
2567 	if (written <= 0)
2568 		return;
2569 
2570 	spin_lock(&inode->i_lock);
2571 	cifs_update_i_blocks_for_write(inode, end - written, end);
2572 	spin_unlock(&inode->i_lock);
2573 }
2574 
2575 void cifs_write_subrequest_terminated(struct cifs_io_subrequest *wdata, ssize_t result)
2576 {
2577 	struct netfs_io_request *wreq = wdata->rreq;
2578 	struct inode *inode = wreq->inode;
2579 	struct netfs_inode *ictx = netfs_inode(inode);
2580 	loff_t wrend;
2581 
2582 	if (result > 0) {
2583 		spin_lock(&inode->i_lock);
2584 
2585 		wrend = wdata->subreq.start + wdata->subreq.transferred + result;
2586 
2587 		if (wrend > ictx->_zero_point &&
2588 		    (wdata->rreq->origin == NETFS_UNBUFFERED_WRITE ||
2589 		     wdata->rreq->origin == NETFS_DIO_WRITE))
2590 			netfs_write_zero_point(inode, wrend);
2591 		if (wrend > ictx->_remote_i_size)
2592 			netfs_resize_file(ictx, wrend, true);
2593 		cifs_update_i_blocks_for_write(inode, wdata->subreq.start,
2594 						 wrend);
2595 
2596 		spin_unlock(&inode->i_lock);
2597 	}
2598 
2599 	netfs_write_subrequest_terminated(&wdata->subreq, result);
2600 }
2601 
2602 static bool open_flags_match(struct cifsInodeInfo *cinode,
2603 			     unsigned int oflags, unsigned int cflags)
2604 {
2605 	struct inode *inode = &cinode->netfs.inode;
2606 	int crw = 0, orw = 0;
2607 
2608 	oflags &= ~(O_CREAT | O_EXCL | O_TRUNC);
2609 	cflags &= ~(O_CREAT | O_EXCL | O_TRUNC);
2610 
2611 	if (cifs_fscache_enabled(inode)) {
2612 		if (OPEN_FMODE(cflags) & FMODE_WRITE)
2613 			crw = 1;
2614 		if (OPEN_FMODE(oflags) & FMODE_WRITE)
2615 			orw = 1;
2616 	}
2617 	if (cifs_convert_flags(oflags, orw) != cifs_convert_flags(cflags, crw))
2618 		return false;
2619 
2620 	return (oflags & (O_SYNC | O_DIRECT)) == (cflags & (O_SYNC | O_DIRECT));
2621 }
2622 
2623 struct cifsFileInfo *__find_readable_file(struct cifsInodeInfo *cifs_inode,
2624 					  unsigned int find_flags,
2625 					  unsigned int open_flags)
2626 {
2627 	struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode);
2628 	bool fsuid_only = find_flags & FIND_FSUID_ONLY;
2629 	struct cifsFileInfo *open_file = NULL;
2630 
2631 	/* only filter by fsuid on multiuser mounts */
2632 	if (!(cifs_sb_flags(cifs_sb) & CIFS_MOUNT_MULTIUSER))
2633 		fsuid_only = false;
2634 
2635 	spin_lock(&cifs_inode->open_file_lock);
2636 	/* we could simply get the first_list_entry since write-only entries
2637 	   are always at the end of the list but since the first entry might
2638 	   have a close pending, we go through the whole list */
2639 	list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
2640 		if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
2641 			continue;
2642 		if ((find_flags & FIND_NO_PENDING_DELETE) &&
2643 		    open_file->status_file_deleted)
2644 			continue;
2645 		if ((find_flags & FIND_OPEN_FLAGS) &&
2646 		    !open_flags_match(cifs_inode, open_flags,
2647 				      open_file->f_flags))
2648 			continue;
2649 		if (OPEN_FMODE(open_file->f_flags) & FMODE_READ) {
2650 			if ((!open_file->invalidHandle)) {
2651 				/* found a good file */
2652 				/* lock it so it will not be closed on us */
2653 				cifsFileInfo_get(open_file);
2654 				spin_unlock(&cifs_inode->open_file_lock);
2655 				return open_file;
2656 			} /* else might as well continue, and look for
2657 			     another, or simply have the caller reopen it
2658 			     again rather than trying to fix this handle */
2659 		} else /* write only file */
2660 			break; /* write only files are last so must be done */
2661 	}
2662 	spin_unlock(&cifs_inode->open_file_lock);
2663 	return NULL;
2664 }
2665 
2666 /* Return -EBADF if no handle is found and general rc otherwise */
2667 int __cifs_get_writable_file(struct cifsInodeInfo *cifs_inode,
2668 			     unsigned int find_flags, unsigned int open_flags,
2669 			     struct cifsFileInfo **ret_file)
2670 {
2671 	struct cifsFileInfo *open_file, *inv_file = NULL;
2672 	bool fsuid_only, with_delete;
2673 	struct cifs_sb_info *cifs_sb;
2674 	bool any_available = false;
2675 	unsigned int refind = 0;
2676 	*ret_file = NULL;
2677 	int rc = -EBADF;
2678 
2679 	/*
2680 	 * Having a null inode here (because mapping->host was set to zero by
2681 	 * the VFS or MM) should not happen but we had reports of on oops (due
2682 	 * to it being zero) during stress testcases so we need to check for it
2683 	 */
2684 
2685 	if (cifs_inode == NULL) {
2686 		cifs_dbg(VFS, "Null inode passed to cifs_writeable_file\n");
2687 		dump_stack();
2688 		return rc;
2689 	}
2690 
2691 	if (test_bit(CIFS_INO_TMPFILE, &cifs_inode->flags))
2692 		find_flags = FIND_ANY;
2693 
2694 	cifs_sb = CIFS_SB(cifs_inode);
2695 
2696 	with_delete = find_flags & FIND_WITH_DELETE;
2697 	fsuid_only = find_flags & FIND_FSUID_ONLY;
2698 	/* only filter by fsuid on multiuser mounts */
2699 	if (!(cifs_sb_flags(cifs_sb) & CIFS_MOUNT_MULTIUSER))
2700 		fsuid_only = false;
2701 
2702 	spin_lock(&cifs_inode->open_file_lock);
2703 refind_writable:
2704 	if (refind > MAX_REOPEN_ATT) {
2705 		spin_unlock(&cifs_inode->open_file_lock);
2706 		return rc;
2707 	}
2708 	list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
2709 		if (!any_available && open_file->pid != current->tgid)
2710 			continue;
2711 		if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
2712 			continue;
2713 		if (with_delete && !(open_file->fid.access & DELETE))
2714 			continue;
2715 		if ((find_flags & FIND_NO_PENDING_DELETE) &&
2716 		    open_file->status_file_deleted)
2717 			continue;
2718 		if ((find_flags & FIND_OPEN_FLAGS) &&
2719 		    !open_flags_match(cifs_inode, open_flags,
2720 				      open_file->f_flags))
2721 			continue;
2722 		if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
2723 			if (!open_file->invalidHandle) {
2724 				/* found a good writable file */
2725 				cifsFileInfo_get(open_file);
2726 				spin_unlock(&cifs_inode->open_file_lock);
2727 				*ret_file = open_file;
2728 				return 0;
2729 			} else {
2730 				if (!inv_file)
2731 					inv_file = open_file;
2732 			}
2733 		}
2734 	}
2735 	/* couldn't find usable FH with same pid, try any available */
2736 	if (!any_available) {
2737 		any_available = true;
2738 		goto refind_writable;
2739 	}
2740 
2741 	if (inv_file) {
2742 		any_available = false;
2743 		cifsFileInfo_get(inv_file);
2744 	}
2745 
2746 	spin_unlock(&cifs_inode->open_file_lock);
2747 
2748 	if (inv_file) {
2749 		rc = cifs_reopen_file(inv_file, false);
2750 		if (!rc) {
2751 			*ret_file = inv_file;
2752 			return 0;
2753 		}
2754 
2755 		spin_lock(&cifs_inode->open_file_lock);
2756 		list_move_tail(&inv_file->flist, &cifs_inode->openFileList);
2757 		spin_unlock(&cifs_inode->open_file_lock);
2758 		cifsFileInfo_put(inv_file);
2759 		++refind;
2760 		inv_file = NULL;
2761 		spin_lock(&cifs_inode->open_file_lock);
2762 		goto refind_writable;
2763 	}
2764 
2765 	return rc;
2766 }
2767 
2768 struct cifsFileInfo *
2769 find_writable_file(struct cifsInodeInfo *cifs_inode, int flags)
2770 {
2771 	struct cifsFileInfo *cfile;
2772 	int rc;
2773 
2774 	rc = cifs_get_writable_file(cifs_inode, flags, &cfile);
2775 	if (rc)
2776 		cifs_dbg(FYI, "Couldn't find writable handle rc=%d\n", rc);
2777 
2778 	return cfile;
2779 }
2780 
2781 int cifs_get_writable_path(struct cifs_tcon *tcon, const char *name,
2782 			   struct inode *inode, int flags,
2783 			   struct cifsFileInfo **ret_file)
2784 {
2785 	struct cifsFileInfo *cfile;
2786 	void *page;
2787 
2788 	*ret_file = NULL;
2789 
2790 	if (inode)
2791 		return cifs_get_writable_file(CIFS_I(inode), flags, ret_file);
2792 
2793 	page = alloc_dentry_path();
2794 	spin_lock(&tcon->open_file_lock);
2795 	list_for_each_entry(cfile, &tcon->openFileList, tlist) {
2796 		struct cifsInodeInfo *cinode;
2797 		const char *full_path = build_path_from_dentry(cfile->dentry, page);
2798 		if (IS_ERR(full_path)) {
2799 			spin_unlock(&tcon->open_file_lock);
2800 			free_dentry_path(page);
2801 			return PTR_ERR(full_path);
2802 		}
2803 		if (strcmp(full_path, name))
2804 			continue;
2805 
2806 		cinode = CIFS_I(d_inode(cfile->dentry));
2807 		spin_unlock(&tcon->open_file_lock);
2808 		free_dentry_path(page);
2809 		return cifs_get_writable_file(cinode, flags, ret_file);
2810 	}
2811 
2812 	spin_unlock(&tcon->open_file_lock);
2813 	free_dentry_path(page);
2814 	return -ENOENT;
2815 }
2816 
2817 int
2818 cifs_get_readable_path(struct cifs_tcon *tcon, const char *name,
2819 		       struct cifsFileInfo **ret_file)
2820 {
2821 	struct cifsFileInfo *cfile;
2822 	void *page = alloc_dentry_path();
2823 
2824 	*ret_file = NULL;
2825 
2826 	spin_lock(&tcon->open_file_lock);
2827 	list_for_each_entry(cfile, &tcon->openFileList, tlist) {
2828 		struct cifsInodeInfo *cinode;
2829 		const char *full_path = build_path_from_dentry(cfile->dentry, page);
2830 		if (IS_ERR(full_path)) {
2831 			spin_unlock(&tcon->open_file_lock);
2832 			free_dentry_path(page);
2833 			return PTR_ERR(full_path);
2834 		}
2835 		if (strcmp(full_path, name))
2836 			continue;
2837 
2838 		cinode = CIFS_I(d_inode(cfile->dentry));
2839 		spin_unlock(&tcon->open_file_lock);
2840 		free_dentry_path(page);
2841 		*ret_file = find_readable_file(cinode, FIND_ANY);
2842 		return *ret_file ? 0 : -ENOENT;
2843 	}
2844 
2845 	spin_unlock(&tcon->open_file_lock);
2846 	free_dentry_path(page);
2847 	return -ENOENT;
2848 }
2849 
2850 /*
2851  * Flush data on a strict file.
2852  */
2853 int cifs_strict_fsync(struct file *file, loff_t start, loff_t end,
2854 		      int datasync)
2855 {
2856 	struct cifsFileInfo *smbfile = file->private_data;
2857 	struct inode *inode = file_inode(file);
2858 	unsigned int xid;
2859 	int rc;
2860 
2861 	rc = file_write_and_wait_range(file, start, end);
2862 	if (rc) {
2863 		trace_cifs_fsync_err(inode->i_ino, rc);
2864 		return rc;
2865 	}
2866 
2867 	cifs_dbg(FYI, "%s: name=%pD datasync=0x%x\n", __func__, file, datasync);
2868 
2869 	if (!CIFS_CACHE_READ(CIFS_I(inode))) {
2870 		rc = cifs_zap_mapping(inode);
2871 		cifs_dbg(FYI, "%s: invalidate mapping: rc = %d\n", __func__, rc);
2872 	}
2873 
2874 	xid = get_xid();
2875 	rc = cifs_file_flush(xid, inode, smbfile);
2876 	free_xid(xid);
2877 	return rc;
2878 }
2879 
2880 /*
2881  * Flush data on a non-strict data.
2882  */
2883 int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
2884 {
2885 	unsigned int xid;
2886 	int rc = 0;
2887 	struct cifs_tcon *tcon;
2888 	struct TCP_Server_Info *server;
2889 	struct cifsFileInfo *smbfile = file->private_data;
2890 	struct inode *inode = file_inode(file);
2891 	struct cifs_sb_info *cifs_sb = CIFS_SB(file);
2892 
2893 	rc = file_write_and_wait_range(file, start, end);
2894 	if (rc) {
2895 		trace_cifs_fsync_err(file_inode(file)->i_ino, rc);
2896 		return rc;
2897 	}
2898 
2899 	xid = get_xid();
2900 
2901 	cifs_dbg(FYI, "Sync file - name: %pD datasync: 0x%x\n",
2902 		 file, datasync);
2903 
2904 	tcon = tlink_tcon(smbfile->tlink);
2905 	if (!(cifs_sb_flags(cifs_sb) & CIFS_MOUNT_NOSSYNC)) {
2906 		server = tcon->ses->server;
2907 		if (server->ops->flush == NULL) {
2908 			rc = -ENOSYS;
2909 			goto fsync_exit;
2910 		}
2911 
2912 		if ((OPEN_FMODE(smbfile->f_flags) & FMODE_WRITE) == 0) {
2913 			smbfile = find_writable_file(CIFS_I(inode), FIND_ANY);
2914 			if (smbfile) {
2915 				rc = server->ops->flush(xid, tcon, &smbfile->fid);
2916 				cifsFileInfo_put(smbfile);
2917 			} else
2918 				cifs_dbg(FYI, "ignore fsync for file not open for write\n");
2919 		} else
2920 			rc = server->ops->flush(xid, tcon, &smbfile->fid);
2921 	}
2922 
2923 fsync_exit:
2924 	free_xid(xid);
2925 	return rc;
2926 }
2927 
2928 /*
2929  * As file closes, flush all cached write data for this inode checking
2930  * for write behind errors.
2931  */
2932 int cifs_flush(struct file *file, fl_owner_t id)
2933 {
2934 	struct inode *inode = file_inode(file);
2935 	int rc = 0;
2936 
2937 	if (file->f_mode & FMODE_WRITE)
2938 		rc = filemap_write_and_wait(inode->i_mapping);
2939 
2940 	cifs_dbg(FYI, "Flush inode %p file %p rc %d\n", inode, file, rc);
2941 	if (rc) {
2942 		/* get more nuanced writeback errors */
2943 		rc = filemap_check_wb_err(file->f_mapping, 0);
2944 		trace_cifs_flush_err(inode->i_ino, rc);
2945 	}
2946 	return rc;
2947 }
2948 
2949 static ssize_t
2950 cifs_writev(struct kiocb *iocb, struct iov_iter *from)
2951 {
2952 	struct file *file = iocb->ki_filp;
2953 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
2954 	struct inode *inode = file->f_mapping->host;
2955 	struct cifsInodeInfo *cinode = CIFS_I(inode);
2956 	struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
2957 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode);
2958 	ssize_t rc;
2959 
2960 	rc = netfs_start_io_write(inode);
2961 	if (rc < 0)
2962 		return rc;
2963 
2964 	/*
2965 	 * We need to hold the sem to be sure nobody modifies lock list
2966 	 * with a brlock that prevents writing.
2967 	 */
2968 	down_read(&cinode->lock_sem);
2969 
2970 	rc = generic_write_checks(iocb, from);
2971 	if (rc <= 0)
2972 		goto out;
2973 
2974 	if ((cifs_sb_flags(cifs_sb) & CIFS_MOUNT_NOPOSIXBRL) &&
2975 	    (cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(from),
2976 				     server->vals->exclusive_lock_type, 0,
2977 				     NULL, CIFS_WRITE_OP))) {
2978 		rc = -EACCES;
2979 		goto out;
2980 	}
2981 
2982 	rc = netfs_buffered_write_iter_locked(iocb, from, NULL);
2983 	cifs_update_i_blocks_after_write(iocb, rc);
2984 
2985 out:
2986 	up_read(&cinode->lock_sem);
2987 	netfs_end_io_write(inode);
2988 	if (rc > 0)
2989 		rc = generic_write_sync(iocb, rc);
2990 	return rc;
2991 }
2992 
2993 ssize_t
2994 cifs_strict_writev(struct kiocb *iocb, struct iov_iter *from)
2995 {
2996 	struct inode *inode = file_inode(iocb->ki_filp);
2997 	struct cifsInodeInfo *cinode = CIFS_I(inode);
2998 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode);
2999 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)
3000 						iocb->ki_filp->private_data;
3001 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
3002 	ssize_t written;
3003 
3004 	written = cifs_get_writer(cinode);
3005 	if (written)
3006 		return written;
3007 
3008 	if (CIFS_CACHE_WRITE(cinode)) {
3009 		if (cap_unix(tcon->ses) &&
3010 		    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
3011 		    ((cifs_sb_flags(cifs_sb) & CIFS_MOUNT_NOPOSIXBRL) == 0)) {
3012 			written = netfs_file_write_iter(iocb, from);
3013 			cifs_update_i_blocks_after_write(iocb, written);
3014 			goto out;
3015 		}
3016 		written = cifs_writev(iocb, from);
3017 		goto out;
3018 	}
3019 	/*
3020 	 * For non-oplocked files in strict cache mode we need to write the data
3021 	 * to the server exactly from the pos to pos+len-1 rather than flush all
3022 	 * affected pages because it may cause a error with mandatory locks on
3023 	 * these pages but not on the region from pos to ppos+len-1.
3024 	 */
3025 	written = netfs_file_write_iter(iocb, from);
3026 	cifs_update_i_blocks_after_write(iocb, written);
3027 	if (CIFS_CACHE_READ(cinode)) {
3028 		/*
3029 		 * We have read level caching and we have just sent a write
3030 		 * request to the server thus making data in the cache stale.
3031 		 * Zap the cache and set oplock/lease level to NONE to avoid
3032 		 * reading stale data from the cache. All subsequent read
3033 		 * operations will read new data from the server.
3034 		 */
3035 		cifs_zap_mapping(inode);
3036 		cifs_dbg(FYI, "Set Oplock/Lease to NONE for inode=%p after write\n",
3037 			 inode);
3038 		cifs_reset_oplock(cinode);
3039 	}
3040 out:
3041 	cifs_put_writer(cinode);
3042 	return written;
3043 }
3044 
3045 ssize_t cifs_direct_write_iter(struct kiocb *iocb, struct iov_iter *from)
3046 {
3047 	ssize_t written;
3048 
3049 	written = netfs_file_write_iter(iocb, from);
3050 	cifs_update_i_blocks_after_write(iocb, written);
3051 	return written;
3052 }
3053 
3054 ssize_t cifs_loose_read_iter(struct kiocb *iocb, struct iov_iter *iter)
3055 {
3056 	ssize_t rc;
3057 	struct inode *inode = file_inode(iocb->ki_filp);
3058 
3059 	if (iocb->ki_flags & IOCB_DIRECT)
3060 		return netfs_unbuffered_read_iter(iocb, iter);
3061 
3062 	rc = cifs_revalidate_mapping(inode);
3063 	if (rc)
3064 		return rc;
3065 
3066 	return netfs_file_read_iter(iocb, iter);
3067 }
3068 
3069 ssize_t cifs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
3070 {
3071 	struct inode *inode = file_inode(iocb->ki_filp);
3072 	struct cifsInodeInfo *cinode = CIFS_I(inode);
3073 	ssize_t written;
3074 	int rc;
3075 
3076 	if (iocb->ki_filp->f_flags & O_DIRECT) {
3077 		written = netfs_unbuffered_write_iter(iocb, from);
3078 		cifs_update_i_blocks_after_write(iocb, written);
3079 		if (written > 0 && CIFS_CACHE_READ(cinode)) {
3080 			cifs_zap_mapping(inode);
3081 			cifs_dbg(FYI,
3082 				 "Set no oplock for inode=%p after a write operation\n",
3083 				 inode);
3084 			cifs_reset_oplock(cinode);
3085 		}
3086 		return written;
3087 	}
3088 
3089 	written = cifs_get_writer(cinode);
3090 	if (written)
3091 		return written;
3092 
3093 	written = netfs_file_write_iter(iocb, from);
3094 	cifs_update_i_blocks_after_write(iocb, written);
3095 
3096 	if (!CIFS_CACHE_WRITE(CIFS_I(inode))) {
3097 		rc = filemap_fdatawrite(inode->i_mapping);
3098 		if (rc)
3099 			cifs_dbg(FYI, "cifs_file_write_iter: %d rc on %p inode\n",
3100 				 rc, inode);
3101 	}
3102 
3103 	cifs_put_writer(cinode);
3104 	return written;
3105 }
3106 
3107 ssize_t
3108 cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to)
3109 {
3110 	struct inode *inode = file_inode(iocb->ki_filp);
3111 	struct cifsInodeInfo *cinode = CIFS_I(inode);
3112 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode);
3113 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)
3114 						iocb->ki_filp->private_data;
3115 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
3116 	int rc = -EACCES;
3117 
3118 	/*
3119 	 * In strict cache mode we need to read from the server all the time
3120 	 * if we don't have level II oplock because the server can delay mtime
3121 	 * change - so we can't make a decision about inode invalidating.
3122 	 * And we can also fail with pagereading if there are mandatory locks
3123 	 * on pages affected by this read but not on the region from pos to
3124 	 * pos+len-1.
3125 	 */
3126 	if (!CIFS_CACHE_READ(cinode))
3127 		return netfs_unbuffered_read_iter(iocb, to);
3128 
3129 	if ((cifs_sb_flags(cifs_sb) & CIFS_MOUNT_NOPOSIXBRL) == 0) {
3130 		if (iocb->ki_flags & IOCB_DIRECT)
3131 			return netfs_unbuffered_read_iter(iocb, to);
3132 		return netfs_buffered_read_iter(iocb, to);
3133 	}
3134 
3135 	/*
3136 	 * We need to hold the sem to be sure nobody modifies lock list
3137 	 * with a brlock that prevents reading.
3138 	 */
3139 	if (iocb->ki_flags & IOCB_DIRECT) {
3140 		rc = netfs_start_io_direct(inode);
3141 		if (rc < 0)
3142 			goto out;
3143 		rc = -EACCES;
3144 		down_read(&cinode->lock_sem);
3145 		if (!cifs_find_lock_conflict(
3146 			    cfile, iocb->ki_pos, iov_iter_count(to),
3147 			    tcon->ses->server->vals->shared_lock_type,
3148 			    0, NULL, CIFS_READ_OP))
3149 			rc = netfs_unbuffered_read_iter_locked(iocb, to);
3150 		up_read(&cinode->lock_sem);
3151 		netfs_end_io_direct(inode);
3152 	} else {
3153 		rc = netfs_start_io_read(inode);
3154 		if (rc < 0)
3155 			goto out;
3156 		rc = -EACCES;
3157 		down_read(&cinode->lock_sem);
3158 		if (!cifs_find_lock_conflict(
3159 			    cfile, iocb->ki_pos, iov_iter_count(to),
3160 			    tcon->ses->server->vals->shared_lock_type,
3161 			    0, NULL, CIFS_READ_OP))
3162 			rc = filemap_read(iocb, to, 0);
3163 		up_read(&cinode->lock_sem);
3164 		netfs_end_io_read(inode);
3165 	}
3166 out:
3167 	return rc;
3168 }
3169 
3170 static vm_fault_t cifs_page_mkwrite(struct vm_fault *vmf)
3171 {
3172 	return netfs_page_mkwrite(vmf, NULL);
3173 }
3174 
3175 static const struct vm_operations_struct cifs_file_vm_ops = {
3176 	.fault = filemap_fault,
3177 	.map_pages = filemap_map_pages,
3178 	.page_mkwrite = cifs_page_mkwrite,
3179 };
3180 
3181 int cifs_file_strict_mmap_prepare(struct vm_area_desc *desc)
3182 {
3183 	int xid, rc = 0;
3184 	struct inode *inode = file_inode(desc->file);
3185 
3186 	xid = get_xid();
3187 
3188 	if (!CIFS_CACHE_READ(CIFS_I(inode)))
3189 		rc = cifs_zap_mapping(inode);
3190 	if (!rc)
3191 		rc = generic_file_mmap_prepare(desc);
3192 	if (!rc)
3193 		desc->vm_ops = &cifs_file_vm_ops;
3194 
3195 	free_xid(xid);
3196 	return rc;
3197 }
3198 
3199 int cifs_file_mmap_prepare(struct vm_area_desc *desc)
3200 {
3201 	int rc, xid;
3202 
3203 	xid = get_xid();
3204 
3205 	rc = cifs_revalidate_file(desc->file);
3206 	if (rc)
3207 		cifs_dbg(FYI, "Validation prior to mmap failed, error=%d\n",
3208 			 rc);
3209 	if (!rc)
3210 		rc = generic_file_mmap_prepare(desc);
3211 	if (!rc)
3212 		desc->vm_ops = &cifs_file_vm_ops;
3213 
3214 	free_xid(xid);
3215 	return rc;
3216 }
3217 
3218 static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
3219 {
3220 	struct cifsFileInfo *open_file;
3221 
3222 	spin_lock(&cifs_inode->open_file_lock);
3223 	list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
3224 		if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
3225 			spin_unlock(&cifs_inode->open_file_lock);
3226 			return 1;
3227 		}
3228 	}
3229 	spin_unlock(&cifs_inode->open_file_lock);
3230 	return 0;
3231 }
3232 
3233 /* We do not want to update the file size from server for inodes
3234    open for write - to avoid races with writepage extending
3235    the file - in the future we could consider allowing
3236    refreshing the inode only on increases in the file size
3237    but this is tricky to do without racing with writebehind
3238    page caching in the current Linux kernel design */
3239 bool is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file,
3240 			    bool from_readdir)
3241 {
3242 	struct cifs_sb_info *cifs_sb;
3243 	unsigned long tlw;
3244 
3245 	if (!cifsInode)
3246 		return true;
3247 
3248 	cifs_sb = CIFS_SB(cifsInode);
3249 
3250 	if (is_inode_writable(cifsInode) ||
3251 		((cifsInode->oplock & CIFS_CACHE_RW_FLG) != 0 && from_readdir)) {
3252 		/* This inode is open for write at least once */
3253 
3254 		/*
3255 		 * Readdir data is unreliable when we have writable handles or
3256 		 * an exclusive lease -- never allow it to change i_size, even
3257 		 * on direct-IO mounts where the server's directory metadata
3258 		 * can still lag behind the actual file state.
3259 		 */
3260 		if (from_readdir)
3261 			return false;
3262 
3263 		if (cifs_sb_flags(cifs_sb) & CIFS_MOUNT_DIRECT_IO) {
3264 			/* since no page cache to corrupt on directio
3265 			we can change size safely */
3266 			return true;
3267 		}
3268 
3269 		if (i_size_read(&cifsInode->netfs.inode) < end_of_file)
3270 			return true;
3271 
3272 		return false;
3273 	}
3274 
3275 	/*
3276 	 * No writable handles open. Check whether we are within the attribute
3277 	 * cache validity window of a recent local modification.
3278 	 *
3279 	 * For the close() path: cifs_close() calls smp_store_release() on
3280 	 * time_last_write before _cifsFileInfo_put() removes the handle under
3281 	 * open_file_lock. That spin_unlock() is a store-release that pairs
3282 	 * with the spin_lock() (load-acquire) in is_inode_writable() above,
3283 	 * so if is_inode_writable() returned false the smp_load_acquire()
3284 	 * below is guaranteed to observe any time_last_write update from a
3285 	 * concurrent close().
3286 	 *
3287 	 * For the setattr/truncate paths: those callers use smp_store_release()
3288 	 * directly; the smp_load_acquire() below pairs with that store. There
3289 	 * is no shared lock between setattr and readdir, so this relies on
3290 	 * acquire-release semantics alone. The store propagation latency on
3291 	 * weakly-ordered architectures (nanoseconds) is negligible relative to
3292 	 * the acregmax window (seconds) and the readdir RPC round-trip
3293 	 * (milliseconds), making this a sound design choice in practice.
3294 	 *
3295 	 * time_last_write == 0 means the inode has never been written locally;
3296 	 * skip the window check to avoid false positives near boot time when
3297 	 * jiffies is still close to INITIAL_JIFFIES on 32-bit systems.
3298 	 */
3299 	if (from_readdir) {
3300 		/* Pairs with smp_store_release() at close and truncate sites. */
3301 		tlw = smp_load_acquire(&cifsInode->time_last_write);
3302 		if (tlw && time_before(jiffies, tlw + cifs_sb->ctx->acregmax))
3303 			return false;
3304 	}
3305 
3306 	return true;
3307 }
3308 
3309 void cifs_oplock_break(struct work_struct *work)
3310 {
3311 	struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
3312 						  oplock_break);
3313 	struct inode *inode = d_inode(cfile->dentry);
3314 	struct super_block *sb = inode->i_sb;
3315 	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
3316 	struct cifsInodeInfo *cinode = CIFS_I(inode);
3317 	bool cache_read, cache_write, cache_handle;
3318 	struct cifs_tcon *tcon;
3319 	struct TCP_Server_Info *server;
3320 	struct tcon_link *tlink;
3321 	unsigned int oplock;
3322 	int rc = 0;
3323 	bool purge_cache = false, oplock_break_cancelled;
3324 	__u64 persistent_fid, volatile_fid;
3325 	__u16 net_fid;
3326 
3327 	wait_on_bit(&cinode->flags, CIFS_INODE_PENDING_WRITERS,
3328 			TASK_UNINTERRUPTIBLE);
3329 
3330 	tlink = cifs_sb_tlink(cifs_sb);
3331 	if (IS_ERR(tlink))
3332 		goto out;
3333 	tcon = tlink_tcon(tlink);
3334 	server = tcon->ses->server;
3335 
3336 	scoped_guard(spinlock, &cinode->open_file_lock) {
3337 		unsigned int sbflags = cifs_sb_flags(cifs_sb);
3338 
3339 		server->ops->downgrade_oplock(server, cinode, cfile->oplock_level,
3340 					      cfile->oplock_epoch, &purge_cache);
3341 		oplock = READ_ONCE(cinode->oplock);
3342 		cache_read = (oplock & CIFS_CACHE_READ_FLG) ||
3343 			(sbflags & CIFS_MOUNT_RO_CACHE);
3344 		cache_write = (oplock & CIFS_CACHE_WRITE_FLG) ||
3345 			(sbflags & CIFS_MOUNT_RW_CACHE);
3346 		cache_handle = oplock & CIFS_CACHE_HANDLE_FLG;
3347 	}
3348 
3349 	if (!cache_write && cache_read && cifs_has_mand_locks(cinode)) {
3350 		cifs_dbg(FYI, "Reset oplock to None for inode=%p due to mand locks\n",
3351 			 inode);
3352 		cifs_reset_oplock(cinode);
3353 		oplock = 0;
3354 		cache_read = cache_write = cache_handle = false;
3355 	}
3356 
3357 	if (S_ISREG(inode->i_mode)) {
3358 		if (cache_read)
3359 			break_lease(inode, O_RDONLY);
3360 		else
3361 			break_lease(inode, O_WRONLY);
3362 		rc = filemap_fdatawrite(inode->i_mapping);
3363 		if (!cache_read || purge_cache) {
3364 			rc = filemap_fdatawait(inode->i_mapping);
3365 			mapping_set_error(inode->i_mapping, rc);
3366 			cifs_zap_mapping(inode);
3367 		}
3368 		cifs_dbg(FYI, "Oplock flush inode %p rc %d\n", inode, rc);
3369 		if (cache_write)
3370 			goto oplock_break_ack;
3371 	}
3372 
3373 	rc = cifs_push_locks(cfile);
3374 	if (rc)
3375 		cifs_dbg(VFS, "Push locks rc = %d\n", rc);
3376 
3377 oplock_break_ack:
3378 	/*
3379 	 * When oplock break is received and there are no active
3380 	 * file handles but cached, then schedule deferred close immediately.
3381 	 * So, new open will not use cached handle.
3382 	 */
3383 
3384 	if (!cache_handle && !list_empty(&cinode->deferred_closes))
3385 		cifs_close_deferred_file(cinode);
3386 
3387 	persistent_fid = cfile->fid.persistent_fid;
3388 	volatile_fid = cfile->fid.volatile_fid;
3389 	net_fid = cfile->fid.netfid;
3390 	oplock_break_cancelled = cfile->oplock_break_cancelled;
3391 
3392 	_cifsFileInfo_put(cfile, false /* do not wait for ourself */, false);
3393 	/*
3394 	 * MS-SMB2 3.2.5.19.1 and 3.2.5.19.2 (and MS-CIFS 3.2.5.42) do not require
3395 	 * an acknowledgment to be sent when the file has already been closed.
3396 	 */
3397 	spin_lock(&cinode->open_file_lock);
3398 	/* check list empty since can race with kill_sb calling tree disconnect */
3399 	if (!oplock_break_cancelled && !list_empty(&cinode->openFileList)) {
3400 		spin_unlock(&cinode->open_file_lock);
3401 		rc = server->ops->oplock_response(tcon, persistent_fid,
3402 						  volatile_fid, net_fid,
3403 						  cinode, oplock);
3404 		cifs_dbg(FYI, "Oplock release rc = %d\n", rc);
3405 	} else
3406 		spin_unlock(&cinode->open_file_lock);
3407 
3408 	cifs_put_tlink(tlink);
3409 out:
3410 	cifs_done_oplock_break(cinode);
3411 }
3412 
3413 static int cifs_swap_activate(struct swap_info_struct *sis,
3414 			      struct file *swap_file, sector_t *span)
3415 {
3416 	struct cifsFileInfo *cfile = swap_file->private_data;
3417 	struct inode *inode = swap_file->f_mapping->host;
3418 	unsigned long blocks;
3419 	long long isize;
3420 
3421 	cifs_dbg(FYI, "swap activate\n");
3422 
3423 	if (!swap_file->f_mapping->a_ops->swap_rw)
3424 		/* Cannot support swap */
3425 		return -EINVAL;
3426 
3427 	spin_lock(&inode->i_lock);
3428 	blocks = inode->i_blocks;
3429 	isize = inode->i_size;
3430 	spin_unlock(&inode->i_lock);
3431 	if (blocks*512 < isize) {
3432 		pr_warn("swap activate: swapfile has holes\n");
3433 		return -EINVAL;
3434 	}
3435 	*span = sis->pages;
3436 
3437 	pr_warn_once("Swap support over SMB3 is experimental\n");
3438 
3439 	/*
3440 	 * TODO: consider adding ACL (or documenting how) to prevent other
3441 	 * users (on this or other systems) from reading it
3442 	 */
3443 
3444 
3445 	/* TODO: add sk_set_memalloc(inet) or similar */
3446 
3447 	if (cfile)
3448 		cfile->swapfile = true;
3449 	/*
3450 	 * TODO: Since file already open, we can't open with DENY_ALL here
3451 	 * but we could add call to grab a byte range lock to prevent others
3452 	 * from reading or writing the file
3453 	 */
3454 
3455 	sis->flags |= SWP_FS_OPS;
3456 	return add_swap_extent(sis, 0, sis->max, 0);
3457 }
3458 
3459 static void cifs_swap_deactivate(struct file *file)
3460 {
3461 	struct cifsFileInfo *cfile = file->private_data;
3462 
3463 	cifs_dbg(FYI, "swap deactivate\n");
3464 
3465 	/* TODO: undo sk_set_memalloc(inet) will eventually be needed */
3466 
3467 	if (cfile)
3468 		cfile->swapfile = false;
3469 
3470 	/* do we need to unpin (or unlock) the file */
3471 }
3472 
3473 /**
3474  * cifs_swap_rw - SMB3 address space operation for swap I/O
3475  * @iocb: target I/O control block
3476  * @iter: I/O buffer
3477  *
3478  * Perform IO to the swap-file.  This is much like direct IO.
3479  */
3480 static int cifs_swap_rw(struct kiocb *iocb, struct iov_iter *iter)
3481 {
3482 	ssize_t ret;
3483 
3484 	if (iov_iter_rw(iter) == READ)
3485 		ret = netfs_unbuffered_read_iter_locked(iocb, iter);
3486 	else
3487 		ret = netfs_unbuffered_write_iter_locked(iocb, iter, NULL);
3488 	if (ret < 0)
3489 		return ret;
3490 	return 0;
3491 }
3492 
3493 const struct address_space_operations cifs_addr_ops = {
3494 	.read_folio	= netfs_read_folio,
3495 	.readahead	= netfs_readahead,
3496 	.writepages	= netfs_writepages,
3497 	.dirty_folio	= netfs_dirty_folio,
3498 	.release_folio	= netfs_release_folio,
3499 	.direct_IO	= noop_direct_IO,
3500 	.invalidate_folio = netfs_invalidate_folio,
3501 	.migrate_folio	= filemap_migrate_folio,
3502 	/*
3503 	 * TODO: investigate and if useful we could add an is_dirty_writeback
3504 	 * helper if needed
3505 	 */
3506 	.swap_activate	= cifs_swap_activate,
3507 	.swap_deactivate = cifs_swap_deactivate,
3508 	.swap_rw = cifs_swap_rw,
3509 };
3510 
3511 /*
3512  * cifs_readahead requires the server to support a buffer large enough to
3513  * contain the header plus one complete page of data.  Otherwise, we need
3514  * to leave cifs_readahead out of the address space operations.
3515  */
3516 const struct address_space_operations cifs_addr_ops_smallbuf = {
3517 	.read_folio	= netfs_read_folio,
3518 	.writepages	= netfs_writepages,
3519 	.dirty_folio	= netfs_dirty_folio,
3520 	.release_folio	= netfs_release_folio,
3521 	.invalidate_folio = netfs_invalidate_folio,
3522 	.migrate_folio	= filemap_migrate_folio,
3523 };
3524