• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *   fs/cifs/file.c
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  *   This library is free software; you can redistribute it and/or modify
11  *   it under the terms of the GNU Lesser General Public License as published
12  *   by the Free Software Foundation; either version 2.1 of the License, or
13  *   (at your option) any later version.
14  *
15  *   This library is distributed in the hope that it will be useful,
16  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
18  *   the GNU Lesser General Public License for more details.
19  *
20  *   You should have received a copy of the GNU Lesser General Public License
21  *   along with this library; if not, write to the Free Software
22  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23  */
24 #include <linux/fs.h>
25 #include <linux/backing-dev.h>
26 #include <linux/stat.h>
27 #include <linux/fcntl.h>
28 #include <linux/pagemap.h>
29 #include <linux/pagevec.h>
30 #include <linux/writeback.h>
31 #include <linux/task_io_accounting_ops.h>
32 #include <linux/delay.h>
33 #include <linux/mount.h>
34 #include <linux/slab.h>
35 #include <linux/swap.h>
36 #include <asm/div64.h>
37 #include "cifsfs.h"
38 #include "cifspdu.h"
39 #include "cifsglob.h"
40 #include "cifsproto.h"
41 #include "cifs_unicode.h"
42 #include "cifs_debug.h"
43 #include "cifs_fs_sb.h"
44 #include "fscache.h"
45 
46 
cifs_convert_flags(unsigned int flags)47 static inline int cifs_convert_flags(unsigned int flags)
48 {
49 	if ((flags & O_ACCMODE) == O_RDONLY)
50 		return GENERIC_READ;
51 	else if ((flags & O_ACCMODE) == O_WRONLY)
52 		return GENERIC_WRITE;
53 	else if ((flags & O_ACCMODE) == O_RDWR) {
54 		/* GENERIC_ALL is too much permission to request
55 		   can cause unnecessary access denied on create */
56 		/* return GENERIC_ALL; */
57 		return (GENERIC_READ | GENERIC_WRITE);
58 	}
59 
60 	return (READ_CONTROL | FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES |
61 		FILE_WRITE_EA | FILE_APPEND_DATA | FILE_WRITE_DATA |
62 		FILE_READ_DATA);
63 }
64 
cifs_posix_convert_flags(unsigned int flags)65 static u32 cifs_posix_convert_flags(unsigned int flags)
66 {
67 	u32 posix_flags = 0;
68 
69 	if ((flags & O_ACCMODE) == O_RDONLY)
70 		posix_flags = SMB_O_RDONLY;
71 	else if ((flags & O_ACCMODE) == O_WRONLY)
72 		posix_flags = SMB_O_WRONLY;
73 	else if ((flags & O_ACCMODE) == O_RDWR)
74 		posix_flags = SMB_O_RDWR;
75 
76 	if (flags & O_CREAT) {
77 		posix_flags |= SMB_O_CREAT;
78 		if (flags & O_EXCL)
79 			posix_flags |= SMB_O_EXCL;
80 	} else if (flags & O_EXCL)
81 		cifs_dbg(FYI, "Application %s pid %d has incorrectly set O_EXCL flag but not O_CREAT on file open. Ignoring O_EXCL\n",
82 			 current->comm, current->tgid);
83 
84 	if (flags & O_TRUNC)
85 		posix_flags |= SMB_O_TRUNC;
86 	/* be safe and imply O_SYNC for O_DSYNC */
87 	if (flags & O_DSYNC)
88 		posix_flags |= SMB_O_SYNC;
89 	if (flags & O_DIRECTORY)
90 		posix_flags |= SMB_O_DIRECTORY;
91 	if (flags & O_NOFOLLOW)
92 		posix_flags |= SMB_O_NOFOLLOW;
93 	if (flags & O_DIRECT)
94 		posix_flags |= SMB_O_DIRECT;
95 
96 	return posix_flags;
97 }
98 
cifs_get_disposition(unsigned int flags)99 static inline int cifs_get_disposition(unsigned int flags)
100 {
101 	if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
102 		return FILE_CREATE;
103 	else if ((flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
104 		return FILE_OVERWRITE_IF;
105 	else if ((flags & O_CREAT) == O_CREAT)
106 		return FILE_OPEN_IF;
107 	else if ((flags & O_TRUNC) == O_TRUNC)
108 		return FILE_OVERWRITE;
109 	else
110 		return FILE_OPEN;
111 }
112 
cifs_posix_open(char * full_path,struct inode ** pinode,struct super_block * sb,int mode,unsigned int f_flags,__u32 * poplock,__u16 * pnetfid,unsigned int xid)113 int cifs_posix_open(char *full_path, struct inode **pinode,
114 			struct super_block *sb, int mode, unsigned int f_flags,
115 			__u32 *poplock, __u16 *pnetfid, unsigned int xid)
116 {
117 	int rc;
118 	FILE_UNIX_BASIC_INFO *presp_data;
119 	__u32 posix_flags = 0;
120 	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
121 	struct cifs_fattr fattr;
122 	struct tcon_link *tlink;
123 	struct cifs_tcon *tcon;
124 
125 	cifs_dbg(FYI, "posix open %s\n", full_path);
126 
127 	presp_data = kzalloc(sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL);
128 	if (presp_data == NULL)
129 		return -ENOMEM;
130 
131 	tlink = cifs_sb_tlink(cifs_sb);
132 	if (IS_ERR(tlink)) {
133 		rc = PTR_ERR(tlink);
134 		goto posix_open_ret;
135 	}
136 
137 	tcon = tlink_tcon(tlink);
138 	mode &= ~current_umask();
139 
140 	posix_flags = cifs_posix_convert_flags(f_flags);
141 	rc = CIFSPOSIXCreate(xid, tcon, posix_flags, mode, pnetfid, presp_data,
142 			     poplock, full_path, cifs_sb->local_nls,
143 			     cifs_remap(cifs_sb));
144 	cifs_put_tlink(tlink);
145 
146 	if (rc)
147 		goto posix_open_ret;
148 
149 	if (presp_data->Type == cpu_to_le32(-1))
150 		goto posix_open_ret; /* open ok, caller does qpathinfo */
151 
152 	if (!pinode)
153 		goto posix_open_ret; /* caller does not need info */
154 
155 	cifs_unix_basic_to_fattr(&fattr, presp_data, cifs_sb);
156 
157 	/* get new inode and set it up */
158 	if (*pinode == NULL) {
159 		cifs_fill_uniqueid(sb, &fattr);
160 		*pinode = cifs_iget(sb, &fattr);
161 		if (!*pinode) {
162 			rc = -ENOMEM;
163 			goto posix_open_ret;
164 		}
165 	} else {
166 		cifs_revalidate_mapping(*pinode);
167 		cifs_fattr_to_inode(*pinode, &fattr);
168 	}
169 
170 posix_open_ret:
171 	kfree(presp_data);
172 	return rc;
173 }
174 
175 static int
cifs_nt_open(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)176 cifs_nt_open(char *full_path, struct inode *inode, struct cifs_sb_info *cifs_sb,
177 	     struct cifs_tcon *tcon, unsigned int f_flags, __u32 *oplock,
178 	     struct cifs_fid *fid, unsigned int xid)
179 {
180 	int rc;
181 	int desired_access;
182 	int disposition;
183 	int create_options = CREATE_NOT_DIR;
184 	FILE_ALL_INFO *buf;
185 	struct TCP_Server_Info *server = tcon->ses->server;
186 	struct cifs_open_parms oparms;
187 
188 	if (!server->ops->open)
189 		return -ENOSYS;
190 
191 	desired_access = cifs_convert_flags(f_flags);
192 
193 /*********************************************************************
194  *  open flag mapping table:
195  *
196  *	POSIX Flag            CIFS Disposition
197  *	----------            ----------------
198  *	O_CREAT               FILE_OPEN_IF
199  *	O_CREAT | O_EXCL      FILE_CREATE
200  *	O_CREAT | O_TRUNC     FILE_OVERWRITE_IF
201  *	O_TRUNC               FILE_OVERWRITE
202  *	none of the above     FILE_OPEN
203  *
204  *	Note that there is not a direct match between disposition
205  *	FILE_SUPERSEDE (ie create whether or not file exists although
206  *	O_CREAT | O_TRUNC is similar but truncates the existing
207  *	file rather than creating a new file as FILE_SUPERSEDE does
208  *	(which uses the attributes / metadata passed in on open call)
209  *?
210  *?  O_SYNC is a reasonable match to CIFS writethrough flag
211  *?  and the read write flags match reasonably.  O_LARGEFILE
212  *?  is irrelevant because largefile support is always used
213  *?  by this client. Flags O_APPEND, O_DIRECT, O_DIRECTORY,
214  *	 O_FASYNC, O_NOFOLLOW, O_NONBLOCK need further investigation
215  *********************************************************************/
216 
217 	disposition = cifs_get_disposition(f_flags);
218 
219 	/* BB pass O_SYNC flag through on file attributes .. BB */
220 
221 	buf = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
222 	if (!buf)
223 		return -ENOMEM;
224 
225 	if (backup_cred(cifs_sb))
226 		create_options |= CREATE_OPEN_BACKUP_INTENT;
227 
228 	/* O_SYNC also has bit for O_DSYNC so following check picks up either */
229 	if (f_flags & O_SYNC)
230 		create_options |= CREATE_WRITE_THROUGH;
231 
232 	if (f_flags & O_DIRECT)
233 		create_options |= CREATE_NO_BUFFER;
234 
235 	oparms.tcon = tcon;
236 	oparms.cifs_sb = cifs_sb;
237 	oparms.desired_access = desired_access;
238 	oparms.create_options = create_options;
239 	oparms.disposition = disposition;
240 	oparms.path = full_path;
241 	oparms.fid = fid;
242 	oparms.reconnect = false;
243 
244 	rc = server->ops->open(xid, &oparms, oplock, buf);
245 
246 	if (rc)
247 		goto out;
248 
249 	if (tcon->unix_ext)
250 		rc = cifs_get_inode_info_unix(&inode, full_path, inode->i_sb,
251 					      xid);
252 	else
253 		rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb,
254 					 xid, fid);
255 
256 	if (rc) {
257 		server->ops->close(xid, tcon, fid);
258 		if (rc == -ESTALE)
259 			rc = -EOPENSTALE;
260 	}
261 
262 out:
263 	kfree(buf);
264 	return rc;
265 }
266 
267 static bool
cifs_has_mand_locks(struct cifsInodeInfo * cinode)268 cifs_has_mand_locks(struct cifsInodeInfo *cinode)
269 {
270 	struct cifs_fid_locks *cur;
271 	bool has_locks = false;
272 
273 	down_read(&cinode->lock_sem);
274 	list_for_each_entry(cur, &cinode->llist, llist) {
275 		if (!list_empty(&cur->locks)) {
276 			has_locks = true;
277 			break;
278 		}
279 	}
280 	up_read(&cinode->lock_sem);
281 	return has_locks;
282 }
283 
284 void
cifs_down_write(struct rw_semaphore * sem)285 cifs_down_write(struct rw_semaphore *sem)
286 {
287 	while (!down_write_trylock(sem))
288 		msleep(10);
289 }
290 
291 struct cifsFileInfo *
cifs_new_fileinfo(struct cifs_fid * fid,struct file * file,struct tcon_link * tlink,__u32 oplock)292 cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
293 		  struct tcon_link *tlink, __u32 oplock)
294 {
295 	struct dentry *dentry = file->f_path.dentry;
296 	struct inode *inode = d_inode(dentry);
297 	struct cifsInodeInfo *cinode = CIFS_I(inode);
298 	struct cifsFileInfo *cfile;
299 	struct cifs_fid_locks *fdlocks;
300 	struct cifs_tcon *tcon = tlink_tcon(tlink);
301 	struct TCP_Server_Info *server = tcon->ses->server;
302 
303 	cfile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
304 	if (cfile == NULL)
305 		return cfile;
306 
307 	fdlocks = kzalloc(sizeof(struct cifs_fid_locks), GFP_KERNEL);
308 	if (!fdlocks) {
309 		kfree(cfile);
310 		return NULL;
311 	}
312 
313 	INIT_LIST_HEAD(&fdlocks->locks);
314 	fdlocks->cfile = cfile;
315 	cfile->llist = fdlocks;
316 
317 	cfile->count = 1;
318 	cfile->pid = current->tgid;
319 	cfile->uid = current_fsuid();
320 	cfile->dentry = dget(dentry);
321 	cfile->f_flags = file->f_flags;
322 	cfile->invalidHandle = false;
323 	cfile->tlink = cifs_get_tlink(tlink);
324 	INIT_WORK(&cfile->oplock_break, cifs_oplock_break);
325 	mutex_init(&cfile->fh_mutex);
326 	spin_lock_init(&cfile->file_info_lock);
327 
328 	cifs_sb_active(inode->i_sb);
329 
330 	/*
331 	 * If the server returned a read oplock and we have mandatory brlocks,
332 	 * set oplock level to None.
333 	 */
334 	if (server->ops->is_read_op(oplock) && cifs_has_mand_locks(cinode)) {
335 		cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n");
336 		oplock = 0;
337 	}
338 
339 	cifs_down_write(&cinode->lock_sem);
340 	list_add(&fdlocks->llist, &cinode->llist);
341 	up_write(&cinode->lock_sem);
342 
343 	spin_lock(&tcon->open_file_lock);
344 	if (fid->pending_open->oplock != CIFS_OPLOCK_NO_CHANGE && oplock)
345 		oplock = fid->pending_open->oplock;
346 	list_del(&fid->pending_open->olist);
347 
348 	fid->purge_cache = false;
349 	server->ops->set_fid(cfile, fid, oplock);
350 
351 	list_add(&cfile->tlist, &tcon->openFileList);
352 
353 	/* if readable file instance put first in list*/
354 	if (file->f_mode & FMODE_READ)
355 		list_add(&cfile->flist, &cinode->openFileList);
356 	else
357 		list_add_tail(&cfile->flist, &cinode->openFileList);
358 	spin_unlock(&tcon->open_file_lock);
359 
360 	if (fid->purge_cache)
361 		cifs_zap_mapping(inode);
362 
363 	file->private_data = cfile;
364 	return cfile;
365 }
366 
367 struct cifsFileInfo *
cifsFileInfo_get(struct cifsFileInfo * cifs_file)368 cifsFileInfo_get(struct cifsFileInfo *cifs_file)
369 {
370 	spin_lock(&cifs_file->file_info_lock);
371 	cifsFileInfo_get_locked(cifs_file);
372 	spin_unlock(&cifs_file->file_info_lock);
373 	return cifs_file;
374 }
375 
376 /*
377  * Release a reference on the file private data. This may involve closing
378  * the filehandle out on the server. Must be called without holding
379  * tcon->open_file_lock and cifs_file->file_info_lock.
380  */
cifsFileInfo_put(struct cifsFileInfo * cifs_file)381 void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
382 {
383 	struct inode *inode = d_inode(cifs_file->dentry);
384 	struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
385 	struct TCP_Server_Info *server = tcon->ses->server;
386 	struct cifsInodeInfo *cifsi = CIFS_I(inode);
387 	struct super_block *sb = inode->i_sb;
388 	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
389 	struct cifsLockInfo *li, *tmp;
390 	struct cifs_fid fid;
391 	struct cifs_pending_open open;
392 	bool oplock_break_cancelled;
393 
394 	spin_lock(&tcon->open_file_lock);
395 
396 	spin_lock(&cifs_file->file_info_lock);
397 	if (--cifs_file->count > 0) {
398 		spin_unlock(&cifs_file->file_info_lock);
399 		spin_unlock(&tcon->open_file_lock);
400 		return;
401 	}
402 	spin_unlock(&cifs_file->file_info_lock);
403 
404 	if (server->ops->get_lease_key)
405 		server->ops->get_lease_key(inode, &fid);
406 
407 	/* store open in pending opens to make sure we don't miss lease break */
408 	cifs_add_pending_open_locked(&fid, cifs_file->tlink, &open);
409 
410 	/* remove it from the lists */
411 	list_del(&cifs_file->flist);
412 	list_del(&cifs_file->tlist);
413 
414 	if (list_empty(&cifsi->openFileList)) {
415 		cifs_dbg(FYI, "closing last open instance for inode %p\n",
416 			 d_inode(cifs_file->dentry));
417 		/*
418 		 * In strict cache mode we need invalidate mapping on the last
419 		 * close  because it may cause a error when we open this file
420 		 * again and get at least level II oplock.
421 		 */
422 		if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO)
423 			set_bit(CIFS_INO_INVALID_MAPPING, &cifsi->flags);
424 		cifs_set_oplock_level(cifsi, 0);
425 	}
426 
427 	spin_unlock(&tcon->open_file_lock);
428 
429 	oplock_break_cancelled = cancel_work_sync(&cifs_file->oplock_break);
430 
431 	if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
432 		struct TCP_Server_Info *server = tcon->ses->server;
433 		unsigned int xid;
434 
435 		xid = get_xid();
436 		if (server->ops->close)
437 			server->ops->close(xid, tcon, &cifs_file->fid);
438 		_free_xid(xid);
439 	}
440 
441 	if (oplock_break_cancelled)
442 		cifs_done_oplock_break(cifsi);
443 
444 	cifs_del_pending_open(&open);
445 
446 	/*
447 	 * Delete any outstanding lock records. We'll lose them when the file
448 	 * is closed anyway.
449 	 */
450 	cifs_down_write(&cifsi->lock_sem);
451 	list_for_each_entry_safe(li, tmp, &cifs_file->llist->locks, llist) {
452 		list_del(&li->llist);
453 		cifs_del_lock_waiters(li);
454 		kfree(li);
455 	}
456 	list_del(&cifs_file->llist->llist);
457 	kfree(cifs_file->llist);
458 	up_write(&cifsi->lock_sem);
459 
460 	cifs_put_tlink(cifs_file->tlink);
461 	dput(cifs_file->dentry);
462 	cifs_sb_deactive(sb);
463 	kfree(cifs_file);
464 }
465 
cifs_open(struct inode * inode,struct file * file)466 int cifs_open(struct inode *inode, struct file *file)
467 
468 {
469 	int rc = -EACCES;
470 	unsigned int xid;
471 	__u32 oplock;
472 	struct cifs_sb_info *cifs_sb;
473 	struct TCP_Server_Info *server;
474 	struct cifs_tcon *tcon;
475 	struct tcon_link *tlink;
476 	struct cifsFileInfo *cfile = NULL;
477 	char *full_path = NULL;
478 	bool posix_open_ok = false;
479 	struct cifs_fid fid;
480 	struct cifs_pending_open open;
481 
482 	xid = get_xid();
483 
484 	cifs_sb = CIFS_SB(inode->i_sb);
485 	tlink = cifs_sb_tlink(cifs_sb);
486 	if (IS_ERR(tlink)) {
487 		free_xid(xid);
488 		return PTR_ERR(tlink);
489 	}
490 	tcon = tlink_tcon(tlink);
491 	server = tcon->ses->server;
492 
493 	full_path = build_path_from_dentry(file->f_path.dentry);
494 	if (full_path == NULL) {
495 		rc = -ENOMEM;
496 		goto out;
497 	}
498 
499 	cifs_dbg(FYI, "inode = 0x%p file flags are 0x%x for %s\n",
500 		 inode, file->f_flags, full_path);
501 
502 	if (file->f_flags & O_DIRECT &&
503 	    cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO) {
504 		if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
505 			file->f_op = &cifs_file_direct_nobrl_ops;
506 		else
507 			file->f_op = &cifs_file_direct_ops;
508 	}
509 
510 	if (server->oplocks)
511 		oplock = REQ_OPLOCK;
512 	else
513 		oplock = 0;
514 
515 	if (!tcon->broken_posix_open && tcon->unix_ext &&
516 	    cap_unix(tcon->ses) && (CIFS_UNIX_POSIX_PATH_OPS_CAP &
517 				le64_to_cpu(tcon->fsUnixInfo.Capability))) {
518 		/* can not refresh inode info since size could be stale */
519 		rc = cifs_posix_open(full_path, &inode, inode->i_sb,
520 				cifs_sb->mnt_file_mode /* ignored */,
521 				file->f_flags, &oplock, &fid.netfid, xid);
522 		if (rc == 0) {
523 			cifs_dbg(FYI, "posix open succeeded\n");
524 			posix_open_ok = true;
525 		} else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) {
526 			if (tcon->ses->serverNOS)
527 				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",
528 					 tcon->ses->serverName,
529 					 tcon->ses->serverNOS);
530 			tcon->broken_posix_open = true;
531 		} else if ((rc != -EIO) && (rc != -EREMOTE) &&
532 			 (rc != -EOPNOTSUPP)) /* path not found or net err */
533 			goto out;
534 		/*
535 		 * Else fallthrough to retry open the old way on network i/o
536 		 * or DFS errors.
537 		 */
538 	}
539 
540 	if (server->ops->get_lease_key)
541 		server->ops->get_lease_key(inode, &fid);
542 
543 	cifs_add_pending_open(&fid, tlink, &open);
544 
545 	if (!posix_open_ok) {
546 		if (server->ops->get_lease_key)
547 			server->ops->get_lease_key(inode, &fid);
548 
549 		rc = cifs_nt_open(full_path, inode, cifs_sb, tcon,
550 				  file->f_flags, &oplock, &fid, xid);
551 		if (rc) {
552 			cifs_del_pending_open(&open);
553 			goto out;
554 		}
555 	}
556 
557 	cfile = cifs_new_fileinfo(&fid, file, tlink, oplock);
558 	if (cfile == NULL) {
559 		if (server->ops->close)
560 			server->ops->close(xid, tcon, &fid);
561 		cifs_del_pending_open(&open);
562 		rc = -ENOMEM;
563 		goto out;
564 	}
565 
566 	cifs_fscache_set_inode_cookie(inode, file);
567 
568 	if ((oplock & CIFS_CREATE_ACTION) && !posix_open_ok && tcon->unix_ext) {
569 		/*
570 		 * Time to set mode which we can not set earlier due to
571 		 * problems creating new read-only files.
572 		 */
573 		struct cifs_unix_set_info_args args = {
574 			.mode	= inode->i_mode,
575 			.uid	= INVALID_UID, /* no change */
576 			.gid	= INVALID_GID, /* no change */
577 			.ctime	= NO_CHANGE_64,
578 			.atime	= NO_CHANGE_64,
579 			.mtime	= NO_CHANGE_64,
580 			.device	= 0,
581 		};
582 		CIFSSMBUnixSetFileInfo(xid, tcon, &args, fid.netfid,
583 				       cfile->pid);
584 	}
585 
586 out:
587 	kfree(full_path);
588 	free_xid(xid);
589 	cifs_put_tlink(tlink);
590 	return rc;
591 }
592 
593 static int cifs_push_posix_locks(struct cifsFileInfo *cfile);
594 
595 /*
596  * Try to reacquire byte range locks that were released when session
597  * to server was lost.
598  */
599 static int
cifs_relock_file(struct cifsFileInfo * cfile)600 cifs_relock_file(struct cifsFileInfo *cfile)
601 {
602 	struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
603 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
604 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
605 	int rc = 0;
606 
607 	down_read_nested(&cinode->lock_sem, SINGLE_DEPTH_NESTING);
608 	if (cinode->can_cache_brlcks) {
609 		/* can cache locks - no need to relock */
610 		up_read(&cinode->lock_sem);
611 		return rc;
612 	}
613 
614 	if (cap_unix(tcon->ses) &&
615 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
616 	    ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
617 		rc = cifs_push_posix_locks(cfile);
618 	else
619 		rc = tcon->ses->server->ops->push_mand_locks(cfile);
620 
621 	up_read(&cinode->lock_sem);
622 	return rc;
623 }
624 
625 static int
cifs_reopen_file(struct cifsFileInfo * cfile,bool can_flush)626 cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush)
627 {
628 	int rc = -EACCES;
629 	unsigned int xid;
630 	__u32 oplock;
631 	struct cifs_sb_info *cifs_sb;
632 	struct cifs_tcon *tcon;
633 	struct TCP_Server_Info *server;
634 	struct cifsInodeInfo *cinode;
635 	struct inode *inode;
636 	char *full_path = NULL;
637 	int desired_access;
638 	int disposition = FILE_OPEN;
639 	int create_options = CREATE_NOT_DIR;
640 	struct cifs_open_parms oparms;
641 
642 	xid = get_xid();
643 	mutex_lock(&cfile->fh_mutex);
644 	if (!cfile->invalidHandle) {
645 		mutex_unlock(&cfile->fh_mutex);
646 		rc = 0;
647 		free_xid(xid);
648 		return rc;
649 	}
650 
651 	inode = d_inode(cfile->dentry);
652 	cifs_sb = CIFS_SB(inode->i_sb);
653 	tcon = tlink_tcon(cfile->tlink);
654 	server = tcon->ses->server;
655 
656 	/*
657 	 * Can not grab rename sem here because various ops, including those
658 	 * that already have the rename sem can end up causing writepage to get
659 	 * called and if the server was down that means we end up here, and we
660 	 * can never tell if the caller already has the rename_sem.
661 	 */
662 	full_path = build_path_from_dentry(cfile->dentry);
663 	if (full_path == NULL) {
664 		rc = -ENOMEM;
665 		mutex_unlock(&cfile->fh_mutex);
666 		free_xid(xid);
667 		return rc;
668 	}
669 
670 	cifs_dbg(FYI, "inode = 0x%p file flags 0x%x for %s\n",
671 		 inode, cfile->f_flags, full_path);
672 
673 	if (tcon->ses->server->oplocks)
674 		oplock = REQ_OPLOCK;
675 	else
676 		oplock = 0;
677 
678 	if (tcon->unix_ext && cap_unix(tcon->ses) &&
679 	    (CIFS_UNIX_POSIX_PATH_OPS_CAP &
680 				le64_to_cpu(tcon->fsUnixInfo.Capability))) {
681 		/*
682 		 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the
683 		 * original open. Must mask them off for a reopen.
684 		 */
685 		unsigned int oflags = cfile->f_flags &
686 						~(O_CREAT | O_EXCL | O_TRUNC);
687 
688 		rc = cifs_posix_open(full_path, NULL, inode->i_sb,
689 				     cifs_sb->mnt_file_mode /* ignored */,
690 				     oflags, &oplock, &cfile->fid.netfid, xid);
691 		if (rc == 0) {
692 			cifs_dbg(FYI, "posix reopen succeeded\n");
693 			oparms.reconnect = true;
694 			goto reopen_success;
695 		}
696 		/*
697 		 * fallthrough to retry open the old way on errors, especially
698 		 * in the reconnect path it is important to retry hard
699 		 */
700 	}
701 
702 	desired_access = cifs_convert_flags(cfile->f_flags);
703 
704 	if (backup_cred(cifs_sb))
705 		create_options |= CREATE_OPEN_BACKUP_INTENT;
706 
707 	/* O_SYNC also has bit for O_DSYNC so following check picks up either */
708 	if (cfile->f_flags & O_SYNC)
709 		create_options |= CREATE_WRITE_THROUGH;
710 
711 	if (cfile->f_flags & O_DIRECT)
712 		create_options |= CREATE_NO_BUFFER;
713 
714 	if (server->ops->get_lease_key)
715 		server->ops->get_lease_key(inode, &cfile->fid);
716 
717 	oparms.tcon = tcon;
718 	oparms.cifs_sb = cifs_sb;
719 	oparms.desired_access = desired_access;
720 	oparms.create_options = create_options;
721 	oparms.disposition = disposition;
722 	oparms.path = full_path;
723 	oparms.fid = &cfile->fid;
724 	oparms.reconnect = true;
725 
726 	/*
727 	 * Can not refresh inode by passing in file_info buf to be returned by
728 	 * ops->open and then calling get_inode_info with returned buf since
729 	 * file might have write behind data that needs to be flushed and server
730 	 * version of file size can be stale. If we knew for sure that inode was
731 	 * not dirty locally we could do this.
732 	 */
733 	rc = server->ops->open(xid, &oparms, &oplock, NULL);
734 	if (rc == -ENOENT && oparms.reconnect == false) {
735 		/* durable handle timeout is expired - open the file again */
736 		rc = server->ops->open(xid, &oparms, &oplock, NULL);
737 		/* indicate that we need to relock the file */
738 		oparms.reconnect = true;
739 	}
740 
741 	if (rc) {
742 		mutex_unlock(&cfile->fh_mutex);
743 		cifs_dbg(FYI, "cifs_reopen returned 0x%x\n", rc);
744 		cifs_dbg(FYI, "oplock: %d\n", oplock);
745 		goto reopen_error_exit;
746 	}
747 
748 reopen_success:
749 	cfile->invalidHandle = false;
750 	mutex_unlock(&cfile->fh_mutex);
751 	cinode = CIFS_I(inode);
752 
753 	if (can_flush) {
754 		rc = filemap_write_and_wait(inode->i_mapping);
755 		mapping_set_error(inode->i_mapping, rc);
756 
757 		if (tcon->unix_ext)
758 			rc = cifs_get_inode_info_unix(&inode, full_path,
759 						      inode->i_sb, xid);
760 		else
761 			rc = cifs_get_inode_info(&inode, full_path, NULL,
762 						 inode->i_sb, xid, NULL);
763 	}
764 	/*
765 	 * Else we are writing out data to server already and could deadlock if
766 	 * we tried to flush data, and since we do not know if we have data that
767 	 * would invalidate the current end of file on the server we can not go
768 	 * to the server to get the new inode info.
769 	 */
770 
771 	server->ops->set_fid(cfile, &cfile->fid, oplock);
772 	if (oparms.reconnect)
773 		cifs_relock_file(cfile);
774 
775 reopen_error_exit:
776 	kfree(full_path);
777 	free_xid(xid);
778 	return rc;
779 }
780 
cifs_close(struct inode * inode,struct file * file)781 int cifs_close(struct inode *inode, struct file *file)
782 {
783 	if (file->private_data != NULL) {
784 		cifsFileInfo_put(file->private_data);
785 		file->private_data = NULL;
786 	}
787 
788 	/* return code from the ->release op is always ignored */
789 	return 0;
790 }
791 
cifs_closedir(struct inode * inode,struct file * file)792 int cifs_closedir(struct inode *inode, struct file *file)
793 {
794 	int rc = 0;
795 	unsigned int xid;
796 	struct cifsFileInfo *cfile = file->private_data;
797 	struct cifs_tcon *tcon;
798 	struct TCP_Server_Info *server;
799 	char *buf;
800 
801 	cifs_dbg(FYI, "Closedir inode = 0x%p\n", inode);
802 
803 	if (cfile == NULL)
804 		return rc;
805 
806 	xid = get_xid();
807 	tcon = tlink_tcon(cfile->tlink);
808 	server = tcon->ses->server;
809 
810 	cifs_dbg(FYI, "Freeing private data in close dir\n");
811 	spin_lock(&cfile->file_info_lock);
812 	if (server->ops->dir_needs_close(cfile)) {
813 		cfile->invalidHandle = true;
814 		spin_unlock(&cfile->file_info_lock);
815 		if (server->ops->close_dir)
816 			rc = server->ops->close_dir(xid, tcon, &cfile->fid);
817 		else
818 			rc = -ENOSYS;
819 		cifs_dbg(FYI, "Closing uncompleted readdir with rc %d\n", rc);
820 		/* not much we can do if it fails anyway, ignore rc */
821 		rc = 0;
822 	} else
823 		spin_unlock(&cfile->file_info_lock);
824 
825 	buf = cfile->srch_inf.ntwrk_buf_start;
826 	if (buf) {
827 		cifs_dbg(FYI, "closedir free smb buf in srch struct\n");
828 		cfile->srch_inf.ntwrk_buf_start = NULL;
829 		if (cfile->srch_inf.smallBuf)
830 			cifs_small_buf_release(buf);
831 		else
832 			cifs_buf_release(buf);
833 	}
834 
835 	cifs_put_tlink(cfile->tlink);
836 	kfree(file->private_data);
837 	file->private_data = NULL;
838 	/* BB can we lock the filestruct while this is going on? */
839 	free_xid(xid);
840 	return rc;
841 }
842 
843 static struct cifsLockInfo *
cifs_lock_init(__u64 offset,__u64 length,__u8 type)844 cifs_lock_init(__u64 offset, __u64 length, __u8 type)
845 {
846 	struct cifsLockInfo *lock =
847 		kmalloc(sizeof(struct cifsLockInfo), GFP_KERNEL);
848 	if (!lock)
849 		return lock;
850 	lock->offset = offset;
851 	lock->length = length;
852 	lock->type = type;
853 	lock->pid = current->tgid;
854 	INIT_LIST_HEAD(&lock->blist);
855 	init_waitqueue_head(&lock->block_q);
856 	return lock;
857 }
858 
859 void
cifs_del_lock_waiters(struct cifsLockInfo * lock)860 cifs_del_lock_waiters(struct cifsLockInfo *lock)
861 {
862 	struct cifsLockInfo *li, *tmp;
863 	list_for_each_entry_safe(li, tmp, &lock->blist, blist) {
864 		list_del_init(&li->blist);
865 		wake_up(&li->block_q);
866 	}
867 }
868 
869 #define CIFS_LOCK_OP	0
870 #define CIFS_READ_OP	1
871 #define CIFS_WRITE_OP	2
872 
873 /* @rw_check : 0 - no op, 1 - read, 2 - write */
874 static bool
cifs_find_fid_lock_conflict(struct cifs_fid_locks * fdlocks,__u64 offset,__u64 length,__u8 type,struct cifsFileInfo * cfile,struct cifsLockInfo ** conf_lock,int rw_check)875 cifs_find_fid_lock_conflict(struct cifs_fid_locks *fdlocks, __u64 offset,
876 			    __u64 length, __u8 type, struct cifsFileInfo *cfile,
877 			    struct cifsLockInfo **conf_lock, int rw_check)
878 {
879 	struct cifsLockInfo *li;
880 	struct cifsFileInfo *cur_cfile = fdlocks->cfile;
881 	struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
882 
883 	list_for_each_entry(li, &fdlocks->locks, llist) {
884 		if (offset + length <= li->offset ||
885 		    offset >= li->offset + li->length)
886 			continue;
887 		if (rw_check != CIFS_LOCK_OP && current->tgid == li->pid &&
888 		    server->ops->compare_fids(cfile, cur_cfile)) {
889 			/* shared lock prevents write op through the same fid */
890 			if (!(li->type & server->vals->shared_lock_type) ||
891 			    rw_check != CIFS_WRITE_OP)
892 				continue;
893 		}
894 		if ((type & server->vals->shared_lock_type) &&
895 		    ((server->ops->compare_fids(cfile, cur_cfile) &&
896 		     current->tgid == li->pid) || type == li->type))
897 			continue;
898 		if (conf_lock)
899 			*conf_lock = li;
900 		return true;
901 	}
902 	return false;
903 }
904 
905 bool
cifs_find_lock_conflict(struct cifsFileInfo * cfile,__u64 offset,__u64 length,__u8 type,struct cifsLockInfo ** conf_lock,int rw_check)906 cifs_find_lock_conflict(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
907 			__u8 type, struct cifsLockInfo **conf_lock,
908 			int rw_check)
909 {
910 	bool rc = false;
911 	struct cifs_fid_locks *cur;
912 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
913 
914 	list_for_each_entry(cur, &cinode->llist, llist) {
915 		rc = cifs_find_fid_lock_conflict(cur, offset, length, type,
916 						 cfile, conf_lock, rw_check);
917 		if (rc)
918 			break;
919 	}
920 
921 	return rc;
922 }
923 
924 /*
925  * Check if there is another lock that prevents us to set the lock (mandatory
926  * style). If such a lock exists, update the flock structure with its
927  * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
928  * or leave it the same if we can't. Returns 0 if we don't need to request to
929  * the server or 1 otherwise.
930  */
931 static int
cifs_lock_test(struct cifsFileInfo * cfile,__u64 offset,__u64 length,__u8 type,struct file_lock * flock)932 cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
933 	       __u8 type, struct file_lock *flock)
934 {
935 	int rc = 0;
936 	struct cifsLockInfo *conf_lock;
937 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
938 	struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
939 	bool exist;
940 
941 	down_read(&cinode->lock_sem);
942 
943 	exist = cifs_find_lock_conflict(cfile, offset, length, type,
944 					&conf_lock, CIFS_LOCK_OP);
945 	if (exist) {
946 		flock->fl_start = conf_lock->offset;
947 		flock->fl_end = conf_lock->offset + conf_lock->length - 1;
948 		flock->fl_pid = conf_lock->pid;
949 		if (conf_lock->type & server->vals->shared_lock_type)
950 			flock->fl_type = F_RDLCK;
951 		else
952 			flock->fl_type = F_WRLCK;
953 	} else if (!cinode->can_cache_brlcks)
954 		rc = 1;
955 	else
956 		flock->fl_type = F_UNLCK;
957 
958 	up_read(&cinode->lock_sem);
959 	return rc;
960 }
961 
962 static void
cifs_lock_add(struct cifsFileInfo * cfile,struct cifsLockInfo * lock)963 cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock)
964 {
965 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
966 	cifs_down_write(&cinode->lock_sem);
967 	list_add_tail(&lock->llist, &cfile->llist->locks);
968 	up_write(&cinode->lock_sem);
969 }
970 
971 /*
972  * Set the byte-range lock (mandatory style). Returns:
973  * 1) 0, if we set the lock and don't need to request to the server;
974  * 2) 1, if no locks prevent us but we need to request to the server;
975  * 3) -EACCESS, if there is a lock that prevents us and wait is false.
976  */
977 static int
cifs_lock_add_if(struct cifsFileInfo * cfile,struct cifsLockInfo * lock,bool wait)978 cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock,
979 		 bool wait)
980 {
981 	struct cifsLockInfo *conf_lock;
982 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
983 	bool exist;
984 	int rc = 0;
985 
986 try_again:
987 	exist = false;
988 	cifs_down_write(&cinode->lock_sem);
989 
990 	exist = cifs_find_lock_conflict(cfile, lock->offset, lock->length,
991 					lock->type, &conf_lock, CIFS_LOCK_OP);
992 	if (!exist && cinode->can_cache_brlcks) {
993 		list_add_tail(&lock->llist, &cfile->llist->locks);
994 		up_write(&cinode->lock_sem);
995 		return rc;
996 	}
997 
998 	if (!exist)
999 		rc = 1;
1000 	else if (!wait)
1001 		rc = -EACCES;
1002 	else {
1003 		list_add_tail(&lock->blist, &conf_lock->blist);
1004 		up_write(&cinode->lock_sem);
1005 		rc = wait_event_interruptible(lock->block_q,
1006 					(lock->blist.prev == &lock->blist) &&
1007 					(lock->blist.next == &lock->blist));
1008 		if (!rc)
1009 			goto try_again;
1010 		cifs_down_write(&cinode->lock_sem);
1011 		list_del_init(&lock->blist);
1012 	}
1013 
1014 	up_write(&cinode->lock_sem);
1015 	return rc;
1016 }
1017 
1018 /*
1019  * Check if there is another lock that prevents us to set the lock (posix
1020  * style). If such a lock exists, update the flock structure with its
1021  * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
1022  * or leave it the same if we can't. Returns 0 if we don't need to request to
1023  * the server or 1 otherwise.
1024  */
1025 static int
cifs_posix_lock_test(struct file * file,struct file_lock * flock)1026 cifs_posix_lock_test(struct file *file, struct file_lock *flock)
1027 {
1028 	int rc = 0;
1029 	struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1030 	unsigned char saved_type = flock->fl_type;
1031 
1032 	if ((flock->fl_flags & FL_POSIX) == 0)
1033 		return 1;
1034 
1035 	down_read(&cinode->lock_sem);
1036 	posix_test_lock(file, flock);
1037 
1038 	if (flock->fl_type == F_UNLCK && !cinode->can_cache_brlcks) {
1039 		flock->fl_type = saved_type;
1040 		rc = 1;
1041 	}
1042 
1043 	up_read(&cinode->lock_sem);
1044 	return rc;
1045 }
1046 
1047 /*
1048  * Set the byte-range lock (posix style). Returns:
1049  * 1) 0, if we set the lock and don't need to request to the server;
1050  * 2) 1, if we need to request to the server;
1051  * 3) <0, if the error occurs while setting the lock.
1052  */
1053 static int
cifs_posix_lock_set(struct file * file,struct file_lock * flock)1054 cifs_posix_lock_set(struct file *file, struct file_lock *flock)
1055 {
1056 	struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1057 	int rc = 1;
1058 
1059 	if ((flock->fl_flags & FL_POSIX) == 0)
1060 		return rc;
1061 
1062 try_again:
1063 	cifs_down_write(&cinode->lock_sem);
1064 	if (!cinode->can_cache_brlcks) {
1065 		up_write(&cinode->lock_sem);
1066 		return rc;
1067 	}
1068 
1069 	rc = posix_lock_file(file, flock, NULL);
1070 	up_write(&cinode->lock_sem);
1071 	if (rc == FILE_LOCK_DEFERRED) {
1072 		rc = wait_event_interruptible(flock->fl_wait, !flock->fl_next);
1073 		if (!rc)
1074 			goto try_again;
1075 		posix_unblock_lock(flock);
1076 	}
1077 	return rc;
1078 }
1079 
1080 int
cifs_push_mandatory_locks(struct cifsFileInfo * cfile)1081 cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
1082 {
1083 	unsigned int xid;
1084 	int rc = 0, stored_rc;
1085 	struct cifsLockInfo *li, *tmp;
1086 	struct cifs_tcon *tcon;
1087 	unsigned int num, max_num, max_buf;
1088 	LOCKING_ANDX_RANGE *buf, *cur;
1089 	int types[] = {LOCKING_ANDX_LARGE_FILES,
1090 		       LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES};
1091 	int i;
1092 
1093 	xid = get_xid();
1094 	tcon = tlink_tcon(cfile->tlink);
1095 
1096 	/*
1097 	 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1098 	 * and check it before using.
1099 	 */
1100 	max_buf = tcon->ses->server->maxBuf;
1101 	if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) {
1102 		free_xid(xid);
1103 		return -EINVAL;
1104 	}
1105 
1106 	BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
1107 		     PAGE_SIZE);
1108 	max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
1109 			PAGE_SIZE);
1110 	max_num = (max_buf - sizeof(struct smb_hdr)) /
1111 						sizeof(LOCKING_ANDX_RANGE);
1112 	buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1113 	if (!buf) {
1114 		free_xid(xid);
1115 		return -ENOMEM;
1116 	}
1117 
1118 	for (i = 0; i < 2; i++) {
1119 		cur = buf;
1120 		num = 0;
1121 		list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1122 			if (li->type != types[i])
1123 				continue;
1124 			cur->Pid = cpu_to_le16(li->pid);
1125 			cur->LengthLow = cpu_to_le32((u32)li->length);
1126 			cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1127 			cur->OffsetLow = cpu_to_le32((u32)li->offset);
1128 			cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1129 			if (++num == max_num) {
1130 				stored_rc = cifs_lockv(xid, tcon,
1131 						       cfile->fid.netfid,
1132 						       (__u8)li->type, 0, num,
1133 						       buf);
1134 				if (stored_rc)
1135 					rc = stored_rc;
1136 				cur = buf;
1137 				num = 0;
1138 			} else
1139 				cur++;
1140 		}
1141 
1142 		if (num) {
1143 			stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1144 					       (__u8)types[i], 0, num, buf);
1145 			if (stored_rc)
1146 				rc = stored_rc;
1147 		}
1148 	}
1149 
1150 	kfree(buf);
1151 	free_xid(xid);
1152 	return rc;
1153 }
1154 
1155 struct lock_to_push {
1156 	struct list_head llist;
1157 	__u64 offset;
1158 	__u64 length;
1159 	__u32 pid;
1160 	__u16 netfid;
1161 	__u8 type;
1162 };
1163 
1164 static int
cifs_push_posix_locks(struct cifsFileInfo * cfile)1165 cifs_push_posix_locks(struct cifsFileInfo *cfile)
1166 {
1167 	struct inode *inode = d_inode(cfile->dentry);
1168 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1169 	struct file_lock *flock;
1170 	struct file_lock_context *flctx = inode->i_flctx;
1171 	unsigned int count = 0, i;
1172 	int rc = 0, xid, type;
1173 	struct list_head locks_to_send, *el;
1174 	struct lock_to_push *lck, *tmp;
1175 	__u64 length;
1176 
1177 	xid = get_xid();
1178 
1179 	if (!flctx)
1180 		goto out;
1181 
1182 	spin_lock(&flctx->flc_lock);
1183 	list_for_each(el, &flctx->flc_posix) {
1184 		count++;
1185 	}
1186 	spin_unlock(&flctx->flc_lock);
1187 
1188 	INIT_LIST_HEAD(&locks_to_send);
1189 
1190 	/*
1191 	 * Allocating count locks is enough because no FL_POSIX locks can be
1192 	 * added to the list while we are holding cinode->lock_sem that
1193 	 * protects locking operations of this inode.
1194 	 */
1195 	for (i = 0; i < count; i++) {
1196 		lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL);
1197 		if (!lck) {
1198 			rc = -ENOMEM;
1199 			goto err_out;
1200 		}
1201 		list_add_tail(&lck->llist, &locks_to_send);
1202 	}
1203 
1204 	el = locks_to_send.next;
1205 	spin_lock(&flctx->flc_lock);
1206 	list_for_each_entry(flock, &flctx->flc_posix, fl_list) {
1207 		if (el == &locks_to_send) {
1208 			/*
1209 			 * The list ended. We don't have enough allocated
1210 			 * structures - something is really wrong.
1211 			 */
1212 			cifs_dbg(VFS, "Can't push all brlocks!\n");
1213 			break;
1214 		}
1215 		length = 1 + flock->fl_end - flock->fl_start;
1216 		if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK)
1217 			type = CIFS_RDLCK;
1218 		else
1219 			type = CIFS_WRLCK;
1220 		lck = list_entry(el, struct lock_to_push, llist);
1221 		lck->pid = flock->fl_pid;
1222 		lck->netfid = cfile->fid.netfid;
1223 		lck->length = length;
1224 		lck->type = type;
1225 		lck->offset = flock->fl_start;
1226 	}
1227 	spin_unlock(&flctx->flc_lock);
1228 
1229 	list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1230 		int stored_rc;
1231 
1232 		stored_rc = CIFSSMBPosixLock(xid, tcon, lck->netfid, lck->pid,
1233 					     lck->offset, lck->length, NULL,
1234 					     lck->type, 0);
1235 		if (stored_rc)
1236 			rc = stored_rc;
1237 		list_del(&lck->llist);
1238 		kfree(lck);
1239 	}
1240 
1241 out:
1242 	free_xid(xid);
1243 	return rc;
1244 err_out:
1245 	list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1246 		list_del(&lck->llist);
1247 		kfree(lck);
1248 	}
1249 	goto out;
1250 }
1251 
1252 static int
cifs_push_locks(struct cifsFileInfo * cfile)1253 cifs_push_locks(struct cifsFileInfo *cfile)
1254 {
1255 	struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1256 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1257 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1258 	int rc = 0;
1259 
1260 	/* we are going to update can_cache_brlcks here - need a write access */
1261 	cifs_down_write(&cinode->lock_sem);
1262 	if (!cinode->can_cache_brlcks) {
1263 		up_write(&cinode->lock_sem);
1264 		return rc;
1265 	}
1266 
1267 	if (cap_unix(tcon->ses) &&
1268 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1269 	    ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1270 		rc = cifs_push_posix_locks(cfile);
1271 	else
1272 		rc = tcon->ses->server->ops->push_mand_locks(cfile);
1273 
1274 	cinode->can_cache_brlcks = false;
1275 	up_write(&cinode->lock_sem);
1276 	return rc;
1277 }
1278 
1279 static void
cifs_read_flock(struct file_lock * flock,__u32 * type,int * lock,int * unlock,bool * wait_flag,struct TCP_Server_Info * server)1280 cifs_read_flock(struct file_lock *flock, __u32 *type, int *lock, int *unlock,
1281 		bool *wait_flag, struct TCP_Server_Info *server)
1282 {
1283 	if (flock->fl_flags & FL_POSIX)
1284 		cifs_dbg(FYI, "Posix\n");
1285 	if (flock->fl_flags & FL_FLOCK)
1286 		cifs_dbg(FYI, "Flock\n");
1287 	if (flock->fl_flags & FL_SLEEP) {
1288 		cifs_dbg(FYI, "Blocking lock\n");
1289 		*wait_flag = true;
1290 	}
1291 	if (flock->fl_flags & FL_ACCESS)
1292 		cifs_dbg(FYI, "Process suspended by mandatory locking - not implemented yet\n");
1293 	if (flock->fl_flags & FL_LEASE)
1294 		cifs_dbg(FYI, "Lease on file - not implemented yet\n");
1295 	if (flock->fl_flags &
1296 	    (~(FL_POSIX | FL_FLOCK | FL_SLEEP |
1297 	       FL_ACCESS | FL_LEASE | FL_CLOSE)))
1298 		cifs_dbg(FYI, "Unknown lock flags 0x%x\n", flock->fl_flags);
1299 
1300 	*type = server->vals->large_lock_type;
1301 	if (flock->fl_type == F_WRLCK) {
1302 		cifs_dbg(FYI, "F_WRLCK\n");
1303 		*type |= server->vals->exclusive_lock_type;
1304 		*lock = 1;
1305 	} else if (flock->fl_type == F_UNLCK) {
1306 		cifs_dbg(FYI, "F_UNLCK\n");
1307 		*type |= server->vals->unlock_lock_type;
1308 		*unlock = 1;
1309 		/* Check if unlock includes more than one lock range */
1310 	} else if (flock->fl_type == F_RDLCK) {
1311 		cifs_dbg(FYI, "F_RDLCK\n");
1312 		*type |= server->vals->shared_lock_type;
1313 		*lock = 1;
1314 	} else if (flock->fl_type == F_EXLCK) {
1315 		cifs_dbg(FYI, "F_EXLCK\n");
1316 		*type |= server->vals->exclusive_lock_type;
1317 		*lock = 1;
1318 	} else if (flock->fl_type == F_SHLCK) {
1319 		cifs_dbg(FYI, "F_SHLCK\n");
1320 		*type |= server->vals->shared_lock_type;
1321 		*lock = 1;
1322 	} else
1323 		cifs_dbg(FYI, "Unknown type of lock\n");
1324 }
1325 
1326 static int
cifs_getlk(struct file * file,struct file_lock * flock,__u32 type,bool wait_flag,bool posix_lck,unsigned int xid)1327 cifs_getlk(struct file *file, struct file_lock *flock, __u32 type,
1328 	   bool wait_flag, bool posix_lck, unsigned int xid)
1329 {
1330 	int rc = 0;
1331 	__u64 length = 1 + flock->fl_end - flock->fl_start;
1332 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1333 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1334 	struct TCP_Server_Info *server = tcon->ses->server;
1335 	__u16 netfid = cfile->fid.netfid;
1336 
1337 	if (posix_lck) {
1338 		int posix_lock_type;
1339 
1340 		rc = cifs_posix_lock_test(file, flock);
1341 		if (!rc)
1342 			return rc;
1343 
1344 		if (type & server->vals->shared_lock_type)
1345 			posix_lock_type = CIFS_RDLCK;
1346 		else
1347 			posix_lock_type = CIFS_WRLCK;
1348 		rc = CIFSSMBPosixLock(xid, tcon, netfid, current->tgid,
1349 				      flock->fl_start, length, flock,
1350 				      posix_lock_type, wait_flag);
1351 		return rc;
1352 	}
1353 
1354 	rc = cifs_lock_test(cfile, flock->fl_start, length, type, flock);
1355 	if (!rc)
1356 		return rc;
1357 
1358 	/* BB we could chain these into one lock request BB */
1359 	rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length, type,
1360 				    1, 0, false);
1361 	if (rc == 0) {
1362 		rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1363 					    type, 0, 1, false);
1364 		flock->fl_type = F_UNLCK;
1365 		if (rc != 0)
1366 			cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
1367 				 rc);
1368 		return 0;
1369 	}
1370 
1371 	if (type & server->vals->shared_lock_type) {
1372 		flock->fl_type = F_WRLCK;
1373 		return 0;
1374 	}
1375 
1376 	type &= ~server->vals->exclusive_lock_type;
1377 
1378 	rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1379 				    type | server->vals->shared_lock_type,
1380 				    1, 0, false);
1381 	if (rc == 0) {
1382 		rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1383 			type | server->vals->shared_lock_type, 0, 1, false);
1384 		flock->fl_type = F_RDLCK;
1385 		if (rc != 0)
1386 			cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
1387 				 rc);
1388 	} else
1389 		flock->fl_type = F_WRLCK;
1390 
1391 	return 0;
1392 }
1393 
1394 void
cifs_move_llist(struct list_head * source,struct list_head * dest)1395 cifs_move_llist(struct list_head *source, struct list_head *dest)
1396 {
1397 	struct list_head *li, *tmp;
1398 	list_for_each_safe(li, tmp, source)
1399 		list_move(li, dest);
1400 }
1401 
1402 void
cifs_free_llist(struct list_head * llist)1403 cifs_free_llist(struct list_head *llist)
1404 {
1405 	struct cifsLockInfo *li, *tmp;
1406 	list_for_each_entry_safe(li, tmp, llist, llist) {
1407 		cifs_del_lock_waiters(li);
1408 		list_del(&li->llist);
1409 		kfree(li);
1410 	}
1411 }
1412 
1413 int
cifs_unlock_range(struct cifsFileInfo * cfile,struct file_lock * flock,unsigned int xid)1414 cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
1415 		  unsigned int xid)
1416 {
1417 	int rc = 0, stored_rc;
1418 	int types[] = {LOCKING_ANDX_LARGE_FILES,
1419 		       LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES};
1420 	unsigned int i;
1421 	unsigned int max_num, num, max_buf;
1422 	LOCKING_ANDX_RANGE *buf, *cur;
1423 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1424 	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1425 	struct cifsLockInfo *li, *tmp;
1426 	__u64 length = 1 + flock->fl_end - flock->fl_start;
1427 	struct list_head tmp_llist;
1428 
1429 	INIT_LIST_HEAD(&tmp_llist);
1430 
1431 	/*
1432 	 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1433 	 * and check it before using.
1434 	 */
1435 	max_buf = tcon->ses->server->maxBuf;
1436 	if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE)))
1437 		return -EINVAL;
1438 
1439 	BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
1440 		     PAGE_SIZE);
1441 	max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
1442 			PAGE_SIZE);
1443 	max_num = (max_buf - sizeof(struct smb_hdr)) /
1444 						sizeof(LOCKING_ANDX_RANGE);
1445 	buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1446 	if (!buf)
1447 		return -ENOMEM;
1448 
1449 	cifs_down_write(&cinode->lock_sem);
1450 	for (i = 0; i < 2; i++) {
1451 		cur = buf;
1452 		num = 0;
1453 		list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1454 			if (flock->fl_start > li->offset ||
1455 			    (flock->fl_start + length) <
1456 			    (li->offset + li->length))
1457 				continue;
1458 			if (current->tgid != li->pid)
1459 				continue;
1460 			if (types[i] != li->type)
1461 				continue;
1462 			if (cinode->can_cache_brlcks) {
1463 				/*
1464 				 * We can cache brlock requests - simply remove
1465 				 * a lock from the file's list.
1466 				 */
1467 				list_del(&li->llist);
1468 				cifs_del_lock_waiters(li);
1469 				kfree(li);
1470 				continue;
1471 			}
1472 			cur->Pid = cpu_to_le16(li->pid);
1473 			cur->LengthLow = cpu_to_le32((u32)li->length);
1474 			cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1475 			cur->OffsetLow = cpu_to_le32((u32)li->offset);
1476 			cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1477 			/*
1478 			 * We need to save a lock here to let us add it again to
1479 			 * the file's list if the unlock range request fails on
1480 			 * the server.
1481 			 */
1482 			list_move(&li->llist, &tmp_llist);
1483 			if (++num == max_num) {
1484 				stored_rc = cifs_lockv(xid, tcon,
1485 						       cfile->fid.netfid,
1486 						       li->type, num, 0, buf);
1487 				if (stored_rc) {
1488 					/*
1489 					 * We failed on the unlock range
1490 					 * request - add all locks from the tmp
1491 					 * list to the head of the file's list.
1492 					 */
1493 					cifs_move_llist(&tmp_llist,
1494 							&cfile->llist->locks);
1495 					rc = stored_rc;
1496 				} else
1497 					/*
1498 					 * The unlock range request succeed -
1499 					 * free the tmp list.
1500 					 */
1501 					cifs_free_llist(&tmp_llist);
1502 				cur = buf;
1503 				num = 0;
1504 			} else
1505 				cur++;
1506 		}
1507 		if (num) {
1508 			stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1509 					       types[i], num, 0, buf);
1510 			if (stored_rc) {
1511 				cifs_move_llist(&tmp_llist,
1512 						&cfile->llist->locks);
1513 				rc = stored_rc;
1514 			} else
1515 				cifs_free_llist(&tmp_llist);
1516 		}
1517 	}
1518 
1519 	up_write(&cinode->lock_sem);
1520 	kfree(buf);
1521 	return rc;
1522 }
1523 
1524 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)1525 cifs_setlk(struct file *file, struct file_lock *flock, __u32 type,
1526 	   bool wait_flag, bool posix_lck, int lock, int unlock,
1527 	   unsigned int xid)
1528 {
1529 	int rc = 0;
1530 	__u64 length = 1 + flock->fl_end - flock->fl_start;
1531 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1532 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1533 	struct TCP_Server_Info *server = tcon->ses->server;
1534 	struct inode *inode = d_inode(cfile->dentry);
1535 
1536 	if (posix_lck) {
1537 		int posix_lock_type;
1538 
1539 		rc = cifs_posix_lock_set(file, flock);
1540 		if (!rc || rc < 0)
1541 			return rc;
1542 
1543 		if (type & server->vals->shared_lock_type)
1544 			posix_lock_type = CIFS_RDLCK;
1545 		else
1546 			posix_lock_type = CIFS_WRLCK;
1547 
1548 		if (unlock == 1)
1549 			posix_lock_type = CIFS_UNLCK;
1550 
1551 		rc = CIFSSMBPosixLock(xid, tcon, cfile->fid.netfid,
1552 				      current->tgid, flock->fl_start, length,
1553 				      NULL, posix_lock_type, wait_flag);
1554 		goto out;
1555 	}
1556 
1557 	if (lock) {
1558 		struct cifsLockInfo *lock;
1559 
1560 		lock = cifs_lock_init(flock->fl_start, length, type);
1561 		if (!lock)
1562 			return -ENOMEM;
1563 
1564 		rc = cifs_lock_add_if(cfile, lock, wait_flag);
1565 		if (rc < 0) {
1566 			kfree(lock);
1567 			return rc;
1568 		}
1569 		if (!rc)
1570 			goto out;
1571 
1572 		/*
1573 		 * Windows 7 server can delay breaking lease from read to None
1574 		 * if we set a byte-range lock on a file - break it explicitly
1575 		 * before sending the lock to the server to be sure the next
1576 		 * read won't conflict with non-overlapted locks due to
1577 		 * pagereading.
1578 		 */
1579 		if (!CIFS_CACHE_WRITE(CIFS_I(inode)) &&
1580 					CIFS_CACHE_READ(CIFS_I(inode))) {
1581 			cifs_zap_mapping(inode);
1582 			cifs_dbg(FYI, "Set no oplock for inode=%p due to mand locks\n",
1583 				 inode);
1584 			CIFS_I(inode)->oplock = 0;
1585 		}
1586 
1587 		rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1588 					    type, 1, 0, wait_flag);
1589 		if (rc) {
1590 			kfree(lock);
1591 			return rc;
1592 		}
1593 
1594 		cifs_lock_add(cfile, lock);
1595 	} else if (unlock)
1596 		rc = server->ops->mand_unlock_range(cfile, flock, xid);
1597 
1598 out:
1599 	if (flock->fl_flags & FL_POSIX) {
1600 		/*
1601 		 * If this is a request to remove all locks because we
1602 		 * are closing the file, it doesn't matter if the
1603 		 * unlocking failed as both cifs.ko and the SMB server
1604 		 * remove the lock on file close
1605 		 */
1606 		if (rc) {
1607 			cifs_dbg(VFS, "%s failed rc=%d\n", __func__, rc);
1608 			if (!(flock->fl_flags & FL_CLOSE))
1609 				return rc;
1610 		}
1611 		rc = locks_lock_file_wait(file, flock);
1612 	}
1613 	return rc;
1614 }
1615 
cifs_lock(struct file * file,int cmd,struct file_lock * flock)1616 int cifs_lock(struct file *file, int cmd, struct file_lock *flock)
1617 {
1618 	int rc, xid;
1619 	int lock = 0, unlock = 0;
1620 	bool wait_flag = false;
1621 	bool posix_lck = false;
1622 	struct cifs_sb_info *cifs_sb;
1623 	struct cifs_tcon *tcon;
1624 	struct cifsInodeInfo *cinode;
1625 	struct cifsFileInfo *cfile;
1626 	__u16 netfid;
1627 	__u32 type;
1628 
1629 	rc = -EACCES;
1630 	xid = get_xid();
1631 
1632 	cifs_dbg(FYI, "Lock parm: 0x%x flockflags: 0x%x flocktype: 0x%x start: %lld end: %lld\n",
1633 		 cmd, flock->fl_flags, flock->fl_type,
1634 		 flock->fl_start, flock->fl_end);
1635 
1636 	cfile = (struct cifsFileInfo *)file->private_data;
1637 	tcon = tlink_tcon(cfile->tlink);
1638 
1639 	cifs_read_flock(flock, &type, &lock, &unlock, &wait_flag,
1640 			tcon->ses->server);
1641 
1642 	cifs_sb = CIFS_FILE_SB(file);
1643 	netfid = cfile->fid.netfid;
1644 	cinode = CIFS_I(file_inode(file));
1645 
1646 	if (cap_unix(tcon->ses) &&
1647 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1648 	    ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1649 		posix_lck = true;
1650 	/*
1651 	 * BB add code here to normalize offset and length to account for
1652 	 * negative length which we can not accept over the wire.
1653 	 */
1654 	if (IS_GETLK(cmd)) {
1655 		rc = cifs_getlk(file, flock, type, wait_flag, posix_lck, xid);
1656 		free_xid(xid);
1657 		return rc;
1658 	}
1659 
1660 	if (!lock && !unlock) {
1661 		/*
1662 		 * if no lock or unlock then nothing to do since we do not
1663 		 * know what it is
1664 		 */
1665 		free_xid(xid);
1666 		return -EOPNOTSUPP;
1667 	}
1668 
1669 	rc = cifs_setlk(file, flock, type, wait_flag, posix_lck, lock, unlock,
1670 			xid);
1671 	free_xid(xid);
1672 	return rc;
1673 }
1674 
1675 /*
1676  * update the file size (if needed) after a write. Should be called with
1677  * the inode->i_lock held
1678  */
1679 void
cifs_update_eof(struct cifsInodeInfo * cifsi,loff_t offset,unsigned int bytes_written)1680 cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
1681 		      unsigned int bytes_written)
1682 {
1683 	loff_t end_of_write = offset + bytes_written;
1684 
1685 	if (end_of_write > cifsi->server_eof)
1686 		cifsi->server_eof = end_of_write;
1687 }
1688 
1689 static ssize_t
cifs_write(struct cifsFileInfo * open_file,__u32 pid,const char * write_data,size_t write_size,loff_t * offset)1690 cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
1691 	   size_t write_size, loff_t *offset)
1692 {
1693 	int rc = 0;
1694 	unsigned int bytes_written = 0;
1695 	unsigned int total_written;
1696 	struct cifs_sb_info *cifs_sb;
1697 	struct cifs_tcon *tcon;
1698 	struct TCP_Server_Info *server;
1699 	unsigned int xid;
1700 	struct dentry *dentry = open_file->dentry;
1701 	struct cifsInodeInfo *cifsi = CIFS_I(d_inode(dentry));
1702 	struct cifs_io_parms io_parms;
1703 
1704 	cifs_sb = CIFS_SB(dentry->d_sb);
1705 
1706 	cifs_dbg(FYI, "write %zd bytes to offset %lld of %pd\n",
1707 		 write_size, *offset, dentry);
1708 
1709 	tcon = tlink_tcon(open_file->tlink);
1710 	server = tcon->ses->server;
1711 
1712 	if (!server->ops->sync_write)
1713 		return -ENOSYS;
1714 
1715 	xid = get_xid();
1716 
1717 	for (total_written = 0; write_size > total_written;
1718 	     total_written += bytes_written) {
1719 		rc = -EAGAIN;
1720 		while (rc == -EAGAIN) {
1721 			struct kvec iov[2];
1722 			unsigned int len;
1723 
1724 			if (open_file->invalidHandle) {
1725 				/* we could deadlock if we called
1726 				   filemap_fdatawait from here so tell
1727 				   reopen_file not to flush data to
1728 				   server now */
1729 				rc = cifs_reopen_file(open_file, false);
1730 				if (rc != 0)
1731 					break;
1732 			}
1733 
1734 			len = min(server->ops->wp_retry_size(d_inode(dentry)),
1735 				  (unsigned int)write_size - total_written);
1736 			/* iov[0] is reserved for smb header */
1737 			iov[1].iov_base = (char *)write_data + total_written;
1738 			iov[1].iov_len = len;
1739 			io_parms.pid = pid;
1740 			io_parms.tcon = tcon;
1741 			io_parms.offset = *offset;
1742 			io_parms.length = len;
1743 			rc = server->ops->sync_write(xid, &open_file->fid,
1744 					&io_parms, &bytes_written, iov, 1);
1745 		}
1746 		if (rc || (bytes_written == 0)) {
1747 			if (total_written)
1748 				break;
1749 			else {
1750 				free_xid(xid);
1751 				return rc;
1752 			}
1753 		} else {
1754 			spin_lock(&d_inode(dentry)->i_lock);
1755 			cifs_update_eof(cifsi, *offset, bytes_written);
1756 			spin_unlock(&d_inode(dentry)->i_lock);
1757 			*offset += bytes_written;
1758 		}
1759 	}
1760 
1761 	cifs_stats_bytes_written(tcon, total_written);
1762 
1763 	if (total_written > 0) {
1764 		spin_lock(&d_inode(dentry)->i_lock);
1765 		if (*offset > d_inode(dentry)->i_size)
1766 			i_size_write(d_inode(dentry), *offset);
1767 		spin_unlock(&d_inode(dentry)->i_lock);
1768 	}
1769 	mark_inode_dirty_sync(d_inode(dentry));
1770 	free_xid(xid);
1771 	return total_written;
1772 }
1773 
find_readable_file(struct cifsInodeInfo * cifs_inode,bool fsuid_only)1774 struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
1775 					bool fsuid_only)
1776 {
1777 	struct cifsFileInfo *open_file = NULL;
1778 	struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1779 	struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
1780 
1781 	/* only filter by fsuid on multiuser mounts */
1782 	if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1783 		fsuid_only = false;
1784 
1785 	spin_lock(&tcon->open_file_lock);
1786 	/* we could simply get the first_list_entry since write-only entries
1787 	   are always at the end of the list but since the first entry might
1788 	   have a close pending, we go through the whole list */
1789 	list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1790 		if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
1791 			continue;
1792 		if (OPEN_FMODE(open_file->f_flags) & FMODE_READ) {
1793 			if (!open_file->invalidHandle) {
1794 				/* found a good file */
1795 				/* lock it so it will not be closed on us */
1796 				cifsFileInfo_get(open_file);
1797 				spin_unlock(&tcon->open_file_lock);
1798 				return open_file;
1799 			} /* else might as well continue, and look for
1800 			     another, or simply have the caller reopen it
1801 			     again rather than trying to fix this handle */
1802 		} else /* write only file */
1803 			break; /* write only files are last so must be done */
1804 	}
1805 	spin_unlock(&tcon->open_file_lock);
1806 	return NULL;
1807 }
1808 
find_writable_file(struct cifsInodeInfo * cifs_inode,bool fsuid_only)1809 struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode,
1810 					bool fsuid_only)
1811 {
1812 	struct cifsFileInfo *open_file, *inv_file = NULL;
1813 	struct cifs_sb_info *cifs_sb;
1814 	struct cifs_tcon *tcon;
1815 	bool any_available = false;
1816 	int rc;
1817 	unsigned int refind = 0;
1818 
1819 	/* Having a null inode here (because mapping->host was set to zero by
1820 	the VFS or MM) should not happen but we had reports of on oops (due to
1821 	it being zero) during stress testcases so we need to check for it */
1822 
1823 	if (cifs_inode == NULL) {
1824 		cifs_dbg(VFS, "Null inode passed to cifs_writeable_file\n");
1825 		dump_stack();
1826 		return NULL;
1827 	}
1828 
1829 	cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1830 	tcon = cifs_sb_master_tcon(cifs_sb);
1831 
1832 	/* only filter by fsuid on multiuser mounts */
1833 	if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1834 		fsuid_only = false;
1835 
1836 	spin_lock(&tcon->open_file_lock);
1837 refind_writable:
1838 	if (refind > MAX_REOPEN_ATT) {
1839 		spin_unlock(&tcon->open_file_lock);
1840 		return NULL;
1841 	}
1842 	list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1843 		if (!any_available && open_file->pid != current->tgid)
1844 			continue;
1845 		if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
1846 			continue;
1847 		if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
1848 			if (!open_file->invalidHandle) {
1849 				/* found a good writable file */
1850 				cifsFileInfo_get(open_file);
1851 				spin_unlock(&tcon->open_file_lock);
1852 				return open_file;
1853 			} else {
1854 				if (!inv_file)
1855 					inv_file = open_file;
1856 			}
1857 		}
1858 	}
1859 	/* couldn't find useable FH with same pid, try any available */
1860 	if (!any_available) {
1861 		any_available = true;
1862 		goto refind_writable;
1863 	}
1864 
1865 	if (inv_file) {
1866 		any_available = false;
1867 		cifsFileInfo_get(inv_file);
1868 	}
1869 
1870 	spin_unlock(&tcon->open_file_lock);
1871 
1872 	if (inv_file) {
1873 		rc = cifs_reopen_file(inv_file, false);
1874 		if (!rc)
1875 			return inv_file;
1876 		else {
1877 			spin_lock(&tcon->open_file_lock);
1878 			list_move_tail(&inv_file->flist,
1879 					&cifs_inode->openFileList);
1880 			spin_unlock(&tcon->open_file_lock);
1881 			cifsFileInfo_put(inv_file);
1882 			++refind;
1883 			inv_file = NULL;
1884 			spin_lock(&tcon->open_file_lock);
1885 			goto refind_writable;
1886 		}
1887 	}
1888 
1889 	return NULL;
1890 }
1891 
cifs_partialpagewrite(struct page * page,unsigned from,unsigned to)1892 static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to)
1893 {
1894 	struct address_space *mapping = page->mapping;
1895 	loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
1896 	char *write_data;
1897 	int rc = -EFAULT;
1898 	int bytes_written = 0;
1899 	struct inode *inode;
1900 	struct cifsFileInfo *open_file;
1901 
1902 	if (!mapping || !mapping->host)
1903 		return -EFAULT;
1904 
1905 	inode = page->mapping->host;
1906 
1907 	offset += (loff_t)from;
1908 	write_data = kmap(page);
1909 	write_data += from;
1910 
1911 	if ((to > PAGE_CACHE_SIZE) || (from > to)) {
1912 		kunmap(page);
1913 		return -EIO;
1914 	}
1915 
1916 	/* racing with truncate? */
1917 	if (offset > mapping->host->i_size) {
1918 		kunmap(page);
1919 		return 0; /* don't care */
1920 	}
1921 
1922 	/* check to make sure that we are not extending the file */
1923 	if (mapping->host->i_size - offset < (loff_t)to)
1924 		to = (unsigned)(mapping->host->i_size - offset);
1925 
1926 	open_file = find_writable_file(CIFS_I(mapping->host), false);
1927 	if (open_file) {
1928 		bytes_written = cifs_write(open_file, open_file->pid,
1929 					   write_data, to - from, &offset);
1930 		cifsFileInfo_put(open_file);
1931 		/* Does mm or vfs already set times? */
1932 		inode->i_atime = inode->i_mtime = current_fs_time(inode->i_sb);
1933 		if ((bytes_written > 0) && (offset))
1934 			rc = 0;
1935 		else if (bytes_written < 0)
1936 			rc = bytes_written;
1937 	} else {
1938 		cifs_dbg(FYI, "No writeable filehandles for inode\n");
1939 		rc = -EIO;
1940 	}
1941 
1942 	kunmap(page);
1943 	return rc;
1944 }
1945 
1946 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)1947 wdata_alloc_and_fillpages(pgoff_t tofind, struct address_space *mapping,
1948 			  pgoff_t end, pgoff_t *index,
1949 			  unsigned int *found_pages)
1950 {
1951 	unsigned int nr_pages;
1952 	struct page **pages;
1953 	struct cifs_writedata *wdata;
1954 
1955 	wdata = cifs_writedata_alloc((unsigned int)tofind,
1956 				     cifs_writev_complete);
1957 	if (!wdata)
1958 		return NULL;
1959 
1960 	/*
1961 	 * find_get_pages_tag seems to return a max of 256 on each
1962 	 * iteration, so we must call it several times in order to
1963 	 * fill the array or the wsize is effectively limited to
1964 	 * 256 * PAGE_CACHE_SIZE.
1965 	 */
1966 	*found_pages = 0;
1967 	pages = wdata->pages;
1968 	do {
1969 		nr_pages = find_get_pages_tag(mapping, index,
1970 					      PAGECACHE_TAG_DIRTY, tofind,
1971 					      pages);
1972 		*found_pages += nr_pages;
1973 		tofind -= nr_pages;
1974 		pages += nr_pages;
1975 	} while (nr_pages && tofind && *index <= end);
1976 
1977 	return wdata;
1978 }
1979 
1980 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)1981 wdata_prepare_pages(struct cifs_writedata *wdata, unsigned int found_pages,
1982 		    struct address_space *mapping,
1983 		    struct writeback_control *wbc,
1984 		    pgoff_t end, pgoff_t *index, pgoff_t *next, bool *done)
1985 {
1986 	unsigned int nr_pages = 0, i;
1987 	struct page *page;
1988 
1989 	for (i = 0; i < found_pages; i++) {
1990 		page = wdata->pages[i];
1991 		/*
1992 		 * At this point we hold neither mapping->tree_lock nor
1993 		 * lock on the page itself: the page may be truncated or
1994 		 * invalidated (changing page->mapping to NULL), or even
1995 		 * swizzled back from swapper_space to tmpfs file
1996 		 * mapping
1997 		 */
1998 
1999 		if (nr_pages == 0)
2000 			lock_page(page);
2001 		else if (!trylock_page(page))
2002 			break;
2003 
2004 		if (unlikely(page->mapping != mapping)) {
2005 			unlock_page(page);
2006 			break;
2007 		}
2008 
2009 		if (!wbc->range_cyclic && page->index > end) {
2010 			*done = true;
2011 			unlock_page(page);
2012 			break;
2013 		}
2014 
2015 		if (*next && (page->index != *next)) {
2016 			/* Not next consecutive page */
2017 			unlock_page(page);
2018 			break;
2019 		}
2020 
2021 		if (wbc->sync_mode != WB_SYNC_NONE)
2022 			wait_on_page_writeback(page);
2023 
2024 		if (PageWriteback(page) ||
2025 				!clear_page_dirty_for_io(page)) {
2026 			unlock_page(page);
2027 			break;
2028 		}
2029 
2030 		/*
2031 		 * This actually clears the dirty bit in the radix tree.
2032 		 * See cifs_writepage() for more commentary.
2033 		 */
2034 		set_page_writeback(page);
2035 		if (page_offset(page) >= i_size_read(mapping->host)) {
2036 			*done = true;
2037 			unlock_page(page);
2038 			end_page_writeback(page);
2039 			break;
2040 		}
2041 
2042 		wdata->pages[i] = page;
2043 		*next = page->index + 1;
2044 		++nr_pages;
2045 	}
2046 
2047 	/* reset index to refind any pages skipped */
2048 	if (nr_pages == 0)
2049 		*index = wdata->pages[0]->index + 1;
2050 
2051 	/* put any pages we aren't going to use */
2052 	for (i = nr_pages; i < found_pages; i++) {
2053 		page_cache_release(wdata->pages[i]);
2054 		wdata->pages[i] = NULL;
2055 	}
2056 
2057 	return nr_pages;
2058 }
2059 
2060 static int
wdata_send_pages(struct cifs_writedata * wdata,unsigned int nr_pages,struct address_space * mapping,struct writeback_control * wbc)2061 wdata_send_pages(struct cifs_writedata *wdata, unsigned int nr_pages,
2062 		 struct address_space *mapping, struct writeback_control *wbc)
2063 {
2064 	int rc = 0;
2065 	struct TCP_Server_Info *server;
2066 	unsigned int i;
2067 
2068 	wdata->sync_mode = wbc->sync_mode;
2069 	wdata->nr_pages = nr_pages;
2070 	wdata->offset = page_offset(wdata->pages[0]);
2071 	wdata->pagesz = PAGE_CACHE_SIZE;
2072 	wdata->tailsz = min(i_size_read(mapping->host) -
2073 			page_offset(wdata->pages[nr_pages - 1]),
2074 			(loff_t)PAGE_CACHE_SIZE);
2075 	wdata->bytes = ((nr_pages - 1) * PAGE_CACHE_SIZE) + wdata->tailsz;
2076 
2077 	if (wdata->cfile != NULL)
2078 		cifsFileInfo_put(wdata->cfile);
2079 	wdata->cfile = find_writable_file(CIFS_I(mapping->host), false);
2080 	if (!wdata->cfile) {
2081 		cifs_dbg(VFS, "No writable handles for inode\n");
2082 		rc = -EBADF;
2083 	} else {
2084 		wdata->pid = wdata->cfile->pid;
2085 		server = tlink_tcon(wdata->cfile->tlink)->ses->server;
2086 		rc = server->ops->async_writev(wdata, cifs_writedata_release);
2087 	}
2088 
2089 	for (i = 0; i < nr_pages; ++i)
2090 		unlock_page(wdata->pages[i]);
2091 
2092 	return rc;
2093 }
2094 
cifs_writepages(struct address_space * mapping,struct writeback_control * wbc)2095 static int cifs_writepages(struct address_space *mapping,
2096 			   struct writeback_control *wbc)
2097 {
2098 	struct cifs_sb_info *cifs_sb = CIFS_SB(mapping->host->i_sb);
2099 	struct TCP_Server_Info *server;
2100 	bool done = false, scanned = false, range_whole = false;
2101 	pgoff_t end, index;
2102 	struct cifs_writedata *wdata;
2103 	int rc = 0;
2104 
2105 	/*
2106 	 * If wsize is smaller than the page cache size, default to writing
2107 	 * one page at a time via cifs_writepage
2108 	 */
2109 	if (cifs_sb->wsize < PAGE_CACHE_SIZE)
2110 		return generic_writepages(mapping, wbc);
2111 
2112 	if (wbc->range_cyclic) {
2113 		index = mapping->writeback_index; /* Start from prev offset */
2114 		end = -1;
2115 	} else {
2116 		index = wbc->range_start >> PAGE_CACHE_SHIFT;
2117 		end = wbc->range_end >> PAGE_CACHE_SHIFT;
2118 		if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
2119 			range_whole = true;
2120 		scanned = true;
2121 	}
2122 	server = cifs_sb_master_tcon(cifs_sb)->ses->server;
2123 retry:
2124 	while (!done && index <= end) {
2125 		unsigned int i, nr_pages, found_pages, wsize, credits;
2126 		pgoff_t next = 0, tofind, saved_index = index;
2127 
2128 		rc = server->ops->wait_mtu_credits(server, cifs_sb->wsize,
2129 						   &wsize, &credits);
2130 		if (rc)
2131 			break;
2132 
2133 		tofind = min((wsize / PAGE_CACHE_SIZE) - 1, end - index) + 1;
2134 
2135 		wdata = wdata_alloc_and_fillpages(tofind, mapping, end, &index,
2136 						  &found_pages);
2137 		if (!wdata) {
2138 			rc = -ENOMEM;
2139 			add_credits_and_wake_if(server, credits, 0);
2140 			break;
2141 		}
2142 
2143 		if (found_pages == 0) {
2144 			kref_put(&wdata->refcount, cifs_writedata_release);
2145 			add_credits_and_wake_if(server, credits, 0);
2146 			break;
2147 		}
2148 
2149 		nr_pages = wdata_prepare_pages(wdata, found_pages, mapping, wbc,
2150 					       end, &index, &next, &done);
2151 
2152 		/* nothing to write? */
2153 		if (nr_pages == 0) {
2154 			kref_put(&wdata->refcount, cifs_writedata_release);
2155 			add_credits_and_wake_if(server, credits, 0);
2156 			continue;
2157 		}
2158 
2159 		wdata->credits = credits;
2160 
2161 		rc = wdata_send_pages(wdata, nr_pages, mapping, wbc);
2162 
2163 		/* send failure -- clean up the mess */
2164 		if (rc != 0) {
2165 			add_credits_and_wake_if(server, wdata->credits, 0);
2166 			for (i = 0; i < nr_pages; ++i) {
2167 				if (rc == -EAGAIN)
2168 					redirty_page_for_writepage(wbc,
2169 							   wdata->pages[i]);
2170 				else
2171 					SetPageError(wdata->pages[i]);
2172 				end_page_writeback(wdata->pages[i]);
2173 				page_cache_release(wdata->pages[i]);
2174 			}
2175 			if (rc != -EAGAIN)
2176 				mapping_set_error(mapping, rc);
2177 		}
2178 		kref_put(&wdata->refcount, cifs_writedata_release);
2179 
2180 		if (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN) {
2181 			index = saved_index;
2182 			continue;
2183 		}
2184 
2185 		wbc->nr_to_write -= nr_pages;
2186 		if (wbc->nr_to_write <= 0)
2187 			done = true;
2188 
2189 		index = next;
2190 	}
2191 
2192 	if (!scanned && !done) {
2193 		/*
2194 		 * We hit the last page and there is more work to be done: wrap
2195 		 * back to the start of the file
2196 		 */
2197 		scanned = true;
2198 		index = 0;
2199 		goto retry;
2200 	}
2201 
2202 	if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
2203 		mapping->writeback_index = index;
2204 
2205 	return rc;
2206 }
2207 
2208 static int
cifs_writepage_locked(struct page * page,struct writeback_control * wbc)2209 cifs_writepage_locked(struct page *page, struct writeback_control *wbc)
2210 {
2211 	int rc;
2212 	unsigned int xid;
2213 
2214 	xid = get_xid();
2215 /* BB add check for wbc flags */
2216 	page_cache_get(page);
2217 	if (!PageUptodate(page))
2218 		cifs_dbg(FYI, "ppw - page not up to date\n");
2219 
2220 	/*
2221 	 * Set the "writeback" flag, and clear "dirty" in the radix tree.
2222 	 *
2223 	 * A writepage() implementation always needs to do either this,
2224 	 * or re-dirty the page with "redirty_page_for_writepage()" in
2225 	 * the case of a failure.
2226 	 *
2227 	 * Just unlocking the page will cause the radix tree tag-bits
2228 	 * to fail to update with the state of the page correctly.
2229 	 */
2230 	set_page_writeback(page);
2231 retry_write:
2232 	rc = cifs_partialpagewrite(page, 0, PAGE_CACHE_SIZE);
2233 	if (rc == -EAGAIN && wbc->sync_mode == WB_SYNC_ALL)
2234 		goto retry_write;
2235 	else if (rc == -EAGAIN)
2236 		redirty_page_for_writepage(wbc, page);
2237 	else if (rc != 0)
2238 		SetPageError(page);
2239 	else
2240 		SetPageUptodate(page);
2241 	end_page_writeback(page);
2242 	page_cache_release(page);
2243 	free_xid(xid);
2244 	return rc;
2245 }
2246 
cifs_writepage(struct page * page,struct writeback_control * wbc)2247 static int cifs_writepage(struct page *page, struct writeback_control *wbc)
2248 {
2249 	int rc = cifs_writepage_locked(page, wbc);
2250 	unlock_page(page);
2251 	return rc;
2252 }
2253 
cifs_write_end(struct file * file,struct address_space * mapping,loff_t pos,unsigned len,unsigned copied,struct page * page,void * fsdata)2254 static int cifs_write_end(struct file *file, struct address_space *mapping,
2255 			loff_t pos, unsigned len, unsigned copied,
2256 			struct page *page, void *fsdata)
2257 {
2258 	int rc;
2259 	struct inode *inode = mapping->host;
2260 	struct cifsFileInfo *cfile = file->private_data;
2261 	struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
2262 	__u32 pid;
2263 
2264 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2265 		pid = cfile->pid;
2266 	else
2267 		pid = current->tgid;
2268 
2269 	cifs_dbg(FYI, "write_end for page %p from pos %lld with %d bytes\n",
2270 		 page, pos, copied);
2271 
2272 	if (PageChecked(page)) {
2273 		if (copied == len)
2274 			SetPageUptodate(page);
2275 		ClearPageChecked(page);
2276 	} else if (!PageUptodate(page) && copied == PAGE_CACHE_SIZE)
2277 		SetPageUptodate(page);
2278 
2279 	if (!PageUptodate(page)) {
2280 		char *page_data;
2281 		unsigned offset = pos & (PAGE_CACHE_SIZE - 1);
2282 		unsigned int xid;
2283 
2284 		xid = get_xid();
2285 		/* this is probably better than directly calling
2286 		   partialpage_write since in this function the file handle is
2287 		   known which we might as well	leverage */
2288 		/* BB check if anything else missing out of ppw
2289 		   such as updating last write time */
2290 		page_data = kmap(page);
2291 		rc = cifs_write(cfile, pid, page_data + offset, copied, &pos);
2292 		/* if (rc < 0) should we set writebehind rc? */
2293 		kunmap(page);
2294 
2295 		free_xid(xid);
2296 	} else {
2297 		rc = copied;
2298 		pos += copied;
2299 		set_page_dirty(page);
2300 	}
2301 
2302 	if (rc > 0) {
2303 		spin_lock(&inode->i_lock);
2304 		if (pos > inode->i_size)
2305 			i_size_write(inode, pos);
2306 		spin_unlock(&inode->i_lock);
2307 	}
2308 
2309 	unlock_page(page);
2310 	page_cache_release(page);
2311 
2312 	return rc;
2313 }
2314 
cifs_strict_fsync(struct file * file,loff_t start,loff_t end,int datasync)2315 int cifs_strict_fsync(struct file *file, loff_t start, loff_t end,
2316 		      int datasync)
2317 {
2318 	unsigned int xid;
2319 	int rc = 0;
2320 	struct cifs_tcon *tcon;
2321 	struct TCP_Server_Info *server;
2322 	struct cifsFileInfo *smbfile = file->private_data;
2323 	struct inode *inode = file_inode(file);
2324 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2325 
2326 	rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
2327 	if (rc)
2328 		return rc;
2329 	mutex_lock(&inode->i_mutex);
2330 
2331 	xid = get_xid();
2332 
2333 	cifs_dbg(FYI, "Sync file - name: %pD datasync: 0x%x\n",
2334 		 file, datasync);
2335 
2336 	if (!CIFS_CACHE_READ(CIFS_I(inode))) {
2337 		rc = cifs_zap_mapping(inode);
2338 		if (rc) {
2339 			cifs_dbg(FYI, "rc: %d during invalidate phase\n", rc);
2340 			rc = 0; /* don't care about it in fsync */
2341 		}
2342 	}
2343 
2344 	tcon = tlink_tcon(smbfile->tlink);
2345 	if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)) {
2346 		server = tcon->ses->server;
2347 		if (server->ops->flush)
2348 			rc = server->ops->flush(xid, tcon, &smbfile->fid);
2349 		else
2350 			rc = -ENOSYS;
2351 	}
2352 
2353 	free_xid(xid);
2354 	mutex_unlock(&inode->i_mutex);
2355 	return rc;
2356 }
2357 
cifs_fsync(struct file * file,loff_t start,loff_t end,int datasync)2358 int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
2359 {
2360 	unsigned int xid;
2361 	int rc = 0;
2362 	struct cifs_tcon *tcon;
2363 	struct TCP_Server_Info *server;
2364 	struct cifsFileInfo *smbfile = file->private_data;
2365 	struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
2366 	struct inode *inode = file->f_mapping->host;
2367 
2368 	rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
2369 	if (rc)
2370 		return rc;
2371 	mutex_lock(&inode->i_mutex);
2372 
2373 	xid = get_xid();
2374 
2375 	cifs_dbg(FYI, "Sync file - name: %pD datasync: 0x%x\n",
2376 		 file, datasync);
2377 
2378 	tcon = tlink_tcon(smbfile->tlink);
2379 	if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)) {
2380 		server = tcon->ses->server;
2381 		if (server->ops->flush)
2382 			rc = server->ops->flush(xid, tcon, &smbfile->fid);
2383 		else
2384 			rc = -ENOSYS;
2385 	}
2386 
2387 	free_xid(xid);
2388 	mutex_unlock(&inode->i_mutex);
2389 	return rc;
2390 }
2391 
2392 /*
2393  * As file closes, flush all cached write data for this inode checking
2394  * for write behind errors.
2395  */
cifs_flush(struct file * file,fl_owner_t id)2396 int cifs_flush(struct file *file, fl_owner_t id)
2397 {
2398 	struct inode *inode = file_inode(file);
2399 	int rc = 0;
2400 
2401 	if (file->f_mode & FMODE_WRITE)
2402 		rc = filemap_write_and_wait(inode->i_mapping);
2403 
2404 	cifs_dbg(FYI, "Flush inode %p file %p rc %d\n", inode, file, rc);
2405 
2406 	return rc;
2407 }
2408 
2409 static int
cifs_write_allocate_pages(struct page ** pages,unsigned long num_pages)2410 cifs_write_allocate_pages(struct page **pages, unsigned long num_pages)
2411 {
2412 	int rc = 0;
2413 	unsigned long i;
2414 
2415 	for (i = 0; i < num_pages; i++) {
2416 		pages[i] = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
2417 		if (!pages[i]) {
2418 			/*
2419 			 * save number of pages we have already allocated and
2420 			 * return with ENOMEM error
2421 			 */
2422 			num_pages = i;
2423 			rc = -ENOMEM;
2424 			break;
2425 		}
2426 	}
2427 
2428 	if (rc) {
2429 		for (i = 0; i < num_pages; i++)
2430 			put_page(pages[i]);
2431 	}
2432 	return rc;
2433 }
2434 
2435 static inline
get_numpages(const size_t wsize,const size_t len,size_t * cur_len)2436 size_t get_numpages(const size_t wsize, const size_t len, size_t *cur_len)
2437 {
2438 	size_t num_pages;
2439 	size_t clen;
2440 
2441 	clen = min_t(const size_t, len, wsize);
2442 	num_pages = DIV_ROUND_UP(clen, PAGE_SIZE);
2443 
2444 	if (cur_len)
2445 		*cur_len = clen;
2446 
2447 	return num_pages;
2448 }
2449 
2450 static void
cifs_uncached_writedata_release(struct kref * refcount)2451 cifs_uncached_writedata_release(struct kref *refcount)
2452 {
2453 	int i;
2454 	struct cifs_writedata *wdata = container_of(refcount,
2455 					struct cifs_writedata, refcount);
2456 
2457 	for (i = 0; i < wdata->nr_pages; i++)
2458 		put_page(wdata->pages[i]);
2459 	cifs_writedata_release(refcount);
2460 }
2461 
2462 static void
cifs_uncached_writev_complete(struct work_struct * work)2463 cifs_uncached_writev_complete(struct work_struct *work)
2464 {
2465 	struct cifs_writedata *wdata = container_of(work,
2466 					struct cifs_writedata, work);
2467 	struct inode *inode = d_inode(wdata->cfile->dentry);
2468 	struct cifsInodeInfo *cifsi = CIFS_I(inode);
2469 
2470 	spin_lock(&inode->i_lock);
2471 	cifs_update_eof(cifsi, wdata->offset, wdata->bytes);
2472 	if (cifsi->server_eof > inode->i_size)
2473 		i_size_write(inode, cifsi->server_eof);
2474 	spin_unlock(&inode->i_lock);
2475 
2476 	complete(&wdata->done);
2477 
2478 	kref_put(&wdata->refcount, cifs_uncached_writedata_release);
2479 }
2480 
2481 static int
wdata_fill_from_iovec(struct cifs_writedata * wdata,struct iov_iter * from,size_t * len,unsigned long * num_pages)2482 wdata_fill_from_iovec(struct cifs_writedata *wdata, struct iov_iter *from,
2483 		      size_t *len, unsigned long *num_pages)
2484 {
2485 	size_t save_len, copied, bytes, cur_len = *len;
2486 	unsigned long i, nr_pages = *num_pages;
2487 
2488 	save_len = cur_len;
2489 	for (i = 0; i < nr_pages; i++) {
2490 		bytes = min_t(const size_t, cur_len, PAGE_SIZE);
2491 		copied = copy_page_from_iter(wdata->pages[i], 0, bytes, from);
2492 		cur_len -= copied;
2493 		/*
2494 		 * If we didn't copy as much as we expected, then that
2495 		 * may mean we trod into an unmapped area. Stop copying
2496 		 * at that point. On the next pass through the big
2497 		 * loop, we'll likely end up getting a zero-length
2498 		 * write and bailing out of it.
2499 		 */
2500 		if (copied < bytes)
2501 			break;
2502 	}
2503 	cur_len = save_len - cur_len;
2504 	*len = cur_len;
2505 
2506 	/*
2507 	 * If we have no data to send, then that probably means that
2508 	 * the copy above failed altogether. That's most likely because
2509 	 * the address in the iovec was bogus. Return -EFAULT and let
2510 	 * the caller free anything we allocated and bail out.
2511 	 */
2512 	if (!cur_len)
2513 		return -EFAULT;
2514 
2515 	/*
2516 	 * i + 1 now represents the number of pages we actually used in
2517 	 * the copy phase above.
2518 	 */
2519 	*num_pages = i + 1;
2520 	return 0;
2521 }
2522 
2523 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)2524 cifs_write_from_iter(loff_t offset, size_t len, struct iov_iter *from,
2525 		     struct cifsFileInfo *open_file,
2526 		     struct cifs_sb_info *cifs_sb, struct list_head *wdata_list)
2527 {
2528 	int rc = 0;
2529 	size_t cur_len;
2530 	unsigned long nr_pages, num_pages, i;
2531 	struct cifs_writedata *wdata;
2532 	struct iov_iter saved_from;
2533 	loff_t saved_offset = offset;
2534 	pid_t pid;
2535 	struct TCP_Server_Info *server;
2536 
2537 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2538 		pid = open_file->pid;
2539 	else
2540 		pid = current->tgid;
2541 
2542 	server = tlink_tcon(open_file->tlink)->ses->server;
2543 	memcpy(&saved_from, from, sizeof(struct iov_iter));
2544 
2545 	do {
2546 		unsigned int wsize, credits;
2547 
2548 		rc = server->ops->wait_mtu_credits(server, cifs_sb->wsize,
2549 						   &wsize, &credits);
2550 		if (rc)
2551 			break;
2552 
2553 		nr_pages = get_numpages(wsize, len, &cur_len);
2554 		wdata = cifs_writedata_alloc(nr_pages,
2555 					     cifs_uncached_writev_complete);
2556 		if (!wdata) {
2557 			rc = -ENOMEM;
2558 			add_credits_and_wake_if(server, credits, 0);
2559 			break;
2560 		}
2561 
2562 		rc = cifs_write_allocate_pages(wdata->pages, nr_pages);
2563 		if (rc) {
2564 			kfree(wdata);
2565 			add_credits_and_wake_if(server, credits, 0);
2566 			break;
2567 		}
2568 
2569 		num_pages = nr_pages;
2570 		rc = wdata_fill_from_iovec(wdata, from, &cur_len, &num_pages);
2571 		if (rc) {
2572 			for (i = 0; i < nr_pages; i++)
2573 				put_page(wdata->pages[i]);
2574 			kfree(wdata);
2575 			add_credits_and_wake_if(server, credits, 0);
2576 			break;
2577 		}
2578 
2579 		/*
2580 		 * Bring nr_pages down to the number of pages we actually used,
2581 		 * and free any pages that we didn't use.
2582 		 */
2583 		for ( ; nr_pages > num_pages; nr_pages--)
2584 			put_page(wdata->pages[nr_pages - 1]);
2585 
2586 		wdata->sync_mode = WB_SYNC_ALL;
2587 		wdata->nr_pages = nr_pages;
2588 		wdata->offset = (__u64)offset;
2589 		wdata->cfile = cifsFileInfo_get(open_file);
2590 		wdata->pid = pid;
2591 		wdata->bytes = cur_len;
2592 		wdata->pagesz = PAGE_SIZE;
2593 		wdata->tailsz = cur_len - ((nr_pages - 1) * PAGE_SIZE);
2594 		wdata->credits = credits;
2595 
2596 		if (!wdata->cfile->invalidHandle ||
2597 		    !(rc = cifs_reopen_file(wdata->cfile, false)))
2598 			rc = server->ops->async_writev(wdata,
2599 					cifs_uncached_writedata_release);
2600 		if (rc) {
2601 			add_credits_and_wake_if(server, wdata->credits, 0);
2602 			kref_put(&wdata->refcount,
2603 				 cifs_uncached_writedata_release);
2604 			if (rc == -EAGAIN) {
2605 				memcpy(from, &saved_from,
2606 				       sizeof(struct iov_iter));
2607 				iov_iter_advance(from, offset - saved_offset);
2608 				continue;
2609 			}
2610 			break;
2611 		}
2612 
2613 		list_add_tail(&wdata->list, wdata_list);
2614 		offset += cur_len;
2615 		len -= cur_len;
2616 	} while (len > 0);
2617 
2618 	return rc;
2619 }
2620 
cifs_user_writev(struct kiocb * iocb,struct iov_iter * from)2621 ssize_t cifs_user_writev(struct kiocb *iocb, struct iov_iter *from)
2622 {
2623 	struct file *file = iocb->ki_filp;
2624 	ssize_t total_written = 0;
2625 	struct cifsFileInfo *open_file;
2626 	struct cifs_tcon *tcon;
2627 	struct cifs_sb_info *cifs_sb;
2628 	struct cifs_writedata *wdata, *tmp;
2629 	struct list_head wdata_list;
2630 	struct iov_iter saved_from;
2631 	int rc;
2632 
2633 	/*
2634 	 * BB - optimize the way when signing is disabled. We can drop this
2635 	 * extra memory-to-memory copying and use iovec buffers for constructing
2636 	 * write request.
2637 	 */
2638 
2639 	rc = generic_write_checks(iocb, from);
2640 	if (rc <= 0)
2641 		return rc;
2642 
2643 	INIT_LIST_HEAD(&wdata_list);
2644 	cifs_sb = CIFS_FILE_SB(file);
2645 	open_file = file->private_data;
2646 	tcon = tlink_tcon(open_file->tlink);
2647 
2648 	if (!tcon->ses->server->ops->async_writev)
2649 		return -ENOSYS;
2650 
2651 	memcpy(&saved_from, from, sizeof(struct iov_iter));
2652 
2653 	rc = cifs_write_from_iter(iocb->ki_pos, iov_iter_count(from), from,
2654 				  open_file, cifs_sb, &wdata_list);
2655 
2656 	/*
2657 	 * If at least one write was successfully sent, then discard any rc
2658 	 * value from the later writes. If the other write succeeds, then
2659 	 * we'll end up returning whatever was written. If it fails, then
2660 	 * we'll get a new rc value from that.
2661 	 */
2662 	if (!list_empty(&wdata_list))
2663 		rc = 0;
2664 
2665 	/*
2666 	 * Wait for and collect replies for any successful sends in order of
2667 	 * increasing offset. Once an error is hit or we get a fatal signal
2668 	 * while waiting, then return without waiting for any more replies.
2669 	 */
2670 restart_loop:
2671 	list_for_each_entry_safe(wdata, tmp, &wdata_list, list) {
2672 		if (!rc) {
2673 			/* FIXME: freezable too? */
2674 			rc = wait_for_completion_killable(&wdata->done);
2675 			if (rc)
2676 				rc = -EINTR;
2677 			else if (wdata->result)
2678 				rc = wdata->result;
2679 			else
2680 				total_written += wdata->bytes;
2681 
2682 			/* resend call if it's a retryable error */
2683 			if (rc == -EAGAIN) {
2684 				struct list_head tmp_list;
2685 				struct iov_iter tmp_from;
2686 
2687 				INIT_LIST_HEAD(&tmp_list);
2688 				list_del_init(&wdata->list);
2689 
2690 				memcpy(&tmp_from, &saved_from,
2691 				       sizeof(struct iov_iter));
2692 				iov_iter_advance(&tmp_from,
2693 						 wdata->offset - iocb->ki_pos);
2694 
2695 				rc = cifs_write_from_iter(wdata->offset,
2696 						wdata->bytes, &tmp_from,
2697 						open_file, cifs_sb, &tmp_list);
2698 
2699 				list_splice(&tmp_list, &wdata_list);
2700 
2701 				kref_put(&wdata->refcount,
2702 					 cifs_uncached_writedata_release);
2703 				goto restart_loop;
2704 			}
2705 		}
2706 		list_del_init(&wdata->list);
2707 		kref_put(&wdata->refcount, cifs_uncached_writedata_release);
2708 	}
2709 
2710 	if (unlikely(!total_written))
2711 		return rc;
2712 
2713 	iocb->ki_pos += total_written;
2714 	set_bit(CIFS_INO_INVALID_MAPPING, &CIFS_I(file_inode(file))->flags);
2715 	cifs_stats_bytes_written(tcon, total_written);
2716 	return total_written;
2717 }
2718 
2719 static ssize_t
cifs_writev(struct kiocb * iocb,struct iov_iter * from)2720 cifs_writev(struct kiocb *iocb, struct iov_iter *from)
2721 {
2722 	struct file *file = iocb->ki_filp;
2723 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
2724 	struct inode *inode = file->f_mapping->host;
2725 	struct cifsInodeInfo *cinode = CIFS_I(inode);
2726 	struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
2727 	ssize_t rc;
2728 
2729 	/*
2730 	 * We need to hold the sem to be sure nobody modifies lock list
2731 	 * with a brlock that prevents writing.
2732 	 */
2733 	down_read(&cinode->lock_sem);
2734 	mutex_lock(&inode->i_mutex);
2735 
2736 	rc = generic_write_checks(iocb, from);
2737 	if (rc <= 0)
2738 		goto out;
2739 
2740 	if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(from),
2741 				     server->vals->exclusive_lock_type, NULL,
2742 				     CIFS_WRITE_OP))
2743 		rc = __generic_file_write_iter(iocb, from);
2744 	else
2745 		rc = -EACCES;
2746 out:
2747 	mutex_unlock(&inode->i_mutex);
2748 
2749 	if (rc > 0) {
2750 		ssize_t err = generic_write_sync(file, iocb->ki_pos - rc, rc);
2751 		if (err < 0)
2752 			rc = err;
2753 	}
2754 	up_read(&cinode->lock_sem);
2755 	return rc;
2756 }
2757 
2758 ssize_t
cifs_strict_writev(struct kiocb * iocb,struct iov_iter * from)2759 cifs_strict_writev(struct kiocb *iocb, struct iov_iter *from)
2760 {
2761 	struct inode *inode = file_inode(iocb->ki_filp);
2762 	struct cifsInodeInfo *cinode = CIFS_I(inode);
2763 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2764 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)
2765 						iocb->ki_filp->private_data;
2766 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
2767 	ssize_t written;
2768 
2769 	written = cifs_get_writer(cinode);
2770 	if (written)
2771 		return written;
2772 
2773 	if (CIFS_CACHE_WRITE(cinode)) {
2774 		if (cap_unix(tcon->ses) &&
2775 		(CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability))
2776 		  && ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) {
2777 			written = generic_file_write_iter(iocb, from);
2778 			goto out;
2779 		}
2780 		written = cifs_writev(iocb, from);
2781 		goto out;
2782 	}
2783 	/*
2784 	 * For non-oplocked files in strict cache mode we need to write the data
2785 	 * to the server exactly from the pos to pos+len-1 rather than flush all
2786 	 * affected pages because it may cause a error with mandatory locks on
2787 	 * these pages but not on the region from pos to ppos+len-1.
2788 	 */
2789 	written = cifs_user_writev(iocb, from);
2790 	if (CIFS_CACHE_READ(cinode)) {
2791 		/*
2792 		 * We have read level caching and we have just sent a write
2793 		 * request to the server thus making data in the cache stale.
2794 		 * Zap the cache and set oplock/lease level to NONE to avoid
2795 		 * reading stale data from the cache. All subsequent read
2796 		 * operations will read new data from the server.
2797 		 */
2798 		cifs_zap_mapping(inode);
2799 		cifs_dbg(FYI, "Set Oplock/Lease to NONE for inode=%p after write\n",
2800 			 inode);
2801 		cinode->oplock = 0;
2802 	}
2803 out:
2804 	cifs_put_writer(cinode);
2805 	return written;
2806 }
2807 
2808 static struct cifs_readdata *
cifs_readdata_alloc(unsigned int nr_pages,work_func_t complete)2809 cifs_readdata_alloc(unsigned int nr_pages, work_func_t complete)
2810 {
2811 	struct cifs_readdata *rdata;
2812 
2813 	rdata = kzalloc(sizeof(*rdata) + (sizeof(struct page *) * nr_pages),
2814 			GFP_KERNEL);
2815 	if (rdata != NULL) {
2816 		kref_init(&rdata->refcount);
2817 		INIT_LIST_HEAD(&rdata->list);
2818 		init_completion(&rdata->done);
2819 		INIT_WORK(&rdata->work, complete);
2820 	}
2821 
2822 	return rdata;
2823 }
2824 
2825 void
cifs_readdata_release(struct kref * refcount)2826 cifs_readdata_release(struct kref *refcount)
2827 {
2828 	struct cifs_readdata *rdata = container_of(refcount,
2829 					struct cifs_readdata, refcount);
2830 
2831 	if (rdata->cfile)
2832 		cifsFileInfo_put(rdata->cfile);
2833 
2834 	kfree(rdata);
2835 }
2836 
2837 static int
cifs_read_allocate_pages(struct cifs_readdata * rdata,unsigned int nr_pages)2838 cifs_read_allocate_pages(struct cifs_readdata *rdata, unsigned int nr_pages)
2839 {
2840 	int rc = 0;
2841 	struct page *page;
2842 	unsigned int i;
2843 
2844 	for (i = 0; i < nr_pages; i++) {
2845 		page = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
2846 		if (!page) {
2847 			rc = -ENOMEM;
2848 			break;
2849 		}
2850 		rdata->pages[i] = page;
2851 	}
2852 
2853 	if (rc) {
2854 		unsigned int nr_page_failed = i;
2855 
2856 		for (i = 0; i < nr_page_failed; i++) {
2857 			put_page(rdata->pages[i]);
2858 			rdata->pages[i] = NULL;
2859 		}
2860 	}
2861 	return rc;
2862 }
2863 
2864 static void
cifs_uncached_readdata_release(struct kref * refcount)2865 cifs_uncached_readdata_release(struct kref *refcount)
2866 {
2867 	struct cifs_readdata *rdata = container_of(refcount,
2868 					struct cifs_readdata, refcount);
2869 	unsigned int i;
2870 
2871 	for (i = 0; i < rdata->nr_pages; i++) {
2872 		put_page(rdata->pages[i]);
2873 		rdata->pages[i] = NULL;
2874 	}
2875 	cifs_readdata_release(refcount);
2876 }
2877 
2878 /**
2879  * cifs_readdata_to_iov - copy data from pages in response to an iovec
2880  * @rdata:	the readdata response with list of pages holding data
2881  * @iter:	destination for our data
2882  *
2883  * This function copies data from a list of pages in a readdata response into
2884  * an array of iovecs. It will first calculate where the data should go
2885  * based on the info in the readdata and then copy the data into that spot.
2886  */
2887 static int
cifs_readdata_to_iov(struct cifs_readdata * rdata,struct iov_iter * iter)2888 cifs_readdata_to_iov(struct cifs_readdata *rdata, struct iov_iter *iter)
2889 {
2890 	size_t remaining = rdata->got_bytes;
2891 	unsigned int i;
2892 
2893 	for (i = 0; i < rdata->nr_pages; i++) {
2894 		struct page *page = rdata->pages[i];
2895 		size_t copy = min_t(size_t, remaining, PAGE_SIZE);
2896 		size_t written = copy_page_to_iter(page, 0, copy, iter);
2897 		remaining -= written;
2898 		if (written < copy && iov_iter_count(iter) > 0)
2899 			break;
2900 	}
2901 	return remaining ? -EFAULT : 0;
2902 }
2903 
2904 static void
cifs_uncached_readv_complete(struct work_struct * work)2905 cifs_uncached_readv_complete(struct work_struct *work)
2906 {
2907 	struct cifs_readdata *rdata = container_of(work,
2908 						struct cifs_readdata, work);
2909 
2910 	complete(&rdata->done);
2911 	kref_put(&rdata->refcount, cifs_uncached_readdata_release);
2912 }
2913 
2914 static int
cifs_uncached_read_into_pages(struct TCP_Server_Info * server,struct cifs_readdata * rdata,unsigned int len)2915 cifs_uncached_read_into_pages(struct TCP_Server_Info *server,
2916 			struct cifs_readdata *rdata, unsigned int len)
2917 {
2918 	int result = 0;
2919 	unsigned int i;
2920 	unsigned int nr_pages = rdata->nr_pages;
2921 	struct kvec iov;
2922 
2923 	rdata->got_bytes = 0;
2924 	rdata->tailsz = PAGE_SIZE;
2925 	for (i = 0; i < nr_pages; i++) {
2926 		struct page *page = rdata->pages[i];
2927 
2928 		if (len >= PAGE_SIZE) {
2929 			/* enough data to fill the page */
2930 			iov.iov_base = kmap(page);
2931 			iov.iov_len = PAGE_SIZE;
2932 			cifs_dbg(FYI, "%u: iov_base=%p iov_len=%zu\n",
2933 				 i, iov.iov_base, iov.iov_len);
2934 			len -= PAGE_SIZE;
2935 		} else if (len > 0) {
2936 			/* enough for partial page, fill and zero the rest */
2937 			iov.iov_base = kmap(page);
2938 			iov.iov_len = len;
2939 			cifs_dbg(FYI, "%u: iov_base=%p iov_len=%zu\n",
2940 				 i, iov.iov_base, iov.iov_len);
2941 			memset(iov.iov_base + len, '\0', PAGE_SIZE - len);
2942 			rdata->tailsz = len;
2943 			len = 0;
2944 		} else {
2945 			/* no need to hold page hostage */
2946 			rdata->pages[i] = NULL;
2947 			rdata->nr_pages--;
2948 			put_page(page);
2949 			continue;
2950 		}
2951 
2952 		result = cifs_readv_from_socket(server, &iov, 1, iov.iov_len);
2953 		kunmap(page);
2954 		if (result < 0)
2955 			break;
2956 
2957 		rdata->got_bytes += result;
2958 	}
2959 
2960 	return rdata->got_bytes > 0 && result != -ECONNABORTED ?
2961 						rdata->got_bytes : result;
2962 }
2963 
2964 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)2965 cifs_send_async_read(loff_t offset, size_t len, struct cifsFileInfo *open_file,
2966 		     struct cifs_sb_info *cifs_sb, struct list_head *rdata_list)
2967 {
2968 	struct cifs_readdata *rdata;
2969 	unsigned int npages, rsize, credits;
2970 	size_t cur_len;
2971 	int rc;
2972 	pid_t pid;
2973 	struct TCP_Server_Info *server;
2974 
2975 	server = tlink_tcon(open_file->tlink)->ses->server;
2976 
2977 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2978 		pid = open_file->pid;
2979 	else
2980 		pid = current->tgid;
2981 
2982 	do {
2983 		rc = server->ops->wait_mtu_credits(server, cifs_sb->rsize,
2984 						   &rsize, &credits);
2985 		if (rc)
2986 			break;
2987 
2988 		cur_len = min_t(const size_t, len, rsize);
2989 		npages = DIV_ROUND_UP(cur_len, PAGE_SIZE);
2990 
2991 		/* allocate a readdata struct */
2992 		rdata = cifs_readdata_alloc(npages,
2993 					    cifs_uncached_readv_complete);
2994 		if (!rdata) {
2995 			add_credits_and_wake_if(server, credits, 0);
2996 			rc = -ENOMEM;
2997 			break;
2998 		}
2999 
3000 		rc = cifs_read_allocate_pages(rdata, npages);
3001 		if (rc)
3002 			goto error;
3003 
3004 		rdata->cfile = cifsFileInfo_get(open_file);
3005 		rdata->nr_pages = npages;
3006 		rdata->offset = offset;
3007 		rdata->bytes = cur_len;
3008 		rdata->pid = pid;
3009 		rdata->pagesz = PAGE_SIZE;
3010 		rdata->read_into_pages = cifs_uncached_read_into_pages;
3011 		rdata->credits = credits;
3012 
3013 		if (!rdata->cfile->invalidHandle ||
3014 		    !(rc = cifs_reopen_file(rdata->cfile, true)))
3015 			rc = server->ops->async_readv(rdata);
3016 error:
3017 		if (rc) {
3018 			add_credits_and_wake_if(server, rdata->credits, 0);
3019 			kref_put(&rdata->refcount,
3020 				 cifs_uncached_readdata_release);
3021 			if (rc == -EAGAIN)
3022 				continue;
3023 			break;
3024 		}
3025 
3026 		list_add_tail(&rdata->list, rdata_list);
3027 		offset += cur_len;
3028 		len -= cur_len;
3029 	} while (len > 0);
3030 
3031 	return rc;
3032 }
3033 
cifs_user_readv(struct kiocb * iocb,struct iov_iter * to)3034 ssize_t cifs_user_readv(struct kiocb *iocb, struct iov_iter *to)
3035 {
3036 	struct file *file = iocb->ki_filp;
3037 	ssize_t rc;
3038 	size_t len;
3039 	ssize_t total_read = 0;
3040 	loff_t offset = iocb->ki_pos;
3041 	struct cifs_sb_info *cifs_sb;
3042 	struct cifs_tcon *tcon;
3043 	struct cifsFileInfo *open_file;
3044 	struct cifs_readdata *rdata, *tmp;
3045 	struct list_head rdata_list;
3046 
3047 	len = iov_iter_count(to);
3048 	if (!len)
3049 		return 0;
3050 
3051 	INIT_LIST_HEAD(&rdata_list);
3052 	cifs_sb = CIFS_FILE_SB(file);
3053 	open_file = file->private_data;
3054 	tcon = tlink_tcon(open_file->tlink);
3055 
3056 	if (!tcon->ses->server->ops->async_readv)
3057 		return -ENOSYS;
3058 
3059 	if ((file->f_flags & O_ACCMODE) == O_WRONLY)
3060 		cifs_dbg(FYI, "attempting read on write only file instance\n");
3061 
3062 	rc = cifs_send_async_read(offset, len, open_file, cifs_sb, &rdata_list);
3063 
3064 	/* if at least one read request send succeeded, then reset rc */
3065 	if (!list_empty(&rdata_list))
3066 		rc = 0;
3067 
3068 	len = iov_iter_count(to);
3069 	/* the loop below should proceed in the order of increasing offsets */
3070 again:
3071 	list_for_each_entry_safe(rdata, tmp, &rdata_list, list) {
3072 		if (!rc) {
3073 			/* FIXME: freezable sleep too? */
3074 			rc = wait_for_completion_killable(&rdata->done);
3075 			if (rc)
3076 				rc = -EINTR;
3077 			else if (rdata->result == -EAGAIN) {
3078 				/* resend call if it's a retryable error */
3079 				struct list_head tmp_list;
3080 				unsigned int got_bytes = rdata->got_bytes;
3081 
3082 				list_del_init(&rdata->list);
3083 				INIT_LIST_HEAD(&tmp_list);
3084 
3085 				/*
3086 				 * Got a part of data and then reconnect has
3087 				 * happened -- fill the buffer and continue
3088 				 * reading.
3089 				 */
3090 				if (got_bytes && got_bytes < rdata->bytes) {
3091 					rc = cifs_readdata_to_iov(rdata, to);
3092 					if (rc) {
3093 						kref_put(&rdata->refcount,
3094 						cifs_uncached_readdata_release);
3095 						continue;
3096 					}
3097 				}
3098 
3099 				rc = cifs_send_async_read(
3100 						rdata->offset + got_bytes,
3101 						rdata->bytes - got_bytes,
3102 						rdata->cfile, cifs_sb,
3103 						&tmp_list);
3104 
3105 				list_splice(&tmp_list, &rdata_list);
3106 
3107 				kref_put(&rdata->refcount,
3108 					 cifs_uncached_readdata_release);
3109 				goto again;
3110 			} else if (rdata->result)
3111 				rc = rdata->result;
3112 			else
3113 				rc = cifs_readdata_to_iov(rdata, to);
3114 
3115 			/* if there was a short read -- discard anything left */
3116 			if (rdata->got_bytes && rdata->got_bytes < rdata->bytes)
3117 				rc = -ENODATA;
3118 		}
3119 		list_del_init(&rdata->list);
3120 		kref_put(&rdata->refcount, cifs_uncached_readdata_release);
3121 	}
3122 
3123 	total_read = len - iov_iter_count(to);
3124 
3125 	cifs_stats_bytes_read(tcon, total_read);
3126 
3127 	/* mask nodata case */
3128 	if (rc == -ENODATA)
3129 		rc = 0;
3130 
3131 	if (total_read) {
3132 		iocb->ki_pos += total_read;
3133 		return total_read;
3134 	}
3135 	return rc;
3136 }
3137 
3138 ssize_t
cifs_strict_readv(struct kiocb * iocb,struct iov_iter * to)3139 cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to)
3140 {
3141 	struct inode *inode = file_inode(iocb->ki_filp);
3142 	struct cifsInodeInfo *cinode = CIFS_I(inode);
3143 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
3144 	struct cifsFileInfo *cfile = (struct cifsFileInfo *)
3145 						iocb->ki_filp->private_data;
3146 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
3147 	int rc = -EACCES;
3148 
3149 	/*
3150 	 * In strict cache mode we need to read from the server all the time
3151 	 * if we don't have level II oplock because the server can delay mtime
3152 	 * change - so we can't make a decision about inode invalidating.
3153 	 * And we can also fail with pagereading if there are mandatory locks
3154 	 * on pages affected by this read but not on the region from pos to
3155 	 * pos+len-1.
3156 	 */
3157 	if (!CIFS_CACHE_READ(cinode))
3158 		return cifs_user_readv(iocb, to);
3159 
3160 	if (cap_unix(tcon->ses) &&
3161 	    (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
3162 	    ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
3163 		return generic_file_read_iter(iocb, to);
3164 
3165 	/*
3166 	 * We need to hold the sem to be sure nobody modifies lock list
3167 	 * with a brlock that prevents reading.
3168 	 */
3169 	down_read(&cinode->lock_sem);
3170 	if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(to),
3171 				     tcon->ses->server->vals->shared_lock_type,
3172 				     NULL, CIFS_READ_OP))
3173 		rc = generic_file_read_iter(iocb, to);
3174 	up_read(&cinode->lock_sem);
3175 	return rc;
3176 }
3177 
3178 static ssize_t
cifs_read(struct file * file,char * read_data,size_t read_size,loff_t * offset)3179 cifs_read(struct file *file, char *read_data, size_t read_size, loff_t *offset)
3180 {
3181 	int rc = -EACCES;
3182 	unsigned int bytes_read = 0;
3183 	unsigned int total_read;
3184 	unsigned int current_read_size;
3185 	unsigned int rsize;
3186 	struct cifs_sb_info *cifs_sb;
3187 	struct cifs_tcon *tcon;
3188 	struct TCP_Server_Info *server;
3189 	unsigned int xid;
3190 	char *cur_offset;
3191 	struct cifsFileInfo *open_file;
3192 	struct cifs_io_parms io_parms;
3193 	int buf_type = CIFS_NO_BUFFER;
3194 	__u32 pid;
3195 
3196 	xid = get_xid();
3197 	cifs_sb = CIFS_FILE_SB(file);
3198 
3199 	/* FIXME: set up handlers for larger reads and/or convert to async */
3200 	rsize = min_t(unsigned int, cifs_sb->rsize, CIFSMaxBufSize);
3201 
3202 	if (file->private_data == NULL) {
3203 		rc = -EBADF;
3204 		free_xid(xid);
3205 		return rc;
3206 	}
3207 	open_file = file->private_data;
3208 	tcon = tlink_tcon(open_file->tlink);
3209 	server = tcon->ses->server;
3210 
3211 	if (!server->ops->sync_read) {
3212 		free_xid(xid);
3213 		return -ENOSYS;
3214 	}
3215 
3216 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
3217 		pid = open_file->pid;
3218 	else
3219 		pid = current->tgid;
3220 
3221 	if ((file->f_flags & O_ACCMODE) == O_WRONLY)
3222 		cifs_dbg(FYI, "attempting read on write only file instance\n");
3223 
3224 	for (total_read = 0, cur_offset = read_data; read_size > total_read;
3225 	     total_read += bytes_read, cur_offset += bytes_read) {
3226 		do {
3227 			current_read_size = min_t(uint, read_size - total_read,
3228 						  rsize);
3229 			/*
3230 			 * For windows me and 9x we do not want to request more
3231 			 * than it negotiated since it will refuse the read
3232 			 * then.
3233 			 */
3234 			if (!(tcon->ses->capabilities &
3235 				tcon->ses->server->vals->cap_large_files)) {
3236 				current_read_size = min_t(uint,
3237 					current_read_size, CIFSMaxBufSize);
3238 			}
3239 			if (open_file->invalidHandle) {
3240 				rc = cifs_reopen_file(open_file, true);
3241 				if (rc != 0)
3242 					break;
3243 			}
3244 			io_parms.pid = pid;
3245 			io_parms.tcon = tcon;
3246 			io_parms.offset = *offset;
3247 			io_parms.length = current_read_size;
3248 			rc = server->ops->sync_read(xid, &open_file->fid, &io_parms,
3249 						    &bytes_read, &cur_offset,
3250 						    &buf_type);
3251 		} while (rc == -EAGAIN);
3252 
3253 		if (rc || (bytes_read == 0)) {
3254 			if (total_read) {
3255 				break;
3256 			} else {
3257 				free_xid(xid);
3258 				return rc;
3259 			}
3260 		} else {
3261 			cifs_stats_bytes_read(tcon, total_read);
3262 			*offset += bytes_read;
3263 		}
3264 	}
3265 	free_xid(xid);
3266 	return total_read;
3267 }
3268 
3269 /*
3270  * If the page is mmap'ed into a process' page tables, then we need to make
3271  * sure that it doesn't change while being written back.
3272  */
3273 static int
cifs_page_mkwrite(struct vm_area_struct * vma,struct vm_fault * vmf)3274 cifs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
3275 {
3276 	struct page *page = vmf->page;
3277 
3278 	lock_page(page);
3279 	return VM_FAULT_LOCKED;
3280 }
3281 
3282 static const struct vm_operations_struct cifs_file_vm_ops = {
3283 	.fault = filemap_fault,
3284 	.map_pages = filemap_map_pages,
3285 	.page_mkwrite = cifs_page_mkwrite,
3286 };
3287 
cifs_file_strict_mmap(struct file * file,struct vm_area_struct * vma)3288 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
3289 {
3290 	int xid, rc = 0;
3291 	struct inode *inode = file_inode(file);
3292 
3293 	xid = get_xid();
3294 
3295 	if (!CIFS_CACHE_READ(CIFS_I(inode)))
3296 		rc = cifs_zap_mapping(inode);
3297 	if (!rc)
3298 		rc = generic_file_mmap(file, vma);
3299 	if (!rc)
3300 		vma->vm_ops = &cifs_file_vm_ops;
3301 
3302 	free_xid(xid);
3303 	return rc;
3304 }
3305 
cifs_file_mmap(struct file * file,struct vm_area_struct * vma)3306 int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
3307 {
3308 	int rc, xid;
3309 
3310 	xid = get_xid();
3311 
3312 	rc = cifs_revalidate_file(file);
3313 	if (rc)
3314 		cifs_dbg(FYI, "Validation prior to mmap failed, error=%d\n",
3315 			 rc);
3316 	if (!rc)
3317 		rc = generic_file_mmap(file, vma);
3318 	if (!rc)
3319 		vma->vm_ops = &cifs_file_vm_ops;
3320 
3321 	free_xid(xid);
3322 	return rc;
3323 }
3324 
3325 static void
cifs_readv_complete(struct work_struct * work)3326 cifs_readv_complete(struct work_struct *work)
3327 {
3328 	unsigned int i, got_bytes;
3329 	struct cifs_readdata *rdata = container_of(work,
3330 						struct cifs_readdata, work);
3331 
3332 	got_bytes = rdata->got_bytes;
3333 	for (i = 0; i < rdata->nr_pages; i++) {
3334 		struct page *page = rdata->pages[i];
3335 
3336 		lru_cache_add_file(page);
3337 
3338 		if (rdata->result == 0 ||
3339 		    (rdata->result == -EAGAIN && got_bytes)) {
3340 			flush_dcache_page(page);
3341 			SetPageUptodate(page);
3342 		}
3343 
3344 		unlock_page(page);
3345 
3346 		if (rdata->result == 0 ||
3347 		    (rdata->result == -EAGAIN && got_bytes))
3348 			cifs_readpage_to_fscache(rdata->mapping->host, page);
3349 
3350 		got_bytes -= min_t(unsigned int, PAGE_CACHE_SIZE, got_bytes);
3351 
3352 		page_cache_release(page);
3353 		rdata->pages[i] = NULL;
3354 	}
3355 	kref_put(&rdata->refcount, cifs_readdata_release);
3356 }
3357 
3358 static int
cifs_readpages_read_into_pages(struct TCP_Server_Info * server,struct cifs_readdata * rdata,unsigned int len)3359 cifs_readpages_read_into_pages(struct TCP_Server_Info *server,
3360 			struct cifs_readdata *rdata, unsigned int len)
3361 {
3362 	int result = 0;
3363 	unsigned int i;
3364 	u64 eof;
3365 	pgoff_t eof_index;
3366 	unsigned int nr_pages = rdata->nr_pages;
3367 	struct kvec iov;
3368 
3369 	/* determine the eof that the server (probably) has */
3370 	eof = CIFS_I(rdata->mapping->host)->server_eof;
3371 	eof_index = eof ? (eof - 1) >> PAGE_CACHE_SHIFT : 0;
3372 	cifs_dbg(FYI, "eof=%llu eof_index=%lu\n", eof, eof_index);
3373 
3374 	rdata->got_bytes = 0;
3375 	rdata->tailsz = PAGE_CACHE_SIZE;
3376 	for (i = 0; i < nr_pages; i++) {
3377 		struct page *page = rdata->pages[i];
3378 
3379 		if (len >= PAGE_CACHE_SIZE) {
3380 			/* enough data to fill the page */
3381 			iov.iov_base = kmap(page);
3382 			iov.iov_len = PAGE_CACHE_SIZE;
3383 			cifs_dbg(FYI, "%u: idx=%lu iov_base=%p iov_len=%zu\n",
3384 				 i, page->index, iov.iov_base, iov.iov_len);
3385 			len -= PAGE_CACHE_SIZE;
3386 		} else if (len > 0) {
3387 			/* enough for partial page, fill and zero the rest */
3388 			iov.iov_base = kmap(page);
3389 			iov.iov_len = len;
3390 			cifs_dbg(FYI, "%u: idx=%lu iov_base=%p iov_len=%zu\n",
3391 				 i, page->index, iov.iov_base, iov.iov_len);
3392 			memset(iov.iov_base + len,
3393 				'\0', PAGE_CACHE_SIZE - len);
3394 			rdata->tailsz = len;
3395 			len = 0;
3396 		} else if (page->index > eof_index) {
3397 			/*
3398 			 * The VFS will not try to do readahead past the
3399 			 * i_size, but it's possible that we have outstanding
3400 			 * writes with gaps in the middle and the i_size hasn't
3401 			 * caught up yet. Populate those with zeroed out pages
3402 			 * to prevent the VFS from repeatedly attempting to
3403 			 * fill them until the writes are flushed.
3404 			 */
3405 			zero_user(page, 0, PAGE_CACHE_SIZE);
3406 			lru_cache_add_file(page);
3407 			flush_dcache_page(page);
3408 			SetPageUptodate(page);
3409 			unlock_page(page);
3410 			page_cache_release(page);
3411 			rdata->pages[i] = NULL;
3412 			rdata->nr_pages--;
3413 			continue;
3414 		} else {
3415 			/* no need to hold page hostage */
3416 			lru_cache_add_file(page);
3417 			unlock_page(page);
3418 			page_cache_release(page);
3419 			rdata->pages[i] = NULL;
3420 			rdata->nr_pages--;
3421 			continue;
3422 		}
3423 
3424 		result = cifs_readv_from_socket(server, &iov, 1, iov.iov_len);
3425 		kunmap(page);
3426 		if (result < 0)
3427 			break;
3428 
3429 		rdata->got_bytes += result;
3430 	}
3431 
3432 	return rdata->got_bytes > 0 && result != -ECONNABORTED ?
3433 						rdata->got_bytes : result;
3434 }
3435 
3436 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)3437 readpages_get_pages(struct address_space *mapping, struct list_head *page_list,
3438 		    unsigned int rsize, struct list_head *tmplist,
3439 		    unsigned int *nr_pages, loff_t *offset, unsigned int *bytes)
3440 {
3441 	struct page *page, *tpage;
3442 	unsigned int expected_index;
3443 	int rc;
3444 	gfp_t gfp = mapping_gfp_constraint(mapping, GFP_KERNEL);
3445 
3446 	INIT_LIST_HEAD(tmplist);
3447 
3448 	page = list_entry(page_list->prev, struct page, lru);
3449 
3450 	/*
3451 	 * Lock the page and put it in the cache. Since no one else
3452 	 * should have access to this page, we're safe to simply set
3453 	 * PG_locked without checking it first.
3454 	 */
3455 	__set_page_locked(page);
3456 	rc = add_to_page_cache_locked(page, mapping,
3457 				      page->index, gfp);
3458 
3459 	/* give up if we can't stick it in the cache */
3460 	if (rc) {
3461 		__clear_page_locked(page);
3462 		return rc;
3463 	}
3464 
3465 	/* move first page to the tmplist */
3466 	*offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
3467 	*bytes = PAGE_CACHE_SIZE;
3468 	*nr_pages = 1;
3469 	list_move_tail(&page->lru, tmplist);
3470 
3471 	/* now try and add more pages onto the request */
3472 	expected_index = page->index + 1;
3473 	list_for_each_entry_safe_reverse(page, tpage, page_list, lru) {
3474 		/* discontinuity ? */
3475 		if (page->index != expected_index)
3476 			break;
3477 
3478 		/* would this page push the read over the rsize? */
3479 		if (*bytes + PAGE_CACHE_SIZE > rsize)
3480 			break;
3481 
3482 		__set_page_locked(page);
3483 		if (add_to_page_cache_locked(page, mapping, page->index, gfp)) {
3484 			__clear_page_locked(page);
3485 			break;
3486 		}
3487 		list_move_tail(&page->lru, tmplist);
3488 		(*bytes) += PAGE_CACHE_SIZE;
3489 		expected_index++;
3490 		(*nr_pages)++;
3491 	}
3492 	return rc;
3493 }
3494 
cifs_readpages(struct file * file,struct address_space * mapping,struct list_head * page_list,unsigned num_pages)3495 static int cifs_readpages(struct file *file, struct address_space *mapping,
3496 	struct list_head *page_list, unsigned num_pages)
3497 {
3498 	int rc;
3499 	struct list_head tmplist;
3500 	struct cifsFileInfo *open_file = file->private_data;
3501 	struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
3502 	struct TCP_Server_Info *server;
3503 	pid_t pid;
3504 
3505 	/*
3506 	 * Reads as many pages as possible from fscache. Returns -ENOBUFS
3507 	 * immediately if the cookie is negative
3508 	 *
3509 	 * After this point, every page in the list might have PG_fscache set,
3510 	 * so we will need to clean that up off of every page we don't use.
3511 	 */
3512 	rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,
3513 					 &num_pages);
3514 	if (rc == 0)
3515 		return rc;
3516 
3517 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
3518 		pid = open_file->pid;
3519 	else
3520 		pid = current->tgid;
3521 
3522 	rc = 0;
3523 	server = tlink_tcon(open_file->tlink)->ses->server;
3524 
3525 	cifs_dbg(FYI, "%s: file=%p mapping=%p num_pages=%u\n",
3526 		 __func__, file, mapping, num_pages);
3527 
3528 	/*
3529 	 * Start with the page at end of list and move it to private
3530 	 * list. Do the same with any following pages until we hit
3531 	 * the rsize limit, hit an index discontinuity, or run out of
3532 	 * pages. Issue the async read and then start the loop again
3533 	 * until the list is empty.
3534 	 *
3535 	 * Note that list order is important. The page_list is in
3536 	 * the order of declining indexes. When we put the pages in
3537 	 * the rdata->pages, then we want them in increasing order.
3538 	 */
3539 	while (!list_empty(page_list)) {
3540 		unsigned int i, nr_pages, bytes, rsize;
3541 		loff_t offset;
3542 		struct page *page, *tpage;
3543 		struct cifs_readdata *rdata;
3544 		unsigned credits;
3545 
3546 		rc = server->ops->wait_mtu_credits(server, cifs_sb->rsize,
3547 						   &rsize, &credits);
3548 		if (rc)
3549 			break;
3550 
3551 		/*
3552 		 * Give up immediately if rsize is too small to read an entire
3553 		 * page. The VFS will fall back to readpage. We should never
3554 		 * reach this point however since we set ra_pages to 0 when the
3555 		 * rsize is smaller than a cache page.
3556 		 */
3557 		if (unlikely(rsize < PAGE_CACHE_SIZE)) {
3558 			add_credits_and_wake_if(server, credits, 0);
3559 			return 0;
3560 		}
3561 
3562 		rc = readpages_get_pages(mapping, page_list, rsize, &tmplist,
3563 					 &nr_pages, &offset, &bytes);
3564 		if (rc) {
3565 			add_credits_and_wake_if(server, credits, 0);
3566 			break;
3567 		}
3568 
3569 		rdata = cifs_readdata_alloc(nr_pages, cifs_readv_complete);
3570 		if (!rdata) {
3571 			/* best to give up if we're out of mem */
3572 			list_for_each_entry_safe(page, tpage, &tmplist, lru) {
3573 				list_del(&page->lru);
3574 				lru_cache_add_file(page);
3575 				unlock_page(page);
3576 				page_cache_release(page);
3577 			}
3578 			rc = -ENOMEM;
3579 			add_credits_and_wake_if(server, credits, 0);
3580 			break;
3581 		}
3582 
3583 		rdata->cfile = cifsFileInfo_get(open_file);
3584 		rdata->mapping = mapping;
3585 		rdata->offset = offset;
3586 		rdata->bytes = bytes;
3587 		rdata->pid = pid;
3588 		rdata->pagesz = PAGE_CACHE_SIZE;
3589 		rdata->read_into_pages = cifs_readpages_read_into_pages;
3590 		rdata->credits = credits;
3591 
3592 		list_for_each_entry_safe(page, tpage, &tmplist, lru) {
3593 			list_del(&page->lru);
3594 			rdata->pages[rdata->nr_pages++] = page;
3595 		}
3596 
3597 		if (!rdata->cfile->invalidHandle ||
3598 		    !(rc = cifs_reopen_file(rdata->cfile, true)))
3599 			rc = server->ops->async_readv(rdata);
3600 		if (rc) {
3601 			add_credits_and_wake_if(server, rdata->credits, 0);
3602 			for (i = 0; i < rdata->nr_pages; i++) {
3603 				page = rdata->pages[i];
3604 				lru_cache_add_file(page);
3605 				unlock_page(page);
3606 				page_cache_release(page);
3607 			}
3608 			/* Fallback to the readpage in error/reconnect cases */
3609 			kref_put(&rdata->refcount, cifs_readdata_release);
3610 			break;
3611 		}
3612 
3613 		kref_put(&rdata->refcount, cifs_readdata_release);
3614 	}
3615 
3616 	/* Any pages that have been shown to fscache but didn't get added to
3617 	 * the pagecache must be uncached before they get returned to the
3618 	 * allocator.
3619 	 */
3620 	cifs_fscache_readpages_cancel(mapping->host, page_list);
3621 	return rc;
3622 }
3623 
3624 /*
3625  * cifs_readpage_worker must be called with the page pinned
3626  */
cifs_readpage_worker(struct file * file,struct page * page,loff_t * poffset)3627 static int cifs_readpage_worker(struct file *file, struct page *page,
3628 	loff_t *poffset)
3629 {
3630 	char *read_data;
3631 	int rc;
3632 
3633 	/* Is the page cached? */
3634 	rc = cifs_readpage_from_fscache(file_inode(file), page);
3635 	if (rc == 0)
3636 		goto read_complete;
3637 
3638 	read_data = kmap(page);
3639 	/* for reads over a certain size could initiate async read ahead */
3640 
3641 	rc = cifs_read(file, read_data, PAGE_CACHE_SIZE, poffset);
3642 
3643 	if (rc < 0)
3644 		goto io_error;
3645 	else
3646 		cifs_dbg(FYI, "Bytes read %d\n", rc);
3647 
3648 	file_inode(file)->i_atime =
3649 		current_fs_time(file_inode(file)->i_sb);
3650 
3651 	if (PAGE_CACHE_SIZE > rc)
3652 		memset(read_data + rc, 0, PAGE_CACHE_SIZE - rc);
3653 
3654 	flush_dcache_page(page);
3655 	SetPageUptodate(page);
3656 
3657 	/* send this page to the cache */
3658 	cifs_readpage_to_fscache(file_inode(file), page);
3659 
3660 	rc = 0;
3661 
3662 io_error:
3663 	kunmap(page);
3664 	unlock_page(page);
3665 
3666 read_complete:
3667 	return rc;
3668 }
3669 
cifs_readpage(struct file * file,struct page * page)3670 static int cifs_readpage(struct file *file, struct page *page)
3671 {
3672 	loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
3673 	int rc = -EACCES;
3674 	unsigned int xid;
3675 
3676 	xid = get_xid();
3677 
3678 	if (file->private_data == NULL) {
3679 		rc = -EBADF;
3680 		free_xid(xid);
3681 		return rc;
3682 	}
3683 
3684 	cifs_dbg(FYI, "readpage %p at offset %d 0x%x\n",
3685 		 page, (int)offset, (int)offset);
3686 
3687 	rc = cifs_readpage_worker(file, page, &offset);
3688 
3689 	free_xid(xid);
3690 	return rc;
3691 }
3692 
is_inode_writable(struct cifsInodeInfo * cifs_inode)3693 static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
3694 {
3695 	struct cifsFileInfo *open_file;
3696 	struct cifs_tcon *tcon =
3697 		cifs_sb_master_tcon(CIFS_SB(cifs_inode->vfs_inode.i_sb));
3698 
3699 	spin_lock(&tcon->open_file_lock);
3700 	list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
3701 		if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
3702 			spin_unlock(&tcon->open_file_lock);
3703 			return 1;
3704 		}
3705 	}
3706 	spin_unlock(&tcon->open_file_lock);
3707 	return 0;
3708 }
3709 
3710 /* We do not want to update the file size from server for inodes
3711    open for write - to avoid races with writepage extending
3712    the file - in the future we could consider allowing
3713    refreshing the inode only on increases in the file size
3714    but this is tricky to do without racing with writebehind
3715    page caching in the current Linux kernel design */
is_size_safe_to_change(struct cifsInodeInfo * cifsInode,__u64 end_of_file)3716 bool is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file)
3717 {
3718 	if (!cifsInode)
3719 		return true;
3720 
3721 	if (is_inode_writable(cifsInode)) {
3722 		/* This inode is open for write at least once */
3723 		struct cifs_sb_info *cifs_sb;
3724 
3725 		cifs_sb = CIFS_SB(cifsInode->vfs_inode.i_sb);
3726 		if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO) {
3727 			/* since no page cache to corrupt on directio
3728 			we can change size safely */
3729 			return true;
3730 		}
3731 
3732 		if (i_size_read(&cifsInode->vfs_inode) < end_of_file)
3733 			return true;
3734 
3735 		return false;
3736 	} else
3737 		return true;
3738 }
3739 
cifs_write_begin(struct file * file,struct address_space * mapping,loff_t pos,unsigned len,unsigned flags,struct page ** pagep,void ** fsdata)3740 static int cifs_write_begin(struct file *file, struct address_space *mapping,
3741 			loff_t pos, unsigned len, unsigned flags,
3742 			struct page **pagep, void **fsdata)
3743 {
3744 	int oncethru = 0;
3745 	pgoff_t index = pos >> PAGE_CACHE_SHIFT;
3746 	loff_t offset = pos & (PAGE_CACHE_SIZE - 1);
3747 	loff_t page_start = pos & PAGE_MASK;
3748 	loff_t i_size;
3749 	struct page *page;
3750 	int rc = 0;
3751 
3752 	cifs_dbg(FYI, "write_begin from %lld len %d\n", (long long)pos, len);
3753 
3754 start:
3755 	page = grab_cache_page_write_begin(mapping, index, flags);
3756 	if (!page) {
3757 		rc = -ENOMEM;
3758 		goto out;
3759 	}
3760 
3761 	if (PageUptodate(page))
3762 		goto out;
3763 
3764 	/*
3765 	 * If we write a full page it will be up to date, no need to read from
3766 	 * the server. If the write is short, we'll end up doing a sync write
3767 	 * instead.
3768 	 */
3769 	if (len == PAGE_CACHE_SIZE)
3770 		goto out;
3771 
3772 	/*
3773 	 * optimize away the read when we have an oplock, and we're not
3774 	 * expecting to use any of the data we'd be reading in. That
3775 	 * is, when the page lies beyond the EOF, or straddles the EOF
3776 	 * and the write will cover all of the existing data.
3777 	 */
3778 	if (CIFS_CACHE_READ(CIFS_I(mapping->host))) {
3779 		i_size = i_size_read(mapping->host);
3780 		if (page_start >= i_size ||
3781 		    (offset == 0 && (pos + len) >= i_size)) {
3782 			zero_user_segments(page, 0, offset,
3783 					   offset + len,
3784 					   PAGE_CACHE_SIZE);
3785 			/*
3786 			 * PageChecked means that the parts of the page
3787 			 * to which we're not writing are considered up
3788 			 * to date. Once the data is copied to the
3789 			 * page, it can be set uptodate.
3790 			 */
3791 			SetPageChecked(page);
3792 			goto out;
3793 		}
3794 	}
3795 
3796 	if ((file->f_flags & O_ACCMODE) != O_WRONLY && !oncethru) {
3797 		/*
3798 		 * might as well read a page, it is fast enough. If we get
3799 		 * an error, we don't need to return it. cifs_write_end will
3800 		 * do a sync write instead since PG_uptodate isn't set.
3801 		 */
3802 		cifs_readpage_worker(file, page, &page_start);
3803 		page_cache_release(page);
3804 		oncethru = 1;
3805 		goto start;
3806 	} else {
3807 		/* we could try using another file handle if there is one -
3808 		   but how would we lock it to prevent close of that handle
3809 		   racing with this read? In any case
3810 		   this will be written out by write_end so is fine */
3811 	}
3812 out:
3813 	*pagep = page;
3814 	return rc;
3815 }
3816 
cifs_release_page(struct page * page,gfp_t gfp)3817 static int cifs_release_page(struct page *page, gfp_t gfp)
3818 {
3819 	if (PagePrivate(page))
3820 		return 0;
3821 
3822 	return cifs_fscache_release_page(page, gfp);
3823 }
3824 
cifs_invalidate_page(struct page * page,unsigned int offset,unsigned int length)3825 static void cifs_invalidate_page(struct page *page, unsigned int offset,
3826 				 unsigned int length)
3827 {
3828 	struct cifsInodeInfo *cifsi = CIFS_I(page->mapping->host);
3829 
3830 	if (offset == 0 && length == PAGE_CACHE_SIZE)
3831 		cifs_fscache_invalidate_page(page, &cifsi->vfs_inode);
3832 }
3833 
cifs_launder_page(struct page * page)3834 static int cifs_launder_page(struct page *page)
3835 {
3836 	int rc = 0;
3837 	loff_t range_start = page_offset(page);
3838 	loff_t range_end = range_start + (loff_t)(PAGE_CACHE_SIZE - 1);
3839 	struct writeback_control wbc = {
3840 		.sync_mode = WB_SYNC_ALL,
3841 		.nr_to_write = 0,
3842 		.range_start = range_start,
3843 		.range_end = range_end,
3844 	};
3845 
3846 	cifs_dbg(FYI, "Launder page: %p\n", page);
3847 
3848 	if (clear_page_dirty_for_io(page))
3849 		rc = cifs_writepage_locked(page, &wbc);
3850 
3851 	cifs_fscache_invalidate_page(page, page->mapping->host);
3852 	return rc;
3853 }
3854 
cifs_oplock_break(struct work_struct * work)3855 void cifs_oplock_break(struct work_struct *work)
3856 {
3857 	struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
3858 						  oplock_break);
3859 	struct inode *inode = d_inode(cfile->dentry);
3860 	struct cifsInodeInfo *cinode = CIFS_I(inode);
3861 	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
3862 	struct TCP_Server_Info *server = tcon->ses->server;
3863 	int rc = 0;
3864 
3865 	wait_on_bit(&cinode->flags, CIFS_INODE_PENDING_WRITERS,
3866 			TASK_UNINTERRUPTIBLE);
3867 
3868 	server->ops->downgrade_oplock(server, cinode,
3869 		test_bit(CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2, &cinode->flags));
3870 
3871 	if (!CIFS_CACHE_WRITE(cinode) && CIFS_CACHE_READ(cinode) &&
3872 						cifs_has_mand_locks(cinode)) {
3873 		cifs_dbg(FYI, "Reset oplock to None for inode=%p due to mand locks\n",
3874 			 inode);
3875 		cinode->oplock = 0;
3876 	}
3877 
3878 	if (inode && S_ISREG(inode->i_mode)) {
3879 		if (CIFS_CACHE_READ(cinode))
3880 			break_lease(inode, O_RDONLY);
3881 		else
3882 			break_lease(inode, O_WRONLY);
3883 		rc = filemap_fdatawrite(inode->i_mapping);
3884 		if (!CIFS_CACHE_READ(cinode)) {
3885 			rc = filemap_fdatawait(inode->i_mapping);
3886 			mapping_set_error(inode->i_mapping, rc);
3887 			cifs_zap_mapping(inode);
3888 		}
3889 		cifs_dbg(FYI, "Oplock flush inode %p rc %d\n", inode, rc);
3890 	}
3891 
3892 	rc = cifs_push_locks(cfile);
3893 	if (rc)
3894 		cifs_dbg(VFS, "Push locks rc = %d\n", rc);
3895 
3896 	/*
3897 	 * releasing stale oplock after recent reconnect of smb session using
3898 	 * a now incorrect file handle is not a data integrity issue but do
3899 	 * not bother sending an oplock release if session to server still is
3900 	 * disconnected since oplock already released by the server
3901 	 */
3902 	if (!cfile->oplock_break_cancelled) {
3903 		rc = tcon->ses->server->ops->oplock_response(tcon, &cfile->fid,
3904 							     cinode);
3905 		cifs_dbg(FYI, "Oplock release rc = %d\n", rc);
3906 	}
3907 	cifs_done_oplock_break(cinode);
3908 }
3909 
3910 /*
3911  * The presence of cifs_direct_io() in the address space ops vector
3912  * allowes open() O_DIRECT flags which would have failed otherwise.
3913  *
3914  * In the non-cached mode (mount with cache=none), we shunt off direct read and write requests
3915  * so this method should never be called.
3916  *
3917  * Direct IO is not yet supported in the cached mode.
3918  */
3919 static ssize_t
cifs_direct_io(struct kiocb * iocb,struct iov_iter * iter,loff_t pos)3920 cifs_direct_io(struct kiocb *iocb, struct iov_iter *iter, loff_t pos)
3921 {
3922         /*
3923          * FIXME
3924          * Eventually need to support direct IO for non forcedirectio mounts
3925          */
3926         return -EINVAL;
3927 }
3928 
3929 
3930 const struct address_space_operations cifs_addr_ops = {
3931 	.readpage = cifs_readpage,
3932 	.readpages = cifs_readpages,
3933 	.writepage = cifs_writepage,
3934 	.writepages = cifs_writepages,
3935 	.write_begin = cifs_write_begin,
3936 	.write_end = cifs_write_end,
3937 	.set_page_dirty = __set_page_dirty_nobuffers,
3938 	.releasepage = cifs_release_page,
3939 	.direct_IO = cifs_direct_io,
3940 	.invalidatepage = cifs_invalidate_page,
3941 	.launder_page = cifs_launder_page,
3942 };
3943 
3944 /*
3945  * cifs_readpages requires the server to support a buffer large enough to
3946  * contain the header plus one complete page of data.  Otherwise, we need
3947  * to leave cifs_readpages out of the address space operations.
3948  */
3949 const struct address_space_operations cifs_addr_ops_smallbuf = {
3950 	.readpage = cifs_readpage,
3951 	.writepage = cifs_writepage,
3952 	.writepages = cifs_writepages,
3953 	.write_begin = cifs_write_begin,
3954 	.write_end = cifs_write_end,
3955 	.set_page_dirty = __set_page_dirty_nobuffers,
3956 	.releasepage = cifs_release_page,
3957 	.invalidatepage = cifs_invalidate_page,
3958 	.launder_page = cifs_launder_page,
3959 };
3960