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/backing-dev.h>
13 #include <linux/stat.h>
14 #include <linux/fcntl.h>
15 #include <linux/pagemap.h>
16 #include <linux/pagevec.h>
17 #include <linux/writeback.h>
18 #include <linux/task_io_accounting_ops.h>
19 #include <linux/delay.h>
20 #include <linux/mount.h>
21 #include <linux/slab.h>
22 #include <linux/swap.h>
23 #include <linux/mm.h>
24 #include <asm/div64.h>
25 #include "cifsfs.h"
26 #include "cifspdu.h"
27 #include "cifsglob.h"
28 #include "cifsproto.h"
29 #include "cifs_unicode.h"
30 #include "cifs_debug.h"
31 #include "cifs_fs_sb.h"
32 #include "fscache.h"
33 #include "smbdirect.h"
34 #include "fs_context.h"
35 #include "cifs_ioctl.h"
36 
cifs_convert_flags(unsigned int flags)37 static inline int cifs_convert_flags(unsigned int flags)
38 {
39 	if ((flags & O_ACCMODE) == O_RDONLY)
40 		return GENERIC_READ;
41 	else if ((flags & O_ACCMODE) == O_WRONLY)
42 		return GENERIC_WRITE;
43 	else if ((flags & O_ACCMODE) == O_RDWR) {
44 		/* GENERIC_ALL is too much permission to request
45 		   can cause unnecessary access denied on create */
46 		/* return GENERIC_ALL; */
47 		return (GENERIC_READ | GENERIC_WRITE);
48 	}
49 
50 	return (READ_CONTROL | FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES |
51 		FILE_WRITE_EA | FILE_APPEND_DATA | FILE_WRITE_DATA |
52 		FILE_READ_DATA);
53 }
54 
cifs_posix_convert_flags(unsigned int flags)55 static u32 cifs_posix_convert_flags(unsigned int flags)
56 {
57 	u32 posix_flags = 0;
58 
59 	if ((flags & O_ACCMODE) == O_RDONLY)
60 		posix_flags = SMB_O_RDONLY;
61 	else if ((flags & O_ACCMODE) == O_WRONLY)
62 		posix_flags = SMB_O_WRONLY;
63 	else if ((flags & O_ACCMODE) == O_RDWR)
64 		posix_flags = SMB_O_RDWR;
65 
66 	if (flags & O_CREAT) {
67 		posix_flags |= SMB_O_CREAT;
68 		if (flags & O_EXCL)
69 			posix_flags |= SMB_O_EXCL;
70 	} else if (flags & O_EXCL)
71 		cifs_dbg(FYI, "Application %s pid %d has incorrectly set O_EXCL flag but not O_CREAT on file open. Ignoring O_EXCL\n",
72 			 current->comm, current->tgid);
73 
74 	if (flags & O_TRUNC)
75 		posix_flags |= SMB_O_TRUNC;
76 	/* be safe and imply O_SYNC for O_DSYNC */
77 	if (flags & O_DSYNC)
78 		posix_flags |= SMB_O_SYNC;
79 	if (flags & O_DIRECTORY)
80 		posix_flags |= SMB_O_DIRECTORY;
81 	if (flags & O_NOFOLLOW)
82 		posix_flags |= SMB_O_NOFOLLOW;
83 	if (flags & O_DIRECT)
84 		posix_flags |= SMB_O_DIRECT;
85 
86 	return posix_flags;
87 }
88 
cifs_get_disposition(unsigned int flags)89 static inline int cifs_get_disposition(unsigned int flags)
90 {
91 	if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
92 		return FILE_CREATE;
93 	else if ((flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
94 		return FILE_OVERWRITE_IF;
95 	else if ((flags & O_CREAT) == O_CREAT)
96 		return FILE_OPEN_IF;
97 	else if ((flags & O_TRUNC) == O_TRUNC)
98 		return FILE_OVERWRITE;
99 	else
100 		return FILE_OPEN;
101 }
102 
cifs_posix_open(const char * full_path,struct inode ** pinode,struct super_block * sb,int mode,unsigned int f_flags,__u32 * poplock,__u16 * pnetfid,unsigned int xid)103 int cifs_posix_open(const char *full_path, struct inode **pinode,
104 			struct super_block *sb, int mode, unsigned int f_flags,
105 			__u32 *poplock, __u16 *pnetfid, unsigned int xid)
106 {
107 	int rc;
108 	FILE_UNIX_BASIC_INFO *presp_data;
109 	__u32 posix_flags = 0;
110 	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
111 	struct cifs_fattr fattr;
112 	struct tcon_link *tlink;
113 	struct cifs_tcon *tcon;
114 
115 	cifs_dbg(FYI, "posix open %s\n", full_path);
116 
117 	presp_data = kzalloc(sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL);
118 	if (presp_data == NULL)
119 		return -ENOMEM;
120 
121 	tlink = cifs_sb_tlink(cifs_sb);
122 	if (IS_ERR(tlink)) {
123 		rc = PTR_ERR(tlink);
124 		goto posix_open_ret;
125 	}
126 
127 	tcon = tlink_tcon(tlink);
128 	mode &= ~current_umask();
129 
130 	posix_flags = cifs_posix_convert_flags(f_flags);
131 	rc = CIFSPOSIXCreate(xid, tcon, posix_flags, mode, pnetfid, presp_data,
132 			     poplock, full_path, cifs_sb->local_nls,
133 			     cifs_remap(cifs_sb));
134 	cifs_put_tlink(tlink);
135 
136 	if (rc)
137 		goto posix_open_ret;
138 
139 	if (presp_data->Type == cpu_to_le32(-1))
140 		goto posix_open_ret; /* open ok, caller does qpathinfo */
141 
142 	if (!pinode)
143 		goto posix_open_ret; /* caller does not need info */
144 
145 	cifs_unix_basic_to_fattr(&fattr, presp_data, cifs_sb);
146 
147 	/* get new inode and set it up */
148 	if (*pinode == NULL) {
149 		cifs_fill_uniqueid(sb, &fattr);
150 		*pinode = cifs_iget(sb, &fattr);
151 		if (!*pinode) {
152 			rc = -ENOMEM;
153 			goto posix_open_ret;
154 		}
155 	} else {
156 		cifs_revalidate_mapping(*pinode);
157 		rc = cifs_fattr_to_inode(*pinode, &fattr);
158 	}
159 
160 posix_open_ret:
161 	kfree(presp_data);
162 	return rc;
163 }
164 
165 static int
cifs_nt_open(const char * full_path,struct inode * inode,struct cifs_sb_info * cifs_sb,struct cifs_tcon * tcon,unsigned int f_flags,__u32 * oplock,struct cifs_fid * fid,unsigned int xid)166 cifs_nt_open(const char *full_path, struct inode *inode, struct cifs_sb_info *cifs_sb,
167 	     struct cifs_tcon *tcon, unsigned int f_flags, __u32 *oplock,
168 	     struct cifs_fid *fid, unsigned int xid)
169 {
170 	int rc;
171 	int desired_access;
172 	int disposition;
173 	int create_options = CREATE_NOT_DIR;
174 	FILE_ALL_INFO *buf;
175 	struct TCP_Server_Info *server = tcon->ses->server;
176 	struct cifs_open_parms oparms;
177 
178 	if (!server->ops->open)
179 		return -ENOSYS;
180 
181 	desired_access = cifs_convert_flags(f_flags);
182 
183 /*********************************************************************
184  *  open flag mapping table:
185  *
186  *	POSIX Flag            CIFS Disposition
187  *	----------            ----------------
188  *	O_CREAT               FILE_OPEN_IF
189  *	O_CREAT | O_EXCL      FILE_CREATE
190  *	O_CREAT | O_TRUNC     FILE_OVERWRITE_IF
191  *	O_TRUNC               FILE_OVERWRITE
192  *	none of the above     FILE_OPEN
193  *
194  *	Note that there is not a direct match between disposition
195  *	FILE_SUPERSEDE (ie create whether or not file exists although
196  *	O_CREAT | O_TRUNC is similar but truncates the existing
197  *	file rather than creating a new file as FILE_SUPERSEDE does
198  *	(which uses the attributes / metadata passed in on open call)
199  *?
200  *?  O_SYNC is a reasonable match to CIFS writethrough flag
201  *?  and the read write flags match reasonably.  O_LARGEFILE
202  *?  is irrelevant because largefile support is always used
203  *?  by this client. Flags O_APPEND, O_DIRECT, O_DIRECTORY,
204  *	 O_FASYNC, O_NOFOLLOW, O_NONBLOCK need further investigation
205  *********************************************************************/
206 
207 	disposition = cifs_get_disposition(f_flags);
208 
209 	/* BB pass O_SYNC flag through on file attributes .. BB */
210 
211 	buf = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
212 	if (!buf)
213 		return -ENOMEM;
214 
215 	/* O_SYNC also has bit for O_DSYNC so following check picks up either */
216 	if (f_flags & O_SYNC)
217 		create_options |= CREATE_WRITE_THROUGH;
218 
219 	if (f_flags & O_DIRECT)
220 		create_options |= CREATE_NO_BUFFER;
221 
222 	oparms.tcon = tcon;
223 	oparms.cifs_sb = cifs_sb;
224 	oparms.desired_access = desired_access;
225 	oparms.create_options = cifs_create_options(cifs_sb, create_options);
226 	oparms.disposition = disposition;
227 	oparms.path = full_path;
228 	oparms.fid = fid;
229 	oparms.reconnect = false;
230 
231 	rc = server->ops->open(xid, &oparms, oplock, buf);
232 
233 	if (rc)
234 		goto out;
235 
236 	/* TODO: Add support for calling posix query info but with passing in fid */
237 	if (tcon->unix_ext)
238 		rc = cifs_get_inode_info_unix(&inode, full_path, inode->i_sb,
239 					      xid);
240 	else
241 		rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb,
242 					 xid, fid);
243 
244 	if (rc) {
245 		server->ops->close(xid, tcon, fid);
246 		if (rc == -ESTALE)
247 			rc = -EOPENSTALE;
248 	}
249 
250 out:
251 	kfree(buf);
252 	return rc;
253 }
254 
255 static bool
cifs_has_mand_locks(struct cifsInodeInfo * cinode)256 cifs_has_mand_locks(struct cifsInodeInfo *cinode)
257 {
258 	struct cifs_fid_locks *cur;
259 	bool has_locks = false;
260 
261 	down_read(&cinode->lock_sem);
262 	list_for_each_entry(cur, &cinode->llist, llist) {
263 		if (!list_empty(&cur->locks)) {
264 			has_locks = true;
265 			break;
266 		}
267 	}
268 	up_read(&cinode->lock_sem);
269 	return has_locks;
270 }
271 
272 void
cifs_down_write(struct rw_semaphore * sem)273 cifs_down_write(struct rw_semaphore *sem)
274 {
275 	while (!down_write_trylock(sem))
276 		msleep(10);
277 }
278 
279 static void cifsFileInfo_put_work(struct work_struct *work);
280 
281 struct cifsFileInfo *
cifs_new_fileinfo(struct cifs_fid * fid,struct file * file,struct tcon_link * tlink,__u32 oplock)282 cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
283 		  struct tcon_link *tlink, __u32 oplock)
284 {
285 	struct dentry *dentry = file_dentry(file);
286 	struct inode *inode = d_inode(dentry);
287 	struct cifsInodeInfo *cinode = CIFS_I(inode);
288 	struct cifsFileInfo *cfile;
289 	struct cifs_fid_locks *fdlocks;
290 	struct cifs_tcon *tcon = tlink_tcon(tlink);
291 	struct TCP_Server_Info *server = tcon->ses->server;
292 
293 	cfile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
294 	if (cfile == NULL)
295 		return cfile;
296 
297 	fdlocks = kzalloc(sizeof(struct cifs_fid_locks), GFP_KERNEL);
298 	if (!fdlocks) {
299 		kfree(cfile);
300 		return NULL;
301 	}
302 
303 	INIT_LIST_HEAD(&fdlocks->locks);
304 	fdlocks->cfile = cfile;
305 	cfile->llist = fdlocks;
306 
307 	cfile->count = 1;
308 	cfile->pid = current->tgid;
309 	cfile->uid = current_fsuid();
310 	cfile->dentry = dget(dentry);
311 	cfile->f_flags = file->f_flags;
312 	cfile->invalidHandle = false;
313 	cfile->deferred_close_scheduled = false;
314 	cfile->tlink = cifs_get_tlink(tlink);
315 	INIT_WORK(&cfile->oplock_break, cifs_oplock_break);
316 	INIT_WORK(&cfile->put, cifsFileInfo_put_work);
317 	INIT_DELAYED_WORK(&cfile->deferred, smb2_deferred_work_close);
318 	mutex_init(&cfile->fh_mutex);
319 	spin_lock_init(&cfile->file_info_lock);
320 
321 	cifs_sb_active(inode->i_sb);
322 
323 	/*
324 	 * If the server returned a read oplock and we have mandatory brlocks,
325 	 * set oplock level to None.
326 	 */
327 	if (server->ops->is_read_op(oplock) && cifs_has_mand_locks(cinode)) {
328 		cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n");
329 		oplock = 0;
330 	}
331 
332 	cifs_down_write(&cinode->lock_sem);
333 	list_add(&fdlocks->llist, &cinode->llist);
334 	up_write(&cinode->lock_sem);
335 
336 	spin_lock(&tcon->open_file_lock);
337 	if (fid->pending_open->oplock != CIFS_OPLOCK_NO_CHANGE && oplock)
338 		oplock = fid->pending_open->oplock;
339 	list_del(&fid->pending_open->olist);
340 
341 	fid->purge_cache = false;
342 	server->ops->set_fid(cfile, fid, oplock);
343 
344 	list_add(&cfile->tlist, &tcon->openFileList);
345 	atomic_inc(&tcon->num_local_opens);
346 
347 	/* if readable file instance put first in list*/
348 	spin_lock(&cinode->open_file_lock);
349 	if (file->f_mode & FMODE_READ)
350 		list_add(&cfile->flist, &cinode->openFileList);
351 	else
352 		list_add_tail(&cfile->flist, &cinode->openFileList);
353 	spin_unlock(&cinode->open_file_lock);
354 	spin_unlock(&tcon->open_file_lock);
355 
356 	if (fid->purge_cache)
357 		cifs_zap_mapping(inode);
358 
359 	file->private_data = cfile;
360 	return cfile;
361 }
362 
363 struct cifsFileInfo *
cifsFileInfo_get(struct cifsFileInfo * cifs_file)364 cifsFileInfo_get(struct cifsFileInfo *cifs_file)
365 {
366 	spin_lock(&cifs_file->file_info_lock);
367 	cifsFileInfo_get_locked(cifs_file);
368 	spin_unlock(&cifs_file->file_info_lock);
369 	return cifs_file;
370 }
371 
cifsFileInfo_put_final(struct cifsFileInfo * cifs_file)372 static void cifsFileInfo_put_final(struct cifsFileInfo *cifs_file)
373 {
374 	struct inode *inode = d_inode(cifs_file->dentry);
375 	struct cifsInodeInfo *cifsi = CIFS_I(inode);
376 	struct cifsLockInfo *li, *tmp;
377 	struct super_block *sb = inode->i_sb;
378 
379 	cifs_fscache_release_inode_cookie(inode);
380 
381 	/*
382 	 * Delete any outstanding lock records. We'll lose them when the file
383 	 * is closed anyway.
384 	 */
385 	cifs_down_write(&cifsi->lock_sem);
386 	list_for_each_entry_safe(li, tmp, &cifs_file->llist->locks, llist) {
387 		list_del(&li->llist);
388 		cifs_del_lock_waiters(li);
389 		kfree(li);
390 	}
391 	list_del(&cifs_file->llist->llist);
392 	kfree(cifs_file->llist);
393 	up_write(&cifsi->lock_sem);
394 
395 	cifs_put_tlink(cifs_file->tlink);
396 	dput(cifs_file->dentry);
397 	cifs_sb_deactive(sb);
398 	kfree(cifs_file);
399 }
400 
cifsFileInfo_put_work(struct work_struct * work)401 static void cifsFileInfo_put_work(struct work_struct *work)
402 {
403 	struct cifsFileInfo *cifs_file = container_of(work,
404 			struct cifsFileInfo, put);
405 
406 	cifsFileInfo_put_final(cifs_file);
407 }
408 
409 /**
410  * cifsFileInfo_put - release a reference of file priv data
411  *
412  * Always potentially wait for oplock handler. See _cifsFileInfo_put().
413  *
414  * @cifs_file:	cifs/smb3 specific info (eg refcounts) for an open file
415  */
cifsFileInfo_put(struct cifsFileInfo * cifs_file)416 void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
417 {
418 	_cifsFileInfo_put(cifs_file, true, true);
419 }
420 
421 /**
422  * _cifsFileInfo_put - release a reference of file priv data
423  *
424  * This may involve closing the filehandle @cifs_file out on the
425  * server. Must be called without holding tcon->open_file_lock,
426  * cinode->open_file_lock and cifs_file->file_info_lock.
427  *
428  * If @wait_for_oplock_handler is true and we are releasing the last
429  * reference, wait for any running oplock break handler of the file
430  * and cancel any pending one.
431  *
432  * @cifs_file:	cifs/smb3 specific info (eg refcounts) for an open file
433  * @wait_oplock_handler: must be false if called from oplock_break_handler
434  * @offload:	not offloaded on close and oplock breaks
435  *
436  */
_cifsFileInfo_put(struct cifsFileInfo * cifs_file,bool wait_oplock_handler,bool offload)437 void _cifsFileInfo_put(struct cifsFileInfo *cifs_file,
438 		       bool wait_oplock_handler, bool offload)
439 {
440 	struct inode *inode = d_inode(cifs_file->dentry);
441 	struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
442 	struct TCP_Server_Info *server = tcon->ses->server;
443 	struct cifsInodeInfo *cifsi = CIFS_I(inode);
444 	struct super_block *sb = inode->i_sb;
445 	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
446 	struct cifs_fid fid;
447 	struct cifs_pending_open open;
448 	bool oplock_break_cancelled;
449 
450 	spin_lock(&tcon->open_file_lock);
451 	spin_lock(&cifsi->open_file_lock);
452 	spin_lock(&cifs_file->file_info_lock);
453 	if (--cifs_file->count > 0) {
454 		spin_unlock(&cifs_file->file_info_lock);
455 		spin_unlock(&cifsi->open_file_lock);
456 		spin_unlock(&tcon->open_file_lock);
457 		return;
458 	}
459 	spin_unlock(&cifs_file->file_info_lock);
460 
461 	if (server->ops->get_lease_key)
462 		server->ops->get_lease_key(inode, &fid);
463 
464 	/* store open in pending opens to make sure we don't miss lease break */
465 	cifs_add_pending_open_locked(&fid, cifs_file->tlink, &open);
466 
467 	/* remove it from the lists */
468 	list_del(&cifs_file->flist);
469 	list_del(&cifs_file->tlist);
470 	atomic_dec(&tcon->num_local_opens);
471 
472 	if (list_empty(&cifsi->openFileList)) {
473 		cifs_dbg(FYI, "closing last open instance for inode %p\n",
474 			 d_inode(cifs_file->dentry));
475 		/*
476 		 * In strict cache mode we need invalidate mapping on the last
477 		 * close  because it may cause a error when we open this file
478 		 * again and get at least level II oplock.
479 		 */
480 		if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO)
481 			set_bit(CIFS_INO_INVALID_MAPPING, &cifsi->flags);
482 		cifs_set_oplock_level(cifsi, 0);
483 	}
484 
485 	spin_unlock(&cifsi->open_file_lock);
486 	spin_unlock(&tcon->open_file_lock);
487 
488 	oplock_break_cancelled = wait_oplock_handler ?
489 		cancel_work_sync(&cifs_file->oplock_break) : false;
490 
491 	if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
492 		struct TCP_Server_Info *server = tcon->ses->server;
493 		unsigned int xid;
494 
495 		xid = get_xid();
496 		if (server->ops->close_getattr)
497 			server->ops->close_getattr(xid, tcon, cifs_file);
498 		else if (server->ops->close)
499 			server->ops->close(xid, tcon, &cifs_file->fid);
500 		_free_xid(xid);
501 	}
502 
503 	if (oplock_break_cancelled)
504 		cifs_done_oplock_break(cifsi);
505 
506 	cifs_del_pending_open(&open);
507 
508 	if (offload)
509 		queue_work(fileinfo_put_wq, &cifs_file->put);
510 	else
511 		cifsFileInfo_put_final(cifs_file);
512 }
513 
cifs_open(struct inode * inode,struct file * file)514 int cifs_open(struct inode *inode, struct file *file)
515 
516 {
517 	int rc = -EACCES;
518 	unsigned int xid;
519 	__u32 oplock;
520 	struct cifs_sb_info *cifs_sb;
521 	struct TCP_Server_Info *server;
522 	struct cifs_tcon *tcon;
523 	struct tcon_link *tlink;
524 	struct cifsFileInfo *cfile = NULL;
525 	void *page;
526 	const char *full_path;
527 	bool posix_open_ok = false;
528 	struct cifs_fid fid;
529 	struct cifs_pending_open open;
530 
531 	xid = get_xid();
532 
533 	cifs_sb = CIFS_SB(inode->i_sb);
534 	if (unlikely(cifs_forced_shutdown(cifs_sb))) {
535 		free_xid(xid);
536 		return -EIO;
537 	}
538 
539 	tlink = cifs_sb_tlink(cifs_sb);
540 	if (IS_ERR(tlink)) {
541 		free_xid(xid);
542 		return PTR_ERR(tlink);
543 	}
544 	tcon = tlink_tcon(tlink);
545 	server = tcon->ses->server;
546 
547 	page = alloc_dentry_path();
548 	full_path = build_path_from_dentry(file_dentry(file), page);
549 	if (IS_ERR(full_path)) {
550 		rc = PTR_ERR(full_path);
551 		goto out;
552 	}
553 
554 	cifs_dbg(FYI, "inode = 0x%p file flags are 0x%x for %s\n",
555 		 inode, file->f_flags, full_path);
556 
557 	if (file->f_flags & O_DIRECT &&
558 	    cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO) {
559 		if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
560 			file->f_op = &cifs_file_direct_nobrl_ops;
561 		else
562 			file->f_op = &cifs_file_direct_ops;
563 	}
564 
565 	/* Get the cached handle as SMB2 close is deferred */
566 	rc = cifs_get_readable_path(tcon, full_path, &cfile);
567 	if (rc == 0) {
568 		if (file->f_flags == cfile->f_flags) {
569 			file->private_data = cfile;
570 			spin_lock(&CIFS_I(inode)->deferred_lock);
571 			cifs_del_deferred_close(cfile);
572 			spin_unlock(&CIFS_I(inode)->deferred_lock);
573 			goto out;
574 		} else {
575 			_cifsFileInfo_put(cfile, true, false);
576 		}
577 	}
578 
579 	if (server->oplocks)
580 		oplock = REQ_OPLOCK;
581 	else
582 		oplock = 0;
583 
584 	if (!tcon->broken_posix_open && tcon->unix_ext &&
585 	    cap_unix(tcon->ses) && (CIFS_UNIX_POSIX_PATH_OPS_CAP &
586 				le64_to_cpu(tcon->fsUnixInfo.Capability))) {
587 		/* can not refresh inode info since size could be stale */
588 		rc = cifs_posix_open(full_path, &inode, inode->i_sb,
589 				cifs_sb->ctx->file_mode /* ignored */,
590 				file->f_flags, &oplock, &fid.netfid, xid);
591 		if (rc == 0) {
592 			cifs_dbg(FYI, "posix open succeeded\n");
593 			posix_open_ok = true;
594 		} else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) {
595 			if (tcon->ses->serverNOS)
596 				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",
597 					 tcon->ses->ip_addr,
598 					 tcon->ses->serverNOS);
599 			tcon->broken_posix_open = true;
600 		} else if ((rc != -EIO) && (rc != -EREMOTE) &&
601 			 (rc != -EOPNOTSUPP)) /* path not found or net err */
602 			goto out;
603 		/*
604 		 * Else fallthrough to retry open the old way on network i/o
605 		 * or DFS errors.
606 		 */
607 	}
608 
609 	if (server->ops->get_lease_key)
610 		server->ops->get_lease_key(inode, &fid);
611 
612 	cifs_add_pending_open(&fid, tlink, &open);
613 
614 	if (!posix_open_ok) {
615 		if (server->ops->get_lease_key)
616 			server->ops->get_lease_key(inode, &fid);
617 
618 		rc = cifs_nt_open(full_path, inode, cifs_sb, tcon,
619 				  file->f_flags, &oplock, &fid, xid);
620 		if (rc) {
621 			cifs_del_pending_open(&open);
622 			goto out;
623 		}
624 	}
625 
626 	cfile = cifs_new_fileinfo(&fid, file, tlink, oplock);
627 	if (cfile == NULL) {
628 		if (server->ops->close)
629 			server->ops->close(xid, tcon, &fid);
630 		cifs_del_pending_open(&open);
631 		rc = -ENOMEM;
632 		goto out;
633 	}
634 
635 	cifs_fscache_set_inode_cookie(inode, file);
636 
637 	if ((oplock & CIFS_CREATE_ACTION) && !posix_open_ok && tcon->unix_ext) {
638 		/*
639 		 * Time to set mode which we can not set earlier due to
640 		 * problems creating new read-only files.
641 		 */
642 		struct cifs_unix_set_info_args args = {
643 			.mode	= inode->i_mode,
644 			.uid	= INVALID_UID, /* no change */
645 			.gid	= INVALID_GID, /* no change */
646 			.ctime	= NO_CHANGE_64,
647 			.atime	= NO_CHANGE_64,
648 			.mtime	= NO_CHANGE_64,
649 			.device	= 0,
650 		};
651 		CIFSSMBUnixSetFileInfo(xid, tcon, &args, fid.netfid,
652 				       cfile->pid);
653 	}
654 
655 out:
656 	free_dentry_path(page);
657 	free_xid(xid);
658 	cifs_put_tlink(tlink);
659 	return rc;
660 }
661 
662 static int cifs_push_posix_locks(struct cifsFileInfo *cfile);
663 
664 /*
665  * Try to reacquire byte range locks that were released when session
666  * to server was lost.
667  */
668 static int
cifs_relock_file(struct cifsFileInfo * cfile)669 cifs_relock_file(struct cifsFileInfo *cfile)
670 {
671 	struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
672 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
673 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
674 	int rc = 0;
675 
676 	down_read_nested(&cinode->lock_sem, SINGLE_DEPTH_NESTING);
677 	if (cinode->can_cache_brlcks) {
678 		/* can cache locks - no need to relock */
679 		up_read(&cinode->lock_sem);
680 		return rc;
681 	}
682 
683 	if (cap_unix(tcon->ses) &&
684 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
685 	    ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
686 		rc = cifs_push_posix_locks(cfile);
687 	else
688 		rc = tcon->ses->server->ops->push_mand_locks(cfile);
689 
690 	up_read(&cinode->lock_sem);
691 	return rc;
692 }
693 
694 static int
cifs_reopen_file(struct cifsFileInfo * cfile,bool can_flush)695 cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush)
696 {
697 	int rc = -EACCES;
698 	unsigned int xid;
699 	__u32 oplock;
700 	struct cifs_sb_info *cifs_sb;
701 	struct cifs_tcon *tcon;
702 	struct TCP_Server_Info *server;
703 	struct cifsInodeInfo *cinode;
704 	struct inode *inode;
705 	void *page;
706 	const char *full_path;
707 	int desired_access;
708 	int disposition = FILE_OPEN;
709 	int create_options = CREATE_NOT_DIR;
710 	struct cifs_open_parms oparms;
711 
712 	xid = get_xid();
713 	mutex_lock(&cfile->fh_mutex);
714 	if (!cfile->invalidHandle) {
715 		mutex_unlock(&cfile->fh_mutex);
716 		free_xid(xid);
717 		return 0;
718 	}
719 
720 	inode = d_inode(cfile->dentry);
721 	cifs_sb = CIFS_SB(inode->i_sb);
722 	tcon = tlink_tcon(cfile->tlink);
723 	server = tcon->ses->server;
724 
725 	/*
726 	 * Can not grab rename sem here because various ops, including those
727 	 * that already have the rename sem can end up causing writepage to get
728 	 * called and if the server was down that means we end up here, and we
729 	 * can never tell if the caller already has the rename_sem.
730 	 */
731 	page = alloc_dentry_path();
732 	full_path = build_path_from_dentry(cfile->dentry, page);
733 	if (IS_ERR(full_path)) {
734 		mutex_unlock(&cfile->fh_mutex);
735 		free_dentry_path(page);
736 		free_xid(xid);
737 		return PTR_ERR(full_path);
738 	}
739 
740 	cifs_dbg(FYI, "inode = 0x%p file flags 0x%x for %s\n",
741 		 inode, cfile->f_flags, full_path);
742 
743 	if (tcon->ses->server->oplocks)
744 		oplock = REQ_OPLOCK;
745 	else
746 		oplock = 0;
747 
748 	if (tcon->unix_ext && cap_unix(tcon->ses) &&
749 	    (CIFS_UNIX_POSIX_PATH_OPS_CAP &
750 				le64_to_cpu(tcon->fsUnixInfo.Capability))) {
751 		/*
752 		 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the
753 		 * original open. Must mask them off for a reopen.
754 		 */
755 		unsigned int oflags = cfile->f_flags &
756 						~(O_CREAT | O_EXCL | O_TRUNC);
757 
758 		rc = cifs_posix_open(full_path, NULL, inode->i_sb,
759 				     cifs_sb->ctx->file_mode /* ignored */,
760 				     oflags, &oplock, &cfile->fid.netfid, xid);
761 		if (rc == 0) {
762 			cifs_dbg(FYI, "posix reopen succeeded\n");
763 			oparms.reconnect = true;
764 			goto reopen_success;
765 		}
766 		/*
767 		 * fallthrough to retry open the old way on errors, especially
768 		 * in the reconnect path it is important to retry hard
769 		 */
770 	}
771 
772 	desired_access = cifs_convert_flags(cfile->f_flags);
773 
774 	/* O_SYNC also has bit for O_DSYNC so following check picks up either */
775 	if (cfile->f_flags & O_SYNC)
776 		create_options |= CREATE_WRITE_THROUGH;
777 
778 	if (cfile->f_flags & O_DIRECT)
779 		create_options |= CREATE_NO_BUFFER;
780 
781 	if (server->ops->get_lease_key)
782 		server->ops->get_lease_key(inode, &cfile->fid);
783 
784 	oparms.tcon = tcon;
785 	oparms.cifs_sb = cifs_sb;
786 	oparms.desired_access = desired_access;
787 	oparms.create_options = cifs_create_options(cifs_sb, create_options);
788 	oparms.disposition = disposition;
789 	oparms.path = full_path;
790 	oparms.fid = &cfile->fid;
791 	oparms.reconnect = true;
792 
793 	/*
794 	 * Can not refresh inode by passing in file_info buf to be returned by
795 	 * ops->open and then calling get_inode_info with returned buf since
796 	 * file might have write behind data that needs to be flushed and server
797 	 * version of file size can be stale. If we knew for sure that inode was
798 	 * not dirty locally we could do this.
799 	 */
800 	rc = server->ops->open(xid, &oparms, &oplock, NULL);
801 	if (rc == -ENOENT && oparms.reconnect == false) {
802 		/* durable handle timeout is expired - open the file again */
803 		rc = server->ops->open(xid, &oparms, &oplock, NULL);
804 		/* indicate that we need to relock the file */
805 		oparms.reconnect = true;
806 	}
807 
808 	if (rc) {
809 		mutex_unlock(&cfile->fh_mutex);
810 		cifs_dbg(FYI, "cifs_reopen returned 0x%x\n", rc);
811 		cifs_dbg(FYI, "oplock: %d\n", oplock);
812 		goto reopen_error_exit;
813 	}
814 
815 reopen_success:
816 	cfile->invalidHandle = false;
817 	mutex_unlock(&cfile->fh_mutex);
818 	cinode = CIFS_I(inode);
819 
820 	if (can_flush) {
821 		rc = filemap_write_and_wait(inode->i_mapping);
822 		if (!is_interrupt_error(rc))
823 			mapping_set_error(inode->i_mapping, rc);
824 
825 		if (tcon->posix_extensions)
826 			rc = smb311_posix_get_inode_info(&inode, full_path, inode->i_sb, xid);
827 		else if (tcon->unix_ext)
828 			rc = cifs_get_inode_info_unix(&inode, full_path,
829 						      inode->i_sb, xid);
830 		else
831 			rc = cifs_get_inode_info(&inode, full_path, NULL,
832 						 inode->i_sb, xid, NULL);
833 	}
834 	/*
835 	 * Else we are writing out data to server already and could deadlock if
836 	 * we tried to flush data, and since we do not know if we have data that
837 	 * would invalidate the current end of file on the server we can not go
838 	 * to the server to get the new inode info.
839 	 */
840 
841 	/*
842 	 * If the server returned a read oplock and we have mandatory brlocks,
843 	 * set oplock level to None.
844 	 */
845 	if (server->ops->is_read_op(oplock) && cifs_has_mand_locks(cinode)) {
846 		cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n");
847 		oplock = 0;
848 	}
849 
850 	server->ops->set_fid(cfile, &cfile->fid, oplock);
851 	if (oparms.reconnect)
852 		cifs_relock_file(cfile);
853 
854 reopen_error_exit:
855 	free_dentry_path(page);
856 	free_xid(xid);
857 	return rc;
858 }
859 
smb2_deferred_work_close(struct work_struct * work)860 void smb2_deferred_work_close(struct work_struct *work)
861 {
862 	struct cifsFileInfo *cfile = container_of(work,
863 			struct cifsFileInfo, deferred.work);
864 
865 	spin_lock(&CIFS_I(d_inode(cfile->dentry))->deferred_lock);
866 	cifs_del_deferred_close(cfile);
867 	cfile->deferred_close_scheduled = false;
868 	spin_unlock(&CIFS_I(d_inode(cfile->dentry))->deferred_lock);
869 	_cifsFileInfo_put(cfile, true, false);
870 }
871 
cifs_close(struct inode * inode,struct file * file)872 int cifs_close(struct inode *inode, struct file *file)
873 {
874 	struct cifsFileInfo *cfile;
875 	struct cifsInodeInfo *cinode = CIFS_I(inode);
876 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
877 	struct cifs_deferred_close *dclose;
878 
879 	if (file->private_data != NULL) {
880 		cfile = file->private_data;
881 		file->private_data = NULL;
882 		dclose = kmalloc(sizeof(struct cifs_deferred_close), GFP_KERNEL);
883 		if ((cinode->oplock == CIFS_CACHE_RHW_FLG) &&
884 		    cinode->lease_granted &&
885 		    !test_bit(CIFS_INO_CLOSE_ON_LOCK, &cinode->flags) &&
886 		    dclose) {
887 			if (test_and_clear_bit(CIFS_INO_MODIFIED_ATTR, &cinode->flags)) {
888 				inode->i_ctime = inode->i_mtime = current_time(inode);
889 				cifs_fscache_update_inode_cookie(inode);
890 			}
891 			spin_lock(&cinode->deferred_lock);
892 			cifs_add_deferred_close(cfile, dclose);
893 			if (cfile->deferred_close_scheduled &&
894 			    delayed_work_pending(&cfile->deferred)) {
895 				/*
896 				 * If there is no pending work, mod_delayed_work queues new work.
897 				 * So, Increase the ref count to avoid use-after-free.
898 				 */
899 				if (!mod_delayed_work(deferredclose_wq,
900 						&cfile->deferred, cifs_sb->ctx->acregmax))
901 					cifsFileInfo_get(cfile);
902 			} else {
903 				/* Deferred close for files */
904 				queue_delayed_work(deferredclose_wq,
905 						&cfile->deferred, cifs_sb->ctx->acregmax);
906 				cfile->deferred_close_scheduled = true;
907 				spin_unlock(&cinode->deferred_lock);
908 				return 0;
909 			}
910 			spin_unlock(&cinode->deferred_lock);
911 			_cifsFileInfo_put(cfile, true, false);
912 		} else {
913 			_cifsFileInfo_put(cfile, true, false);
914 			kfree(dclose);
915 		}
916 	}
917 
918 	/* return code from the ->release op is always ignored */
919 	return 0;
920 }
921 
922 void
cifs_reopen_persistent_handles(struct cifs_tcon * tcon)923 cifs_reopen_persistent_handles(struct cifs_tcon *tcon)
924 {
925 	struct cifsFileInfo *open_file;
926 	struct list_head *tmp;
927 	struct list_head *tmp1;
928 	struct list_head tmp_list;
929 
930 	if (!tcon->use_persistent || !tcon->need_reopen_files)
931 		return;
932 
933 	tcon->need_reopen_files = false;
934 
935 	cifs_dbg(FYI, "Reopen persistent handles\n");
936 	INIT_LIST_HEAD(&tmp_list);
937 
938 	/* list all files open on tree connection, reopen resilient handles  */
939 	spin_lock(&tcon->open_file_lock);
940 	list_for_each(tmp, &tcon->openFileList) {
941 		open_file = list_entry(tmp, struct cifsFileInfo, tlist);
942 		if (!open_file->invalidHandle)
943 			continue;
944 		cifsFileInfo_get(open_file);
945 		list_add_tail(&open_file->rlist, &tmp_list);
946 	}
947 	spin_unlock(&tcon->open_file_lock);
948 
949 	list_for_each_safe(tmp, tmp1, &tmp_list) {
950 		open_file = list_entry(tmp, struct cifsFileInfo, rlist);
951 		if (cifs_reopen_file(open_file, false /* do not flush */))
952 			tcon->need_reopen_files = true;
953 		list_del_init(&open_file->rlist);
954 		cifsFileInfo_put(open_file);
955 	}
956 }
957 
cifs_closedir(struct inode * inode,struct file * file)958 int cifs_closedir(struct inode *inode, struct file *file)
959 {
960 	int rc = 0;
961 	unsigned int xid;
962 	struct cifsFileInfo *cfile = file->private_data;
963 	struct cifs_tcon *tcon;
964 	struct TCP_Server_Info *server;
965 	char *buf;
966 
967 	cifs_dbg(FYI, "Closedir inode = 0x%p\n", inode);
968 
969 	if (cfile == NULL)
970 		return rc;
971 
972 	xid = get_xid();
973 	tcon = tlink_tcon(cfile->tlink);
974 	server = tcon->ses->server;
975 
976 	cifs_dbg(FYI, "Freeing private data in close dir\n");
977 	spin_lock(&cfile->file_info_lock);
978 	if (server->ops->dir_needs_close(cfile)) {
979 		cfile->invalidHandle = true;
980 		spin_unlock(&cfile->file_info_lock);
981 		if (server->ops->close_dir)
982 			rc = server->ops->close_dir(xid, tcon, &cfile->fid);
983 		else
984 			rc = -ENOSYS;
985 		cifs_dbg(FYI, "Closing uncompleted readdir with rc %d\n", rc);
986 		/* not much we can do if it fails anyway, ignore rc */
987 		rc = 0;
988 	} else
989 		spin_unlock(&cfile->file_info_lock);
990 
991 	buf = cfile->srch_inf.ntwrk_buf_start;
992 	if (buf) {
993 		cifs_dbg(FYI, "closedir free smb buf in srch struct\n");
994 		cfile->srch_inf.ntwrk_buf_start = NULL;
995 		if (cfile->srch_inf.smallBuf)
996 			cifs_small_buf_release(buf);
997 		else
998 			cifs_buf_release(buf);
999 	}
1000 
1001 	cifs_put_tlink(cfile->tlink);
1002 	kfree(file->private_data);
1003 	file->private_data = NULL;
1004 	/* BB can we lock the filestruct while this is going on? */
1005 	free_xid(xid);
1006 	return rc;
1007 }
1008 
1009 static struct cifsLockInfo *
cifs_lock_init(__u64 offset,__u64 length,__u8 type,__u16 flags)1010 cifs_lock_init(__u64 offset, __u64 length, __u8 type, __u16 flags)
1011 {
1012 	struct cifsLockInfo *lock =
1013 		kmalloc(sizeof(struct cifsLockInfo), GFP_KERNEL);
1014 	if (!lock)
1015 		return lock;
1016 	lock->offset = offset;
1017 	lock->length = length;
1018 	lock->type = type;
1019 	lock->pid = current->tgid;
1020 	lock->flags = flags;
1021 	INIT_LIST_HEAD(&lock->blist);
1022 	init_waitqueue_head(&lock->block_q);
1023 	return lock;
1024 }
1025 
1026 void
cifs_del_lock_waiters(struct cifsLockInfo * lock)1027 cifs_del_lock_waiters(struct cifsLockInfo *lock)
1028 {
1029 	struct cifsLockInfo *li, *tmp;
1030 	list_for_each_entry_safe(li, tmp, &lock->blist, blist) {
1031 		list_del_init(&li->blist);
1032 		wake_up(&li->block_q);
1033 	}
1034 }
1035 
1036 #define CIFS_LOCK_OP	0
1037 #define CIFS_READ_OP	1
1038 #define CIFS_WRITE_OP	2
1039 
1040 /* @rw_check : 0 - no op, 1 - read, 2 - write */
1041 static bool
cifs_find_fid_lock_conflict(struct cifs_fid_locks * fdlocks,__u64 offset,__u64 length,__u8 type,__u16 flags,struct cifsFileInfo * cfile,struct cifsLockInfo ** conf_lock,int rw_check)1042 cifs_find_fid_lock_conflict(struct cifs_fid_locks *fdlocks, __u64 offset,
1043 			    __u64 length, __u8 type, __u16 flags,
1044 			    struct cifsFileInfo *cfile,
1045 			    struct cifsLockInfo **conf_lock, int rw_check)
1046 {
1047 	struct cifsLockInfo *li;
1048 	struct cifsFileInfo *cur_cfile = fdlocks->cfile;
1049 	struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
1050 
1051 	list_for_each_entry(li, &fdlocks->locks, llist) {
1052 		if (offset + length <= li->offset ||
1053 		    offset >= li->offset + li->length)
1054 			continue;
1055 		if (rw_check != CIFS_LOCK_OP && current->tgid == li->pid &&
1056 		    server->ops->compare_fids(cfile, cur_cfile)) {
1057 			/* shared lock prevents write op through the same fid */
1058 			if (!(li->type & server->vals->shared_lock_type) ||
1059 			    rw_check != CIFS_WRITE_OP)
1060 				continue;
1061 		}
1062 		if ((type & server->vals->shared_lock_type) &&
1063 		    ((server->ops->compare_fids(cfile, cur_cfile) &&
1064 		     current->tgid == li->pid) || type == li->type))
1065 			continue;
1066 		if (rw_check == CIFS_LOCK_OP &&
1067 		    (flags & FL_OFDLCK) && (li->flags & FL_OFDLCK) &&
1068 		    server->ops->compare_fids(cfile, cur_cfile))
1069 			continue;
1070 		if (conf_lock)
1071 			*conf_lock = li;
1072 		return true;
1073 	}
1074 	return false;
1075 }
1076 
1077 bool
cifs_find_lock_conflict(struct cifsFileInfo * cfile,__u64 offset,__u64 length,__u8 type,__u16 flags,struct cifsLockInfo ** conf_lock,int rw_check)1078 cifs_find_lock_conflict(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
1079 			__u8 type, __u16 flags,
1080 			struct cifsLockInfo **conf_lock, int rw_check)
1081 {
1082 	bool rc = false;
1083 	struct cifs_fid_locks *cur;
1084 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1085 
1086 	list_for_each_entry(cur, &cinode->llist, llist) {
1087 		rc = cifs_find_fid_lock_conflict(cur, offset, length, type,
1088 						 flags, cfile, conf_lock,
1089 						 rw_check);
1090 		if (rc)
1091 			break;
1092 	}
1093 
1094 	return rc;
1095 }
1096 
1097 /*
1098  * Check if there is another lock that prevents us to set the lock (mandatory
1099  * style). If such a lock exists, update the flock structure with its
1100  * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
1101  * or leave it the same if we can't. Returns 0 if we don't need to request to
1102  * the server or 1 otherwise.
1103  */
1104 static int
cifs_lock_test(struct cifsFileInfo * cfile,__u64 offset,__u64 length,__u8 type,struct file_lock * flock)1105 cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
1106 	       __u8 type, struct file_lock *flock)
1107 {
1108 	int rc = 0;
1109 	struct cifsLockInfo *conf_lock;
1110 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1111 	struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
1112 	bool exist;
1113 
1114 	down_read(&cinode->lock_sem);
1115 
1116 	exist = cifs_find_lock_conflict(cfile, offset, length, type,
1117 					flock->fl_flags, &conf_lock,
1118 					CIFS_LOCK_OP);
1119 	if (exist) {
1120 		flock->fl_start = conf_lock->offset;
1121 		flock->fl_end = conf_lock->offset + conf_lock->length - 1;
1122 		flock->fl_pid = conf_lock->pid;
1123 		if (conf_lock->type & server->vals->shared_lock_type)
1124 			flock->fl_type = F_RDLCK;
1125 		else
1126 			flock->fl_type = F_WRLCK;
1127 	} else if (!cinode->can_cache_brlcks)
1128 		rc = 1;
1129 	else
1130 		flock->fl_type = F_UNLCK;
1131 
1132 	up_read(&cinode->lock_sem);
1133 	return rc;
1134 }
1135 
1136 static void
cifs_lock_add(struct cifsFileInfo * cfile,struct cifsLockInfo * lock)1137 cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock)
1138 {
1139 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1140 	cifs_down_write(&cinode->lock_sem);
1141 	list_add_tail(&lock->llist, &cfile->llist->locks);
1142 	up_write(&cinode->lock_sem);
1143 }
1144 
1145 /*
1146  * Set the byte-range lock (mandatory style). Returns:
1147  * 1) 0, if we set the lock and don't need to request to the server;
1148  * 2) 1, if no locks prevent us but we need to request to the server;
1149  * 3) -EACCES, if there is a lock that prevents us and wait is false.
1150  */
1151 static int
cifs_lock_add_if(struct cifsFileInfo * cfile,struct cifsLockInfo * lock,bool wait)1152 cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock,
1153 		 bool wait)
1154 {
1155 	struct cifsLockInfo *conf_lock;
1156 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1157 	bool exist;
1158 	int rc = 0;
1159 
1160 try_again:
1161 	exist = false;
1162 	cifs_down_write(&cinode->lock_sem);
1163 
1164 	exist = cifs_find_lock_conflict(cfile, lock->offset, lock->length,
1165 					lock->type, lock->flags, &conf_lock,
1166 					CIFS_LOCK_OP);
1167 	if (!exist && cinode->can_cache_brlcks) {
1168 		list_add_tail(&lock->llist, &cfile->llist->locks);
1169 		up_write(&cinode->lock_sem);
1170 		return rc;
1171 	}
1172 
1173 	if (!exist)
1174 		rc = 1;
1175 	else if (!wait)
1176 		rc = -EACCES;
1177 	else {
1178 		list_add_tail(&lock->blist, &conf_lock->blist);
1179 		up_write(&cinode->lock_sem);
1180 		rc = wait_event_interruptible(lock->block_q,
1181 					(lock->blist.prev == &lock->blist) &&
1182 					(lock->blist.next == &lock->blist));
1183 		if (!rc)
1184 			goto try_again;
1185 		cifs_down_write(&cinode->lock_sem);
1186 		list_del_init(&lock->blist);
1187 	}
1188 
1189 	up_write(&cinode->lock_sem);
1190 	return rc;
1191 }
1192 
1193 /*
1194  * Check if there is another lock that prevents us to set the lock (posix
1195  * style). If such a lock exists, update the flock structure with its
1196  * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
1197  * or leave it the same if we can't. Returns 0 if we don't need to request to
1198  * the server or 1 otherwise.
1199  */
1200 static int
cifs_posix_lock_test(struct file * file,struct file_lock * flock)1201 cifs_posix_lock_test(struct file *file, struct file_lock *flock)
1202 {
1203 	int rc = 0;
1204 	struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1205 	unsigned char saved_type = flock->fl_type;
1206 
1207 	if ((flock->fl_flags & FL_POSIX) == 0)
1208 		return 1;
1209 
1210 	down_read(&cinode->lock_sem);
1211 	posix_test_lock(file, flock);
1212 
1213 	if (flock->fl_type == F_UNLCK && !cinode->can_cache_brlcks) {
1214 		flock->fl_type = saved_type;
1215 		rc = 1;
1216 	}
1217 
1218 	up_read(&cinode->lock_sem);
1219 	return rc;
1220 }
1221 
1222 /*
1223  * Set the byte-range lock (posix style). Returns:
1224  * 1) <0, if the error occurs while setting the lock;
1225  * 2) 0, if we set the lock and don't need to request to the server;
1226  * 3) FILE_LOCK_DEFERRED, if we will wait for some other file_lock;
1227  * 4) FILE_LOCK_DEFERRED + 1, if we need to request to the server.
1228  */
1229 static int
cifs_posix_lock_set(struct file * file,struct file_lock * flock)1230 cifs_posix_lock_set(struct file *file, struct file_lock *flock)
1231 {
1232 	struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1233 	int rc = FILE_LOCK_DEFERRED + 1;
1234 
1235 	if ((flock->fl_flags & FL_POSIX) == 0)
1236 		return rc;
1237 
1238 	cifs_down_write(&cinode->lock_sem);
1239 	if (!cinode->can_cache_brlcks) {
1240 		up_write(&cinode->lock_sem);
1241 		return rc;
1242 	}
1243 
1244 	rc = posix_lock_file(file, flock, NULL);
1245 	up_write(&cinode->lock_sem);
1246 	return rc;
1247 }
1248 
1249 int
cifs_push_mandatory_locks(struct cifsFileInfo * cfile)1250 cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
1251 {
1252 	unsigned int xid;
1253 	int rc = 0, stored_rc;
1254 	struct cifsLockInfo *li, *tmp;
1255 	struct cifs_tcon *tcon;
1256 	unsigned int num, max_num, max_buf;
1257 	LOCKING_ANDX_RANGE *buf, *cur;
1258 	static const int types[] = {
1259 		LOCKING_ANDX_LARGE_FILES,
1260 		LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES
1261 	};
1262 	int i;
1263 
1264 	xid = get_xid();
1265 	tcon = tlink_tcon(cfile->tlink);
1266 
1267 	/*
1268 	 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1269 	 * and check it before using.
1270 	 */
1271 	max_buf = tcon->ses->server->maxBuf;
1272 	if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) {
1273 		free_xid(xid);
1274 		return -EINVAL;
1275 	}
1276 
1277 	BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
1278 		     PAGE_SIZE);
1279 	max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
1280 			PAGE_SIZE);
1281 	max_num = (max_buf - sizeof(struct smb_hdr)) /
1282 						sizeof(LOCKING_ANDX_RANGE);
1283 	buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1284 	if (!buf) {
1285 		free_xid(xid);
1286 		return -ENOMEM;
1287 	}
1288 
1289 	for (i = 0; i < 2; i++) {
1290 		cur = buf;
1291 		num = 0;
1292 		list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1293 			if (li->type != types[i])
1294 				continue;
1295 			cur->Pid = cpu_to_le16(li->pid);
1296 			cur->LengthLow = cpu_to_le32((u32)li->length);
1297 			cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1298 			cur->OffsetLow = cpu_to_le32((u32)li->offset);
1299 			cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1300 			if (++num == max_num) {
1301 				stored_rc = cifs_lockv(xid, tcon,
1302 						       cfile->fid.netfid,
1303 						       (__u8)li->type, 0, num,
1304 						       buf);
1305 				if (stored_rc)
1306 					rc = stored_rc;
1307 				cur = buf;
1308 				num = 0;
1309 			} else
1310 				cur++;
1311 		}
1312 
1313 		if (num) {
1314 			stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1315 					       (__u8)types[i], 0, num, buf);
1316 			if (stored_rc)
1317 				rc = stored_rc;
1318 		}
1319 	}
1320 
1321 	kfree(buf);
1322 	free_xid(xid);
1323 	return rc;
1324 }
1325 
1326 static __u32
hash_lockowner(fl_owner_t owner)1327 hash_lockowner(fl_owner_t owner)
1328 {
1329 	return cifs_lock_secret ^ hash32_ptr((const void *)owner);
1330 }
1331 
1332 struct lock_to_push {
1333 	struct list_head llist;
1334 	__u64 offset;
1335 	__u64 length;
1336 	__u32 pid;
1337 	__u16 netfid;
1338 	__u8 type;
1339 };
1340 
1341 static int
cifs_push_posix_locks(struct cifsFileInfo * cfile)1342 cifs_push_posix_locks(struct cifsFileInfo *cfile)
1343 {
1344 	struct inode *inode = d_inode(cfile->dentry);
1345 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1346 	struct file_lock *flock;
1347 	struct file_lock_context *flctx = inode->i_flctx;
1348 	unsigned int count = 0, i;
1349 	int rc = 0, xid, type;
1350 	struct list_head locks_to_send, *el;
1351 	struct lock_to_push *lck, *tmp;
1352 	__u64 length;
1353 
1354 	xid = get_xid();
1355 
1356 	if (!flctx)
1357 		goto out;
1358 
1359 	spin_lock(&flctx->flc_lock);
1360 	list_for_each(el, &flctx->flc_posix) {
1361 		count++;
1362 	}
1363 	spin_unlock(&flctx->flc_lock);
1364 
1365 	INIT_LIST_HEAD(&locks_to_send);
1366 
1367 	/*
1368 	 * Allocating count locks is enough because no FL_POSIX locks can be
1369 	 * added to the list while we are holding cinode->lock_sem that
1370 	 * protects locking operations of this inode.
1371 	 */
1372 	for (i = 0; i < count; i++) {
1373 		lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL);
1374 		if (!lck) {
1375 			rc = -ENOMEM;
1376 			goto err_out;
1377 		}
1378 		list_add_tail(&lck->llist, &locks_to_send);
1379 	}
1380 
1381 	el = locks_to_send.next;
1382 	spin_lock(&flctx->flc_lock);
1383 	list_for_each_entry(flock, &flctx->flc_posix, fl_list) {
1384 		if (el == &locks_to_send) {
1385 			/*
1386 			 * The list ended. We don't have enough allocated
1387 			 * structures - something is really wrong.
1388 			 */
1389 			cifs_dbg(VFS, "Can't push all brlocks!\n");
1390 			break;
1391 		}
1392 		length = 1 + flock->fl_end - flock->fl_start;
1393 		if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK)
1394 			type = CIFS_RDLCK;
1395 		else
1396 			type = CIFS_WRLCK;
1397 		lck = list_entry(el, struct lock_to_push, llist);
1398 		lck->pid = hash_lockowner(flock->fl_owner);
1399 		lck->netfid = cfile->fid.netfid;
1400 		lck->length = length;
1401 		lck->type = type;
1402 		lck->offset = flock->fl_start;
1403 	}
1404 	spin_unlock(&flctx->flc_lock);
1405 
1406 	list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1407 		int stored_rc;
1408 
1409 		stored_rc = CIFSSMBPosixLock(xid, tcon, lck->netfid, lck->pid,
1410 					     lck->offset, lck->length, NULL,
1411 					     lck->type, 0);
1412 		if (stored_rc)
1413 			rc = stored_rc;
1414 		list_del(&lck->llist);
1415 		kfree(lck);
1416 	}
1417 
1418 out:
1419 	free_xid(xid);
1420 	return rc;
1421 err_out:
1422 	list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1423 		list_del(&lck->llist);
1424 		kfree(lck);
1425 	}
1426 	goto out;
1427 }
1428 
1429 static int
cifs_push_locks(struct cifsFileInfo * cfile)1430 cifs_push_locks(struct cifsFileInfo *cfile)
1431 {
1432 	struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1433 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1434 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1435 	int rc = 0;
1436 
1437 	/* we are going to update can_cache_brlcks here - need a write access */
1438 	cifs_down_write(&cinode->lock_sem);
1439 	if (!cinode->can_cache_brlcks) {
1440 		up_write(&cinode->lock_sem);
1441 		return rc;
1442 	}
1443 
1444 	if (cap_unix(tcon->ses) &&
1445 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1446 	    ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1447 		rc = cifs_push_posix_locks(cfile);
1448 	else
1449 		rc = tcon->ses->server->ops->push_mand_locks(cfile);
1450 
1451 	cinode->can_cache_brlcks = false;
1452 	up_write(&cinode->lock_sem);
1453 	return rc;
1454 }
1455 
1456 static void
cifs_read_flock(struct file_lock * flock,__u32 * type,int * lock,int * unlock,bool * wait_flag,struct TCP_Server_Info * server)1457 cifs_read_flock(struct file_lock *flock, __u32 *type, int *lock, int *unlock,
1458 		bool *wait_flag, struct TCP_Server_Info *server)
1459 {
1460 	if (flock->fl_flags & FL_POSIX)
1461 		cifs_dbg(FYI, "Posix\n");
1462 	if (flock->fl_flags & FL_FLOCK)
1463 		cifs_dbg(FYI, "Flock\n");
1464 	if (flock->fl_flags & FL_SLEEP) {
1465 		cifs_dbg(FYI, "Blocking lock\n");
1466 		*wait_flag = true;
1467 	}
1468 	if (flock->fl_flags & FL_ACCESS)
1469 		cifs_dbg(FYI, "Process suspended by mandatory locking - not implemented yet\n");
1470 	if (flock->fl_flags & FL_LEASE)
1471 		cifs_dbg(FYI, "Lease on file - not implemented yet\n");
1472 	if (flock->fl_flags &
1473 	    (~(FL_POSIX | FL_FLOCK | FL_SLEEP |
1474 	       FL_ACCESS | FL_LEASE | FL_CLOSE | FL_OFDLCK)))
1475 		cifs_dbg(FYI, "Unknown lock flags 0x%x\n", flock->fl_flags);
1476 
1477 	*type = server->vals->large_lock_type;
1478 	if (flock->fl_type == F_WRLCK) {
1479 		cifs_dbg(FYI, "F_WRLCK\n");
1480 		*type |= server->vals->exclusive_lock_type;
1481 		*lock = 1;
1482 	} else if (flock->fl_type == F_UNLCK) {
1483 		cifs_dbg(FYI, "F_UNLCK\n");
1484 		*type |= server->vals->unlock_lock_type;
1485 		*unlock = 1;
1486 		/* Check if unlock includes more than one lock range */
1487 	} else if (flock->fl_type == F_RDLCK) {
1488 		cifs_dbg(FYI, "F_RDLCK\n");
1489 		*type |= server->vals->shared_lock_type;
1490 		*lock = 1;
1491 	} else if (flock->fl_type == F_EXLCK) {
1492 		cifs_dbg(FYI, "F_EXLCK\n");
1493 		*type |= server->vals->exclusive_lock_type;
1494 		*lock = 1;
1495 	} else if (flock->fl_type == F_SHLCK) {
1496 		cifs_dbg(FYI, "F_SHLCK\n");
1497 		*type |= server->vals->shared_lock_type;
1498 		*lock = 1;
1499 	} else
1500 		cifs_dbg(FYI, "Unknown type of lock\n");
1501 }
1502 
1503 static int
cifs_getlk(struct file * file,struct file_lock * flock,__u32 type,bool wait_flag,bool posix_lck,unsigned int xid)1504 cifs_getlk(struct file *file, struct file_lock *flock, __u32 type,
1505 	   bool wait_flag, bool posix_lck, unsigned int xid)
1506 {
1507 	int rc = 0;
1508 	__u64 length = 1 + flock->fl_end - flock->fl_start;
1509 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1510 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1511 	struct TCP_Server_Info *server = tcon->ses->server;
1512 	__u16 netfid = cfile->fid.netfid;
1513 
1514 	if (posix_lck) {
1515 		int posix_lock_type;
1516 
1517 		rc = cifs_posix_lock_test(file, flock);
1518 		if (!rc)
1519 			return rc;
1520 
1521 		if (type & server->vals->shared_lock_type)
1522 			posix_lock_type = CIFS_RDLCK;
1523 		else
1524 			posix_lock_type = CIFS_WRLCK;
1525 		rc = CIFSSMBPosixLock(xid, tcon, netfid,
1526 				      hash_lockowner(flock->fl_owner),
1527 				      flock->fl_start, length, flock,
1528 				      posix_lock_type, wait_flag);
1529 		return rc;
1530 	}
1531 
1532 	rc = cifs_lock_test(cfile, flock->fl_start, length, type, flock);
1533 	if (!rc)
1534 		return rc;
1535 
1536 	/* BB we could chain these into one lock request BB */
1537 	rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length, type,
1538 				    1, 0, false);
1539 	if (rc == 0) {
1540 		rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1541 					    type, 0, 1, false);
1542 		flock->fl_type = F_UNLCK;
1543 		if (rc != 0)
1544 			cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
1545 				 rc);
1546 		return 0;
1547 	}
1548 
1549 	if (type & server->vals->shared_lock_type) {
1550 		flock->fl_type = F_WRLCK;
1551 		return 0;
1552 	}
1553 
1554 	type &= ~server->vals->exclusive_lock_type;
1555 
1556 	rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1557 				    type | server->vals->shared_lock_type,
1558 				    1, 0, false);
1559 	if (rc == 0) {
1560 		rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1561 			type | server->vals->shared_lock_type, 0, 1, false);
1562 		flock->fl_type = F_RDLCK;
1563 		if (rc != 0)
1564 			cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
1565 				 rc);
1566 	} else
1567 		flock->fl_type = F_WRLCK;
1568 
1569 	return 0;
1570 }
1571 
1572 void
cifs_move_llist(struct list_head * source,struct list_head * dest)1573 cifs_move_llist(struct list_head *source, struct list_head *dest)
1574 {
1575 	struct list_head *li, *tmp;
1576 	list_for_each_safe(li, tmp, source)
1577 		list_move(li, dest);
1578 }
1579 
1580 void
cifs_free_llist(struct list_head * llist)1581 cifs_free_llist(struct list_head *llist)
1582 {
1583 	struct cifsLockInfo *li, *tmp;
1584 	list_for_each_entry_safe(li, tmp, llist, llist) {
1585 		cifs_del_lock_waiters(li);
1586 		list_del(&li->llist);
1587 		kfree(li);
1588 	}
1589 }
1590 
1591 int
cifs_unlock_range(struct cifsFileInfo * cfile,struct file_lock * flock,unsigned int xid)1592 cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
1593 		  unsigned int xid)
1594 {
1595 	int rc = 0, stored_rc;
1596 	static const int types[] = {
1597 		LOCKING_ANDX_LARGE_FILES,
1598 		LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES
1599 	};
1600 	unsigned int i;
1601 	unsigned int max_num, num, max_buf;
1602 	LOCKING_ANDX_RANGE *buf, *cur;
1603 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1604 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1605 	struct cifsLockInfo *li, *tmp;
1606 	__u64 length = 1 + flock->fl_end - flock->fl_start;
1607 	struct list_head tmp_llist;
1608 
1609 	INIT_LIST_HEAD(&tmp_llist);
1610 
1611 	/*
1612 	 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1613 	 * and check it before using.
1614 	 */
1615 	max_buf = tcon->ses->server->maxBuf;
1616 	if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE)))
1617 		return -EINVAL;
1618 
1619 	BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
1620 		     PAGE_SIZE);
1621 	max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
1622 			PAGE_SIZE);
1623 	max_num = (max_buf - sizeof(struct smb_hdr)) /
1624 						sizeof(LOCKING_ANDX_RANGE);
1625 	buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1626 	if (!buf)
1627 		return -ENOMEM;
1628 
1629 	cifs_down_write(&cinode->lock_sem);
1630 	for (i = 0; i < 2; i++) {
1631 		cur = buf;
1632 		num = 0;
1633 		list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1634 			if (flock->fl_start > li->offset ||
1635 			    (flock->fl_start + length) <
1636 			    (li->offset + li->length))
1637 				continue;
1638 			if (current->tgid != li->pid)
1639 				continue;
1640 			if (types[i] != li->type)
1641 				continue;
1642 			if (cinode->can_cache_brlcks) {
1643 				/*
1644 				 * We can cache brlock requests - simply remove
1645 				 * a lock from the file's list.
1646 				 */
1647 				list_del(&li->llist);
1648 				cifs_del_lock_waiters(li);
1649 				kfree(li);
1650 				continue;
1651 			}
1652 			cur->Pid = cpu_to_le16(li->pid);
1653 			cur->LengthLow = cpu_to_le32((u32)li->length);
1654 			cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1655 			cur->OffsetLow = cpu_to_le32((u32)li->offset);
1656 			cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1657 			/*
1658 			 * We need to save a lock here to let us add it again to
1659 			 * the file's list if the unlock range request fails on
1660 			 * the server.
1661 			 */
1662 			list_move(&li->llist, &tmp_llist);
1663 			if (++num == max_num) {
1664 				stored_rc = cifs_lockv(xid, tcon,
1665 						       cfile->fid.netfid,
1666 						       li->type, num, 0, buf);
1667 				if (stored_rc) {
1668 					/*
1669 					 * We failed on the unlock range
1670 					 * request - add all locks from the tmp
1671 					 * list to the head of the file's list.
1672 					 */
1673 					cifs_move_llist(&tmp_llist,
1674 							&cfile->llist->locks);
1675 					rc = stored_rc;
1676 				} else
1677 					/*
1678 					 * The unlock range request succeed -
1679 					 * free the tmp list.
1680 					 */
1681 					cifs_free_llist(&tmp_llist);
1682 				cur = buf;
1683 				num = 0;
1684 			} else
1685 				cur++;
1686 		}
1687 		if (num) {
1688 			stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1689 					       types[i], num, 0, buf);
1690 			if (stored_rc) {
1691 				cifs_move_llist(&tmp_llist,
1692 						&cfile->llist->locks);
1693 				rc = stored_rc;
1694 			} else
1695 				cifs_free_llist(&tmp_llist);
1696 		}
1697 	}
1698 
1699 	up_write(&cinode->lock_sem);
1700 	kfree(buf);
1701 	return rc;
1702 }
1703 
1704 static int
cifs_setlk(struct file * file,struct file_lock * flock,__u32 type,bool wait_flag,bool posix_lck,int lock,int unlock,unsigned int xid)1705 cifs_setlk(struct file *file, struct file_lock *flock, __u32 type,
1706 	   bool wait_flag, bool posix_lck, int lock, int unlock,
1707 	   unsigned int xid)
1708 {
1709 	int rc = 0;
1710 	__u64 length = 1 + flock->fl_end - flock->fl_start;
1711 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1712 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1713 	struct TCP_Server_Info *server = tcon->ses->server;
1714 	struct inode *inode = d_inode(cfile->dentry);
1715 
1716 	if (posix_lck) {
1717 		int posix_lock_type;
1718 
1719 		rc = cifs_posix_lock_set(file, flock);
1720 		if (rc <= FILE_LOCK_DEFERRED)
1721 			return rc;
1722 
1723 		if (type & server->vals->shared_lock_type)
1724 			posix_lock_type = CIFS_RDLCK;
1725 		else
1726 			posix_lock_type = CIFS_WRLCK;
1727 
1728 		if (unlock == 1)
1729 			posix_lock_type = CIFS_UNLCK;
1730 
1731 		rc = CIFSSMBPosixLock(xid, tcon, cfile->fid.netfid,
1732 				      hash_lockowner(flock->fl_owner),
1733 				      flock->fl_start, length,
1734 				      NULL, posix_lock_type, wait_flag);
1735 		goto out;
1736 	}
1737 
1738 	if (lock) {
1739 		struct cifsLockInfo *lock;
1740 
1741 		lock = cifs_lock_init(flock->fl_start, length, type,
1742 				      flock->fl_flags);
1743 		if (!lock)
1744 			return -ENOMEM;
1745 
1746 		rc = cifs_lock_add_if(cfile, lock, wait_flag);
1747 		if (rc < 0) {
1748 			kfree(lock);
1749 			return rc;
1750 		}
1751 		if (!rc)
1752 			goto out;
1753 
1754 		/*
1755 		 * Windows 7 server can delay breaking lease from read to None
1756 		 * if we set a byte-range lock on a file - break it explicitly
1757 		 * before sending the lock to the server to be sure the next
1758 		 * read won't conflict with non-overlapted locks due to
1759 		 * pagereading.
1760 		 */
1761 		if (!CIFS_CACHE_WRITE(CIFS_I(inode)) &&
1762 					CIFS_CACHE_READ(CIFS_I(inode))) {
1763 			cifs_zap_mapping(inode);
1764 			cifs_dbg(FYI, "Set no oplock for inode=%p due to mand locks\n",
1765 				 inode);
1766 			CIFS_I(inode)->oplock = 0;
1767 		}
1768 
1769 		rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1770 					    type, 1, 0, wait_flag);
1771 		if (rc) {
1772 			kfree(lock);
1773 			return rc;
1774 		}
1775 
1776 		cifs_lock_add(cfile, lock);
1777 	} else if (unlock)
1778 		rc = server->ops->mand_unlock_range(cfile, flock, xid);
1779 
1780 out:
1781 	if ((flock->fl_flags & FL_POSIX) || (flock->fl_flags & FL_FLOCK)) {
1782 		/*
1783 		 * If this is a request to remove all locks because we
1784 		 * are closing the file, it doesn't matter if the
1785 		 * unlocking failed as both cifs.ko and the SMB server
1786 		 * remove the lock on file close
1787 		 */
1788 		if (rc) {
1789 			cifs_dbg(VFS, "%s failed rc=%d\n", __func__, rc);
1790 			if (!(flock->fl_flags & FL_CLOSE))
1791 				return rc;
1792 		}
1793 		rc = locks_lock_file_wait(file, flock);
1794 	}
1795 	return rc;
1796 }
1797 
cifs_flock(struct file * file,int cmd,struct file_lock * fl)1798 int cifs_flock(struct file *file, int cmd, struct file_lock *fl)
1799 {
1800 	int rc, xid;
1801 	int lock = 0, unlock = 0;
1802 	bool wait_flag = false;
1803 	bool posix_lck = false;
1804 	struct cifs_sb_info *cifs_sb;
1805 	struct cifs_tcon *tcon;
1806 	struct cifsFileInfo *cfile;
1807 	__u32 type;
1808 
1809 	rc = -EACCES;
1810 	xid = get_xid();
1811 
1812 	if (!(fl->fl_flags & FL_FLOCK))
1813 		return -ENOLCK;
1814 
1815 	cfile = (struct cifsFileInfo *)file->private_data;
1816 	tcon = tlink_tcon(cfile->tlink);
1817 
1818 	cifs_read_flock(fl, &type, &lock, &unlock, &wait_flag,
1819 			tcon->ses->server);
1820 	cifs_sb = CIFS_FILE_SB(file);
1821 
1822 	if (cap_unix(tcon->ses) &&
1823 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1824 	    ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1825 		posix_lck = true;
1826 
1827 	if (!lock && !unlock) {
1828 		/*
1829 		 * if no lock or unlock then nothing to do since we do not
1830 		 * know what it is
1831 		 */
1832 		free_xid(xid);
1833 		return -EOPNOTSUPP;
1834 	}
1835 
1836 	rc = cifs_setlk(file, fl, type, wait_flag, posix_lck, lock, unlock,
1837 			xid);
1838 	free_xid(xid);
1839 	return rc;
1840 
1841 
1842 }
1843 
cifs_lock(struct file * file,int cmd,struct file_lock * flock)1844 int cifs_lock(struct file *file, int cmd, struct file_lock *flock)
1845 {
1846 	int rc, xid;
1847 	int lock = 0, unlock = 0;
1848 	bool wait_flag = false;
1849 	bool posix_lck = false;
1850 	struct cifs_sb_info *cifs_sb;
1851 	struct cifs_tcon *tcon;
1852 	struct cifsFileInfo *cfile;
1853 	__u32 type;
1854 
1855 	rc = -EACCES;
1856 	xid = get_xid();
1857 
1858 	cifs_dbg(FYI, "Lock parm: 0x%x flockflags: 0x%x flocktype: 0x%x start: %lld end: %lld\n",
1859 		 cmd, flock->fl_flags, flock->fl_type,
1860 		 flock->fl_start, flock->fl_end);
1861 
1862 	cfile = (struct cifsFileInfo *)file->private_data;
1863 	tcon = tlink_tcon(cfile->tlink);
1864 
1865 	cifs_read_flock(flock, &type, &lock, &unlock, &wait_flag,
1866 			tcon->ses->server);
1867 	cifs_sb = CIFS_FILE_SB(file);
1868 	set_bit(CIFS_INO_CLOSE_ON_LOCK, &CIFS_I(d_inode(cfile->dentry))->flags);
1869 
1870 	if (cap_unix(tcon->ses) &&
1871 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1872 	    ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1873 		posix_lck = true;
1874 	/*
1875 	 * BB add code here to normalize offset and length to account for
1876 	 * negative length which we can not accept over the wire.
1877 	 */
1878 	if (IS_GETLK(cmd)) {
1879 		rc = cifs_getlk(file, flock, type, wait_flag, posix_lck, xid);
1880 		free_xid(xid);
1881 		return rc;
1882 	}
1883 
1884 	if (!lock && !unlock) {
1885 		/*
1886 		 * if no lock or unlock then nothing to do since we do not
1887 		 * know what it is
1888 		 */
1889 		free_xid(xid);
1890 		return -EOPNOTSUPP;
1891 	}
1892 
1893 	rc = cifs_setlk(file, flock, type, wait_flag, posix_lck, lock, unlock,
1894 			xid);
1895 	free_xid(xid);
1896 	return rc;
1897 }
1898 
1899 /*
1900  * update the file size (if needed) after a write. Should be called with
1901  * the inode->i_lock held
1902  */
1903 void
cifs_update_eof(struct cifsInodeInfo * cifsi,loff_t offset,unsigned int bytes_written)1904 cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
1905 		      unsigned int bytes_written)
1906 {
1907 	loff_t end_of_write = offset + bytes_written;
1908 
1909 	if (end_of_write > cifsi->server_eof)
1910 		cifsi->server_eof = end_of_write;
1911 }
1912 
1913 static ssize_t
cifs_write(struct cifsFileInfo * open_file,__u32 pid,const char * write_data,size_t write_size,loff_t * offset)1914 cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
1915 	   size_t write_size, loff_t *offset)
1916 {
1917 	int rc = 0;
1918 	unsigned int bytes_written = 0;
1919 	unsigned int total_written;
1920 	struct cifs_tcon *tcon;
1921 	struct TCP_Server_Info *server;
1922 	unsigned int xid;
1923 	struct dentry *dentry = open_file->dentry;
1924 	struct cifsInodeInfo *cifsi = CIFS_I(d_inode(dentry));
1925 	struct cifs_io_parms io_parms = {0};
1926 
1927 	cifs_dbg(FYI, "write %zd bytes to offset %lld of %pd\n",
1928 		 write_size, *offset, dentry);
1929 
1930 	tcon = tlink_tcon(open_file->tlink);
1931 	server = tcon->ses->server;
1932 
1933 	if (!server->ops->sync_write)
1934 		return -ENOSYS;
1935 
1936 	xid = get_xid();
1937 
1938 	for (total_written = 0; write_size > total_written;
1939 	     total_written += bytes_written) {
1940 		rc = -EAGAIN;
1941 		while (rc == -EAGAIN) {
1942 			struct kvec iov[2];
1943 			unsigned int len;
1944 
1945 			if (open_file->invalidHandle) {
1946 				/* we could deadlock if we called
1947 				   filemap_fdatawait from here so tell
1948 				   reopen_file not to flush data to
1949 				   server now */
1950 				rc = cifs_reopen_file(open_file, false);
1951 				if (rc != 0)
1952 					break;
1953 			}
1954 
1955 			len = min(server->ops->wp_retry_size(d_inode(dentry)),
1956 				  (unsigned int)write_size - total_written);
1957 			/* iov[0] is reserved for smb header */
1958 			iov[1].iov_base = (char *)write_data + total_written;
1959 			iov[1].iov_len = len;
1960 			io_parms.pid = pid;
1961 			io_parms.tcon = tcon;
1962 			io_parms.offset = *offset;
1963 			io_parms.length = len;
1964 			rc = server->ops->sync_write(xid, &open_file->fid,
1965 					&io_parms, &bytes_written, iov, 1);
1966 		}
1967 		if (rc || (bytes_written == 0)) {
1968 			if (total_written)
1969 				break;
1970 			else {
1971 				free_xid(xid);
1972 				return rc;
1973 			}
1974 		} else {
1975 			spin_lock(&d_inode(dentry)->i_lock);
1976 			cifs_update_eof(cifsi, *offset, bytes_written);
1977 			spin_unlock(&d_inode(dentry)->i_lock);
1978 			*offset += bytes_written;
1979 		}
1980 	}
1981 
1982 	cifs_stats_bytes_written(tcon, total_written);
1983 
1984 	if (total_written > 0) {
1985 		spin_lock(&d_inode(dentry)->i_lock);
1986 		if (*offset > d_inode(dentry)->i_size) {
1987 			i_size_write(d_inode(dentry), *offset);
1988 			d_inode(dentry)->i_blocks = (512 - 1 + *offset) >> 9;
1989 		}
1990 		spin_unlock(&d_inode(dentry)->i_lock);
1991 	}
1992 	mark_inode_dirty_sync(d_inode(dentry));
1993 	free_xid(xid);
1994 	return total_written;
1995 }
1996 
find_readable_file(struct cifsInodeInfo * cifs_inode,bool fsuid_only)1997 struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
1998 					bool fsuid_only)
1999 {
2000 	struct cifsFileInfo *open_file = NULL;
2001 	struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
2002 
2003 	/* only filter by fsuid on multiuser mounts */
2004 	if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
2005 		fsuid_only = false;
2006 
2007 	spin_lock(&cifs_inode->open_file_lock);
2008 	/* we could simply get the first_list_entry since write-only entries
2009 	   are always at the end of the list but since the first entry might
2010 	   have a close pending, we go through the whole list */
2011 	list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
2012 		if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
2013 			continue;
2014 		if (OPEN_FMODE(open_file->f_flags) & FMODE_READ) {
2015 			if ((!open_file->invalidHandle)) {
2016 				/* found a good file */
2017 				/* lock it so it will not be closed on us */
2018 				cifsFileInfo_get(open_file);
2019 				spin_unlock(&cifs_inode->open_file_lock);
2020 				return open_file;
2021 			} /* else might as well continue, and look for
2022 			     another, or simply have the caller reopen it
2023 			     again rather than trying to fix this handle */
2024 		} else /* write only file */
2025 			break; /* write only files are last so must be done */
2026 	}
2027 	spin_unlock(&cifs_inode->open_file_lock);
2028 	return NULL;
2029 }
2030 
2031 /* Return -EBADF if no handle is found and general rc otherwise */
2032 int
cifs_get_writable_file(struct cifsInodeInfo * cifs_inode,int flags,struct cifsFileInfo ** ret_file)2033 cifs_get_writable_file(struct cifsInodeInfo *cifs_inode, int flags,
2034 		       struct cifsFileInfo **ret_file)
2035 {
2036 	struct cifsFileInfo *open_file, *inv_file = NULL;
2037 	struct cifs_sb_info *cifs_sb;
2038 	bool any_available = false;
2039 	int rc = -EBADF;
2040 	unsigned int refind = 0;
2041 	bool fsuid_only = flags & FIND_WR_FSUID_ONLY;
2042 	bool with_delete = flags & FIND_WR_WITH_DELETE;
2043 	*ret_file = NULL;
2044 
2045 	/*
2046 	 * Having a null inode here (because mapping->host was set to zero by
2047 	 * the VFS or MM) should not happen but we had reports of on oops (due
2048 	 * to it being zero) during stress testcases so we need to check for it
2049 	 */
2050 
2051 	if (cifs_inode == NULL) {
2052 		cifs_dbg(VFS, "Null inode passed to cifs_writeable_file\n");
2053 		dump_stack();
2054 		return rc;
2055 	}
2056 
2057 	cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
2058 
2059 	/* only filter by fsuid on multiuser mounts */
2060 	if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
2061 		fsuid_only = false;
2062 
2063 	spin_lock(&cifs_inode->open_file_lock);
2064 refind_writable:
2065 	if (refind > MAX_REOPEN_ATT) {
2066 		spin_unlock(&cifs_inode->open_file_lock);
2067 		return rc;
2068 	}
2069 	list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
2070 		if (!any_available && open_file->pid != current->tgid)
2071 			continue;
2072 		if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
2073 			continue;
2074 		if (with_delete && !(open_file->fid.access & DELETE))
2075 			continue;
2076 		if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
2077 			if (!open_file->invalidHandle) {
2078 				/* found a good writable file */
2079 				cifsFileInfo_get(open_file);
2080 				spin_unlock(&cifs_inode->open_file_lock);
2081 				*ret_file = open_file;
2082 				return 0;
2083 			} else {
2084 				if (!inv_file)
2085 					inv_file = open_file;
2086 			}
2087 		}
2088 	}
2089 	/* couldn't find useable FH with same pid, try any available */
2090 	if (!any_available) {
2091 		any_available = true;
2092 		goto refind_writable;
2093 	}
2094 
2095 	if (inv_file) {
2096 		any_available = false;
2097 		cifsFileInfo_get(inv_file);
2098 	}
2099 
2100 	spin_unlock(&cifs_inode->open_file_lock);
2101 
2102 	if (inv_file) {
2103 		rc = cifs_reopen_file(inv_file, false);
2104 		if (!rc) {
2105 			*ret_file = inv_file;
2106 			return 0;
2107 		}
2108 
2109 		spin_lock(&cifs_inode->open_file_lock);
2110 		list_move_tail(&inv_file->flist, &cifs_inode->openFileList);
2111 		spin_unlock(&cifs_inode->open_file_lock);
2112 		cifsFileInfo_put(inv_file);
2113 		++refind;
2114 		inv_file = NULL;
2115 		spin_lock(&cifs_inode->open_file_lock);
2116 		goto refind_writable;
2117 	}
2118 
2119 	return rc;
2120 }
2121 
2122 struct cifsFileInfo *
find_writable_file(struct cifsInodeInfo * cifs_inode,int flags)2123 find_writable_file(struct cifsInodeInfo *cifs_inode, int flags)
2124 {
2125 	struct cifsFileInfo *cfile;
2126 	int rc;
2127 
2128 	rc = cifs_get_writable_file(cifs_inode, flags, &cfile);
2129 	if (rc)
2130 		cifs_dbg(FYI, "Couldn't find writable handle rc=%d\n", rc);
2131 
2132 	return cfile;
2133 }
2134 
2135 int
cifs_get_writable_path(struct cifs_tcon * tcon,const char * name,int flags,struct cifsFileInfo ** ret_file)2136 cifs_get_writable_path(struct cifs_tcon *tcon, const char *name,
2137 		       int flags,
2138 		       struct cifsFileInfo **ret_file)
2139 {
2140 	struct cifsFileInfo *cfile;
2141 	void *page = alloc_dentry_path();
2142 
2143 	*ret_file = NULL;
2144 
2145 	spin_lock(&tcon->open_file_lock);
2146 	list_for_each_entry(cfile, &tcon->openFileList, tlist) {
2147 		struct cifsInodeInfo *cinode;
2148 		const char *full_path = build_path_from_dentry(cfile->dentry, page);
2149 		if (IS_ERR(full_path)) {
2150 			spin_unlock(&tcon->open_file_lock);
2151 			free_dentry_path(page);
2152 			return PTR_ERR(full_path);
2153 		}
2154 		if (strcmp(full_path, name))
2155 			continue;
2156 
2157 		cinode = CIFS_I(d_inode(cfile->dentry));
2158 		spin_unlock(&tcon->open_file_lock);
2159 		free_dentry_path(page);
2160 		return cifs_get_writable_file(cinode, flags, ret_file);
2161 	}
2162 
2163 	spin_unlock(&tcon->open_file_lock);
2164 	free_dentry_path(page);
2165 	return -ENOENT;
2166 }
2167 
2168 int
cifs_get_readable_path(struct cifs_tcon * tcon,const char * name,struct cifsFileInfo ** ret_file)2169 cifs_get_readable_path(struct cifs_tcon *tcon, const char *name,
2170 		       struct cifsFileInfo **ret_file)
2171 {
2172 	struct cifsFileInfo *cfile;
2173 	void *page = alloc_dentry_path();
2174 
2175 	*ret_file = NULL;
2176 
2177 	spin_lock(&tcon->open_file_lock);
2178 	list_for_each_entry(cfile, &tcon->openFileList, tlist) {
2179 		struct cifsInodeInfo *cinode;
2180 		const char *full_path = build_path_from_dentry(cfile->dentry, page);
2181 		if (IS_ERR(full_path)) {
2182 			spin_unlock(&tcon->open_file_lock);
2183 			free_dentry_path(page);
2184 			return PTR_ERR(full_path);
2185 		}
2186 		if (strcmp(full_path, name))
2187 			continue;
2188 
2189 		cinode = CIFS_I(d_inode(cfile->dentry));
2190 		spin_unlock(&tcon->open_file_lock);
2191 		free_dentry_path(page);
2192 		*ret_file = find_readable_file(cinode, 0);
2193 		return *ret_file ? 0 : -ENOENT;
2194 	}
2195 
2196 	spin_unlock(&tcon->open_file_lock);
2197 	free_dentry_path(page);
2198 	return -ENOENT;
2199 }
2200 
cifs_partialpagewrite(struct page * page,unsigned from,unsigned to)2201 static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to)
2202 {
2203 	struct address_space *mapping = page->mapping;
2204 	loff_t offset = (loff_t)page->index << PAGE_SHIFT;
2205 	char *write_data;
2206 	int rc = -EFAULT;
2207 	int bytes_written = 0;
2208 	struct inode *inode;
2209 	struct cifsFileInfo *open_file;
2210 
2211 	if (!mapping || !mapping->host)
2212 		return -EFAULT;
2213 
2214 	inode = page->mapping->host;
2215 
2216 	offset += (loff_t)from;
2217 	write_data = kmap(page);
2218 	write_data += from;
2219 
2220 	if ((to > PAGE_SIZE) || (from > to)) {
2221 		kunmap(page);
2222 		return -EIO;
2223 	}
2224 
2225 	/* racing with truncate? */
2226 	if (offset > mapping->host->i_size) {
2227 		kunmap(page);
2228 		return 0; /* don't care */
2229 	}
2230 
2231 	/* check to make sure that we are not extending the file */
2232 	if (mapping->host->i_size - offset < (loff_t)to)
2233 		to = (unsigned)(mapping->host->i_size - offset);
2234 
2235 	rc = cifs_get_writable_file(CIFS_I(mapping->host), FIND_WR_ANY,
2236 				    &open_file);
2237 	if (!rc) {
2238 		bytes_written = cifs_write(open_file, open_file->pid,
2239 					   write_data, to - from, &offset);
2240 		cifsFileInfo_put(open_file);
2241 		/* Does mm or vfs already set times? */
2242 		inode->i_atime = inode->i_mtime = current_time(inode);
2243 		if ((bytes_written > 0) && (offset))
2244 			rc = 0;
2245 		else if (bytes_written < 0)
2246 			rc = bytes_written;
2247 		else
2248 			rc = -EFAULT;
2249 	} else {
2250 		cifs_dbg(FYI, "No writable handle for write page rc=%d\n", rc);
2251 		if (!is_retryable_error(rc))
2252 			rc = -EIO;
2253 	}
2254 
2255 	kunmap(page);
2256 	return rc;
2257 }
2258 
2259 static struct cifs_writedata *
wdata_alloc_and_fillpages(pgoff_t tofind,struct address_space * mapping,pgoff_t end,pgoff_t * index,unsigned int * found_pages)2260 wdata_alloc_and_fillpages(pgoff_t tofind, struct address_space *mapping,
2261 			  pgoff_t end, pgoff_t *index,
2262 			  unsigned int *found_pages)
2263 {
2264 	struct cifs_writedata *wdata;
2265 
2266 	wdata = cifs_writedata_alloc((unsigned int)tofind,
2267 				     cifs_writev_complete);
2268 	if (!wdata)
2269 		return NULL;
2270 
2271 	*found_pages = find_get_pages_range_tag(mapping, index, end,
2272 				PAGECACHE_TAG_DIRTY, tofind, wdata->pages);
2273 	return wdata;
2274 }
2275 
2276 static unsigned int
wdata_prepare_pages(struct cifs_writedata * wdata,unsigned int found_pages,struct address_space * mapping,struct writeback_control * wbc,pgoff_t end,pgoff_t * index,pgoff_t * next,bool * done)2277 wdata_prepare_pages(struct cifs_writedata *wdata, unsigned int found_pages,
2278 		    struct address_space *mapping,
2279 		    struct writeback_control *wbc,
2280 		    pgoff_t end, pgoff_t *index, pgoff_t *next, bool *done)
2281 {
2282 	unsigned int nr_pages = 0, i;
2283 	struct page *page;
2284 
2285 	for (i = 0; i < found_pages; i++) {
2286 		page = wdata->pages[i];
2287 		/*
2288 		 * At this point we hold neither the i_pages lock nor the
2289 		 * page lock: the page may be truncated or invalidated
2290 		 * (changing page->mapping to NULL), or even swizzled
2291 		 * back from swapper_space to tmpfs file mapping
2292 		 */
2293 
2294 		if (nr_pages == 0)
2295 			lock_page(page);
2296 		else if (!trylock_page(page))
2297 			break;
2298 
2299 		if (unlikely(page->mapping != mapping)) {
2300 			unlock_page(page);
2301 			break;
2302 		}
2303 
2304 		if (!wbc->range_cyclic && page->index > end) {
2305 			*done = true;
2306 			unlock_page(page);
2307 			break;
2308 		}
2309 
2310 		if (*next && (page->index != *next)) {
2311 			/* Not next consecutive page */
2312 			unlock_page(page);
2313 			break;
2314 		}
2315 
2316 		if (wbc->sync_mode != WB_SYNC_NONE)
2317 			wait_on_page_writeback(page);
2318 
2319 		if (PageWriteback(page) ||
2320 				!clear_page_dirty_for_io(page)) {
2321 			unlock_page(page);
2322 			break;
2323 		}
2324 
2325 		/*
2326 		 * This actually clears the dirty bit in the radix tree.
2327 		 * See cifs_writepage() for more commentary.
2328 		 */
2329 		set_page_writeback(page);
2330 		if (page_offset(page) >= i_size_read(mapping->host)) {
2331 			*done = true;
2332 			unlock_page(page);
2333 			end_page_writeback(page);
2334 			break;
2335 		}
2336 
2337 		wdata->pages[i] = page;
2338 		*next = page->index + 1;
2339 		++nr_pages;
2340 	}
2341 
2342 	/* reset index to refind any pages skipped */
2343 	if (nr_pages == 0)
2344 		*index = wdata->pages[0]->index + 1;
2345 
2346 	/* put any pages we aren't going to use */
2347 	for (i = nr_pages; i < found_pages; i++) {
2348 		put_page(wdata->pages[i]);
2349 		wdata->pages[i] = NULL;
2350 	}
2351 
2352 	return nr_pages;
2353 }
2354 
2355 static int
wdata_send_pages(struct cifs_writedata * wdata,unsigned int nr_pages,struct address_space * mapping,struct writeback_control * wbc)2356 wdata_send_pages(struct cifs_writedata *wdata, unsigned int nr_pages,
2357 		 struct address_space *mapping, struct writeback_control *wbc)
2358 {
2359 	int rc;
2360 
2361 	wdata->sync_mode = wbc->sync_mode;
2362 	wdata->nr_pages = nr_pages;
2363 	wdata->offset = page_offset(wdata->pages[0]);
2364 	wdata->pagesz = PAGE_SIZE;
2365 	wdata->tailsz = min(i_size_read(mapping->host) -
2366 			page_offset(wdata->pages[nr_pages - 1]),
2367 			(loff_t)PAGE_SIZE);
2368 	wdata->bytes = ((nr_pages - 1) * PAGE_SIZE) + wdata->tailsz;
2369 	wdata->pid = wdata->cfile->pid;
2370 
2371 	rc = adjust_credits(wdata->server, &wdata->credits, wdata->bytes);
2372 	if (rc)
2373 		return rc;
2374 
2375 	if (wdata->cfile->invalidHandle)
2376 		rc = -EAGAIN;
2377 	else
2378 		rc = wdata->server->ops->async_writev(wdata,
2379 						      cifs_writedata_release);
2380 
2381 	return rc;
2382 }
2383 
cifs_writepages(struct address_space * mapping,struct writeback_control * wbc)2384 static int cifs_writepages(struct address_space *mapping,
2385 			   struct writeback_control *wbc)
2386 {
2387 	struct inode *inode = mapping->host;
2388 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2389 	struct TCP_Server_Info *server;
2390 	bool done = false, scanned = false, range_whole = false;
2391 	pgoff_t end, index;
2392 	struct cifs_writedata *wdata;
2393 	struct cifsFileInfo *cfile = NULL;
2394 	int rc = 0;
2395 	int saved_rc = 0;
2396 	unsigned int xid;
2397 
2398 	/*
2399 	 * If wsize is smaller than the page cache size, default to writing
2400 	 * one page at a time via cifs_writepage
2401 	 */
2402 	if (cifs_sb->ctx->wsize < PAGE_SIZE)
2403 		return generic_writepages(mapping, wbc);
2404 
2405 	xid = get_xid();
2406 	if (wbc->range_cyclic) {
2407 		index = mapping->writeback_index; /* Start from prev offset */
2408 		end = -1;
2409 	} else {
2410 		index = wbc->range_start >> PAGE_SHIFT;
2411 		end = wbc->range_end >> PAGE_SHIFT;
2412 		if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
2413 			range_whole = true;
2414 		scanned = true;
2415 	}
2416 	server = cifs_pick_channel(cifs_sb_master_tcon(cifs_sb)->ses);
2417 
2418 retry:
2419 	while (!done && index <= end) {
2420 		unsigned int i, nr_pages, found_pages, wsize;
2421 		pgoff_t next = 0, tofind, saved_index = index;
2422 		struct cifs_credits credits_on_stack;
2423 		struct cifs_credits *credits = &credits_on_stack;
2424 		int get_file_rc = 0;
2425 
2426 		if (cfile)
2427 			cifsFileInfo_put(cfile);
2428 
2429 		rc = cifs_get_writable_file(CIFS_I(inode), FIND_WR_ANY, &cfile);
2430 
2431 		/* in case of an error store it to return later */
2432 		if (rc)
2433 			get_file_rc = rc;
2434 
2435 		rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->wsize,
2436 						   &wsize, credits);
2437 		if (rc != 0) {
2438 			done = true;
2439 			break;
2440 		}
2441 
2442 		tofind = min((wsize / PAGE_SIZE) - 1, end - index) + 1;
2443 
2444 		wdata = wdata_alloc_and_fillpages(tofind, mapping, end, &index,
2445 						  &found_pages);
2446 		if (!wdata) {
2447 			rc = -ENOMEM;
2448 			done = true;
2449 			add_credits_and_wake_if(server, credits, 0);
2450 			break;
2451 		}
2452 
2453 		if (found_pages == 0) {
2454 			kref_put(&wdata->refcount, cifs_writedata_release);
2455 			add_credits_and_wake_if(server, credits, 0);
2456 			break;
2457 		}
2458 
2459 		nr_pages = wdata_prepare_pages(wdata, found_pages, mapping, wbc,
2460 					       end, &index, &next, &done);
2461 
2462 		/* nothing to write? */
2463 		if (nr_pages == 0) {
2464 			kref_put(&wdata->refcount, cifs_writedata_release);
2465 			add_credits_and_wake_if(server, credits, 0);
2466 			continue;
2467 		}
2468 
2469 		wdata->credits = credits_on_stack;
2470 		wdata->cfile = cfile;
2471 		wdata->server = server;
2472 		cfile = NULL;
2473 
2474 		if (!wdata->cfile) {
2475 			cifs_dbg(VFS, "No writable handle in writepages rc=%d\n",
2476 				 get_file_rc);
2477 			if (is_retryable_error(get_file_rc))
2478 				rc = get_file_rc;
2479 			else
2480 				rc = -EBADF;
2481 		} else
2482 			rc = wdata_send_pages(wdata, nr_pages, mapping, wbc);
2483 
2484 		for (i = 0; i < nr_pages; ++i)
2485 			unlock_page(wdata->pages[i]);
2486 
2487 		/* send failure -- clean up the mess */
2488 		if (rc != 0) {
2489 			add_credits_and_wake_if(server, &wdata->credits, 0);
2490 			for (i = 0; i < nr_pages; ++i) {
2491 				if (is_retryable_error(rc))
2492 					redirty_page_for_writepage(wbc,
2493 							   wdata->pages[i]);
2494 				else
2495 					SetPageError(wdata->pages[i]);
2496 				end_page_writeback(wdata->pages[i]);
2497 				put_page(wdata->pages[i]);
2498 			}
2499 			if (!is_retryable_error(rc))
2500 				mapping_set_error(mapping, rc);
2501 		}
2502 		kref_put(&wdata->refcount, cifs_writedata_release);
2503 
2504 		if (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN) {
2505 			index = saved_index;
2506 			continue;
2507 		}
2508 
2509 		/* Return immediately if we received a signal during writing */
2510 		if (is_interrupt_error(rc)) {
2511 			done = true;
2512 			break;
2513 		}
2514 
2515 		if (rc != 0 && saved_rc == 0)
2516 			saved_rc = rc;
2517 
2518 		wbc->nr_to_write -= nr_pages;
2519 		if (wbc->nr_to_write <= 0)
2520 			done = true;
2521 
2522 		index = next;
2523 	}
2524 
2525 	if (!scanned && !done) {
2526 		/*
2527 		 * We hit the last page and there is more work to be done: wrap
2528 		 * back to the start of the file
2529 		 */
2530 		scanned = true;
2531 		index = 0;
2532 		goto retry;
2533 	}
2534 
2535 	if (saved_rc != 0)
2536 		rc = saved_rc;
2537 
2538 	if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
2539 		mapping->writeback_index = index;
2540 
2541 	if (cfile)
2542 		cifsFileInfo_put(cfile);
2543 	free_xid(xid);
2544 	/* Indication to update ctime and mtime as close is deferred */
2545 	set_bit(CIFS_INO_MODIFIED_ATTR, &CIFS_I(inode)->flags);
2546 	return rc;
2547 }
2548 
2549 static int
cifs_writepage_locked(struct page * page,struct writeback_control * wbc)2550 cifs_writepage_locked(struct page *page, struct writeback_control *wbc)
2551 {
2552 	int rc;
2553 	unsigned int xid;
2554 
2555 	xid = get_xid();
2556 /* BB add check for wbc flags */
2557 	get_page(page);
2558 	if (!PageUptodate(page))
2559 		cifs_dbg(FYI, "ppw - page not up to date\n");
2560 
2561 	/*
2562 	 * Set the "writeback" flag, and clear "dirty" in the radix tree.
2563 	 *
2564 	 * A writepage() implementation always needs to do either this,
2565 	 * or re-dirty the page with "redirty_page_for_writepage()" in
2566 	 * the case of a failure.
2567 	 *
2568 	 * Just unlocking the page will cause the radix tree tag-bits
2569 	 * to fail to update with the state of the page correctly.
2570 	 */
2571 	set_page_writeback(page);
2572 retry_write:
2573 	rc = cifs_partialpagewrite(page, 0, PAGE_SIZE);
2574 	if (is_retryable_error(rc)) {
2575 		if (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN)
2576 			goto retry_write;
2577 		redirty_page_for_writepage(wbc, page);
2578 	} else if (rc != 0) {
2579 		SetPageError(page);
2580 		mapping_set_error(page->mapping, rc);
2581 	} else {
2582 		SetPageUptodate(page);
2583 	}
2584 	end_page_writeback(page);
2585 	put_page(page);
2586 	free_xid(xid);
2587 	return rc;
2588 }
2589 
cifs_writepage(struct page * page,struct writeback_control * wbc)2590 static int cifs_writepage(struct page *page, struct writeback_control *wbc)
2591 {
2592 	int rc = cifs_writepage_locked(page, wbc);
2593 	unlock_page(page);
2594 	return rc;
2595 }
2596 
cifs_write_end(struct file * file,struct address_space * mapping,loff_t pos,unsigned len,unsigned copied,struct page * page,void * fsdata)2597 static int cifs_write_end(struct file *file, struct address_space *mapping,
2598 			loff_t pos, unsigned len, unsigned copied,
2599 			struct page *page, void *fsdata)
2600 {
2601 	int rc;
2602 	struct inode *inode = mapping->host;
2603 	struct cifsFileInfo *cfile = file->private_data;
2604 	struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
2605 	__u32 pid;
2606 
2607 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2608 		pid = cfile->pid;
2609 	else
2610 		pid = current->tgid;
2611 
2612 	cifs_dbg(FYI, "write_end for page %p from pos %lld with %d bytes\n",
2613 		 page, pos, copied);
2614 
2615 	if (PageChecked(page)) {
2616 		if (copied == len)
2617 			SetPageUptodate(page);
2618 		ClearPageChecked(page);
2619 	} else if (!PageUptodate(page) && copied == PAGE_SIZE)
2620 		SetPageUptodate(page);
2621 
2622 	if (!PageUptodate(page)) {
2623 		char *page_data;
2624 		unsigned offset = pos & (PAGE_SIZE - 1);
2625 		unsigned int xid;
2626 
2627 		xid = get_xid();
2628 		/* this is probably better than directly calling
2629 		   partialpage_write since in this function the file handle is
2630 		   known which we might as well	leverage */
2631 		/* BB check if anything else missing out of ppw
2632 		   such as updating last write time */
2633 		page_data = kmap(page);
2634 		rc = cifs_write(cfile, pid, page_data + offset, copied, &pos);
2635 		/* if (rc < 0) should we set writebehind rc? */
2636 		kunmap(page);
2637 
2638 		free_xid(xid);
2639 	} else {
2640 		rc = copied;
2641 		pos += copied;
2642 		set_page_dirty(page);
2643 	}
2644 
2645 	if (rc > 0) {
2646 		spin_lock(&inode->i_lock);
2647 		if (pos > inode->i_size) {
2648 			i_size_write(inode, pos);
2649 			inode->i_blocks = (512 - 1 + pos) >> 9;
2650 		}
2651 		spin_unlock(&inode->i_lock);
2652 	}
2653 
2654 	unlock_page(page);
2655 	put_page(page);
2656 	/* Indication to update ctime and mtime as close is deferred */
2657 	set_bit(CIFS_INO_MODIFIED_ATTR, &CIFS_I(inode)->flags);
2658 
2659 	return rc;
2660 }
2661 
cifs_strict_fsync(struct file * file,loff_t start,loff_t end,int datasync)2662 int cifs_strict_fsync(struct file *file, loff_t start, loff_t end,
2663 		      int datasync)
2664 {
2665 	unsigned int xid;
2666 	int rc = 0;
2667 	struct cifs_tcon *tcon;
2668 	struct TCP_Server_Info *server;
2669 	struct cifsFileInfo *smbfile = file->private_data;
2670 	struct inode *inode = file_inode(file);
2671 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2672 
2673 	rc = file_write_and_wait_range(file, start, end);
2674 	if (rc) {
2675 		trace_cifs_fsync_err(inode->i_ino, rc);
2676 		return rc;
2677 	}
2678 
2679 	xid = get_xid();
2680 
2681 	cifs_dbg(FYI, "Sync file - name: %pD datasync: 0x%x\n",
2682 		 file, datasync);
2683 
2684 	if (!CIFS_CACHE_READ(CIFS_I(inode))) {
2685 		rc = cifs_zap_mapping(inode);
2686 		if (rc) {
2687 			cifs_dbg(FYI, "rc: %d during invalidate phase\n", rc);
2688 			rc = 0; /* don't care about it in fsync */
2689 		}
2690 	}
2691 
2692 	tcon = tlink_tcon(smbfile->tlink);
2693 	if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)) {
2694 		server = tcon->ses->server;
2695 		if (server->ops->flush)
2696 			rc = server->ops->flush(xid, tcon, &smbfile->fid);
2697 		else
2698 			rc = -ENOSYS;
2699 	}
2700 
2701 	free_xid(xid);
2702 	return rc;
2703 }
2704 
cifs_fsync(struct file * file,loff_t start,loff_t end,int datasync)2705 int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
2706 {
2707 	unsigned int xid;
2708 	int rc = 0;
2709 	struct cifs_tcon *tcon;
2710 	struct TCP_Server_Info *server;
2711 	struct cifsFileInfo *smbfile = file->private_data;
2712 	struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
2713 
2714 	rc = file_write_and_wait_range(file, start, end);
2715 	if (rc) {
2716 		trace_cifs_fsync_err(file_inode(file)->i_ino, rc);
2717 		return rc;
2718 	}
2719 
2720 	xid = get_xid();
2721 
2722 	cifs_dbg(FYI, "Sync file - name: %pD datasync: 0x%x\n",
2723 		 file, datasync);
2724 
2725 	tcon = tlink_tcon(smbfile->tlink);
2726 	if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)) {
2727 		server = tcon->ses->server;
2728 		if (server->ops->flush)
2729 			rc = server->ops->flush(xid, tcon, &smbfile->fid);
2730 		else
2731 			rc = -ENOSYS;
2732 	}
2733 
2734 	free_xid(xid);
2735 	return rc;
2736 }
2737 
2738 /*
2739  * As file closes, flush all cached write data for this inode checking
2740  * for write behind errors.
2741  */
cifs_flush(struct file * file,fl_owner_t id)2742 int cifs_flush(struct file *file, fl_owner_t id)
2743 {
2744 	struct inode *inode = file_inode(file);
2745 	int rc = 0;
2746 
2747 	if (file->f_mode & FMODE_WRITE)
2748 		rc = filemap_write_and_wait(inode->i_mapping);
2749 
2750 	cifs_dbg(FYI, "Flush inode %p file %p rc %d\n", inode, file, rc);
2751 	if (rc)
2752 		trace_cifs_flush_err(inode->i_ino, rc);
2753 	return rc;
2754 }
2755 
2756 static int
cifs_write_allocate_pages(struct page ** pages,unsigned long num_pages)2757 cifs_write_allocate_pages(struct page **pages, unsigned long num_pages)
2758 {
2759 	int rc = 0;
2760 	unsigned long i;
2761 
2762 	for (i = 0; i < num_pages; i++) {
2763 		pages[i] = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
2764 		if (!pages[i]) {
2765 			/*
2766 			 * save number of pages we have already allocated and
2767 			 * return with ENOMEM error
2768 			 */
2769 			num_pages = i;
2770 			rc = -ENOMEM;
2771 			break;
2772 		}
2773 	}
2774 
2775 	if (rc) {
2776 		for (i = 0; i < num_pages; i++)
2777 			put_page(pages[i]);
2778 	}
2779 	return rc;
2780 }
2781 
2782 static inline
get_numpages(const size_t wsize,const size_t len,size_t * cur_len)2783 size_t get_numpages(const size_t wsize, const size_t len, size_t *cur_len)
2784 {
2785 	size_t num_pages;
2786 	size_t clen;
2787 
2788 	clen = min_t(const size_t, len, wsize);
2789 	num_pages = DIV_ROUND_UP(clen, PAGE_SIZE);
2790 
2791 	if (cur_len)
2792 		*cur_len = clen;
2793 
2794 	return num_pages;
2795 }
2796 
2797 static void
cifs_uncached_writedata_release(struct kref * refcount)2798 cifs_uncached_writedata_release(struct kref *refcount)
2799 {
2800 	int i;
2801 	struct cifs_writedata *wdata = container_of(refcount,
2802 					struct cifs_writedata, refcount);
2803 
2804 	kref_put(&wdata->ctx->refcount, cifs_aio_ctx_release);
2805 	for (i = 0; i < wdata->nr_pages; i++)
2806 		put_page(wdata->pages[i]);
2807 	cifs_writedata_release(refcount);
2808 }
2809 
2810 static void collect_uncached_write_data(struct cifs_aio_ctx *ctx);
2811 
2812 static void
cifs_uncached_writev_complete(struct work_struct * work)2813 cifs_uncached_writev_complete(struct work_struct *work)
2814 {
2815 	struct cifs_writedata *wdata = container_of(work,
2816 					struct cifs_writedata, work);
2817 	struct inode *inode = d_inode(wdata->cfile->dentry);
2818 	struct cifsInodeInfo *cifsi = CIFS_I(inode);
2819 
2820 	spin_lock(&inode->i_lock);
2821 	cifs_update_eof(cifsi, wdata->offset, wdata->bytes);
2822 	if (cifsi->server_eof > inode->i_size)
2823 		i_size_write(inode, cifsi->server_eof);
2824 	spin_unlock(&inode->i_lock);
2825 
2826 	complete(&wdata->done);
2827 	collect_uncached_write_data(wdata->ctx);
2828 	/* the below call can possibly free the last ref to aio ctx */
2829 	kref_put(&wdata->refcount, cifs_uncached_writedata_release);
2830 }
2831 
2832 static int
wdata_fill_from_iovec(struct cifs_writedata * wdata,struct iov_iter * from,size_t * len,unsigned long * num_pages)2833 wdata_fill_from_iovec(struct cifs_writedata *wdata, struct iov_iter *from,
2834 		      size_t *len, unsigned long *num_pages)
2835 {
2836 	size_t save_len, copied, bytes, cur_len = *len;
2837 	unsigned long i, nr_pages = *num_pages;
2838 
2839 	save_len = cur_len;
2840 	for (i = 0; i < nr_pages; i++) {
2841 		bytes = min_t(const size_t, cur_len, PAGE_SIZE);
2842 		copied = copy_page_from_iter(wdata->pages[i], 0, bytes, from);
2843 		cur_len -= copied;
2844 		/*
2845 		 * If we didn't copy as much as we expected, then that
2846 		 * may mean we trod into an unmapped area. Stop copying
2847 		 * at that point. On the next pass through the big
2848 		 * loop, we'll likely end up getting a zero-length
2849 		 * write and bailing out of it.
2850 		 */
2851 		if (copied < bytes)
2852 			break;
2853 	}
2854 	cur_len = save_len - cur_len;
2855 	*len = cur_len;
2856 
2857 	/*
2858 	 * If we have no data to send, then that probably means that
2859 	 * the copy above failed altogether. That's most likely because
2860 	 * the address in the iovec was bogus. Return -EFAULT and let
2861 	 * the caller free anything we allocated and bail out.
2862 	 */
2863 	if (!cur_len)
2864 		return -EFAULT;
2865 
2866 	/*
2867 	 * i + 1 now represents the number of pages we actually used in
2868 	 * the copy phase above.
2869 	 */
2870 	*num_pages = i + 1;
2871 	return 0;
2872 }
2873 
2874 static int
cifs_resend_wdata(struct cifs_writedata * wdata,struct list_head * wdata_list,struct cifs_aio_ctx * ctx)2875 cifs_resend_wdata(struct cifs_writedata *wdata, struct list_head *wdata_list,
2876 	struct cifs_aio_ctx *ctx)
2877 {
2878 	unsigned int wsize;
2879 	struct cifs_credits credits;
2880 	int rc;
2881 	struct TCP_Server_Info *server = wdata->server;
2882 
2883 	do {
2884 		if (wdata->cfile->invalidHandle) {
2885 			rc = cifs_reopen_file(wdata->cfile, false);
2886 			if (rc == -EAGAIN)
2887 				continue;
2888 			else if (rc)
2889 				break;
2890 		}
2891 
2892 
2893 		/*
2894 		 * Wait for credits to resend this wdata.
2895 		 * Note: we are attempting to resend the whole wdata not in
2896 		 * segments
2897 		 */
2898 		do {
2899 			rc = server->ops->wait_mtu_credits(server, wdata->bytes,
2900 						&wsize, &credits);
2901 			if (rc)
2902 				goto fail;
2903 
2904 			if (wsize < wdata->bytes) {
2905 				add_credits_and_wake_if(server, &credits, 0);
2906 				msleep(1000);
2907 			}
2908 		} while (wsize < wdata->bytes);
2909 		wdata->credits = credits;
2910 
2911 		rc = adjust_credits(server, &wdata->credits, wdata->bytes);
2912 
2913 		if (!rc) {
2914 			if (wdata->cfile->invalidHandle)
2915 				rc = -EAGAIN;
2916 			else {
2917 #ifdef CONFIG_CIFS_SMB_DIRECT
2918 				if (wdata->mr) {
2919 					wdata->mr->need_invalidate = true;
2920 					smbd_deregister_mr(wdata->mr);
2921 					wdata->mr = NULL;
2922 				}
2923 #endif
2924 				rc = server->ops->async_writev(wdata,
2925 					cifs_uncached_writedata_release);
2926 			}
2927 		}
2928 
2929 		/* If the write was successfully sent, we are done */
2930 		if (!rc) {
2931 			list_add_tail(&wdata->list, wdata_list);
2932 			return 0;
2933 		}
2934 
2935 		/* Roll back credits and retry if needed */
2936 		add_credits_and_wake_if(server, &wdata->credits, 0);
2937 	} while (rc == -EAGAIN);
2938 
2939 fail:
2940 	kref_put(&wdata->refcount, cifs_uncached_writedata_release);
2941 	return rc;
2942 }
2943 
2944 static int
cifs_write_from_iter(loff_t offset,size_t len,struct iov_iter * from,struct cifsFileInfo * open_file,struct cifs_sb_info * cifs_sb,struct list_head * wdata_list,struct cifs_aio_ctx * ctx)2945 cifs_write_from_iter(loff_t offset, size_t len, struct iov_iter *from,
2946 		     struct cifsFileInfo *open_file,
2947 		     struct cifs_sb_info *cifs_sb, struct list_head *wdata_list,
2948 		     struct cifs_aio_ctx *ctx)
2949 {
2950 	int rc = 0;
2951 	size_t cur_len;
2952 	unsigned long nr_pages, num_pages, i;
2953 	struct cifs_writedata *wdata;
2954 	struct iov_iter saved_from = *from;
2955 	loff_t saved_offset = offset;
2956 	pid_t pid;
2957 	struct TCP_Server_Info *server;
2958 	struct page **pagevec;
2959 	size_t start;
2960 	unsigned int xid;
2961 
2962 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2963 		pid = open_file->pid;
2964 	else
2965 		pid = current->tgid;
2966 
2967 	server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses);
2968 	xid = get_xid();
2969 
2970 	do {
2971 		unsigned int wsize;
2972 		struct cifs_credits credits_on_stack;
2973 		struct cifs_credits *credits = &credits_on_stack;
2974 
2975 		if (open_file->invalidHandle) {
2976 			rc = cifs_reopen_file(open_file, false);
2977 			if (rc == -EAGAIN)
2978 				continue;
2979 			else if (rc)
2980 				break;
2981 		}
2982 
2983 		rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->wsize,
2984 						   &wsize, credits);
2985 		if (rc)
2986 			break;
2987 
2988 		cur_len = min_t(const size_t, len, wsize);
2989 
2990 		if (ctx->direct_io) {
2991 			ssize_t result;
2992 
2993 			result = iov_iter_get_pages_alloc(
2994 				from, &pagevec, cur_len, &start);
2995 			if (result < 0) {
2996 				cifs_dbg(VFS,
2997 					 "direct_writev couldn't get user pages (rc=%zd) iter type %d iov_offset %zd count %zd\n",
2998 					 result, iov_iter_type(from),
2999 					 from->iov_offset, from->count);
3000 				dump_stack();
3001 
3002 				rc = result;
3003 				add_credits_and_wake_if(server, credits, 0);
3004 				break;
3005 			}
3006 			cur_len = (size_t)result;
3007 			iov_iter_advance(from, cur_len);
3008 
3009 			nr_pages =
3010 				(cur_len + start + PAGE_SIZE - 1) / PAGE_SIZE;
3011 
3012 			wdata = cifs_writedata_direct_alloc(pagevec,
3013 					     cifs_uncached_writev_complete);
3014 			if (!wdata) {
3015 				rc = -ENOMEM;
3016 				add_credits_and_wake_if(server, credits, 0);
3017 				break;
3018 			}
3019 
3020 
3021 			wdata->page_offset = start;
3022 			wdata->tailsz =
3023 				nr_pages > 1 ?
3024 					cur_len - (PAGE_SIZE - start) -
3025 					(nr_pages - 2) * PAGE_SIZE :
3026 					cur_len;
3027 		} else {
3028 			nr_pages = get_numpages(wsize, len, &cur_len);
3029 			wdata = cifs_writedata_alloc(nr_pages,
3030 					     cifs_uncached_writev_complete);
3031 			if (!wdata) {
3032 				rc = -ENOMEM;
3033 				add_credits_and_wake_if(server, credits, 0);
3034 				break;
3035 			}
3036 
3037 			rc = cifs_write_allocate_pages(wdata->pages, nr_pages);
3038 			if (rc) {
3039 				kvfree(wdata->pages);
3040 				kfree(wdata);
3041 				add_credits_and_wake_if(server, credits, 0);
3042 				break;
3043 			}
3044 
3045 			num_pages = nr_pages;
3046 			rc = wdata_fill_from_iovec(
3047 				wdata, from, &cur_len, &num_pages);
3048 			if (rc) {
3049 				for (i = 0; i < nr_pages; i++)
3050 					put_page(wdata->pages[i]);
3051 				kvfree(wdata->pages);
3052 				kfree(wdata);
3053 				add_credits_and_wake_if(server, credits, 0);
3054 				break;
3055 			}
3056 
3057 			/*
3058 			 * Bring nr_pages down to the number of pages we
3059 			 * actually used, and free any pages that we didn't use.
3060 			 */
3061 			for ( ; nr_pages > num_pages; nr_pages--)
3062 				put_page(wdata->pages[nr_pages - 1]);
3063 
3064 			wdata->tailsz = cur_len - ((nr_pages - 1) * PAGE_SIZE);
3065 		}
3066 
3067 		wdata->sync_mode = WB_SYNC_ALL;
3068 		wdata->nr_pages = nr_pages;
3069 		wdata->offset = (__u64)offset;
3070 		wdata->cfile = cifsFileInfo_get(open_file);
3071 		wdata->server = server;
3072 		wdata->pid = pid;
3073 		wdata->bytes = cur_len;
3074 		wdata->pagesz = PAGE_SIZE;
3075 		wdata->credits = credits_on_stack;
3076 		wdata->ctx = ctx;
3077 		kref_get(&ctx->refcount);
3078 
3079 		rc = adjust_credits(server, &wdata->credits, wdata->bytes);
3080 
3081 		if (!rc) {
3082 			if (wdata->cfile->invalidHandle)
3083 				rc = -EAGAIN;
3084 			else
3085 				rc = server->ops->async_writev(wdata,
3086 					cifs_uncached_writedata_release);
3087 		}
3088 
3089 		if (rc) {
3090 			add_credits_and_wake_if(server, &wdata->credits, 0);
3091 			kref_put(&wdata->refcount,
3092 				 cifs_uncached_writedata_release);
3093 			if (rc == -EAGAIN) {
3094 				*from = saved_from;
3095 				iov_iter_advance(from, offset - saved_offset);
3096 				continue;
3097 			}
3098 			break;
3099 		}
3100 
3101 		list_add_tail(&wdata->list, wdata_list);
3102 		offset += cur_len;
3103 		len -= cur_len;
3104 	} while (len > 0);
3105 
3106 	free_xid(xid);
3107 	return rc;
3108 }
3109 
collect_uncached_write_data(struct cifs_aio_ctx * ctx)3110 static void collect_uncached_write_data(struct cifs_aio_ctx *ctx)
3111 {
3112 	struct cifs_writedata *wdata, *tmp;
3113 	struct cifs_tcon *tcon;
3114 	struct cifs_sb_info *cifs_sb;
3115 	struct dentry *dentry = ctx->cfile->dentry;
3116 	ssize_t rc;
3117 
3118 	tcon = tlink_tcon(ctx->cfile->tlink);
3119 	cifs_sb = CIFS_SB(dentry->d_sb);
3120 
3121 	mutex_lock(&ctx->aio_mutex);
3122 
3123 	if (list_empty(&ctx->list)) {
3124 		mutex_unlock(&ctx->aio_mutex);
3125 		return;
3126 	}
3127 
3128 	rc = ctx->rc;
3129 	/*
3130 	 * Wait for and collect replies for any successful sends in order of
3131 	 * increasing offset. Once an error is hit, then return without waiting
3132 	 * for any more replies.
3133 	 */
3134 restart_loop:
3135 	list_for_each_entry_safe(wdata, tmp, &ctx->list, list) {
3136 		if (!rc) {
3137 			if (!try_wait_for_completion(&wdata->done)) {
3138 				mutex_unlock(&ctx->aio_mutex);
3139 				return;
3140 			}
3141 
3142 			if (wdata->result)
3143 				rc = wdata->result;
3144 			else
3145 				ctx->total_len += wdata->bytes;
3146 
3147 			/* resend call if it's a retryable error */
3148 			if (rc == -EAGAIN) {
3149 				struct list_head tmp_list;
3150 				struct iov_iter tmp_from = ctx->iter;
3151 
3152 				INIT_LIST_HEAD(&tmp_list);
3153 				list_del_init(&wdata->list);
3154 
3155 				if (ctx->direct_io)
3156 					rc = cifs_resend_wdata(
3157 						wdata, &tmp_list, ctx);
3158 				else {
3159 					iov_iter_advance(&tmp_from,
3160 						 wdata->offset - ctx->pos);
3161 
3162 					rc = cifs_write_from_iter(wdata->offset,
3163 						wdata->bytes, &tmp_from,
3164 						ctx->cfile, cifs_sb, &tmp_list,
3165 						ctx);
3166 
3167 					kref_put(&wdata->refcount,
3168 						cifs_uncached_writedata_release);
3169 				}
3170 
3171 				list_splice(&tmp_list, &ctx->list);
3172 				goto restart_loop;
3173 			}
3174 		}
3175 		list_del_init(&wdata->list);
3176 		kref_put(&wdata->refcount, cifs_uncached_writedata_release);
3177 	}
3178 
3179 	cifs_stats_bytes_written(tcon, ctx->total_len);
3180 	set_bit(CIFS_INO_INVALID_MAPPING, &CIFS_I(dentry->d_inode)->flags);
3181 
3182 	ctx->rc = (rc == 0) ? ctx->total_len : rc;
3183 
3184 	mutex_unlock(&ctx->aio_mutex);
3185 
3186 	if (ctx->iocb && ctx->iocb->ki_complete)
3187 		ctx->iocb->ki_complete(ctx->iocb, ctx->rc, 0);
3188 	else
3189 		complete(&ctx->done);
3190 }
3191 
__cifs_writev(struct kiocb * iocb,struct iov_iter * from,bool direct)3192 static ssize_t __cifs_writev(
3193 	struct kiocb *iocb, struct iov_iter *from, bool direct)
3194 {
3195 	struct file *file = iocb->ki_filp;
3196 	ssize_t total_written = 0;
3197 	struct cifsFileInfo *cfile;
3198 	struct cifs_tcon *tcon;
3199 	struct cifs_sb_info *cifs_sb;
3200 	struct cifs_aio_ctx *ctx;
3201 	struct iov_iter saved_from = *from;
3202 	size_t len = iov_iter_count(from);
3203 	int rc;
3204 
3205 	/*
3206 	 * iov_iter_get_pages_alloc doesn't work with ITER_KVEC.
3207 	 * In this case, fall back to non-direct write function.
3208 	 * this could be improved by getting pages directly in ITER_KVEC
3209 	 */
3210 	if (direct && iov_iter_is_kvec(from)) {
3211 		cifs_dbg(FYI, "use non-direct cifs_writev for kvec I/O\n");
3212 		direct = false;
3213 	}
3214 
3215 	rc = generic_write_checks(iocb, from);
3216 	if (rc <= 0)
3217 		return rc;
3218 
3219 	cifs_sb = CIFS_FILE_SB(file);
3220 	cfile = file->private_data;
3221 	tcon = tlink_tcon(cfile->tlink);
3222 
3223 	if (!tcon->ses->server->ops->async_writev)
3224 		return -ENOSYS;
3225 
3226 	ctx = cifs_aio_ctx_alloc();
3227 	if (!ctx)
3228 		return -ENOMEM;
3229 
3230 	ctx->cfile = cifsFileInfo_get(cfile);
3231 
3232 	if (!is_sync_kiocb(iocb))
3233 		ctx->iocb = iocb;
3234 
3235 	ctx->pos = iocb->ki_pos;
3236 
3237 	if (direct) {
3238 		ctx->direct_io = true;
3239 		ctx->iter = *from;
3240 		ctx->len = len;
3241 	} else {
3242 		rc = setup_aio_ctx_iter(ctx, from, WRITE);
3243 		if (rc) {
3244 			kref_put(&ctx->refcount, cifs_aio_ctx_release);
3245 			return rc;
3246 		}
3247 	}
3248 
3249 	/* grab a lock here due to read response handlers can access ctx */
3250 	mutex_lock(&ctx->aio_mutex);
3251 
3252 	rc = cifs_write_from_iter(iocb->ki_pos, ctx->len, &saved_from,
3253 				  cfile, cifs_sb, &ctx->list, ctx);
3254 
3255 	/*
3256 	 * If at least one write was successfully sent, then discard any rc
3257 	 * value from the later writes. If the other write succeeds, then
3258 	 * we'll end up returning whatever was written. If it fails, then
3259 	 * we'll get a new rc value from that.
3260 	 */
3261 	if (!list_empty(&ctx->list))
3262 		rc = 0;
3263 
3264 	mutex_unlock(&ctx->aio_mutex);
3265 
3266 	if (rc) {
3267 		kref_put(&ctx->refcount, cifs_aio_ctx_release);
3268 		return rc;
3269 	}
3270 
3271 	if (!is_sync_kiocb(iocb)) {
3272 		kref_put(&ctx->refcount, cifs_aio_ctx_release);
3273 		return -EIOCBQUEUED;
3274 	}
3275 
3276 	rc = wait_for_completion_killable(&ctx->done);
3277 	if (rc) {
3278 		mutex_lock(&ctx->aio_mutex);
3279 		ctx->rc = rc = -EINTR;
3280 		total_written = ctx->total_len;
3281 		mutex_unlock(&ctx->aio_mutex);
3282 	} else {
3283 		rc = ctx->rc;
3284 		total_written = ctx->total_len;
3285 	}
3286 
3287 	kref_put(&ctx->refcount, cifs_aio_ctx_release);
3288 
3289 	if (unlikely(!total_written))
3290 		return rc;
3291 
3292 	iocb->ki_pos += total_written;
3293 	return total_written;
3294 }
3295 
cifs_direct_writev(struct kiocb * iocb,struct iov_iter * from)3296 ssize_t cifs_direct_writev(struct kiocb *iocb, struct iov_iter *from)
3297 {
3298 	return __cifs_writev(iocb, from, true);
3299 }
3300 
cifs_user_writev(struct kiocb * iocb,struct iov_iter * from)3301 ssize_t cifs_user_writev(struct kiocb *iocb, struct iov_iter *from)
3302 {
3303 	return __cifs_writev(iocb, from, false);
3304 }
3305 
3306 static ssize_t
cifs_writev(struct kiocb * iocb,struct iov_iter * from)3307 cifs_writev(struct kiocb *iocb, struct iov_iter *from)
3308 {
3309 	struct file *file = iocb->ki_filp;
3310 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
3311 	struct inode *inode = file->f_mapping->host;
3312 	struct cifsInodeInfo *cinode = CIFS_I(inode);
3313 	struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
3314 	ssize_t rc;
3315 
3316 	inode_lock(inode);
3317 	/*
3318 	 * We need to hold the sem to be sure nobody modifies lock list
3319 	 * with a brlock that prevents writing.
3320 	 */
3321 	down_read(&cinode->lock_sem);
3322 
3323 	rc = generic_write_checks(iocb, from);
3324 	if (rc <= 0)
3325 		goto out;
3326 
3327 	if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(from),
3328 				     server->vals->exclusive_lock_type, 0,
3329 				     NULL, CIFS_WRITE_OP))
3330 		rc = __generic_file_write_iter(iocb, from);
3331 	else
3332 		rc = -EACCES;
3333 out:
3334 	up_read(&cinode->lock_sem);
3335 	inode_unlock(inode);
3336 
3337 	if (rc > 0)
3338 		rc = generic_write_sync(iocb, rc);
3339 	return rc;
3340 }
3341 
3342 ssize_t
cifs_strict_writev(struct kiocb * iocb,struct iov_iter * from)3343 cifs_strict_writev(struct kiocb *iocb, struct iov_iter *from)
3344 {
3345 	struct inode *inode = file_inode(iocb->ki_filp);
3346 	struct cifsInodeInfo *cinode = CIFS_I(inode);
3347 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
3348 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)
3349 						iocb->ki_filp->private_data;
3350 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
3351 	ssize_t written;
3352 
3353 	written = cifs_get_writer(cinode);
3354 	if (written)
3355 		return written;
3356 
3357 	if (CIFS_CACHE_WRITE(cinode)) {
3358 		if (cap_unix(tcon->ses) &&
3359 		(CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability))
3360 		  && ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) {
3361 			written = generic_file_write_iter(iocb, from);
3362 			goto out;
3363 		}
3364 		written = cifs_writev(iocb, from);
3365 		goto out;
3366 	}
3367 	/*
3368 	 * For non-oplocked files in strict cache mode we need to write the data
3369 	 * to the server exactly from the pos to pos+len-1 rather than flush all
3370 	 * affected pages because it may cause a error with mandatory locks on
3371 	 * these pages but not on the region from pos to ppos+len-1.
3372 	 */
3373 	written = cifs_user_writev(iocb, from);
3374 	if (CIFS_CACHE_READ(cinode)) {
3375 		/*
3376 		 * We have read level caching and we have just sent a write
3377 		 * request to the server thus making data in the cache stale.
3378 		 * Zap the cache and set oplock/lease level to NONE to avoid
3379 		 * reading stale data from the cache. All subsequent read
3380 		 * operations will read new data from the server.
3381 		 */
3382 		cifs_zap_mapping(inode);
3383 		cifs_dbg(FYI, "Set Oplock/Lease to NONE for inode=%p after write\n",
3384 			 inode);
3385 		cinode->oplock = 0;
3386 	}
3387 out:
3388 	cifs_put_writer(cinode);
3389 	return written;
3390 }
3391 
3392 static struct cifs_readdata *
cifs_readdata_direct_alloc(struct page ** pages,work_func_t complete)3393 cifs_readdata_direct_alloc(struct page **pages, work_func_t complete)
3394 {
3395 	struct cifs_readdata *rdata;
3396 
3397 	rdata = kzalloc(sizeof(*rdata), GFP_KERNEL);
3398 	if (rdata != NULL) {
3399 		rdata->pages = pages;
3400 		kref_init(&rdata->refcount);
3401 		INIT_LIST_HEAD(&rdata->list);
3402 		init_completion(&rdata->done);
3403 		INIT_WORK(&rdata->work, complete);
3404 	}
3405 
3406 	return rdata;
3407 }
3408 
3409 static struct cifs_readdata *
cifs_readdata_alloc(unsigned int nr_pages,work_func_t complete)3410 cifs_readdata_alloc(unsigned int nr_pages, work_func_t complete)
3411 {
3412 	struct page **pages =
3413 		kcalloc(nr_pages, sizeof(struct page *), GFP_KERNEL);
3414 	struct cifs_readdata *ret = NULL;
3415 
3416 	if (pages) {
3417 		ret = cifs_readdata_direct_alloc(pages, complete);
3418 		if (!ret)
3419 			kfree(pages);
3420 	}
3421 
3422 	return ret;
3423 }
3424 
3425 void
cifs_readdata_release(struct kref * refcount)3426 cifs_readdata_release(struct kref *refcount)
3427 {
3428 	struct cifs_readdata *rdata = container_of(refcount,
3429 					struct cifs_readdata, refcount);
3430 #ifdef CONFIG_CIFS_SMB_DIRECT
3431 	if (rdata->mr) {
3432 		smbd_deregister_mr(rdata->mr);
3433 		rdata->mr = NULL;
3434 	}
3435 #endif
3436 	if (rdata->cfile)
3437 		cifsFileInfo_put(rdata->cfile);
3438 
3439 	kvfree(rdata->pages);
3440 	kfree(rdata);
3441 }
3442 
3443 static int
cifs_read_allocate_pages(struct cifs_readdata * rdata,unsigned int nr_pages)3444 cifs_read_allocate_pages(struct cifs_readdata *rdata, unsigned int nr_pages)
3445 {
3446 	int rc = 0;
3447 	struct page *page;
3448 	unsigned int i;
3449 
3450 	for (i = 0; i < nr_pages; i++) {
3451 		page = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
3452 		if (!page) {
3453 			rc = -ENOMEM;
3454 			break;
3455 		}
3456 		rdata->pages[i] = page;
3457 	}
3458 
3459 	if (rc) {
3460 		unsigned int nr_page_failed = i;
3461 
3462 		for (i = 0; i < nr_page_failed; i++) {
3463 			put_page(rdata->pages[i]);
3464 			rdata->pages[i] = NULL;
3465 		}
3466 	}
3467 	return rc;
3468 }
3469 
3470 static void
cifs_uncached_readdata_release(struct kref * refcount)3471 cifs_uncached_readdata_release(struct kref *refcount)
3472 {
3473 	struct cifs_readdata *rdata = container_of(refcount,
3474 					struct cifs_readdata, refcount);
3475 	unsigned int i;
3476 
3477 	kref_put(&rdata->ctx->refcount, cifs_aio_ctx_release);
3478 	for (i = 0; i < rdata->nr_pages; i++) {
3479 		put_page(rdata->pages[i]);
3480 	}
3481 	cifs_readdata_release(refcount);
3482 }
3483 
3484 /**
3485  * cifs_readdata_to_iov - copy data from pages in response to an iovec
3486  * @rdata:	the readdata response with list of pages holding data
3487  * @iter:	destination for our data
3488  *
3489  * This function copies data from a list of pages in a readdata response into
3490  * an array of iovecs. It will first calculate where the data should go
3491  * based on the info in the readdata and then copy the data into that spot.
3492  */
3493 static int
cifs_readdata_to_iov(struct cifs_readdata * rdata,struct iov_iter * iter)3494 cifs_readdata_to_iov(struct cifs_readdata *rdata, struct iov_iter *iter)
3495 {
3496 	size_t remaining = rdata->got_bytes;
3497 	unsigned int i;
3498 
3499 	for (i = 0; i < rdata->nr_pages; i++) {
3500 		struct page *page = rdata->pages[i];
3501 		size_t copy = min_t(size_t, remaining, PAGE_SIZE);
3502 		size_t written;
3503 
3504 		if (unlikely(iov_iter_is_pipe(iter))) {
3505 			void *addr = kmap_atomic(page);
3506 
3507 			written = copy_to_iter(addr, copy, iter);
3508 			kunmap_atomic(addr);
3509 		} else
3510 			written = copy_page_to_iter(page, 0, copy, iter);
3511 		remaining -= written;
3512 		if (written < copy && iov_iter_count(iter) > 0)
3513 			break;
3514 	}
3515 	return remaining ? -EFAULT : 0;
3516 }
3517 
3518 static void collect_uncached_read_data(struct cifs_aio_ctx *ctx);
3519 
3520 static void
cifs_uncached_readv_complete(struct work_struct * work)3521 cifs_uncached_readv_complete(struct work_struct *work)
3522 {
3523 	struct cifs_readdata *rdata = container_of(work,
3524 						struct cifs_readdata, work);
3525 
3526 	complete(&rdata->done);
3527 	collect_uncached_read_data(rdata->ctx);
3528 	/* the below call can possibly free the last ref to aio ctx */
3529 	kref_put(&rdata->refcount, cifs_uncached_readdata_release);
3530 }
3531 
3532 static int
uncached_fill_pages(struct TCP_Server_Info * server,struct cifs_readdata * rdata,struct iov_iter * iter,unsigned int len)3533 uncached_fill_pages(struct TCP_Server_Info *server,
3534 		    struct cifs_readdata *rdata, struct iov_iter *iter,
3535 		    unsigned int len)
3536 {
3537 	int result = 0;
3538 	unsigned int i;
3539 	unsigned int nr_pages = rdata->nr_pages;
3540 	unsigned int page_offset = rdata->page_offset;
3541 
3542 	rdata->got_bytes = 0;
3543 	rdata->tailsz = PAGE_SIZE;
3544 	for (i = 0; i < nr_pages; i++) {
3545 		struct page *page = rdata->pages[i];
3546 		size_t n;
3547 		unsigned int segment_size = rdata->pagesz;
3548 
3549 		if (i == 0)
3550 			segment_size -= page_offset;
3551 		else
3552 			page_offset = 0;
3553 
3554 
3555 		if (len <= 0) {
3556 			/* no need to hold page hostage */
3557 			rdata->pages[i] = NULL;
3558 			rdata->nr_pages--;
3559 			put_page(page);
3560 			continue;
3561 		}
3562 
3563 		n = len;
3564 		if (len >= segment_size)
3565 			/* enough data to fill the page */
3566 			n = segment_size;
3567 		else
3568 			rdata->tailsz = len;
3569 		len -= n;
3570 
3571 		if (iter)
3572 			result = copy_page_from_iter(
3573 					page, page_offset, n, iter);
3574 #ifdef CONFIG_CIFS_SMB_DIRECT
3575 		else if (rdata->mr)
3576 			result = n;
3577 #endif
3578 		else
3579 			result = cifs_read_page_from_socket(
3580 					server, page, page_offset, n);
3581 		if (result < 0)
3582 			break;
3583 
3584 		rdata->got_bytes += result;
3585 	}
3586 
3587 	return rdata->got_bytes > 0 && result != -ECONNABORTED ?
3588 						rdata->got_bytes : result;
3589 }
3590 
3591 static int
cifs_uncached_read_into_pages(struct TCP_Server_Info * server,struct cifs_readdata * rdata,unsigned int len)3592 cifs_uncached_read_into_pages(struct TCP_Server_Info *server,
3593 			      struct cifs_readdata *rdata, unsigned int len)
3594 {
3595 	return uncached_fill_pages(server, rdata, NULL, len);
3596 }
3597 
3598 static int
cifs_uncached_copy_into_pages(struct TCP_Server_Info * server,struct cifs_readdata * rdata,struct iov_iter * iter)3599 cifs_uncached_copy_into_pages(struct TCP_Server_Info *server,
3600 			      struct cifs_readdata *rdata,
3601 			      struct iov_iter *iter)
3602 {
3603 	return uncached_fill_pages(server, rdata, iter, iter->count);
3604 }
3605 
cifs_resend_rdata(struct cifs_readdata * rdata,struct list_head * rdata_list,struct cifs_aio_ctx * ctx)3606 static int cifs_resend_rdata(struct cifs_readdata *rdata,
3607 			struct list_head *rdata_list,
3608 			struct cifs_aio_ctx *ctx)
3609 {
3610 	unsigned int rsize;
3611 	struct cifs_credits credits;
3612 	int rc;
3613 	struct TCP_Server_Info *server;
3614 
3615 	/* XXX: should we pick a new channel here? */
3616 	server = rdata->server;
3617 
3618 	do {
3619 		if (rdata->cfile->invalidHandle) {
3620 			rc = cifs_reopen_file(rdata->cfile, true);
3621 			if (rc == -EAGAIN)
3622 				continue;
3623 			else if (rc)
3624 				break;
3625 		}
3626 
3627 		/*
3628 		 * Wait for credits to resend this rdata.
3629 		 * Note: we are attempting to resend the whole rdata not in
3630 		 * segments
3631 		 */
3632 		do {
3633 			rc = server->ops->wait_mtu_credits(server, rdata->bytes,
3634 						&rsize, &credits);
3635 
3636 			if (rc)
3637 				goto fail;
3638 
3639 			if (rsize < rdata->bytes) {
3640 				add_credits_and_wake_if(server, &credits, 0);
3641 				msleep(1000);
3642 			}
3643 		} while (rsize < rdata->bytes);
3644 		rdata->credits = credits;
3645 
3646 		rc = adjust_credits(server, &rdata->credits, rdata->bytes);
3647 		if (!rc) {
3648 			if (rdata->cfile->invalidHandle)
3649 				rc = -EAGAIN;
3650 			else {
3651 #ifdef CONFIG_CIFS_SMB_DIRECT
3652 				if (rdata->mr) {
3653 					rdata->mr->need_invalidate = true;
3654 					smbd_deregister_mr(rdata->mr);
3655 					rdata->mr = NULL;
3656 				}
3657 #endif
3658 				rc = server->ops->async_readv(rdata);
3659 			}
3660 		}
3661 
3662 		/* If the read was successfully sent, we are done */
3663 		if (!rc) {
3664 			/* Add to aio pending list */
3665 			list_add_tail(&rdata->list, rdata_list);
3666 			return 0;
3667 		}
3668 
3669 		/* Roll back credits and retry if needed */
3670 		add_credits_and_wake_if(server, &rdata->credits, 0);
3671 	} while (rc == -EAGAIN);
3672 
3673 fail:
3674 	kref_put(&rdata->refcount, cifs_uncached_readdata_release);
3675 	return rc;
3676 }
3677 
3678 static int
cifs_send_async_read(loff_t offset,size_t len,struct cifsFileInfo * open_file,struct cifs_sb_info * cifs_sb,struct list_head * rdata_list,struct cifs_aio_ctx * ctx)3679 cifs_send_async_read(loff_t offset, size_t len, struct cifsFileInfo *open_file,
3680 		     struct cifs_sb_info *cifs_sb, struct list_head *rdata_list,
3681 		     struct cifs_aio_ctx *ctx)
3682 {
3683 	struct cifs_readdata *rdata;
3684 	unsigned int npages, rsize;
3685 	struct cifs_credits credits_on_stack;
3686 	struct cifs_credits *credits = &credits_on_stack;
3687 	size_t cur_len;
3688 	int rc;
3689 	pid_t pid;
3690 	struct TCP_Server_Info *server;
3691 	struct page **pagevec;
3692 	size_t start;
3693 	struct iov_iter direct_iov = ctx->iter;
3694 
3695 	server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses);
3696 
3697 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
3698 		pid = open_file->pid;
3699 	else
3700 		pid = current->tgid;
3701 
3702 	if (ctx->direct_io)
3703 		iov_iter_advance(&direct_iov, offset - ctx->pos);
3704 
3705 	do {
3706 		if (open_file->invalidHandle) {
3707 			rc = cifs_reopen_file(open_file, true);
3708 			if (rc == -EAGAIN)
3709 				continue;
3710 			else if (rc)
3711 				break;
3712 		}
3713 
3714 		rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize,
3715 						   &rsize, credits);
3716 		if (rc)
3717 			break;
3718 
3719 		cur_len = min_t(const size_t, len, rsize);
3720 
3721 		if (ctx->direct_io) {
3722 			ssize_t result;
3723 
3724 			result = iov_iter_get_pages_alloc(
3725 					&direct_iov, &pagevec,
3726 					cur_len, &start);
3727 			if (result < 0) {
3728 				cifs_dbg(VFS,
3729 					 "Couldn't get user pages (rc=%zd) iter type %d iov_offset %zd count %zd\n",
3730 					 result, iov_iter_type(&direct_iov),
3731 					 direct_iov.iov_offset,
3732 					 direct_iov.count);
3733 				dump_stack();
3734 
3735 				rc = result;
3736 				add_credits_and_wake_if(server, credits, 0);
3737 				break;
3738 			}
3739 			cur_len = (size_t)result;
3740 			iov_iter_advance(&direct_iov, cur_len);
3741 
3742 			rdata = cifs_readdata_direct_alloc(
3743 					pagevec, cifs_uncached_readv_complete);
3744 			if (!rdata) {
3745 				add_credits_and_wake_if(server, credits, 0);
3746 				rc = -ENOMEM;
3747 				break;
3748 			}
3749 
3750 			npages = (cur_len + start + PAGE_SIZE-1) / PAGE_SIZE;
3751 			rdata->page_offset = start;
3752 			rdata->tailsz = npages > 1 ?
3753 				cur_len-(PAGE_SIZE-start)-(npages-2)*PAGE_SIZE :
3754 				cur_len;
3755 
3756 		} else {
3757 
3758 			npages = DIV_ROUND_UP(cur_len, PAGE_SIZE);
3759 			/* allocate a readdata struct */
3760 			rdata = cifs_readdata_alloc(npages,
3761 					    cifs_uncached_readv_complete);
3762 			if (!rdata) {
3763 				add_credits_and_wake_if(server, credits, 0);
3764 				rc = -ENOMEM;
3765 				break;
3766 			}
3767 
3768 			rc = cifs_read_allocate_pages(rdata, npages);
3769 			if (rc) {
3770 				kvfree(rdata->pages);
3771 				kfree(rdata);
3772 				add_credits_and_wake_if(server, credits, 0);
3773 				break;
3774 			}
3775 
3776 			rdata->tailsz = PAGE_SIZE;
3777 		}
3778 
3779 		rdata->server = server;
3780 		rdata->cfile = cifsFileInfo_get(open_file);
3781 		rdata->nr_pages = npages;
3782 		rdata->offset = offset;
3783 		rdata->bytes = cur_len;
3784 		rdata->pid = pid;
3785 		rdata->pagesz = PAGE_SIZE;
3786 		rdata->read_into_pages = cifs_uncached_read_into_pages;
3787 		rdata->copy_into_pages = cifs_uncached_copy_into_pages;
3788 		rdata->credits = credits_on_stack;
3789 		rdata->ctx = ctx;
3790 		kref_get(&ctx->refcount);
3791 
3792 		rc = adjust_credits(server, &rdata->credits, rdata->bytes);
3793 
3794 		if (!rc) {
3795 			if (rdata->cfile->invalidHandle)
3796 				rc = -EAGAIN;
3797 			else
3798 				rc = server->ops->async_readv(rdata);
3799 		}
3800 
3801 		if (rc) {
3802 			add_credits_and_wake_if(server, &rdata->credits, 0);
3803 			kref_put(&rdata->refcount,
3804 				cifs_uncached_readdata_release);
3805 			if (rc == -EAGAIN) {
3806 				iov_iter_revert(&direct_iov, cur_len);
3807 				continue;
3808 			}
3809 			break;
3810 		}
3811 
3812 		list_add_tail(&rdata->list, rdata_list);
3813 		offset += cur_len;
3814 		len -= cur_len;
3815 	} while (len > 0);
3816 
3817 	return rc;
3818 }
3819 
3820 static void
collect_uncached_read_data(struct cifs_aio_ctx * ctx)3821 collect_uncached_read_data(struct cifs_aio_ctx *ctx)
3822 {
3823 	struct cifs_readdata *rdata, *tmp;
3824 	struct iov_iter *to = &ctx->iter;
3825 	struct cifs_sb_info *cifs_sb;
3826 	int rc;
3827 
3828 	cifs_sb = CIFS_SB(ctx->cfile->dentry->d_sb);
3829 
3830 	mutex_lock(&ctx->aio_mutex);
3831 
3832 	if (list_empty(&ctx->list)) {
3833 		mutex_unlock(&ctx->aio_mutex);
3834 		return;
3835 	}
3836 
3837 	rc = ctx->rc;
3838 	/* the loop below should proceed in the order of increasing offsets */
3839 again:
3840 	list_for_each_entry_safe(rdata, tmp, &ctx->list, list) {
3841 		if (!rc) {
3842 			if (!try_wait_for_completion(&rdata->done)) {
3843 				mutex_unlock(&ctx->aio_mutex);
3844 				return;
3845 			}
3846 
3847 			if (rdata->result == -EAGAIN) {
3848 				/* resend call if it's a retryable error */
3849 				struct list_head tmp_list;
3850 				unsigned int got_bytes = rdata->got_bytes;
3851 
3852 				list_del_init(&rdata->list);
3853 				INIT_LIST_HEAD(&tmp_list);
3854 
3855 				/*
3856 				 * Got a part of data and then reconnect has
3857 				 * happened -- fill the buffer and continue
3858 				 * reading.
3859 				 */
3860 				if (got_bytes && got_bytes < rdata->bytes) {
3861 					rc = 0;
3862 					if (!ctx->direct_io)
3863 						rc = cifs_readdata_to_iov(rdata, to);
3864 					if (rc) {
3865 						kref_put(&rdata->refcount,
3866 							cifs_uncached_readdata_release);
3867 						continue;
3868 					}
3869 				}
3870 
3871 				if (ctx->direct_io) {
3872 					/*
3873 					 * Re-use rdata as this is a
3874 					 * direct I/O
3875 					 */
3876 					rc = cifs_resend_rdata(
3877 						rdata,
3878 						&tmp_list, ctx);
3879 				} else {
3880 					rc = cifs_send_async_read(
3881 						rdata->offset + got_bytes,
3882 						rdata->bytes - got_bytes,
3883 						rdata->cfile, cifs_sb,
3884 						&tmp_list, ctx);
3885 
3886 					kref_put(&rdata->refcount,
3887 						cifs_uncached_readdata_release);
3888 				}
3889 
3890 				list_splice(&tmp_list, &ctx->list);
3891 
3892 				goto again;
3893 			} else if (rdata->result)
3894 				rc = rdata->result;
3895 			else if (!ctx->direct_io)
3896 				rc = cifs_readdata_to_iov(rdata, to);
3897 
3898 			/* if there was a short read -- discard anything left */
3899 			if (rdata->got_bytes && rdata->got_bytes < rdata->bytes)
3900 				rc = -ENODATA;
3901 
3902 			ctx->total_len += rdata->got_bytes;
3903 		}
3904 		list_del_init(&rdata->list);
3905 		kref_put(&rdata->refcount, cifs_uncached_readdata_release);
3906 	}
3907 
3908 	if (!ctx->direct_io)
3909 		ctx->total_len = ctx->len - iov_iter_count(to);
3910 
3911 	/* mask nodata case */
3912 	if (rc == -ENODATA)
3913 		rc = 0;
3914 
3915 	ctx->rc = (rc == 0) ? (ssize_t)ctx->total_len : rc;
3916 
3917 	mutex_unlock(&ctx->aio_mutex);
3918 
3919 	if (ctx->iocb && ctx->iocb->ki_complete)
3920 		ctx->iocb->ki_complete(ctx->iocb, ctx->rc, 0);
3921 	else
3922 		complete(&ctx->done);
3923 }
3924 
__cifs_readv(struct kiocb * iocb,struct iov_iter * to,bool direct)3925 static ssize_t __cifs_readv(
3926 	struct kiocb *iocb, struct iov_iter *to, bool direct)
3927 {
3928 	size_t len;
3929 	struct file *file = iocb->ki_filp;
3930 	struct cifs_sb_info *cifs_sb;
3931 	struct cifsFileInfo *cfile;
3932 	struct cifs_tcon *tcon;
3933 	ssize_t rc, total_read = 0;
3934 	loff_t offset = iocb->ki_pos;
3935 	struct cifs_aio_ctx *ctx;
3936 
3937 	/*
3938 	 * iov_iter_get_pages_alloc() doesn't work with ITER_KVEC,
3939 	 * fall back to data copy read path
3940 	 * this could be improved by getting pages directly in ITER_KVEC
3941 	 */
3942 	if (direct && iov_iter_is_kvec(to)) {
3943 		cifs_dbg(FYI, "use non-direct cifs_user_readv for kvec I/O\n");
3944 		direct = false;
3945 	}
3946 
3947 	len = iov_iter_count(to);
3948 	if (!len)
3949 		return 0;
3950 
3951 	cifs_sb = CIFS_FILE_SB(file);
3952 	cfile = file->private_data;
3953 	tcon = tlink_tcon(cfile->tlink);
3954 
3955 	if (!tcon->ses->server->ops->async_readv)
3956 		return -ENOSYS;
3957 
3958 	if ((file->f_flags & O_ACCMODE) == O_WRONLY)
3959 		cifs_dbg(FYI, "attempting read on write only file instance\n");
3960 
3961 	ctx = cifs_aio_ctx_alloc();
3962 	if (!ctx)
3963 		return -ENOMEM;
3964 
3965 	ctx->cfile = cifsFileInfo_get(cfile);
3966 
3967 	if (!is_sync_kiocb(iocb))
3968 		ctx->iocb = iocb;
3969 
3970 	if (iter_is_iovec(to))
3971 		ctx->should_dirty = true;
3972 
3973 	if (direct) {
3974 		ctx->pos = offset;
3975 		ctx->direct_io = true;
3976 		ctx->iter = *to;
3977 		ctx->len = len;
3978 	} else {
3979 		rc = setup_aio_ctx_iter(ctx, to, READ);
3980 		if (rc) {
3981 			kref_put(&ctx->refcount, cifs_aio_ctx_release);
3982 			return rc;
3983 		}
3984 		len = ctx->len;
3985 	}
3986 
3987 	/* grab a lock here due to read response handlers can access ctx */
3988 	mutex_lock(&ctx->aio_mutex);
3989 
3990 	rc = cifs_send_async_read(offset, len, cfile, cifs_sb, &ctx->list, ctx);
3991 
3992 	/* if at least one read request send succeeded, then reset rc */
3993 	if (!list_empty(&ctx->list))
3994 		rc = 0;
3995 
3996 	mutex_unlock(&ctx->aio_mutex);
3997 
3998 	if (rc) {
3999 		kref_put(&ctx->refcount, cifs_aio_ctx_release);
4000 		return rc;
4001 	}
4002 
4003 	if (!is_sync_kiocb(iocb)) {
4004 		kref_put(&ctx->refcount, cifs_aio_ctx_release);
4005 		return -EIOCBQUEUED;
4006 	}
4007 
4008 	rc = wait_for_completion_killable(&ctx->done);
4009 	if (rc) {
4010 		mutex_lock(&ctx->aio_mutex);
4011 		ctx->rc = rc = -EINTR;
4012 		total_read = ctx->total_len;
4013 		mutex_unlock(&ctx->aio_mutex);
4014 	} else {
4015 		rc = ctx->rc;
4016 		total_read = ctx->total_len;
4017 	}
4018 
4019 	kref_put(&ctx->refcount, cifs_aio_ctx_release);
4020 
4021 	if (total_read) {
4022 		iocb->ki_pos += total_read;
4023 		return total_read;
4024 	}
4025 	return rc;
4026 }
4027 
cifs_direct_readv(struct kiocb * iocb,struct iov_iter * to)4028 ssize_t cifs_direct_readv(struct kiocb *iocb, struct iov_iter *to)
4029 {
4030 	return __cifs_readv(iocb, to, true);
4031 }
4032 
cifs_user_readv(struct kiocb * iocb,struct iov_iter * to)4033 ssize_t cifs_user_readv(struct kiocb *iocb, struct iov_iter *to)
4034 {
4035 	return __cifs_readv(iocb, to, false);
4036 }
4037 
4038 ssize_t
cifs_strict_readv(struct kiocb * iocb,struct iov_iter * to)4039 cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to)
4040 {
4041 	struct inode *inode = file_inode(iocb->ki_filp);
4042 	struct cifsInodeInfo *cinode = CIFS_I(inode);
4043 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
4044 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)
4045 						iocb->ki_filp->private_data;
4046 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
4047 	int rc = -EACCES;
4048 
4049 	/*
4050 	 * In strict cache mode we need to read from the server all the time
4051 	 * if we don't have level II oplock because the server can delay mtime
4052 	 * change - so we can't make a decision about inode invalidating.
4053 	 * And we can also fail with pagereading if there are mandatory locks
4054 	 * on pages affected by this read but not on the region from pos to
4055 	 * pos+len-1.
4056 	 */
4057 	if (!CIFS_CACHE_READ(cinode))
4058 		return cifs_user_readv(iocb, to);
4059 
4060 	if (cap_unix(tcon->ses) &&
4061 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
4062 	    ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
4063 		return generic_file_read_iter(iocb, to);
4064 
4065 	/*
4066 	 * We need to hold the sem to be sure nobody modifies lock list
4067 	 * with a brlock that prevents reading.
4068 	 */
4069 	down_read(&cinode->lock_sem);
4070 	if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(to),
4071 				     tcon->ses->server->vals->shared_lock_type,
4072 				     0, NULL, CIFS_READ_OP))
4073 		rc = generic_file_read_iter(iocb, to);
4074 	up_read(&cinode->lock_sem);
4075 	return rc;
4076 }
4077 
4078 static ssize_t
cifs_read(struct file * file,char * read_data,size_t read_size,loff_t * offset)4079 cifs_read(struct file *file, char *read_data, size_t read_size, loff_t *offset)
4080 {
4081 	int rc = -EACCES;
4082 	unsigned int bytes_read = 0;
4083 	unsigned int total_read;
4084 	unsigned int current_read_size;
4085 	unsigned int rsize;
4086 	struct cifs_sb_info *cifs_sb;
4087 	struct cifs_tcon *tcon;
4088 	struct TCP_Server_Info *server;
4089 	unsigned int xid;
4090 	char *cur_offset;
4091 	struct cifsFileInfo *open_file;
4092 	struct cifs_io_parms io_parms = {0};
4093 	int buf_type = CIFS_NO_BUFFER;
4094 	__u32 pid;
4095 
4096 	xid = get_xid();
4097 	cifs_sb = CIFS_FILE_SB(file);
4098 
4099 	/* FIXME: set up handlers for larger reads and/or convert to async */
4100 	rsize = min_t(unsigned int, cifs_sb->ctx->rsize, CIFSMaxBufSize);
4101 
4102 	if (file->private_data == NULL) {
4103 		rc = -EBADF;
4104 		free_xid(xid);
4105 		return rc;
4106 	}
4107 	open_file = file->private_data;
4108 	tcon = tlink_tcon(open_file->tlink);
4109 	server = cifs_pick_channel(tcon->ses);
4110 
4111 	if (!server->ops->sync_read) {
4112 		free_xid(xid);
4113 		return -ENOSYS;
4114 	}
4115 
4116 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
4117 		pid = open_file->pid;
4118 	else
4119 		pid = current->tgid;
4120 
4121 	if ((file->f_flags & O_ACCMODE) == O_WRONLY)
4122 		cifs_dbg(FYI, "attempting read on write only file instance\n");
4123 
4124 	for (total_read = 0, cur_offset = read_data; read_size > total_read;
4125 	     total_read += bytes_read, cur_offset += bytes_read) {
4126 		do {
4127 			current_read_size = min_t(uint, read_size - total_read,
4128 						  rsize);
4129 			/*
4130 			 * For windows me and 9x we do not want to request more
4131 			 * than it negotiated since it will refuse the read
4132 			 * then.
4133 			 */
4134 			if (!(tcon->ses->capabilities &
4135 				tcon->ses->server->vals->cap_large_files)) {
4136 				current_read_size = min_t(uint,
4137 					current_read_size, CIFSMaxBufSize);
4138 			}
4139 			if (open_file->invalidHandle) {
4140 				rc = cifs_reopen_file(open_file, true);
4141 				if (rc != 0)
4142 					break;
4143 			}
4144 			io_parms.pid = pid;
4145 			io_parms.tcon = tcon;
4146 			io_parms.offset = *offset;
4147 			io_parms.length = current_read_size;
4148 			io_parms.server = server;
4149 			rc = server->ops->sync_read(xid, &open_file->fid, &io_parms,
4150 						    &bytes_read, &cur_offset,
4151 						    &buf_type);
4152 		} while (rc == -EAGAIN);
4153 
4154 		if (rc || (bytes_read == 0)) {
4155 			if (total_read) {
4156 				break;
4157 			} else {
4158 				free_xid(xid);
4159 				return rc;
4160 			}
4161 		} else {
4162 			cifs_stats_bytes_read(tcon, total_read);
4163 			*offset += bytes_read;
4164 		}
4165 	}
4166 	free_xid(xid);
4167 	return total_read;
4168 }
4169 
4170 /*
4171  * If the page is mmap'ed into a process' page tables, then we need to make
4172  * sure that it doesn't change while being written back.
4173  */
4174 static vm_fault_t
cifs_page_mkwrite(struct vm_fault * vmf)4175 cifs_page_mkwrite(struct vm_fault *vmf)
4176 {
4177 	struct page *page = vmf->page;
4178 	struct file *file = vmf->vma->vm_file;
4179 	struct inode *inode = file_inode(file);
4180 
4181 	cifs_fscache_wait_on_page_write(inode, page);
4182 
4183 	lock_page(page);
4184 	return VM_FAULT_LOCKED;
4185 }
4186 
4187 static const struct vm_operations_struct cifs_file_vm_ops = {
4188 	.fault = filemap_fault,
4189 	.map_pages = filemap_map_pages,
4190 	.page_mkwrite = cifs_page_mkwrite,
4191 };
4192 
cifs_file_strict_mmap(struct file * file,struct vm_area_struct * vma)4193 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
4194 {
4195 	int xid, rc = 0;
4196 	struct inode *inode = file_inode(file);
4197 
4198 	xid = get_xid();
4199 
4200 	if (!CIFS_CACHE_READ(CIFS_I(inode)))
4201 		rc = cifs_zap_mapping(inode);
4202 	if (!rc)
4203 		rc = generic_file_mmap(file, vma);
4204 	if (!rc)
4205 		vma->vm_ops = &cifs_file_vm_ops;
4206 
4207 	free_xid(xid);
4208 	return rc;
4209 }
4210 
cifs_file_mmap(struct file * file,struct vm_area_struct * vma)4211 int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
4212 {
4213 	int rc, xid;
4214 
4215 	xid = get_xid();
4216 
4217 	rc = cifs_revalidate_file(file);
4218 	if (rc)
4219 		cifs_dbg(FYI, "Validation prior to mmap failed, error=%d\n",
4220 			 rc);
4221 	if (!rc)
4222 		rc = generic_file_mmap(file, vma);
4223 	if (!rc)
4224 		vma->vm_ops = &cifs_file_vm_ops;
4225 
4226 	free_xid(xid);
4227 	return rc;
4228 }
4229 
4230 static void
cifs_readv_complete(struct work_struct * work)4231 cifs_readv_complete(struct work_struct *work)
4232 {
4233 	unsigned int i, got_bytes;
4234 	struct cifs_readdata *rdata = container_of(work,
4235 						struct cifs_readdata, work);
4236 
4237 	got_bytes = rdata->got_bytes;
4238 	for (i = 0; i < rdata->nr_pages; i++) {
4239 		struct page *page = rdata->pages[i];
4240 
4241 		lru_cache_add(page);
4242 
4243 		if (rdata->result == 0 ||
4244 		    (rdata->result == -EAGAIN && got_bytes)) {
4245 			flush_dcache_page(page);
4246 			SetPageUptodate(page);
4247 		} else
4248 			SetPageError(page);
4249 
4250 		unlock_page(page);
4251 
4252 		if (rdata->result == 0 ||
4253 		    (rdata->result == -EAGAIN && got_bytes))
4254 			cifs_readpage_to_fscache(rdata->mapping->host, page);
4255 		else
4256 			cifs_fscache_uncache_page(rdata->mapping->host, page);
4257 
4258 		got_bytes -= min_t(unsigned int, PAGE_SIZE, got_bytes);
4259 
4260 		put_page(page);
4261 		rdata->pages[i] = NULL;
4262 	}
4263 	kref_put(&rdata->refcount, cifs_readdata_release);
4264 }
4265 
4266 static int
readpages_fill_pages(struct TCP_Server_Info * server,struct cifs_readdata * rdata,struct iov_iter * iter,unsigned int len)4267 readpages_fill_pages(struct TCP_Server_Info *server,
4268 		     struct cifs_readdata *rdata, struct iov_iter *iter,
4269 		     unsigned int len)
4270 {
4271 	int result = 0;
4272 	unsigned int i;
4273 	u64 eof;
4274 	pgoff_t eof_index;
4275 	unsigned int nr_pages = rdata->nr_pages;
4276 	unsigned int page_offset = rdata->page_offset;
4277 
4278 	/* determine the eof that the server (probably) has */
4279 	eof = CIFS_I(rdata->mapping->host)->server_eof;
4280 	eof_index = eof ? (eof - 1) >> PAGE_SHIFT : 0;
4281 	cifs_dbg(FYI, "eof=%llu eof_index=%lu\n", eof, eof_index);
4282 
4283 	rdata->got_bytes = 0;
4284 	rdata->tailsz = PAGE_SIZE;
4285 	for (i = 0; i < nr_pages; i++) {
4286 		struct page *page = rdata->pages[i];
4287 		unsigned int to_read = rdata->pagesz;
4288 		size_t n;
4289 
4290 		if (i == 0)
4291 			to_read -= page_offset;
4292 		else
4293 			page_offset = 0;
4294 
4295 		n = to_read;
4296 
4297 		if (len >= to_read) {
4298 			len -= to_read;
4299 		} else if (len > 0) {
4300 			/* enough for partial page, fill and zero the rest */
4301 			zero_user(page, len + page_offset, to_read - len);
4302 			n = rdata->tailsz = len;
4303 			len = 0;
4304 		} else if (page->index > eof_index) {
4305 			/*
4306 			 * The VFS will not try to do readahead past the
4307 			 * i_size, but it's possible that we have outstanding
4308 			 * writes with gaps in the middle and the i_size hasn't
4309 			 * caught up yet. Populate those with zeroed out pages
4310 			 * to prevent the VFS from repeatedly attempting to
4311 			 * fill them until the writes are flushed.
4312 			 */
4313 			zero_user(page, 0, PAGE_SIZE);
4314 			lru_cache_add(page);
4315 			flush_dcache_page(page);
4316 			SetPageUptodate(page);
4317 			unlock_page(page);
4318 			put_page(page);
4319 			rdata->pages[i] = NULL;
4320 			rdata->nr_pages--;
4321 			continue;
4322 		} else {
4323 			/* no need to hold page hostage */
4324 			lru_cache_add(page);
4325 			unlock_page(page);
4326 			put_page(page);
4327 			rdata->pages[i] = NULL;
4328 			rdata->nr_pages--;
4329 			continue;
4330 		}
4331 
4332 		if (iter)
4333 			result = copy_page_from_iter(
4334 					page, page_offset, n, iter);
4335 #ifdef CONFIG_CIFS_SMB_DIRECT
4336 		else if (rdata->mr)
4337 			result = n;
4338 #endif
4339 		else
4340 			result = cifs_read_page_from_socket(
4341 					server, page, page_offset, n);
4342 		if (result < 0)
4343 			break;
4344 
4345 		rdata->got_bytes += result;
4346 	}
4347 
4348 	return rdata->got_bytes > 0 && result != -ECONNABORTED ?
4349 						rdata->got_bytes : result;
4350 }
4351 
4352 static int
cifs_readpages_read_into_pages(struct TCP_Server_Info * server,struct cifs_readdata * rdata,unsigned int len)4353 cifs_readpages_read_into_pages(struct TCP_Server_Info *server,
4354 			       struct cifs_readdata *rdata, unsigned int len)
4355 {
4356 	return readpages_fill_pages(server, rdata, NULL, len);
4357 }
4358 
4359 static int
cifs_readpages_copy_into_pages(struct TCP_Server_Info * server,struct cifs_readdata * rdata,struct iov_iter * iter)4360 cifs_readpages_copy_into_pages(struct TCP_Server_Info *server,
4361 			       struct cifs_readdata *rdata,
4362 			       struct iov_iter *iter)
4363 {
4364 	return readpages_fill_pages(server, rdata, iter, iter->count);
4365 }
4366 
4367 static int
readpages_get_pages(struct address_space * mapping,struct list_head * page_list,unsigned int rsize,struct list_head * tmplist,unsigned int * nr_pages,loff_t * offset,unsigned int * bytes)4368 readpages_get_pages(struct address_space *mapping, struct list_head *page_list,
4369 		    unsigned int rsize, struct list_head *tmplist,
4370 		    unsigned int *nr_pages, loff_t *offset, unsigned int *bytes)
4371 {
4372 	struct page *page, *tpage;
4373 	unsigned int expected_index;
4374 	int rc;
4375 	gfp_t gfp = readahead_gfp_mask(mapping);
4376 
4377 	INIT_LIST_HEAD(tmplist);
4378 
4379 	page = lru_to_page(page_list);
4380 
4381 	/*
4382 	 * Lock the page and put it in the cache. Since no one else
4383 	 * should have access to this page, we're safe to simply set
4384 	 * PG_locked without checking it first.
4385 	 */
4386 	__SetPageLocked(page);
4387 	rc = add_to_page_cache_locked(page, mapping,
4388 				      page->index, gfp);
4389 
4390 	/* give up if we can't stick it in the cache */
4391 	if (rc) {
4392 		__ClearPageLocked(page);
4393 		return rc;
4394 	}
4395 
4396 	/* move first page to the tmplist */
4397 	*offset = (loff_t)page->index << PAGE_SHIFT;
4398 	*bytes = PAGE_SIZE;
4399 	*nr_pages = 1;
4400 	list_move_tail(&page->lru, tmplist);
4401 
4402 	/* now try and add more pages onto the request */
4403 	expected_index = page->index + 1;
4404 	list_for_each_entry_safe_reverse(page, tpage, page_list, lru) {
4405 		/* discontinuity ? */
4406 		if (page->index != expected_index)
4407 			break;
4408 
4409 		/* would this page push the read over the rsize? */
4410 		if (*bytes + PAGE_SIZE > rsize)
4411 			break;
4412 
4413 		__SetPageLocked(page);
4414 		rc = add_to_page_cache_locked(page, mapping, page->index, gfp);
4415 		if (rc) {
4416 			__ClearPageLocked(page);
4417 			break;
4418 		}
4419 		list_move_tail(&page->lru, tmplist);
4420 		(*bytes) += PAGE_SIZE;
4421 		expected_index++;
4422 		(*nr_pages)++;
4423 	}
4424 	return rc;
4425 }
4426 
cifs_readpages(struct file * file,struct address_space * mapping,struct list_head * page_list,unsigned num_pages)4427 static int cifs_readpages(struct file *file, struct address_space *mapping,
4428 	struct list_head *page_list, unsigned num_pages)
4429 {
4430 	int rc;
4431 	int err = 0;
4432 	struct list_head tmplist;
4433 	struct cifsFileInfo *open_file = file->private_data;
4434 	struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
4435 	struct TCP_Server_Info *server;
4436 	pid_t pid;
4437 	unsigned int xid;
4438 
4439 	xid = get_xid();
4440 	/*
4441 	 * Reads as many pages as possible from fscache. Returns -ENOBUFS
4442 	 * immediately if the cookie is negative
4443 	 *
4444 	 * After this point, every page in the list might have PG_fscache set,
4445 	 * so we will need to clean that up off of every page we don't use.
4446 	 */
4447 	rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,
4448 					 &num_pages);
4449 	if (rc == 0) {
4450 		free_xid(xid);
4451 		return rc;
4452 	}
4453 
4454 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
4455 		pid = open_file->pid;
4456 	else
4457 		pid = current->tgid;
4458 
4459 	rc = 0;
4460 	server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses);
4461 
4462 	cifs_dbg(FYI, "%s: file=%p mapping=%p num_pages=%u\n",
4463 		 __func__, file, mapping, num_pages);
4464 
4465 	/*
4466 	 * Start with the page at end of list and move it to private
4467 	 * list. Do the same with any following pages until we hit
4468 	 * the rsize limit, hit an index discontinuity, or run out of
4469 	 * pages. Issue the async read and then start the loop again
4470 	 * until the list is empty.
4471 	 *
4472 	 * Note that list order is important. The page_list is in
4473 	 * the order of declining indexes. When we put the pages in
4474 	 * the rdata->pages, then we want them in increasing order.
4475 	 */
4476 	while (!list_empty(page_list) && !err) {
4477 		unsigned int i, nr_pages, bytes, rsize;
4478 		loff_t offset;
4479 		struct page *page, *tpage;
4480 		struct cifs_readdata *rdata;
4481 		struct cifs_credits credits_on_stack;
4482 		struct cifs_credits *credits = &credits_on_stack;
4483 
4484 		if (open_file->invalidHandle) {
4485 			rc = cifs_reopen_file(open_file, true);
4486 			if (rc == -EAGAIN)
4487 				continue;
4488 			else if (rc)
4489 				break;
4490 		}
4491 
4492 		rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize,
4493 						   &rsize, credits);
4494 		if (rc)
4495 			break;
4496 
4497 		/*
4498 		 * Give up immediately if rsize is too small to read an entire
4499 		 * page. The VFS will fall back to readpage. We should never
4500 		 * reach this point however since we set ra_pages to 0 when the
4501 		 * rsize is smaller than a cache page.
4502 		 */
4503 		if (unlikely(rsize < PAGE_SIZE)) {
4504 			add_credits_and_wake_if(server, credits, 0);
4505 			free_xid(xid);
4506 			return 0;
4507 		}
4508 
4509 		nr_pages = 0;
4510 		err = readpages_get_pages(mapping, page_list, rsize, &tmplist,
4511 					 &nr_pages, &offset, &bytes);
4512 		if (!nr_pages) {
4513 			add_credits_and_wake_if(server, credits, 0);
4514 			break;
4515 		}
4516 
4517 		rdata = cifs_readdata_alloc(nr_pages, cifs_readv_complete);
4518 		if (!rdata) {
4519 			/* best to give up if we're out of mem */
4520 			list_for_each_entry_safe(page, tpage, &tmplist, lru) {
4521 				list_del(&page->lru);
4522 				lru_cache_add(page);
4523 				unlock_page(page);
4524 				put_page(page);
4525 			}
4526 			rc = -ENOMEM;
4527 			add_credits_and_wake_if(server, credits, 0);
4528 			break;
4529 		}
4530 
4531 		rdata->cfile = cifsFileInfo_get(open_file);
4532 		rdata->server = server;
4533 		rdata->mapping = mapping;
4534 		rdata->offset = offset;
4535 		rdata->bytes = bytes;
4536 		rdata->pid = pid;
4537 		rdata->pagesz = PAGE_SIZE;
4538 		rdata->tailsz = PAGE_SIZE;
4539 		rdata->read_into_pages = cifs_readpages_read_into_pages;
4540 		rdata->copy_into_pages = cifs_readpages_copy_into_pages;
4541 		rdata->credits = credits_on_stack;
4542 
4543 		list_for_each_entry_safe(page, tpage, &tmplist, lru) {
4544 			list_del(&page->lru);
4545 			rdata->pages[rdata->nr_pages++] = page;
4546 		}
4547 
4548 		rc = adjust_credits(server, &rdata->credits, rdata->bytes);
4549 
4550 		if (!rc) {
4551 			if (rdata->cfile->invalidHandle)
4552 				rc = -EAGAIN;
4553 			else
4554 				rc = server->ops->async_readv(rdata);
4555 		}
4556 
4557 		if (rc) {
4558 			add_credits_and_wake_if(server, &rdata->credits, 0);
4559 			for (i = 0; i < rdata->nr_pages; i++) {
4560 				page = rdata->pages[i];
4561 				lru_cache_add(page);
4562 				unlock_page(page);
4563 				put_page(page);
4564 			}
4565 			/* Fallback to the readpage in error/reconnect cases */
4566 			kref_put(&rdata->refcount, cifs_readdata_release);
4567 			break;
4568 		}
4569 
4570 		kref_put(&rdata->refcount, cifs_readdata_release);
4571 	}
4572 
4573 	/* Any pages that have been shown to fscache but didn't get added to
4574 	 * the pagecache must be uncached before they get returned to the
4575 	 * allocator.
4576 	 */
4577 	cifs_fscache_readpages_cancel(mapping->host, page_list);
4578 	free_xid(xid);
4579 	return rc;
4580 }
4581 
4582 /*
4583  * cifs_readpage_worker must be called with the page pinned
4584  */
cifs_readpage_worker(struct file * file,struct page * page,loff_t * poffset)4585 static int cifs_readpage_worker(struct file *file, struct page *page,
4586 	loff_t *poffset)
4587 {
4588 	char *read_data;
4589 	int rc;
4590 
4591 	/* Is the page cached? */
4592 	rc = cifs_readpage_from_fscache(file_inode(file), page);
4593 	if (rc == 0)
4594 		goto read_complete;
4595 
4596 	read_data = kmap(page);
4597 	/* for reads over a certain size could initiate async read ahead */
4598 
4599 	rc = cifs_read(file, read_data, PAGE_SIZE, poffset);
4600 
4601 	if (rc < 0)
4602 		goto io_error;
4603 	else
4604 		cifs_dbg(FYI, "Bytes read %d\n", rc);
4605 
4606 	/* we do not want atime to be less than mtime, it broke some apps */
4607 	file_inode(file)->i_atime = current_time(file_inode(file));
4608 	if (timespec64_compare(&(file_inode(file)->i_atime), &(file_inode(file)->i_mtime)))
4609 		file_inode(file)->i_atime = file_inode(file)->i_mtime;
4610 	else
4611 		file_inode(file)->i_atime = current_time(file_inode(file));
4612 
4613 	if (PAGE_SIZE > rc)
4614 		memset(read_data + rc, 0, PAGE_SIZE - rc);
4615 
4616 	flush_dcache_page(page);
4617 	SetPageUptodate(page);
4618 
4619 	/* send this page to the cache */
4620 	cifs_readpage_to_fscache(file_inode(file), page);
4621 
4622 	rc = 0;
4623 
4624 io_error:
4625 	kunmap(page);
4626 	unlock_page(page);
4627 
4628 read_complete:
4629 	return rc;
4630 }
4631 
cifs_readpage(struct file * file,struct page * page)4632 static int cifs_readpage(struct file *file, struct page *page)
4633 {
4634 	loff_t offset = page_file_offset(page);
4635 	int rc = -EACCES;
4636 	unsigned int xid;
4637 
4638 	xid = get_xid();
4639 
4640 	if (file->private_data == NULL) {
4641 		rc = -EBADF;
4642 		free_xid(xid);
4643 		return rc;
4644 	}
4645 
4646 	cifs_dbg(FYI, "readpage %p at offset %d 0x%x\n",
4647 		 page, (int)offset, (int)offset);
4648 
4649 	rc = cifs_readpage_worker(file, page, &offset);
4650 
4651 	free_xid(xid);
4652 	return rc;
4653 }
4654 
is_inode_writable(struct cifsInodeInfo * cifs_inode)4655 static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
4656 {
4657 	struct cifsFileInfo *open_file;
4658 
4659 	spin_lock(&cifs_inode->open_file_lock);
4660 	list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
4661 		if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
4662 			spin_unlock(&cifs_inode->open_file_lock);
4663 			return 1;
4664 		}
4665 	}
4666 	spin_unlock(&cifs_inode->open_file_lock);
4667 	return 0;
4668 }
4669 
4670 /* We do not want to update the file size from server for inodes
4671    open for write - to avoid races with writepage extending
4672    the file - in the future we could consider allowing
4673    refreshing the inode only on increases in the file size
4674    but this is tricky to do without racing with writebehind
4675    page caching in the current Linux kernel design */
is_size_safe_to_change(struct cifsInodeInfo * cifsInode,__u64 end_of_file)4676 bool is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file)
4677 {
4678 	if (!cifsInode)
4679 		return true;
4680 
4681 	if (is_inode_writable(cifsInode)) {
4682 		/* This inode is open for write at least once */
4683 		struct cifs_sb_info *cifs_sb;
4684 
4685 		cifs_sb = CIFS_SB(cifsInode->vfs_inode.i_sb);
4686 		if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO) {
4687 			/* since no page cache to corrupt on directio
4688 			we can change size safely */
4689 			return true;
4690 		}
4691 
4692 		if (i_size_read(&cifsInode->vfs_inode) < end_of_file)
4693 			return true;
4694 
4695 		return false;
4696 	} else
4697 		return true;
4698 }
4699 
cifs_write_begin(struct file * file,struct address_space * mapping,loff_t pos,unsigned len,unsigned flags,struct page ** pagep,void ** fsdata)4700 static int cifs_write_begin(struct file *file, struct address_space *mapping,
4701 			loff_t pos, unsigned len, unsigned flags,
4702 			struct page **pagep, void **fsdata)
4703 {
4704 	int oncethru = 0;
4705 	pgoff_t index = pos >> PAGE_SHIFT;
4706 	loff_t offset = pos & (PAGE_SIZE - 1);
4707 	loff_t page_start = pos & PAGE_MASK;
4708 	loff_t i_size;
4709 	struct page *page;
4710 	int rc = 0;
4711 
4712 	cifs_dbg(FYI, "write_begin from %lld len %d\n", (long long)pos, len);
4713 
4714 start:
4715 	page = grab_cache_page_write_begin(mapping, index, flags);
4716 	if (!page) {
4717 		rc = -ENOMEM;
4718 		goto out;
4719 	}
4720 
4721 	if (PageUptodate(page))
4722 		goto out;
4723 
4724 	/*
4725 	 * If we write a full page it will be up to date, no need to read from
4726 	 * the server. If the write is short, we'll end up doing a sync write
4727 	 * instead.
4728 	 */
4729 	if (len == PAGE_SIZE)
4730 		goto out;
4731 
4732 	/*
4733 	 * optimize away the read when we have an oplock, and we're not
4734 	 * expecting to use any of the data we'd be reading in. That
4735 	 * is, when the page lies beyond the EOF, or straddles the EOF
4736 	 * and the write will cover all of the existing data.
4737 	 */
4738 	if (CIFS_CACHE_READ(CIFS_I(mapping->host))) {
4739 		i_size = i_size_read(mapping->host);
4740 		if (page_start >= i_size ||
4741 		    (offset == 0 && (pos + len) >= i_size)) {
4742 			zero_user_segments(page, 0, offset,
4743 					   offset + len,
4744 					   PAGE_SIZE);
4745 			/*
4746 			 * PageChecked means that the parts of the page
4747 			 * to which we're not writing are considered up
4748 			 * to date. Once the data is copied to the
4749 			 * page, it can be set uptodate.
4750 			 */
4751 			SetPageChecked(page);
4752 			goto out;
4753 		}
4754 	}
4755 
4756 	if ((file->f_flags & O_ACCMODE) != O_WRONLY && !oncethru) {
4757 		/*
4758 		 * might as well read a page, it is fast enough. If we get
4759 		 * an error, we don't need to return it. cifs_write_end will
4760 		 * do a sync write instead since PG_uptodate isn't set.
4761 		 */
4762 		cifs_readpage_worker(file, page, &page_start);
4763 		put_page(page);
4764 		oncethru = 1;
4765 		goto start;
4766 	} else {
4767 		/* we could try using another file handle if there is one -
4768 		   but how would we lock it to prevent close of that handle
4769 		   racing with this read? In any case
4770 		   this will be written out by write_end so is fine */
4771 	}
4772 out:
4773 	*pagep = page;
4774 	return rc;
4775 }
4776 
cifs_release_page(struct page * page,gfp_t gfp)4777 static int cifs_release_page(struct page *page, gfp_t gfp)
4778 {
4779 	if (PagePrivate(page))
4780 		return 0;
4781 
4782 	return cifs_fscache_release_page(page, gfp);
4783 }
4784 
cifs_invalidate_page(struct page * page,unsigned int offset,unsigned int length)4785 static void cifs_invalidate_page(struct page *page, unsigned int offset,
4786 				 unsigned int length)
4787 {
4788 	struct cifsInodeInfo *cifsi = CIFS_I(page->mapping->host);
4789 
4790 	if (offset == 0 && length == PAGE_SIZE)
4791 		cifs_fscache_invalidate_page(page, &cifsi->vfs_inode);
4792 }
4793 
cifs_launder_page(struct page * page)4794 static int cifs_launder_page(struct page *page)
4795 {
4796 	int rc = 0;
4797 	loff_t range_start = page_offset(page);
4798 	loff_t range_end = range_start + (loff_t)(PAGE_SIZE - 1);
4799 	struct writeback_control wbc = {
4800 		.sync_mode = WB_SYNC_ALL,
4801 		.nr_to_write = 0,
4802 		.range_start = range_start,
4803 		.range_end = range_end,
4804 	};
4805 
4806 	cifs_dbg(FYI, "Launder page: %p\n", page);
4807 
4808 	if (clear_page_dirty_for_io(page))
4809 		rc = cifs_writepage_locked(page, &wbc);
4810 
4811 	cifs_fscache_invalidate_page(page, page->mapping->host);
4812 	return rc;
4813 }
4814 
cifs_oplock_break(struct work_struct * work)4815 void cifs_oplock_break(struct work_struct *work)
4816 {
4817 	struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
4818 						  oplock_break);
4819 	struct inode *inode = d_inode(cfile->dentry);
4820 	struct cifsInodeInfo *cinode = CIFS_I(inode);
4821 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
4822 	struct TCP_Server_Info *server = tcon->ses->server;
4823 	int rc = 0;
4824 	bool purge_cache = false;
4825 	bool is_deferred = false;
4826 	struct cifs_deferred_close *dclose;
4827 
4828 	wait_on_bit(&cinode->flags, CIFS_INODE_PENDING_WRITERS,
4829 			TASK_UNINTERRUPTIBLE);
4830 
4831 	server->ops->downgrade_oplock(server, cinode, cfile->oplock_level,
4832 				      cfile->oplock_epoch, &purge_cache);
4833 
4834 	if (!CIFS_CACHE_WRITE(cinode) && CIFS_CACHE_READ(cinode) &&
4835 						cifs_has_mand_locks(cinode)) {
4836 		cifs_dbg(FYI, "Reset oplock to None for inode=%p due to mand locks\n",
4837 			 inode);
4838 		cinode->oplock = 0;
4839 	}
4840 
4841 	if (inode && S_ISREG(inode->i_mode)) {
4842 		if (CIFS_CACHE_READ(cinode))
4843 			break_lease(inode, O_RDONLY);
4844 		else
4845 			break_lease(inode, O_WRONLY);
4846 		rc = filemap_fdatawrite(inode->i_mapping);
4847 		if (!CIFS_CACHE_READ(cinode) || purge_cache) {
4848 			rc = filemap_fdatawait(inode->i_mapping);
4849 			mapping_set_error(inode->i_mapping, rc);
4850 			cifs_zap_mapping(inode);
4851 		}
4852 		cifs_dbg(FYI, "Oplock flush inode %p rc %d\n", inode, rc);
4853 		if (CIFS_CACHE_WRITE(cinode))
4854 			goto oplock_break_ack;
4855 	}
4856 
4857 	rc = cifs_push_locks(cfile);
4858 	if (rc)
4859 		cifs_dbg(VFS, "Push locks rc = %d\n", rc);
4860 
4861 oplock_break_ack:
4862 	/*
4863 	 * When oplock break is received and there are no active
4864 	 * file handles but cached, then schedule deferred close immediately.
4865 	 * So, new open will not use cached handle.
4866 	 */
4867 	spin_lock(&CIFS_I(inode)->deferred_lock);
4868 	is_deferred = cifs_is_deferred_close(cfile, &dclose);
4869 	spin_unlock(&CIFS_I(inode)->deferred_lock);
4870 	if (is_deferred &&
4871 	    cfile->deferred_close_scheduled &&
4872 	    delayed_work_pending(&cfile->deferred)) {
4873 		if (cancel_delayed_work(&cfile->deferred)) {
4874 			_cifsFileInfo_put(cfile, false, false);
4875 			goto oplock_break_done;
4876 		}
4877 	}
4878 	/*
4879 	 * releasing stale oplock after recent reconnect of smb session using
4880 	 * a now incorrect file handle is not a data integrity issue but do
4881 	 * not bother sending an oplock release if session to server still is
4882 	 * disconnected since oplock already released by the server
4883 	 */
4884 	if (!cfile->oplock_break_cancelled) {
4885 		rc = tcon->ses->server->ops->oplock_response(tcon, &cfile->fid,
4886 							     cinode);
4887 		cifs_dbg(FYI, "Oplock release rc = %d\n", rc);
4888 	}
4889 oplock_break_done:
4890 	_cifsFileInfo_put(cfile, false /* do not wait for ourself */, false);
4891 	cifs_done_oplock_break(cinode);
4892 }
4893 
4894 /*
4895  * The presence of cifs_direct_io() in the address space ops vector
4896  * allowes open() O_DIRECT flags which would have failed otherwise.
4897  *
4898  * In the non-cached mode (mount with cache=none), we shunt off direct read and write requests
4899  * so this method should never be called.
4900  *
4901  * Direct IO is not yet supported in the cached mode.
4902  */
4903 static ssize_t
cifs_direct_io(struct kiocb * iocb,struct iov_iter * iter)4904 cifs_direct_io(struct kiocb *iocb, struct iov_iter *iter)
4905 {
4906         /*
4907          * FIXME
4908          * Eventually need to support direct IO for non forcedirectio mounts
4909          */
4910         return -EINVAL;
4911 }
4912 
cifs_swap_activate(struct swap_info_struct * sis,struct file * swap_file,sector_t * span)4913 static int cifs_swap_activate(struct swap_info_struct *sis,
4914 			      struct file *swap_file, sector_t *span)
4915 {
4916 	struct cifsFileInfo *cfile = swap_file->private_data;
4917 	struct inode *inode = swap_file->f_mapping->host;
4918 	unsigned long blocks;
4919 	long long isize;
4920 
4921 	cifs_dbg(FYI, "swap activate\n");
4922 
4923 	spin_lock(&inode->i_lock);
4924 	blocks = inode->i_blocks;
4925 	isize = inode->i_size;
4926 	spin_unlock(&inode->i_lock);
4927 	if (blocks*512 < isize) {
4928 		pr_warn("swap activate: swapfile has holes\n");
4929 		return -EINVAL;
4930 	}
4931 	*span = sis->pages;
4932 
4933 	pr_warn_once("Swap support over SMB3 is experimental\n");
4934 
4935 	/*
4936 	 * TODO: consider adding ACL (or documenting how) to prevent other
4937 	 * users (on this or other systems) from reading it
4938 	 */
4939 
4940 
4941 	/* TODO: add sk_set_memalloc(inet) or similar */
4942 
4943 	if (cfile)
4944 		cfile->swapfile = true;
4945 	/*
4946 	 * TODO: Since file already open, we can't open with DENY_ALL here
4947 	 * but we could add call to grab a byte range lock to prevent others
4948 	 * from reading or writing the file
4949 	 */
4950 
4951 	return 0;
4952 }
4953 
cifs_swap_deactivate(struct file * file)4954 static void cifs_swap_deactivate(struct file *file)
4955 {
4956 	struct cifsFileInfo *cfile = file->private_data;
4957 
4958 	cifs_dbg(FYI, "swap deactivate\n");
4959 
4960 	/* TODO: undo sk_set_memalloc(inet) will eventually be needed */
4961 
4962 	if (cfile)
4963 		cfile->swapfile = false;
4964 
4965 	/* do we need to unpin (or unlock) the file */
4966 }
4967 
4968 const struct address_space_operations cifs_addr_ops = {
4969 	.readpage = cifs_readpage,
4970 	.readpages = cifs_readpages,
4971 	.writepage = cifs_writepage,
4972 	.writepages = cifs_writepages,
4973 	.write_begin = cifs_write_begin,
4974 	.write_end = cifs_write_end,
4975 	.set_page_dirty = __set_page_dirty_nobuffers,
4976 	.releasepage = cifs_release_page,
4977 	.direct_IO = cifs_direct_io,
4978 	.invalidatepage = cifs_invalidate_page,
4979 	.launder_page = cifs_launder_page,
4980 	/*
4981 	 * TODO: investigate and if useful we could add an cifs_migratePage
4982 	 * helper (under an CONFIG_MIGRATION) in the future, and also
4983 	 * investigate and add an is_dirty_writeback helper if needed
4984 	 */
4985 	.swap_activate = cifs_swap_activate,
4986 	.swap_deactivate = cifs_swap_deactivate,
4987 };
4988 
4989 /*
4990  * cifs_readpages requires the server to support a buffer large enough to
4991  * contain the header plus one complete page of data.  Otherwise, we need
4992  * to leave cifs_readpages out of the address space operations.
4993  */
4994 const struct address_space_operations cifs_addr_ops_smallbuf = {
4995 	.readpage = cifs_readpage,
4996 	.writepage = cifs_writepage,
4997 	.writepages = cifs_writepages,
4998 	.write_begin = cifs_write_begin,
4999 	.write_end = cifs_write_end,
5000 	.set_page_dirty = __set_page_dirty_nobuffers,
5001 	.releasepage = cifs_release_page,
5002 	.invalidatepage = cifs_invalidate_page,
5003 	.launder_page = cifs_launder_page,
5004 };
5005