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