1 // SPDX-License-Identifier: LGPL-2.1
4 * vfs operations that deal with files
6 * Copyright (C) International Business Machines Corp., 2002,2010
7 * Author(s): Steve French (sfrench@us.ibm.com)
8 * Jeremy Allison (jra@samba.org)
12 #include <linux/filelock.h>
13 #include <linux/backing-dev.h>
14 #include <linux/stat.h>
15 #include <linux/fcntl.h>
16 #include <linux/pagemap.h>
17 #include <linux/pagevec.h>
18 #include <linux/writeback.h>
19 #include <linux/task_io_accounting_ops.h>
20 #include <linux/delay.h>
21 #include <linux/mount.h>
22 #include <linux/slab.h>
23 #include <linux/swap.h>
25 #include <asm/div64.h>
29 #include "cifsproto.h"
30 #include "smb2proto.h"
31 #include "cifs_unicode.h"
32 #include "cifs_debug.h"
33 #include "cifs_fs_sb.h"
35 #include "smbdirect.h"
36 #include "fs_context.h"
37 #include "cifs_ioctl.h"
38 #include "cached_dir.h"
41 * Remove the dirty flags from a span of pages.
43 static void cifs_undirty_folios(struct inode *inode, loff_t start, unsigned int len)
45 struct address_space *mapping = inode->i_mapping;
49 XA_STATE(xas, &mapping->i_pages, start / PAGE_SIZE);
53 end = (start + len - 1) / PAGE_SIZE;
54 xas_for_each_marked(&xas, folio, end, PAGECACHE_TAG_DIRTY) {
55 if (xas_retry(&xas, folio))
60 folio_clear_dirty_for_io(folio);
69 * Completion of write to server.
71 void cifs_pages_written_back(struct inode *inode, loff_t start, unsigned int len)
73 struct address_space *mapping = inode->i_mapping;
77 XA_STATE(xas, &mapping->i_pages, start / PAGE_SIZE);
84 end = (start + len - 1) / PAGE_SIZE;
85 xas_for_each(&xas, folio, end) {
86 if (xas_retry(&xas, folio))
88 if (!folio_test_writeback(folio)) {
89 WARN_ONCE(1, "bad %x @%llx page %lx %lx\n",
90 len, start, folio->index, end);
94 folio_detach_private(folio);
95 folio_end_writeback(folio);
102 * Failure of write to server.
104 void cifs_pages_write_failed(struct inode *inode, loff_t start, unsigned int len)
106 struct address_space *mapping = inode->i_mapping;
110 XA_STATE(xas, &mapping->i_pages, start / PAGE_SIZE);
117 end = (start + len - 1) / PAGE_SIZE;
118 xas_for_each(&xas, folio, end) {
119 if (xas_retry(&xas, folio))
121 if (!folio_test_writeback(folio)) {
122 WARN_ONCE(1, "bad %x @%llx page %lx %lx\n",
123 len, start, folio->index, end);
127 folio_set_error(folio);
128 folio_end_writeback(folio);
135 * Redirty pages after a temporary failure.
137 void cifs_pages_write_redirty(struct inode *inode, loff_t start, unsigned int len)
139 struct address_space *mapping = inode->i_mapping;
143 XA_STATE(xas, &mapping->i_pages, start / PAGE_SIZE);
150 end = (start + len - 1) / PAGE_SIZE;
151 xas_for_each(&xas, folio, end) {
152 if (!folio_test_writeback(folio)) {
153 WARN_ONCE(1, "bad %x @%llx page %lx %lx\n",
154 len, start, folio->index, end);
158 filemap_dirty_folio(folio->mapping, folio);
159 folio_end_writeback(folio);
166 * Mark as invalid, all open files on tree connections since they
167 * were closed when session to server was lost.
170 cifs_mark_open_files_invalid(struct cifs_tcon *tcon)
172 struct cifsFileInfo *open_file = NULL;
173 struct list_head *tmp;
174 struct list_head *tmp1;
176 /* only send once per connect */
177 spin_lock(&tcon->tc_lock);
178 if (tcon->status != TID_NEED_RECON) {
179 spin_unlock(&tcon->tc_lock);
182 tcon->status = TID_IN_FILES_INVALIDATE;
183 spin_unlock(&tcon->tc_lock);
185 /* list all files open on tree connection and mark them invalid */
186 spin_lock(&tcon->open_file_lock);
187 list_for_each_safe(tmp, tmp1, &tcon->openFileList) {
188 open_file = list_entry(tmp, struct cifsFileInfo, tlist);
189 open_file->invalidHandle = true;
190 open_file->oplock_break_cancelled = true;
192 spin_unlock(&tcon->open_file_lock);
194 invalidate_all_cached_dirs(tcon);
195 spin_lock(&tcon->tc_lock);
196 if (tcon->status == TID_IN_FILES_INVALIDATE)
197 tcon->status = TID_NEED_TCON;
198 spin_unlock(&tcon->tc_lock);
201 * BB Add call to invalidate_inodes(sb) for all superblocks mounted
206 static inline int cifs_convert_flags(unsigned int flags)
208 if ((flags & O_ACCMODE) == O_RDONLY)
210 else if ((flags & O_ACCMODE) == O_WRONLY)
211 return GENERIC_WRITE;
212 else if ((flags & O_ACCMODE) == O_RDWR) {
213 /* GENERIC_ALL is too much permission to request
214 can cause unnecessary access denied on create */
215 /* return GENERIC_ALL; */
216 return (GENERIC_READ | GENERIC_WRITE);
219 return (READ_CONTROL | FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES |
220 FILE_WRITE_EA | FILE_APPEND_DATA | FILE_WRITE_DATA |
224 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
225 static u32 cifs_posix_convert_flags(unsigned int flags)
229 if ((flags & O_ACCMODE) == O_RDONLY)
230 posix_flags = SMB_O_RDONLY;
231 else if ((flags & O_ACCMODE) == O_WRONLY)
232 posix_flags = SMB_O_WRONLY;
233 else if ((flags & O_ACCMODE) == O_RDWR)
234 posix_flags = SMB_O_RDWR;
236 if (flags & O_CREAT) {
237 posix_flags |= SMB_O_CREAT;
239 posix_flags |= SMB_O_EXCL;
240 } else if (flags & O_EXCL)
241 cifs_dbg(FYI, "Application %s pid %d has incorrectly set O_EXCL flag but not O_CREAT on file open. Ignoring O_EXCL\n",
242 current->comm, current->tgid);
245 posix_flags |= SMB_O_TRUNC;
246 /* be safe and imply O_SYNC for O_DSYNC */
248 posix_flags |= SMB_O_SYNC;
249 if (flags & O_DIRECTORY)
250 posix_flags |= SMB_O_DIRECTORY;
251 if (flags & O_NOFOLLOW)
252 posix_flags |= SMB_O_NOFOLLOW;
253 if (flags & O_DIRECT)
254 posix_flags |= SMB_O_DIRECT;
258 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
260 static inline int cifs_get_disposition(unsigned int flags)
262 if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
264 else if ((flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
265 return FILE_OVERWRITE_IF;
266 else if ((flags & O_CREAT) == O_CREAT)
268 else if ((flags & O_TRUNC) == O_TRUNC)
269 return FILE_OVERWRITE;
274 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
275 int cifs_posix_open(const char *full_path, struct inode **pinode,
276 struct super_block *sb, int mode, unsigned int f_flags,
277 __u32 *poplock, __u16 *pnetfid, unsigned int xid)
280 FILE_UNIX_BASIC_INFO *presp_data;
281 __u32 posix_flags = 0;
282 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
283 struct cifs_fattr fattr;
284 struct tcon_link *tlink;
285 struct cifs_tcon *tcon;
287 cifs_dbg(FYI, "posix open %s\n", full_path);
289 presp_data = kzalloc(sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL);
290 if (presp_data == NULL)
293 tlink = cifs_sb_tlink(cifs_sb);
299 tcon = tlink_tcon(tlink);
300 mode &= ~current_umask();
302 posix_flags = cifs_posix_convert_flags(f_flags);
303 rc = CIFSPOSIXCreate(xid, tcon, posix_flags, mode, pnetfid, presp_data,
304 poplock, full_path, cifs_sb->local_nls,
305 cifs_remap(cifs_sb));
306 cifs_put_tlink(tlink);
311 if (presp_data->Type == cpu_to_le32(-1))
312 goto posix_open_ret; /* open ok, caller does qpathinfo */
315 goto posix_open_ret; /* caller does not need info */
317 cifs_unix_basic_to_fattr(&fattr, presp_data, cifs_sb);
319 /* get new inode and set it up */
320 if (*pinode == NULL) {
321 cifs_fill_uniqueid(sb, &fattr);
322 *pinode = cifs_iget(sb, &fattr);
328 cifs_revalidate_mapping(*pinode);
329 rc = cifs_fattr_to_inode(*pinode, &fattr);
336 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
338 static int cifs_nt_open(const char *full_path, struct inode *inode, struct cifs_sb_info *cifs_sb,
339 struct cifs_tcon *tcon, unsigned int f_flags, __u32 *oplock,
340 struct cifs_fid *fid, unsigned int xid, struct cifs_open_info_data *buf)
345 int create_options = CREATE_NOT_DIR;
346 struct TCP_Server_Info *server = tcon->ses->server;
347 struct cifs_open_parms oparms;
349 if (!server->ops->open)
352 desired_access = cifs_convert_flags(f_flags);
354 /*********************************************************************
355 * open flag mapping table:
357 * POSIX Flag CIFS Disposition
358 * ---------- ----------------
359 * O_CREAT FILE_OPEN_IF
360 * O_CREAT | O_EXCL FILE_CREATE
361 * O_CREAT | O_TRUNC FILE_OVERWRITE_IF
362 * O_TRUNC FILE_OVERWRITE
363 * none of the above FILE_OPEN
365 * Note that there is not a direct match between disposition
366 * FILE_SUPERSEDE (ie create whether or not file exists although
367 * O_CREAT | O_TRUNC is similar but truncates the existing
368 * file rather than creating a new file as FILE_SUPERSEDE does
369 * (which uses the attributes / metadata passed in on open call)
371 *? O_SYNC is a reasonable match to CIFS writethrough flag
372 *? and the read write flags match reasonably. O_LARGEFILE
373 *? is irrelevant because largefile support is always used
374 *? by this client. Flags O_APPEND, O_DIRECT, O_DIRECTORY,
375 * O_FASYNC, O_NOFOLLOW, O_NONBLOCK need further investigation
376 *********************************************************************/
378 disposition = cifs_get_disposition(f_flags);
380 /* BB pass O_SYNC flag through on file attributes .. BB */
382 /* O_SYNC also has bit for O_DSYNC so following check picks up either */
383 if (f_flags & O_SYNC)
384 create_options |= CREATE_WRITE_THROUGH;
386 if (f_flags & O_DIRECT)
387 create_options |= CREATE_NO_BUFFER;
389 oparms = (struct cifs_open_parms) {
392 .desired_access = desired_access,
393 .create_options = cifs_create_options(cifs_sb, create_options),
394 .disposition = disposition,
399 rc = server->ops->open(xid, &oparms, oplock, buf);
403 /* TODO: Add support for calling posix query info but with passing in fid */
405 rc = cifs_get_inode_info_unix(&inode, full_path, inode->i_sb,
408 rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb,
412 server->ops->close(xid, tcon, fid);
421 cifs_has_mand_locks(struct cifsInodeInfo *cinode)
423 struct cifs_fid_locks *cur;
424 bool has_locks = false;
426 down_read(&cinode->lock_sem);
427 list_for_each_entry(cur, &cinode->llist, llist) {
428 if (!list_empty(&cur->locks)) {
433 up_read(&cinode->lock_sem);
438 cifs_down_write(struct rw_semaphore *sem)
440 while (!down_write_trylock(sem))
444 static void cifsFileInfo_put_work(struct work_struct *work);
446 struct cifsFileInfo *cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
447 struct tcon_link *tlink, __u32 oplock,
448 const char *symlink_target)
450 struct dentry *dentry = file_dentry(file);
451 struct inode *inode = d_inode(dentry);
452 struct cifsInodeInfo *cinode = CIFS_I(inode);
453 struct cifsFileInfo *cfile;
454 struct cifs_fid_locks *fdlocks;
455 struct cifs_tcon *tcon = tlink_tcon(tlink);
456 struct TCP_Server_Info *server = tcon->ses->server;
458 cfile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
462 fdlocks = kzalloc(sizeof(struct cifs_fid_locks), GFP_KERNEL);
468 if (symlink_target) {
469 cfile->symlink_target = kstrdup(symlink_target, GFP_KERNEL);
470 if (!cfile->symlink_target) {
477 INIT_LIST_HEAD(&fdlocks->locks);
478 fdlocks->cfile = cfile;
479 cfile->llist = fdlocks;
482 cfile->pid = current->tgid;
483 cfile->uid = current_fsuid();
484 cfile->dentry = dget(dentry);
485 cfile->f_flags = file->f_flags;
486 cfile->invalidHandle = false;
487 cfile->deferred_close_scheduled = false;
488 cfile->tlink = cifs_get_tlink(tlink);
489 INIT_WORK(&cfile->oplock_break, cifs_oplock_break);
490 INIT_WORK(&cfile->put, cifsFileInfo_put_work);
491 INIT_DELAYED_WORK(&cfile->deferred, smb2_deferred_work_close);
492 mutex_init(&cfile->fh_mutex);
493 spin_lock_init(&cfile->file_info_lock);
495 cifs_sb_active(inode->i_sb);
498 * If the server returned a read oplock and we have mandatory brlocks,
499 * set oplock level to None.
501 if (server->ops->is_read_op(oplock) && cifs_has_mand_locks(cinode)) {
502 cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n");
506 cifs_down_write(&cinode->lock_sem);
507 list_add(&fdlocks->llist, &cinode->llist);
508 up_write(&cinode->lock_sem);
510 spin_lock(&tcon->open_file_lock);
511 if (fid->pending_open->oplock != CIFS_OPLOCK_NO_CHANGE && oplock)
512 oplock = fid->pending_open->oplock;
513 list_del(&fid->pending_open->olist);
515 fid->purge_cache = false;
516 server->ops->set_fid(cfile, fid, oplock);
518 list_add(&cfile->tlist, &tcon->openFileList);
519 atomic_inc(&tcon->num_local_opens);
521 /* if readable file instance put first in list*/
522 spin_lock(&cinode->open_file_lock);
523 if (file->f_mode & FMODE_READ)
524 list_add(&cfile->flist, &cinode->openFileList);
526 list_add_tail(&cfile->flist, &cinode->openFileList);
527 spin_unlock(&cinode->open_file_lock);
528 spin_unlock(&tcon->open_file_lock);
530 if (fid->purge_cache)
531 cifs_zap_mapping(inode);
533 file->private_data = cfile;
537 struct cifsFileInfo *
538 cifsFileInfo_get(struct cifsFileInfo *cifs_file)
540 spin_lock(&cifs_file->file_info_lock);
541 cifsFileInfo_get_locked(cifs_file);
542 spin_unlock(&cifs_file->file_info_lock);
546 static void cifsFileInfo_put_final(struct cifsFileInfo *cifs_file)
548 struct inode *inode = d_inode(cifs_file->dentry);
549 struct cifsInodeInfo *cifsi = CIFS_I(inode);
550 struct cifsLockInfo *li, *tmp;
551 struct super_block *sb = inode->i_sb;
554 * Delete any outstanding lock records. We'll lose them when the file
557 cifs_down_write(&cifsi->lock_sem);
558 list_for_each_entry_safe(li, tmp, &cifs_file->llist->locks, llist) {
559 list_del(&li->llist);
560 cifs_del_lock_waiters(li);
563 list_del(&cifs_file->llist->llist);
564 kfree(cifs_file->llist);
565 up_write(&cifsi->lock_sem);
567 cifs_put_tlink(cifs_file->tlink);
568 dput(cifs_file->dentry);
569 cifs_sb_deactive(sb);
570 kfree(cifs_file->symlink_target);
574 static void cifsFileInfo_put_work(struct work_struct *work)
576 struct cifsFileInfo *cifs_file = container_of(work,
577 struct cifsFileInfo, put);
579 cifsFileInfo_put_final(cifs_file);
583 * cifsFileInfo_put - release a reference of file priv data
585 * Always potentially wait for oplock handler. See _cifsFileInfo_put().
587 * @cifs_file: cifs/smb3 specific info (eg refcounts) for an open file
589 void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
591 _cifsFileInfo_put(cifs_file, true, true);
595 * _cifsFileInfo_put - release a reference of file priv data
597 * This may involve closing the filehandle @cifs_file out on the
598 * server. Must be called without holding tcon->open_file_lock,
599 * cinode->open_file_lock and cifs_file->file_info_lock.
601 * If @wait_for_oplock_handler is true and we are releasing the last
602 * reference, wait for any running oplock break handler of the file
603 * and cancel any pending one.
605 * @cifs_file: cifs/smb3 specific info (eg refcounts) for an open file
606 * @wait_oplock_handler: must be false if called from oplock_break_handler
607 * @offload: not offloaded on close and oplock breaks
610 void _cifsFileInfo_put(struct cifsFileInfo *cifs_file,
611 bool wait_oplock_handler, bool offload)
613 struct inode *inode = d_inode(cifs_file->dentry);
614 struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
615 struct TCP_Server_Info *server = tcon->ses->server;
616 struct cifsInodeInfo *cifsi = CIFS_I(inode);
617 struct super_block *sb = inode->i_sb;
618 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
619 struct cifs_fid fid = {};
620 struct cifs_pending_open open;
621 bool oplock_break_cancelled;
623 spin_lock(&tcon->open_file_lock);
624 spin_lock(&cifsi->open_file_lock);
625 spin_lock(&cifs_file->file_info_lock);
626 if (--cifs_file->count > 0) {
627 spin_unlock(&cifs_file->file_info_lock);
628 spin_unlock(&cifsi->open_file_lock);
629 spin_unlock(&tcon->open_file_lock);
632 spin_unlock(&cifs_file->file_info_lock);
634 if (server->ops->get_lease_key)
635 server->ops->get_lease_key(inode, &fid);
637 /* store open in pending opens to make sure we don't miss lease break */
638 cifs_add_pending_open_locked(&fid, cifs_file->tlink, &open);
640 /* remove it from the lists */
641 list_del(&cifs_file->flist);
642 list_del(&cifs_file->tlist);
643 atomic_dec(&tcon->num_local_opens);
645 if (list_empty(&cifsi->openFileList)) {
646 cifs_dbg(FYI, "closing last open instance for inode %p\n",
647 d_inode(cifs_file->dentry));
649 * In strict cache mode we need invalidate mapping on the last
650 * close because it may cause a error when we open this file
651 * again and get at least level II oplock.
653 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO)
654 set_bit(CIFS_INO_INVALID_MAPPING, &cifsi->flags);
655 cifs_set_oplock_level(cifsi, 0);
658 spin_unlock(&cifsi->open_file_lock);
659 spin_unlock(&tcon->open_file_lock);
661 oplock_break_cancelled = wait_oplock_handler ?
662 cancel_work_sync(&cifs_file->oplock_break) : false;
664 if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
665 struct TCP_Server_Info *server = tcon->ses->server;
669 if (server->ops->close_getattr)
670 server->ops->close_getattr(xid, tcon, cifs_file);
671 else if (server->ops->close)
672 server->ops->close(xid, tcon, &cifs_file->fid);
676 if (oplock_break_cancelled)
677 cifs_done_oplock_break(cifsi);
679 cifs_del_pending_open(&open);
682 queue_work(fileinfo_put_wq, &cifs_file->put);
684 cifsFileInfo_put_final(cifs_file);
687 int cifs_open(struct inode *inode, struct file *file)
693 struct cifs_sb_info *cifs_sb;
694 struct TCP_Server_Info *server;
695 struct cifs_tcon *tcon;
696 struct tcon_link *tlink;
697 struct cifsFileInfo *cfile = NULL;
699 const char *full_path;
700 bool posix_open_ok = false;
701 struct cifs_fid fid = {};
702 struct cifs_pending_open open;
703 struct cifs_open_info_data data = {};
707 cifs_sb = CIFS_SB(inode->i_sb);
708 if (unlikely(cifs_forced_shutdown(cifs_sb))) {
713 tlink = cifs_sb_tlink(cifs_sb);
716 return PTR_ERR(tlink);
718 tcon = tlink_tcon(tlink);
719 server = tcon->ses->server;
721 page = alloc_dentry_path();
722 full_path = build_path_from_dentry(file_dentry(file), page);
723 if (IS_ERR(full_path)) {
724 rc = PTR_ERR(full_path);
728 cifs_dbg(FYI, "inode = 0x%p file flags are 0x%x for %s\n",
729 inode, file->f_flags, full_path);
731 if (file->f_flags & O_DIRECT &&
732 cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO) {
733 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
734 file->f_op = &cifs_file_direct_nobrl_ops;
736 file->f_op = &cifs_file_direct_ops;
739 /* Get the cached handle as SMB2 close is deferred */
740 rc = cifs_get_readable_path(tcon, full_path, &cfile);
742 if (file->f_flags == cfile->f_flags) {
743 file->private_data = cfile;
744 spin_lock(&CIFS_I(inode)->deferred_lock);
745 cifs_del_deferred_close(cfile);
746 spin_unlock(&CIFS_I(inode)->deferred_lock);
749 _cifsFileInfo_put(cfile, true, false);
758 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
759 if (!tcon->broken_posix_open && tcon->unix_ext &&
760 cap_unix(tcon->ses) && (CIFS_UNIX_POSIX_PATH_OPS_CAP &
761 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
762 /* can not refresh inode info since size could be stale */
763 rc = cifs_posix_open(full_path, &inode, inode->i_sb,
764 cifs_sb->ctx->file_mode /* ignored */,
765 file->f_flags, &oplock, &fid.netfid, xid);
767 cifs_dbg(FYI, "posix open succeeded\n");
768 posix_open_ok = true;
769 } else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) {
770 if (tcon->ses->serverNOS)
771 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",
773 tcon->ses->serverNOS);
774 tcon->broken_posix_open = true;
775 } else if ((rc != -EIO) && (rc != -EREMOTE) &&
776 (rc != -EOPNOTSUPP)) /* path not found or net err */
779 * Else fallthrough to retry open the old way on network i/o
783 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
785 if (server->ops->get_lease_key)
786 server->ops->get_lease_key(inode, &fid);
788 cifs_add_pending_open(&fid, tlink, &open);
790 if (!posix_open_ok) {
791 if (server->ops->get_lease_key)
792 server->ops->get_lease_key(inode, &fid);
794 rc = cifs_nt_open(full_path, inode, cifs_sb, tcon, file->f_flags, &oplock, &fid,
797 cifs_del_pending_open(&open);
802 cfile = cifs_new_fileinfo(&fid, file, tlink, oplock, data.symlink_target);
804 if (server->ops->close)
805 server->ops->close(xid, tcon, &fid);
806 cifs_del_pending_open(&open);
811 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
812 if ((oplock & CIFS_CREATE_ACTION) && !posix_open_ok && tcon->unix_ext) {
814 * Time to set mode which we can not set earlier due to
815 * problems creating new read-only files.
817 struct cifs_unix_set_info_args args = {
818 .mode = inode->i_mode,
819 .uid = INVALID_UID, /* no change */
820 .gid = INVALID_GID, /* no change */
821 .ctime = NO_CHANGE_64,
822 .atime = NO_CHANGE_64,
823 .mtime = NO_CHANGE_64,
826 CIFSSMBUnixSetFileInfo(xid, tcon, &args, fid.netfid,
829 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
832 fscache_use_cookie(cifs_inode_cookie(file_inode(file)),
833 file->f_mode & FMODE_WRITE);
834 if (file->f_flags & O_DIRECT &&
835 (!((file->f_flags & O_ACCMODE) != O_RDONLY) ||
836 file->f_flags & O_APPEND))
837 cifs_invalidate_cache(file_inode(file),
838 FSCACHE_INVAL_DIO_WRITE);
841 free_dentry_path(page);
843 cifs_put_tlink(tlink);
844 cifs_free_open_info(&data);
848 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
849 static int cifs_push_posix_locks(struct cifsFileInfo *cfile);
850 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
853 * Try to reacquire byte range locks that were released when session
854 * to server was lost.
857 cifs_relock_file(struct cifsFileInfo *cfile)
859 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
860 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
862 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
863 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
864 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
866 down_read_nested(&cinode->lock_sem, SINGLE_DEPTH_NESTING);
867 if (cinode->can_cache_brlcks) {
868 /* can cache locks - no need to relock */
869 up_read(&cinode->lock_sem);
873 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
874 if (cap_unix(tcon->ses) &&
875 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
876 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
877 rc = cifs_push_posix_locks(cfile);
879 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
880 rc = tcon->ses->server->ops->push_mand_locks(cfile);
882 up_read(&cinode->lock_sem);
887 cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush)
892 struct cifs_sb_info *cifs_sb;
893 struct cifs_tcon *tcon;
894 struct TCP_Server_Info *server;
895 struct cifsInodeInfo *cinode;
898 const char *full_path;
900 int disposition = FILE_OPEN;
901 int create_options = CREATE_NOT_DIR;
902 struct cifs_open_parms oparms;
905 mutex_lock(&cfile->fh_mutex);
906 if (!cfile->invalidHandle) {
907 mutex_unlock(&cfile->fh_mutex);
912 inode = d_inode(cfile->dentry);
913 cifs_sb = CIFS_SB(inode->i_sb);
914 tcon = tlink_tcon(cfile->tlink);
915 server = tcon->ses->server;
918 * Can not grab rename sem here because various ops, including those
919 * that already have the rename sem can end up causing writepage to get
920 * called and if the server was down that means we end up here, and we
921 * can never tell if the caller already has the rename_sem.
923 page = alloc_dentry_path();
924 full_path = build_path_from_dentry(cfile->dentry, page);
925 if (IS_ERR(full_path)) {
926 mutex_unlock(&cfile->fh_mutex);
927 free_dentry_path(page);
929 return PTR_ERR(full_path);
932 cifs_dbg(FYI, "inode = 0x%p file flags 0x%x for %s\n",
933 inode, cfile->f_flags, full_path);
935 if (tcon->ses->server->oplocks)
940 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
941 if (tcon->unix_ext && cap_unix(tcon->ses) &&
942 (CIFS_UNIX_POSIX_PATH_OPS_CAP &
943 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
945 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the
946 * original open. Must mask them off for a reopen.
948 unsigned int oflags = cfile->f_flags &
949 ~(O_CREAT | O_EXCL | O_TRUNC);
951 rc = cifs_posix_open(full_path, NULL, inode->i_sb,
952 cifs_sb->ctx->file_mode /* ignored */,
953 oflags, &oplock, &cfile->fid.netfid, xid);
955 cifs_dbg(FYI, "posix reopen succeeded\n");
956 oparms.reconnect = true;
960 * fallthrough to retry open the old way on errors, especially
961 * in the reconnect path it is important to retry hard
964 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
966 desired_access = cifs_convert_flags(cfile->f_flags);
968 /* O_SYNC also has bit for O_DSYNC so following check picks up either */
969 if (cfile->f_flags & O_SYNC)
970 create_options |= CREATE_WRITE_THROUGH;
972 if (cfile->f_flags & O_DIRECT)
973 create_options |= CREATE_NO_BUFFER;
975 if (server->ops->get_lease_key)
976 server->ops->get_lease_key(inode, &cfile->fid);
978 oparms = (struct cifs_open_parms) {
981 .desired_access = desired_access,
982 .create_options = cifs_create_options(cifs_sb, create_options),
983 .disposition = disposition,
990 * Can not refresh inode by passing in file_info buf to be returned by
991 * ops->open and then calling get_inode_info with returned buf since
992 * file might have write behind data that needs to be flushed and server
993 * version of file size can be stale. If we knew for sure that inode was
994 * not dirty locally we could do this.
996 rc = server->ops->open(xid, &oparms, &oplock, NULL);
997 if (rc == -ENOENT && oparms.reconnect == false) {
998 /* durable handle timeout is expired - open the file again */
999 rc = server->ops->open(xid, &oparms, &oplock, NULL);
1000 /* indicate that we need to relock the file */
1001 oparms.reconnect = true;
1005 mutex_unlock(&cfile->fh_mutex);
1006 cifs_dbg(FYI, "cifs_reopen returned 0x%x\n", rc);
1007 cifs_dbg(FYI, "oplock: %d\n", oplock);
1008 goto reopen_error_exit;
1011 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1013 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1014 cfile->invalidHandle = false;
1015 mutex_unlock(&cfile->fh_mutex);
1016 cinode = CIFS_I(inode);
1019 rc = filemap_write_and_wait(inode->i_mapping);
1020 if (!is_interrupt_error(rc))
1021 mapping_set_error(inode->i_mapping, rc);
1023 if (tcon->posix_extensions) {
1024 rc = smb311_posix_get_inode_info(&inode, full_path,
1025 NULL, inode->i_sb, xid);
1026 } else if (tcon->unix_ext) {
1027 rc = cifs_get_inode_info_unix(&inode, full_path,
1030 rc = cifs_get_inode_info(&inode, full_path, NULL,
1031 inode->i_sb, xid, NULL);
1035 * Else we are writing out data to server already and could deadlock if
1036 * we tried to flush data, and since we do not know if we have data that
1037 * would invalidate the current end of file on the server we can not go
1038 * to the server to get the new inode info.
1042 * If the server returned a read oplock and we have mandatory brlocks,
1043 * set oplock level to None.
1045 if (server->ops->is_read_op(oplock) && cifs_has_mand_locks(cinode)) {
1046 cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n");
1050 server->ops->set_fid(cfile, &cfile->fid, oplock);
1051 if (oparms.reconnect)
1052 cifs_relock_file(cfile);
1055 free_dentry_path(page);
1060 void smb2_deferred_work_close(struct work_struct *work)
1062 struct cifsFileInfo *cfile = container_of(work,
1063 struct cifsFileInfo, deferred.work);
1065 spin_lock(&CIFS_I(d_inode(cfile->dentry))->deferred_lock);
1066 cifs_del_deferred_close(cfile);
1067 cfile->deferred_close_scheduled = false;
1068 spin_unlock(&CIFS_I(d_inode(cfile->dentry))->deferred_lock);
1069 _cifsFileInfo_put(cfile, true, false);
1072 int cifs_close(struct inode *inode, struct file *file)
1074 struct cifsFileInfo *cfile;
1075 struct cifsInodeInfo *cinode = CIFS_I(inode);
1076 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
1077 struct cifs_deferred_close *dclose;
1079 cifs_fscache_unuse_inode_cookie(inode, file->f_mode & FMODE_WRITE);
1081 if (file->private_data != NULL) {
1082 cfile = file->private_data;
1083 file->private_data = NULL;
1084 dclose = kmalloc(sizeof(struct cifs_deferred_close), GFP_KERNEL);
1085 if ((cifs_sb->ctx->closetimeo && cinode->oplock == CIFS_CACHE_RHW_FLG)
1086 && cinode->lease_granted &&
1087 !test_bit(CIFS_INO_CLOSE_ON_LOCK, &cinode->flags) &&
1089 if (test_and_clear_bit(CIFS_INO_MODIFIED_ATTR, &cinode->flags)) {
1090 inode_set_mtime_to_ts(inode,
1091 inode_set_ctime_current(inode));
1093 spin_lock(&cinode->deferred_lock);
1094 cifs_add_deferred_close(cfile, dclose);
1095 if (cfile->deferred_close_scheduled &&
1096 delayed_work_pending(&cfile->deferred)) {
1098 * If there is no pending work, mod_delayed_work queues new work.
1099 * So, Increase the ref count to avoid use-after-free.
1101 if (!mod_delayed_work(deferredclose_wq,
1102 &cfile->deferred, cifs_sb->ctx->closetimeo))
1103 cifsFileInfo_get(cfile);
1105 /* Deferred close for files */
1106 queue_delayed_work(deferredclose_wq,
1107 &cfile->deferred, cifs_sb->ctx->closetimeo);
1108 cfile->deferred_close_scheduled = true;
1109 spin_unlock(&cinode->deferred_lock);
1112 spin_unlock(&cinode->deferred_lock);
1113 _cifsFileInfo_put(cfile, true, false);
1115 _cifsFileInfo_put(cfile, true, false);
1120 /* return code from the ->release op is always ignored */
1125 cifs_reopen_persistent_handles(struct cifs_tcon *tcon)
1127 struct cifsFileInfo *open_file, *tmp;
1128 struct list_head tmp_list;
1130 if (!tcon->use_persistent || !tcon->need_reopen_files)
1133 tcon->need_reopen_files = false;
1135 cifs_dbg(FYI, "Reopen persistent handles\n");
1136 INIT_LIST_HEAD(&tmp_list);
1138 /* list all files open on tree connection, reopen resilient handles */
1139 spin_lock(&tcon->open_file_lock);
1140 list_for_each_entry(open_file, &tcon->openFileList, tlist) {
1141 if (!open_file->invalidHandle)
1143 cifsFileInfo_get(open_file);
1144 list_add_tail(&open_file->rlist, &tmp_list);
1146 spin_unlock(&tcon->open_file_lock);
1148 list_for_each_entry_safe(open_file, tmp, &tmp_list, rlist) {
1149 if (cifs_reopen_file(open_file, false /* do not flush */))
1150 tcon->need_reopen_files = true;
1151 list_del_init(&open_file->rlist);
1152 cifsFileInfo_put(open_file);
1156 int cifs_closedir(struct inode *inode, struct file *file)
1160 struct cifsFileInfo *cfile = file->private_data;
1161 struct cifs_tcon *tcon;
1162 struct TCP_Server_Info *server;
1165 cifs_dbg(FYI, "Closedir inode = 0x%p\n", inode);
1171 tcon = tlink_tcon(cfile->tlink);
1172 server = tcon->ses->server;
1174 cifs_dbg(FYI, "Freeing private data in close dir\n");
1175 spin_lock(&cfile->file_info_lock);
1176 if (server->ops->dir_needs_close(cfile)) {
1177 cfile->invalidHandle = true;
1178 spin_unlock(&cfile->file_info_lock);
1179 if (server->ops->close_dir)
1180 rc = server->ops->close_dir(xid, tcon, &cfile->fid);
1183 cifs_dbg(FYI, "Closing uncompleted readdir with rc %d\n", rc);
1184 /* not much we can do if it fails anyway, ignore rc */
1187 spin_unlock(&cfile->file_info_lock);
1189 buf = cfile->srch_inf.ntwrk_buf_start;
1191 cifs_dbg(FYI, "closedir free smb buf in srch struct\n");
1192 cfile->srch_inf.ntwrk_buf_start = NULL;
1193 if (cfile->srch_inf.smallBuf)
1194 cifs_small_buf_release(buf);
1196 cifs_buf_release(buf);
1199 cifs_put_tlink(cfile->tlink);
1200 kfree(file->private_data);
1201 file->private_data = NULL;
1202 /* BB can we lock the filestruct while this is going on? */
1207 static struct cifsLockInfo *
1208 cifs_lock_init(__u64 offset, __u64 length, __u8 type, __u16 flags)
1210 struct cifsLockInfo *lock =
1211 kmalloc(sizeof(struct cifsLockInfo), GFP_KERNEL);
1214 lock->offset = offset;
1215 lock->length = length;
1217 lock->pid = current->tgid;
1218 lock->flags = flags;
1219 INIT_LIST_HEAD(&lock->blist);
1220 init_waitqueue_head(&lock->block_q);
1225 cifs_del_lock_waiters(struct cifsLockInfo *lock)
1227 struct cifsLockInfo *li, *tmp;
1228 list_for_each_entry_safe(li, tmp, &lock->blist, blist) {
1229 list_del_init(&li->blist);
1230 wake_up(&li->block_q);
1234 #define CIFS_LOCK_OP 0
1235 #define CIFS_READ_OP 1
1236 #define CIFS_WRITE_OP 2
1238 /* @rw_check : 0 - no op, 1 - read, 2 - write */
1240 cifs_find_fid_lock_conflict(struct cifs_fid_locks *fdlocks, __u64 offset,
1241 __u64 length, __u8 type, __u16 flags,
1242 struct cifsFileInfo *cfile,
1243 struct cifsLockInfo **conf_lock, int rw_check)
1245 struct cifsLockInfo *li;
1246 struct cifsFileInfo *cur_cfile = fdlocks->cfile;
1247 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
1249 list_for_each_entry(li, &fdlocks->locks, llist) {
1250 if (offset + length <= li->offset ||
1251 offset >= li->offset + li->length)
1253 if (rw_check != CIFS_LOCK_OP && current->tgid == li->pid &&
1254 server->ops->compare_fids(cfile, cur_cfile)) {
1255 /* shared lock prevents write op through the same fid */
1256 if (!(li->type & server->vals->shared_lock_type) ||
1257 rw_check != CIFS_WRITE_OP)
1260 if ((type & server->vals->shared_lock_type) &&
1261 ((server->ops->compare_fids(cfile, cur_cfile) &&
1262 current->tgid == li->pid) || type == li->type))
1264 if (rw_check == CIFS_LOCK_OP &&
1265 (flags & FL_OFDLCK) && (li->flags & FL_OFDLCK) &&
1266 server->ops->compare_fids(cfile, cur_cfile))
1276 cifs_find_lock_conflict(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
1277 __u8 type, __u16 flags,
1278 struct cifsLockInfo **conf_lock, int rw_check)
1281 struct cifs_fid_locks *cur;
1282 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1284 list_for_each_entry(cur, &cinode->llist, llist) {
1285 rc = cifs_find_fid_lock_conflict(cur, offset, length, type,
1286 flags, cfile, conf_lock,
1296 * Check if there is another lock that prevents us to set the lock (mandatory
1297 * style). If such a lock exists, update the flock structure with its
1298 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
1299 * or leave it the same if we can't. Returns 0 if we don't need to request to
1300 * the server or 1 otherwise.
1303 cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
1304 __u8 type, struct file_lock *flock)
1307 struct cifsLockInfo *conf_lock;
1308 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1309 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
1312 down_read(&cinode->lock_sem);
1314 exist = cifs_find_lock_conflict(cfile, offset, length, type,
1315 flock->fl_flags, &conf_lock,
1318 flock->fl_start = conf_lock->offset;
1319 flock->fl_end = conf_lock->offset + conf_lock->length - 1;
1320 flock->fl_pid = conf_lock->pid;
1321 if (conf_lock->type & server->vals->shared_lock_type)
1322 flock->fl_type = F_RDLCK;
1324 flock->fl_type = F_WRLCK;
1325 } else if (!cinode->can_cache_brlcks)
1328 flock->fl_type = F_UNLCK;
1330 up_read(&cinode->lock_sem);
1335 cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock)
1337 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1338 cifs_down_write(&cinode->lock_sem);
1339 list_add_tail(&lock->llist, &cfile->llist->locks);
1340 up_write(&cinode->lock_sem);
1344 * Set the byte-range lock (mandatory style). Returns:
1345 * 1) 0, if we set the lock and don't need to request to the server;
1346 * 2) 1, if no locks prevent us but we need to request to the server;
1347 * 3) -EACCES, if there is a lock that prevents us and wait is false.
1350 cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock,
1353 struct cifsLockInfo *conf_lock;
1354 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1360 cifs_down_write(&cinode->lock_sem);
1362 exist = cifs_find_lock_conflict(cfile, lock->offset, lock->length,
1363 lock->type, lock->flags, &conf_lock,
1365 if (!exist && cinode->can_cache_brlcks) {
1366 list_add_tail(&lock->llist, &cfile->llist->locks);
1367 up_write(&cinode->lock_sem);
1376 list_add_tail(&lock->blist, &conf_lock->blist);
1377 up_write(&cinode->lock_sem);
1378 rc = wait_event_interruptible(lock->block_q,
1379 (lock->blist.prev == &lock->blist) &&
1380 (lock->blist.next == &lock->blist));
1383 cifs_down_write(&cinode->lock_sem);
1384 list_del_init(&lock->blist);
1387 up_write(&cinode->lock_sem);
1391 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1393 * Check if there is another lock that prevents us to set the lock (posix
1394 * style). If such a lock exists, update the flock structure with its
1395 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
1396 * or leave it the same if we can't. Returns 0 if we don't need to request to
1397 * the server or 1 otherwise.
1400 cifs_posix_lock_test(struct file *file, struct file_lock *flock)
1403 struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1404 unsigned char saved_type = flock->fl_type;
1406 if ((flock->fl_flags & FL_POSIX) == 0)
1409 down_read(&cinode->lock_sem);
1410 posix_test_lock(file, flock);
1412 if (flock->fl_type == F_UNLCK && !cinode->can_cache_brlcks) {
1413 flock->fl_type = saved_type;
1417 up_read(&cinode->lock_sem);
1422 * Set the byte-range lock (posix style). Returns:
1423 * 1) <0, if the error occurs while setting the lock;
1424 * 2) 0, if we set the lock and don't need to request to the server;
1425 * 3) FILE_LOCK_DEFERRED, if we will wait for some other file_lock;
1426 * 4) FILE_LOCK_DEFERRED + 1, if we need to request to the server.
1429 cifs_posix_lock_set(struct file *file, struct file_lock *flock)
1431 struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1432 int rc = FILE_LOCK_DEFERRED + 1;
1434 if ((flock->fl_flags & FL_POSIX) == 0)
1437 cifs_down_write(&cinode->lock_sem);
1438 if (!cinode->can_cache_brlcks) {
1439 up_write(&cinode->lock_sem);
1443 rc = posix_lock_file(file, flock, NULL);
1444 up_write(&cinode->lock_sem);
1449 cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
1452 int rc = 0, stored_rc;
1453 struct cifsLockInfo *li, *tmp;
1454 struct cifs_tcon *tcon;
1455 unsigned int num, max_num, max_buf;
1456 LOCKING_ANDX_RANGE *buf, *cur;
1457 static const int types[] = {
1458 LOCKING_ANDX_LARGE_FILES,
1459 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES
1464 tcon = tlink_tcon(cfile->tlink);
1467 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1468 * and check it before using.
1470 max_buf = tcon->ses->server->maxBuf;
1471 if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) {
1476 BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
1478 max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
1480 max_num = (max_buf - sizeof(struct smb_hdr)) /
1481 sizeof(LOCKING_ANDX_RANGE);
1482 buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1488 for (i = 0; i < 2; i++) {
1491 list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1492 if (li->type != types[i])
1494 cur->Pid = cpu_to_le16(li->pid);
1495 cur->LengthLow = cpu_to_le32((u32)li->length);
1496 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1497 cur->OffsetLow = cpu_to_le32((u32)li->offset);
1498 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1499 if (++num == max_num) {
1500 stored_rc = cifs_lockv(xid, tcon,
1502 (__u8)li->type, 0, num,
1513 stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1514 (__u8)types[i], 0, num, buf);
1526 hash_lockowner(fl_owner_t owner)
1528 return cifs_lock_secret ^ hash32_ptr((const void *)owner);
1530 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1532 struct lock_to_push {
1533 struct list_head llist;
1541 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1543 cifs_push_posix_locks(struct cifsFileInfo *cfile)
1545 struct inode *inode = d_inode(cfile->dentry);
1546 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1547 struct file_lock *flock;
1548 struct file_lock_context *flctx = locks_inode_context(inode);
1549 unsigned int count = 0, i;
1550 int rc = 0, xid, type;
1551 struct list_head locks_to_send, *el;
1552 struct lock_to_push *lck, *tmp;
1560 spin_lock(&flctx->flc_lock);
1561 list_for_each(el, &flctx->flc_posix) {
1564 spin_unlock(&flctx->flc_lock);
1566 INIT_LIST_HEAD(&locks_to_send);
1569 * Allocating count locks is enough because no FL_POSIX locks can be
1570 * added to the list while we are holding cinode->lock_sem that
1571 * protects locking operations of this inode.
1573 for (i = 0; i < count; i++) {
1574 lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL);
1579 list_add_tail(&lck->llist, &locks_to_send);
1582 el = locks_to_send.next;
1583 spin_lock(&flctx->flc_lock);
1584 list_for_each_entry(flock, &flctx->flc_posix, fl_list) {
1585 if (el == &locks_to_send) {
1587 * The list ended. We don't have enough allocated
1588 * structures - something is really wrong.
1590 cifs_dbg(VFS, "Can't push all brlocks!\n");
1593 length = cifs_flock_len(flock);
1594 if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK)
1598 lck = list_entry(el, struct lock_to_push, llist);
1599 lck->pid = hash_lockowner(flock->fl_owner);
1600 lck->netfid = cfile->fid.netfid;
1601 lck->length = length;
1603 lck->offset = flock->fl_start;
1605 spin_unlock(&flctx->flc_lock);
1607 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1610 stored_rc = CIFSSMBPosixLock(xid, tcon, lck->netfid, lck->pid,
1611 lck->offset, lck->length, NULL,
1615 list_del(&lck->llist);
1623 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1624 list_del(&lck->llist);
1629 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1632 cifs_push_locks(struct cifsFileInfo *cfile)
1634 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1635 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1637 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1638 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1639 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1641 /* we are going to update can_cache_brlcks here - need a write access */
1642 cifs_down_write(&cinode->lock_sem);
1643 if (!cinode->can_cache_brlcks) {
1644 up_write(&cinode->lock_sem);
1648 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1649 if (cap_unix(tcon->ses) &&
1650 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1651 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1652 rc = cifs_push_posix_locks(cfile);
1654 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1655 rc = tcon->ses->server->ops->push_mand_locks(cfile);
1657 cinode->can_cache_brlcks = false;
1658 up_write(&cinode->lock_sem);
1663 cifs_read_flock(struct file_lock *flock, __u32 *type, int *lock, int *unlock,
1664 bool *wait_flag, struct TCP_Server_Info *server)
1666 if (flock->fl_flags & FL_POSIX)
1667 cifs_dbg(FYI, "Posix\n");
1668 if (flock->fl_flags & FL_FLOCK)
1669 cifs_dbg(FYI, "Flock\n");
1670 if (flock->fl_flags & FL_SLEEP) {
1671 cifs_dbg(FYI, "Blocking lock\n");
1674 if (flock->fl_flags & FL_ACCESS)
1675 cifs_dbg(FYI, "Process suspended by mandatory locking - not implemented yet\n");
1676 if (flock->fl_flags & FL_LEASE)
1677 cifs_dbg(FYI, "Lease on file - not implemented yet\n");
1678 if (flock->fl_flags &
1679 (~(FL_POSIX | FL_FLOCK | FL_SLEEP |
1680 FL_ACCESS | FL_LEASE | FL_CLOSE | FL_OFDLCK)))
1681 cifs_dbg(FYI, "Unknown lock flags 0x%x\n", flock->fl_flags);
1683 *type = server->vals->large_lock_type;
1684 if (flock->fl_type == F_WRLCK) {
1685 cifs_dbg(FYI, "F_WRLCK\n");
1686 *type |= server->vals->exclusive_lock_type;
1688 } else if (flock->fl_type == F_UNLCK) {
1689 cifs_dbg(FYI, "F_UNLCK\n");
1690 *type |= server->vals->unlock_lock_type;
1692 /* Check if unlock includes more than one lock range */
1693 } else if (flock->fl_type == F_RDLCK) {
1694 cifs_dbg(FYI, "F_RDLCK\n");
1695 *type |= server->vals->shared_lock_type;
1697 } else if (flock->fl_type == F_EXLCK) {
1698 cifs_dbg(FYI, "F_EXLCK\n");
1699 *type |= server->vals->exclusive_lock_type;
1701 } else if (flock->fl_type == F_SHLCK) {
1702 cifs_dbg(FYI, "F_SHLCK\n");
1703 *type |= server->vals->shared_lock_type;
1706 cifs_dbg(FYI, "Unknown type of lock\n");
1710 cifs_getlk(struct file *file, struct file_lock *flock, __u32 type,
1711 bool wait_flag, bool posix_lck, unsigned int xid)
1714 __u64 length = cifs_flock_len(flock);
1715 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1716 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1717 struct TCP_Server_Info *server = tcon->ses->server;
1718 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1719 __u16 netfid = cfile->fid.netfid;
1722 int posix_lock_type;
1724 rc = cifs_posix_lock_test(file, flock);
1728 if (type & server->vals->shared_lock_type)
1729 posix_lock_type = CIFS_RDLCK;
1731 posix_lock_type = CIFS_WRLCK;
1732 rc = CIFSSMBPosixLock(xid, tcon, netfid,
1733 hash_lockowner(flock->fl_owner),
1734 flock->fl_start, length, flock,
1735 posix_lock_type, wait_flag);
1738 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1740 rc = cifs_lock_test(cfile, flock->fl_start, length, type, flock);
1744 /* BB we could chain these into one lock request BB */
1745 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length, type,
1748 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1750 flock->fl_type = F_UNLCK;
1752 cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
1757 if (type & server->vals->shared_lock_type) {
1758 flock->fl_type = F_WRLCK;
1762 type &= ~server->vals->exclusive_lock_type;
1764 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1765 type | server->vals->shared_lock_type,
1768 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1769 type | server->vals->shared_lock_type, 0, 1, false);
1770 flock->fl_type = F_RDLCK;
1772 cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
1775 flock->fl_type = F_WRLCK;
1781 cifs_move_llist(struct list_head *source, struct list_head *dest)
1783 struct list_head *li, *tmp;
1784 list_for_each_safe(li, tmp, source)
1785 list_move(li, dest);
1789 cifs_free_llist(struct list_head *llist)
1791 struct cifsLockInfo *li, *tmp;
1792 list_for_each_entry_safe(li, tmp, llist, llist) {
1793 cifs_del_lock_waiters(li);
1794 list_del(&li->llist);
1799 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1801 cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
1804 int rc = 0, stored_rc;
1805 static const int types[] = {
1806 LOCKING_ANDX_LARGE_FILES,
1807 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES
1810 unsigned int max_num, num, max_buf;
1811 LOCKING_ANDX_RANGE *buf, *cur;
1812 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1813 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1814 struct cifsLockInfo *li, *tmp;
1815 __u64 length = cifs_flock_len(flock);
1816 struct list_head tmp_llist;
1818 INIT_LIST_HEAD(&tmp_llist);
1821 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1822 * and check it before using.
1824 max_buf = tcon->ses->server->maxBuf;
1825 if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE)))
1828 BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
1830 max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
1832 max_num = (max_buf - sizeof(struct smb_hdr)) /
1833 sizeof(LOCKING_ANDX_RANGE);
1834 buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1838 cifs_down_write(&cinode->lock_sem);
1839 for (i = 0; i < 2; i++) {
1842 list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1843 if (flock->fl_start > li->offset ||
1844 (flock->fl_start + length) <
1845 (li->offset + li->length))
1847 if (current->tgid != li->pid)
1849 if (types[i] != li->type)
1851 if (cinode->can_cache_brlcks) {
1853 * We can cache brlock requests - simply remove
1854 * a lock from the file's list.
1856 list_del(&li->llist);
1857 cifs_del_lock_waiters(li);
1861 cur->Pid = cpu_to_le16(li->pid);
1862 cur->LengthLow = cpu_to_le32((u32)li->length);
1863 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1864 cur->OffsetLow = cpu_to_le32((u32)li->offset);
1865 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1867 * We need to save a lock here to let us add it again to
1868 * the file's list if the unlock range request fails on
1871 list_move(&li->llist, &tmp_llist);
1872 if (++num == max_num) {
1873 stored_rc = cifs_lockv(xid, tcon,
1875 li->type, num, 0, buf);
1878 * We failed on the unlock range
1879 * request - add all locks from the tmp
1880 * list to the head of the file's list.
1882 cifs_move_llist(&tmp_llist,
1883 &cfile->llist->locks);
1887 * The unlock range request succeed -
1888 * free the tmp list.
1890 cifs_free_llist(&tmp_llist);
1897 stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1898 types[i], num, 0, buf);
1900 cifs_move_llist(&tmp_llist,
1901 &cfile->llist->locks);
1904 cifs_free_llist(&tmp_llist);
1908 up_write(&cinode->lock_sem);
1912 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1915 cifs_setlk(struct file *file, struct file_lock *flock, __u32 type,
1916 bool wait_flag, bool posix_lck, int lock, int unlock,
1920 __u64 length = cifs_flock_len(flock);
1921 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1922 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1923 struct TCP_Server_Info *server = tcon->ses->server;
1924 struct inode *inode = d_inode(cfile->dentry);
1926 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1928 int posix_lock_type;
1930 rc = cifs_posix_lock_set(file, flock);
1931 if (rc <= FILE_LOCK_DEFERRED)
1934 if (type & server->vals->shared_lock_type)
1935 posix_lock_type = CIFS_RDLCK;
1937 posix_lock_type = CIFS_WRLCK;
1940 posix_lock_type = CIFS_UNLCK;
1942 rc = CIFSSMBPosixLock(xid, tcon, cfile->fid.netfid,
1943 hash_lockowner(flock->fl_owner),
1944 flock->fl_start, length,
1945 NULL, posix_lock_type, wait_flag);
1948 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1950 struct cifsLockInfo *lock;
1952 lock = cifs_lock_init(flock->fl_start, length, type,
1957 rc = cifs_lock_add_if(cfile, lock, wait_flag);
1966 * Windows 7 server can delay breaking lease from read to None
1967 * if we set a byte-range lock on a file - break it explicitly
1968 * before sending the lock to the server to be sure the next
1969 * read won't conflict with non-overlapted locks due to
1972 if (!CIFS_CACHE_WRITE(CIFS_I(inode)) &&
1973 CIFS_CACHE_READ(CIFS_I(inode))) {
1974 cifs_zap_mapping(inode);
1975 cifs_dbg(FYI, "Set no oplock for inode=%p due to mand locks\n",
1977 CIFS_I(inode)->oplock = 0;
1980 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1981 type, 1, 0, wait_flag);
1987 cifs_lock_add(cfile, lock);
1989 rc = server->ops->mand_unlock_range(cfile, flock, xid);
1992 if ((flock->fl_flags & FL_POSIX) || (flock->fl_flags & FL_FLOCK)) {
1994 * If this is a request to remove all locks because we
1995 * are closing the file, it doesn't matter if the
1996 * unlocking failed as both cifs.ko and the SMB server
1997 * remove the lock on file close
2000 cifs_dbg(VFS, "%s failed rc=%d\n", __func__, rc);
2001 if (!(flock->fl_flags & FL_CLOSE))
2004 rc = locks_lock_file_wait(file, flock);
2009 int cifs_flock(struct file *file, int cmd, struct file_lock *fl)
2012 int lock = 0, unlock = 0;
2013 bool wait_flag = false;
2014 bool posix_lck = false;
2015 struct cifs_sb_info *cifs_sb;
2016 struct cifs_tcon *tcon;
2017 struct cifsFileInfo *cfile;
2022 if (!(fl->fl_flags & FL_FLOCK)) {
2028 cfile = (struct cifsFileInfo *)file->private_data;
2029 tcon = tlink_tcon(cfile->tlink);
2031 cifs_read_flock(fl, &type, &lock, &unlock, &wait_flag,
2033 cifs_sb = CIFS_FILE_SB(file);
2035 if (cap_unix(tcon->ses) &&
2036 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
2037 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
2040 if (!lock && !unlock) {
2042 * if no lock or unlock then nothing to do since we do not
2050 rc = cifs_setlk(file, fl, type, wait_flag, posix_lck, lock, unlock,
2058 int cifs_lock(struct file *file, int cmd, struct file_lock *flock)
2061 int lock = 0, unlock = 0;
2062 bool wait_flag = false;
2063 bool posix_lck = false;
2064 struct cifs_sb_info *cifs_sb;
2065 struct cifs_tcon *tcon;
2066 struct cifsFileInfo *cfile;
2072 cifs_dbg(FYI, "%s: %pD2 cmd=0x%x type=0x%x flags=0x%x r=%lld:%lld\n", __func__, file, cmd,
2073 flock->fl_flags, flock->fl_type, (long long)flock->fl_start,
2074 (long long)flock->fl_end);
2076 cfile = (struct cifsFileInfo *)file->private_data;
2077 tcon = tlink_tcon(cfile->tlink);
2079 cifs_read_flock(flock, &type, &lock, &unlock, &wait_flag,
2081 cifs_sb = CIFS_FILE_SB(file);
2082 set_bit(CIFS_INO_CLOSE_ON_LOCK, &CIFS_I(d_inode(cfile->dentry))->flags);
2084 if (cap_unix(tcon->ses) &&
2085 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
2086 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
2089 * BB add code here to normalize offset and length to account for
2090 * negative length which we can not accept over the wire.
2092 if (IS_GETLK(cmd)) {
2093 rc = cifs_getlk(file, flock, type, wait_flag, posix_lck, xid);
2098 if (!lock && !unlock) {
2100 * if no lock or unlock then nothing to do since we do not
2107 rc = cifs_setlk(file, flock, type, wait_flag, posix_lck, lock, unlock,
2114 * update the file size (if needed) after a write. Should be called with
2115 * the inode->i_lock held
2118 cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
2119 unsigned int bytes_written)
2121 loff_t end_of_write = offset + bytes_written;
2123 if (end_of_write > cifsi->netfs.remote_i_size)
2124 netfs_resize_file(&cifsi->netfs, end_of_write, true);
2128 cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
2129 size_t write_size, loff_t *offset)
2132 unsigned int bytes_written = 0;
2133 unsigned int total_written;
2134 struct cifs_tcon *tcon;
2135 struct TCP_Server_Info *server;
2137 struct dentry *dentry = open_file->dentry;
2138 struct cifsInodeInfo *cifsi = CIFS_I(d_inode(dentry));
2139 struct cifs_io_parms io_parms = {0};
2141 cifs_dbg(FYI, "write %zd bytes to offset %lld of %pd\n",
2142 write_size, *offset, dentry);
2144 tcon = tlink_tcon(open_file->tlink);
2145 server = tcon->ses->server;
2147 if (!server->ops->sync_write)
2152 for (total_written = 0; write_size > total_written;
2153 total_written += bytes_written) {
2155 while (rc == -EAGAIN) {
2159 if (open_file->invalidHandle) {
2160 /* we could deadlock if we called
2161 filemap_fdatawait from here so tell
2162 reopen_file not to flush data to
2164 rc = cifs_reopen_file(open_file, false);
2169 len = min(server->ops->wp_retry_size(d_inode(dentry)),
2170 (unsigned int)write_size - total_written);
2171 /* iov[0] is reserved for smb header */
2172 iov[1].iov_base = (char *)write_data + total_written;
2173 iov[1].iov_len = len;
2175 io_parms.tcon = tcon;
2176 io_parms.offset = *offset;
2177 io_parms.length = len;
2178 rc = server->ops->sync_write(xid, &open_file->fid,
2179 &io_parms, &bytes_written, iov, 1);
2181 if (rc || (bytes_written == 0)) {
2189 spin_lock(&d_inode(dentry)->i_lock);
2190 cifs_update_eof(cifsi, *offset, bytes_written);
2191 spin_unlock(&d_inode(dentry)->i_lock);
2192 *offset += bytes_written;
2196 cifs_stats_bytes_written(tcon, total_written);
2198 if (total_written > 0) {
2199 spin_lock(&d_inode(dentry)->i_lock);
2200 if (*offset > d_inode(dentry)->i_size) {
2201 i_size_write(d_inode(dentry), *offset);
2202 d_inode(dentry)->i_blocks = (512 - 1 + *offset) >> 9;
2204 spin_unlock(&d_inode(dentry)->i_lock);
2206 mark_inode_dirty_sync(d_inode(dentry));
2208 return total_written;
2211 struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
2214 struct cifsFileInfo *open_file = NULL;
2215 struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->netfs.inode.i_sb);
2217 /* only filter by fsuid on multiuser mounts */
2218 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
2221 spin_lock(&cifs_inode->open_file_lock);
2222 /* we could simply get the first_list_entry since write-only entries
2223 are always at the end of the list but since the first entry might
2224 have a close pending, we go through the whole list */
2225 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
2226 if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
2228 if (OPEN_FMODE(open_file->f_flags) & FMODE_READ) {
2229 if ((!open_file->invalidHandle)) {
2230 /* found a good file */
2231 /* lock it so it will not be closed on us */
2232 cifsFileInfo_get(open_file);
2233 spin_unlock(&cifs_inode->open_file_lock);
2235 } /* else might as well continue, and look for
2236 another, or simply have the caller reopen it
2237 again rather than trying to fix this handle */
2238 } else /* write only file */
2239 break; /* write only files are last so must be done */
2241 spin_unlock(&cifs_inode->open_file_lock);
2245 /* Return -EBADF if no handle is found and general rc otherwise */
2247 cifs_get_writable_file(struct cifsInodeInfo *cifs_inode, int flags,
2248 struct cifsFileInfo **ret_file)
2250 struct cifsFileInfo *open_file, *inv_file = NULL;
2251 struct cifs_sb_info *cifs_sb;
2252 bool any_available = false;
2254 unsigned int refind = 0;
2255 bool fsuid_only = flags & FIND_WR_FSUID_ONLY;
2256 bool with_delete = flags & FIND_WR_WITH_DELETE;
2260 * Having a null inode here (because mapping->host was set to zero by
2261 * the VFS or MM) should not happen but we had reports of on oops (due
2262 * to it being zero) during stress testcases so we need to check for it
2265 if (cifs_inode == NULL) {
2266 cifs_dbg(VFS, "Null inode passed to cifs_writeable_file\n");
2271 cifs_sb = CIFS_SB(cifs_inode->netfs.inode.i_sb);
2273 /* only filter by fsuid on multiuser mounts */
2274 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
2277 spin_lock(&cifs_inode->open_file_lock);
2279 if (refind > MAX_REOPEN_ATT) {
2280 spin_unlock(&cifs_inode->open_file_lock);
2283 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
2284 if (!any_available && open_file->pid != current->tgid)
2286 if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
2288 if (with_delete && !(open_file->fid.access & DELETE))
2290 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
2291 if (!open_file->invalidHandle) {
2292 /* found a good writable file */
2293 cifsFileInfo_get(open_file);
2294 spin_unlock(&cifs_inode->open_file_lock);
2295 *ret_file = open_file;
2299 inv_file = open_file;
2303 /* couldn't find useable FH with same pid, try any available */
2304 if (!any_available) {
2305 any_available = true;
2306 goto refind_writable;
2310 any_available = false;
2311 cifsFileInfo_get(inv_file);
2314 spin_unlock(&cifs_inode->open_file_lock);
2317 rc = cifs_reopen_file(inv_file, false);
2319 *ret_file = inv_file;
2323 spin_lock(&cifs_inode->open_file_lock);
2324 list_move_tail(&inv_file->flist, &cifs_inode->openFileList);
2325 spin_unlock(&cifs_inode->open_file_lock);
2326 cifsFileInfo_put(inv_file);
2329 spin_lock(&cifs_inode->open_file_lock);
2330 goto refind_writable;
2336 struct cifsFileInfo *
2337 find_writable_file(struct cifsInodeInfo *cifs_inode, int flags)
2339 struct cifsFileInfo *cfile;
2342 rc = cifs_get_writable_file(cifs_inode, flags, &cfile);
2344 cifs_dbg(FYI, "Couldn't find writable handle rc=%d\n", rc);
2350 cifs_get_writable_path(struct cifs_tcon *tcon, const char *name,
2352 struct cifsFileInfo **ret_file)
2354 struct cifsFileInfo *cfile;
2355 void *page = alloc_dentry_path();
2359 spin_lock(&tcon->open_file_lock);
2360 list_for_each_entry(cfile, &tcon->openFileList, tlist) {
2361 struct cifsInodeInfo *cinode;
2362 const char *full_path = build_path_from_dentry(cfile->dentry, page);
2363 if (IS_ERR(full_path)) {
2364 spin_unlock(&tcon->open_file_lock);
2365 free_dentry_path(page);
2366 return PTR_ERR(full_path);
2368 if (strcmp(full_path, name))
2371 cinode = CIFS_I(d_inode(cfile->dentry));
2372 spin_unlock(&tcon->open_file_lock);
2373 free_dentry_path(page);
2374 return cifs_get_writable_file(cinode, flags, ret_file);
2377 spin_unlock(&tcon->open_file_lock);
2378 free_dentry_path(page);
2383 cifs_get_readable_path(struct cifs_tcon *tcon, const char *name,
2384 struct cifsFileInfo **ret_file)
2386 struct cifsFileInfo *cfile;
2387 void *page = alloc_dentry_path();
2391 spin_lock(&tcon->open_file_lock);
2392 list_for_each_entry(cfile, &tcon->openFileList, tlist) {
2393 struct cifsInodeInfo *cinode;
2394 const char *full_path = build_path_from_dentry(cfile->dentry, page);
2395 if (IS_ERR(full_path)) {
2396 spin_unlock(&tcon->open_file_lock);
2397 free_dentry_path(page);
2398 return PTR_ERR(full_path);
2400 if (strcmp(full_path, name))
2403 cinode = CIFS_I(d_inode(cfile->dentry));
2404 spin_unlock(&tcon->open_file_lock);
2405 free_dentry_path(page);
2406 *ret_file = find_readable_file(cinode, 0);
2407 return *ret_file ? 0 : -ENOENT;
2410 spin_unlock(&tcon->open_file_lock);
2411 free_dentry_path(page);
2416 cifs_writedata_release(struct kref *refcount)
2418 struct cifs_writedata *wdata = container_of(refcount,
2419 struct cifs_writedata, refcount);
2420 #ifdef CONFIG_CIFS_SMB_DIRECT
2422 smbd_deregister_mr(wdata->mr);
2428 cifsFileInfo_put(wdata->cfile);
2434 * Write failed with a retryable error. Resend the write request. It's also
2435 * possible that the page was redirtied so re-clean the page.
2438 cifs_writev_requeue(struct cifs_writedata *wdata)
2441 struct inode *inode = d_inode(wdata->cfile->dentry);
2442 struct TCP_Server_Info *server;
2443 unsigned int rest_len = wdata->bytes;
2444 loff_t fpos = wdata->offset;
2446 server = tlink_tcon(wdata->cfile->tlink)->ses->server;
2448 struct cifs_writedata *wdata2;
2449 unsigned int wsize, cur_len;
2451 wsize = server->ops->wp_retry_size(inode);
2452 if (wsize < rest_len) {
2453 if (wsize < PAGE_SIZE) {
2457 cur_len = min(round_down(wsize, PAGE_SIZE), rest_len);
2462 wdata2 = cifs_writedata_alloc(cifs_writev_complete);
2468 wdata2->sync_mode = wdata->sync_mode;
2469 wdata2->offset = fpos;
2470 wdata2->bytes = cur_len;
2471 wdata2->iter = wdata->iter;
2473 iov_iter_advance(&wdata2->iter, fpos - wdata->offset);
2474 iov_iter_truncate(&wdata2->iter, wdata2->bytes);
2476 if (iov_iter_is_xarray(&wdata2->iter))
2477 /* Check for pages having been redirtied and clean
2478 * them. We can do this by walking the xarray. If
2479 * it's not an xarray, then it's a DIO and we shouldn't
2480 * be mucking around with the page bits.
2482 cifs_undirty_folios(inode, fpos, cur_len);
2484 rc = cifs_get_writable_file(CIFS_I(inode), FIND_WR_ANY,
2486 if (!wdata2->cfile) {
2487 cifs_dbg(VFS, "No writable handle to retry writepages rc=%d\n",
2489 if (!is_retryable_error(rc))
2492 wdata2->pid = wdata2->cfile->pid;
2493 rc = server->ops->async_writev(wdata2,
2494 cifs_writedata_release);
2497 kref_put(&wdata2->refcount, cifs_writedata_release);
2499 if (is_retryable_error(rc))
2502 rest_len -= cur_len;
2507 rest_len -= cur_len;
2508 } while (rest_len > 0);
2510 /* Clean up remaining pages from the original wdata */
2511 if (iov_iter_is_xarray(&wdata->iter))
2512 cifs_pages_write_failed(inode, fpos, rest_len);
2514 if (rc != 0 && !is_retryable_error(rc))
2515 mapping_set_error(inode->i_mapping, rc);
2516 kref_put(&wdata->refcount, cifs_writedata_release);
2520 cifs_writev_complete(struct work_struct *work)
2522 struct cifs_writedata *wdata = container_of(work,
2523 struct cifs_writedata, work);
2524 struct inode *inode = d_inode(wdata->cfile->dentry);
2526 if (wdata->result == 0) {
2527 spin_lock(&inode->i_lock);
2528 cifs_update_eof(CIFS_I(inode), wdata->offset, wdata->bytes);
2529 spin_unlock(&inode->i_lock);
2530 cifs_stats_bytes_written(tlink_tcon(wdata->cfile->tlink),
2532 } else if (wdata->sync_mode == WB_SYNC_ALL && wdata->result == -EAGAIN)
2533 return cifs_writev_requeue(wdata);
2535 if (wdata->result == -EAGAIN)
2536 cifs_pages_write_redirty(inode, wdata->offset, wdata->bytes);
2537 else if (wdata->result < 0)
2538 cifs_pages_write_failed(inode, wdata->offset, wdata->bytes);
2540 cifs_pages_written_back(inode, wdata->offset, wdata->bytes);
2542 if (wdata->result != -EAGAIN)
2543 mapping_set_error(inode->i_mapping, wdata->result);
2544 kref_put(&wdata->refcount, cifs_writedata_release);
2547 struct cifs_writedata *cifs_writedata_alloc(work_func_t complete)
2549 struct cifs_writedata *wdata;
2551 wdata = kzalloc(sizeof(*wdata), GFP_NOFS);
2552 if (wdata != NULL) {
2553 kref_init(&wdata->refcount);
2554 INIT_LIST_HEAD(&wdata->list);
2555 init_completion(&wdata->done);
2556 INIT_WORK(&wdata->work, complete);
2561 static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to)
2563 struct address_space *mapping = page->mapping;
2564 loff_t offset = (loff_t)page->index << PAGE_SHIFT;
2567 int bytes_written = 0;
2568 struct inode *inode;
2569 struct cifsFileInfo *open_file;
2571 if (!mapping || !mapping->host)
2574 inode = page->mapping->host;
2576 offset += (loff_t)from;
2577 write_data = kmap(page);
2580 if ((to > PAGE_SIZE) || (from > to)) {
2585 /* racing with truncate? */
2586 if (offset > mapping->host->i_size) {
2588 return 0; /* don't care */
2591 /* check to make sure that we are not extending the file */
2592 if (mapping->host->i_size - offset < (loff_t)to)
2593 to = (unsigned)(mapping->host->i_size - offset);
2595 rc = cifs_get_writable_file(CIFS_I(mapping->host), FIND_WR_ANY,
2598 bytes_written = cifs_write(open_file, open_file->pid,
2599 write_data, to - from, &offset);
2600 cifsFileInfo_put(open_file);
2601 /* Does mm or vfs already set times? */
2602 simple_inode_init_ts(inode);
2603 if ((bytes_written > 0) && (offset))
2605 else if (bytes_written < 0)
2610 cifs_dbg(FYI, "No writable handle for write page rc=%d\n", rc);
2611 if (!is_retryable_error(rc))
2620 * Extend the region to be written back to include subsequent contiguously
2621 * dirty pages if possible, but don't sleep while doing so.
2623 static void cifs_extend_writeback(struct address_space *mapping,
2630 struct folio_batch batch;
2631 struct folio *folio;
2632 unsigned int psize, nr_pages;
2634 pgoff_t index = (start + len) / PAGE_SIZE;
2637 XA_STATE(xas, &mapping->i_pages, index);
2639 folio_batch_init(&batch);
2642 /* Firstly, we gather up a batch of contiguous dirty pages
2643 * under the RCU read lock - but we can't clear the dirty flags
2644 * there if any of those pages are mapped.
2648 xas_for_each(&xas, folio, ULONG_MAX) {
2650 if (xas_retry(&xas, folio))
2652 if (xa_is_value(folio))
2654 if (folio->index != index)
2656 if (!folio_try_get_rcu(folio)) {
2660 nr_pages = folio_nr_pages(folio);
2661 if (nr_pages > max_pages)
2664 /* Has the page moved or been split? */
2665 if (unlikely(folio != xas_reload(&xas))) {
2670 if (!folio_trylock(folio)) {
2674 if (!folio_test_dirty(folio) || folio_test_writeback(folio)) {
2675 folio_unlock(folio);
2680 max_pages -= nr_pages;
2681 psize = folio_size(folio);
2684 if (max_pages <= 0 || len >= max_len || *_count <= 0)
2688 if (!folio_batch_add(&batch, folio))
2698 /* Now, if we obtained any pages, we can shift them to being
2699 * writable and mark them for caching.
2701 if (!folio_batch_count(&batch))
2704 for (i = 0; i < folio_batch_count(&batch); i++) {
2705 folio = batch.folios[i];
2706 /* The folio should be locked, dirty and not undergoing
2707 * writeback from the loop above.
2709 if (!folio_clear_dirty_for_io(folio))
2711 folio_start_writeback(folio);
2713 *_count -= folio_nr_pages(folio);
2714 folio_unlock(folio);
2717 folio_batch_release(&batch);
2725 * Write back the locked page and any subsequent non-locked dirty pages.
2727 static ssize_t cifs_write_back_from_locked_folio(struct address_space *mapping,
2728 struct writeback_control *wbc,
2729 struct folio *folio,
2730 loff_t start, loff_t end)
2732 struct inode *inode = mapping->host;
2733 struct TCP_Server_Info *server;
2734 struct cifs_writedata *wdata;
2735 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2736 struct cifs_credits credits_on_stack;
2737 struct cifs_credits *credits = &credits_on_stack;
2738 struct cifsFileInfo *cfile = NULL;
2739 unsigned int xid, wsize, len;
2740 loff_t i_size = i_size_read(inode);
2742 long count = wbc->nr_to_write;
2745 /* The folio should be locked, dirty and not undergoing writeback. */
2746 folio_start_writeback(folio);
2748 count -= folio_nr_pages(folio);
2749 len = folio_size(folio);
2752 server = cifs_pick_channel(cifs_sb_master_tcon(cifs_sb)->ses);
2754 rc = cifs_get_writable_file(CIFS_I(inode), FIND_WR_ANY, &cfile);
2756 cifs_dbg(VFS, "No writable handle in writepages rc=%d\n", rc);
2760 rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->wsize,
2765 wdata = cifs_writedata_alloc(cifs_writev_complete);
2771 wdata->sync_mode = wbc->sync_mode;
2772 wdata->offset = folio_pos(folio);
2773 wdata->pid = cfile->pid;
2774 wdata->credits = credits_on_stack;
2775 wdata->cfile = cfile;
2776 wdata->server = server;
2779 /* Find all consecutive lockable dirty pages, stopping when we find a
2780 * page that is not immediately lockable, is not dirty or is missing,
2781 * or we reach the end of the range.
2783 if (start < i_size) {
2784 /* Trim the write to the EOF; the extra data is ignored. Also
2785 * put an upper limit on the size of a single storedata op.
2788 max_len = min_t(unsigned long long, max_len, end - start + 1);
2789 max_len = min_t(unsigned long long, max_len, i_size - start);
2791 if (len < max_len) {
2792 int max_pages = INT_MAX;
2794 #ifdef CONFIG_CIFS_SMB_DIRECT
2795 if (server->smbd_conn)
2796 max_pages = server->smbd_conn->max_frmr_depth;
2798 max_pages -= folio_nr_pages(folio);
2801 cifs_extend_writeback(mapping, &count, start,
2802 max_pages, max_len, &len);
2804 len = min_t(loff_t, len, max_len);
2809 /* We now have a contiguous set of dirty pages, each with writeback
2810 * set; the first page is still locked at this point, but all the rest
2811 * have been unlocked.
2813 folio_unlock(folio);
2815 if (start < i_size) {
2816 iov_iter_xarray(&wdata->iter, ITER_SOURCE, &mapping->i_pages,
2819 rc = adjust_credits(wdata->server, &wdata->credits, wdata->bytes);
2823 if (wdata->cfile->invalidHandle)
2826 rc = wdata->server->ops->async_writev(wdata,
2827 cifs_writedata_release);
2829 kref_put(&wdata->refcount, cifs_writedata_release);
2833 /* The dirty region was entirely beyond the EOF. */
2834 cifs_pages_written_back(inode, start, len);
2839 kref_put(&wdata->refcount, cifs_writedata_release);
2841 add_credits_and_wake_if(server, credits, 0);
2844 cifsFileInfo_put(cfile);
2848 wbc->nr_to_write = count;
2850 } else if (is_retryable_error(rc)) {
2851 cifs_pages_write_redirty(inode, start, len);
2853 cifs_pages_write_failed(inode, start, len);
2854 mapping_set_error(mapping, rc);
2856 /* Indication to update ctime and mtime as close is deferred */
2857 set_bit(CIFS_INO_MODIFIED_ATTR, &CIFS_I(inode)->flags);
2862 * write a region of pages back to the server
2864 static int cifs_writepages_region(struct address_space *mapping,
2865 struct writeback_control *wbc,
2866 loff_t start, loff_t end, loff_t *_next)
2868 struct folio_batch fbatch;
2871 folio_batch_init(&fbatch);
2874 pgoff_t index = start / PAGE_SIZE;
2876 nr = filemap_get_folios_tag(mapping, &index, end / PAGE_SIZE,
2877 PAGECACHE_TAG_DIRTY, &fbatch);
2881 for (int i = 0; i < nr; i++) {
2883 struct folio *folio = fbatch.folios[i];
2886 start = folio_pos(folio); /* May regress with THPs */
2888 /* At this point we hold neither the i_pages lock nor the
2889 * page lock: the page may be truncated or invalidated
2890 * (changing page->mapping to NULL), or even swizzled
2891 * back from swapper_space to tmpfs file mapping
2893 if (wbc->sync_mode != WB_SYNC_NONE) {
2894 ret = folio_lock_killable(folio);
2898 if (!folio_trylock(folio))
2902 if (folio->mapping != mapping ||
2903 !folio_test_dirty(folio)) {
2904 start += folio_size(folio);
2905 folio_unlock(folio);
2909 if (folio_test_writeback(folio) ||
2910 folio_test_fscache(folio)) {
2911 folio_unlock(folio);
2912 if (wbc->sync_mode == WB_SYNC_NONE)
2915 folio_wait_writeback(folio);
2916 #ifdef CONFIG_CIFS_FSCACHE
2917 folio_wait_fscache(folio);
2922 if (!folio_clear_dirty_for_io(folio))
2923 /* We hold the page lock - it should've been dirty. */
2926 ret = cifs_write_back_from_locked_folio(mapping, wbc, folio, start, end);
2934 folio_batch_release(&fbatch);
2940 * Too many skipped writes, or need to reschedule?
2941 * Treat it as a write error without an error code.
2943 if (skips >= 5 || need_resched()) {
2948 /* Otherwise, just skip that folio and go on to the next */
2950 start += folio_size(folio);
2954 folio_batch_release(&fbatch);
2956 } while (wbc->nr_to_write > 0);
2963 * Write some of the pending data back to the server
2965 static int cifs_writepages(struct address_space *mapping,
2966 struct writeback_control *wbc)
2971 /* We have to be careful as we can end up racing with setattr()
2972 * truncating the pagecache since the caller doesn't take a lock here
2976 if (wbc->range_cyclic) {
2977 start = mapping->writeback_index * PAGE_SIZE;
2978 ret = cifs_writepages_region(mapping, wbc, start, LLONG_MAX, &next);
2980 mapping->writeback_index = next / PAGE_SIZE;
2981 if (start > 0 && wbc->nr_to_write > 0) {
2982 ret = cifs_writepages_region(mapping, wbc, 0,
2985 mapping->writeback_index =
2989 } else if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) {
2990 ret = cifs_writepages_region(mapping, wbc, 0, LLONG_MAX, &next);
2991 if (wbc->nr_to_write > 0 && ret == 0)
2992 mapping->writeback_index = next / PAGE_SIZE;
2994 ret = cifs_writepages_region(mapping, wbc,
2995 wbc->range_start, wbc->range_end, &next);
3002 cifs_writepage_locked(struct page *page, struct writeback_control *wbc)
3008 /* BB add check for wbc flags */
3010 if (!PageUptodate(page))
3011 cifs_dbg(FYI, "ppw - page not up to date\n");
3014 * Set the "writeback" flag, and clear "dirty" in the radix tree.
3016 * A writepage() implementation always needs to do either this,
3017 * or re-dirty the page with "redirty_page_for_writepage()" in
3018 * the case of a failure.
3020 * Just unlocking the page will cause the radix tree tag-bits
3021 * to fail to update with the state of the page correctly.
3023 set_page_writeback(page);
3025 rc = cifs_partialpagewrite(page, 0, PAGE_SIZE);
3026 if (is_retryable_error(rc)) {
3027 if (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN)
3029 redirty_page_for_writepage(wbc, page);
3030 } else if (rc != 0) {
3032 mapping_set_error(page->mapping, rc);
3034 SetPageUptodate(page);
3036 end_page_writeback(page);
3042 static int cifs_write_end(struct file *file, struct address_space *mapping,
3043 loff_t pos, unsigned len, unsigned copied,
3044 struct page *page, void *fsdata)
3047 struct inode *inode = mapping->host;
3048 struct cifsFileInfo *cfile = file->private_data;
3049 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
3050 struct folio *folio = page_folio(page);
3053 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
3056 pid = current->tgid;
3058 cifs_dbg(FYI, "write_end for page %p from pos %lld with %d bytes\n",
3061 if (folio_test_checked(folio)) {
3063 folio_mark_uptodate(folio);
3064 folio_clear_checked(folio);
3065 } else if (!folio_test_uptodate(folio) && copied == PAGE_SIZE)
3066 folio_mark_uptodate(folio);
3068 if (!folio_test_uptodate(folio)) {
3070 unsigned offset = pos & (PAGE_SIZE - 1);
3074 /* this is probably better than directly calling
3075 partialpage_write since in this function the file handle is
3076 known which we might as well leverage */
3077 /* BB check if anything else missing out of ppw
3078 such as updating last write time */
3079 page_data = kmap(page);
3080 rc = cifs_write(cfile, pid, page_data + offset, copied, &pos);
3081 /* if (rc < 0) should we set writebehind rc? */
3088 set_page_dirty(page);
3092 spin_lock(&inode->i_lock);
3093 if (pos > inode->i_size) {
3094 i_size_write(inode, pos);
3095 inode->i_blocks = (512 - 1 + pos) >> 9;
3097 spin_unlock(&inode->i_lock);
3102 /* Indication to update ctime and mtime as close is deferred */
3103 set_bit(CIFS_INO_MODIFIED_ATTR, &CIFS_I(inode)->flags);
3108 int cifs_strict_fsync(struct file *file, loff_t start, loff_t end,
3113 struct cifs_tcon *tcon;
3114 struct TCP_Server_Info *server;
3115 struct cifsFileInfo *smbfile = file->private_data;
3116 struct inode *inode = file_inode(file);
3117 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
3119 rc = file_write_and_wait_range(file, start, end);
3121 trace_cifs_fsync_err(inode->i_ino, rc);
3127 cifs_dbg(FYI, "Sync file - name: %pD datasync: 0x%x\n",
3130 if (!CIFS_CACHE_READ(CIFS_I(inode))) {
3131 rc = cifs_zap_mapping(inode);
3133 cifs_dbg(FYI, "rc: %d during invalidate phase\n", rc);
3134 rc = 0; /* don't care about it in fsync */
3138 tcon = tlink_tcon(smbfile->tlink);
3139 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)) {
3140 server = tcon->ses->server;
3141 if (server->ops->flush == NULL) {
3143 goto strict_fsync_exit;
3146 if ((OPEN_FMODE(smbfile->f_flags) & FMODE_WRITE) == 0) {
3147 smbfile = find_writable_file(CIFS_I(inode), FIND_WR_ANY);
3149 rc = server->ops->flush(xid, tcon, &smbfile->fid);
3150 cifsFileInfo_put(smbfile);
3152 cifs_dbg(FYI, "ignore fsync for file not open for write\n");
3154 rc = server->ops->flush(xid, tcon, &smbfile->fid);
3162 int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
3166 struct cifs_tcon *tcon;
3167 struct TCP_Server_Info *server;
3168 struct cifsFileInfo *smbfile = file->private_data;
3169 struct inode *inode = file_inode(file);
3170 struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
3172 rc = file_write_and_wait_range(file, start, end);
3174 trace_cifs_fsync_err(file_inode(file)->i_ino, rc);
3180 cifs_dbg(FYI, "Sync file - name: %pD datasync: 0x%x\n",
3183 tcon = tlink_tcon(smbfile->tlink);
3184 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)) {
3185 server = tcon->ses->server;
3186 if (server->ops->flush == NULL) {
3191 if ((OPEN_FMODE(smbfile->f_flags) & FMODE_WRITE) == 0) {
3192 smbfile = find_writable_file(CIFS_I(inode), FIND_WR_ANY);
3194 rc = server->ops->flush(xid, tcon, &smbfile->fid);
3195 cifsFileInfo_put(smbfile);
3197 cifs_dbg(FYI, "ignore fsync for file not open for write\n");
3199 rc = server->ops->flush(xid, tcon, &smbfile->fid);
3208 * As file closes, flush all cached write data for this inode checking
3209 * for write behind errors.
3211 int cifs_flush(struct file *file, fl_owner_t id)
3213 struct inode *inode = file_inode(file);
3216 if (file->f_mode & FMODE_WRITE)
3217 rc = filemap_write_and_wait(inode->i_mapping);
3219 cifs_dbg(FYI, "Flush inode %p file %p rc %d\n", inode, file, rc);
3221 /* get more nuanced writeback errors */
3222 rc = filemap_check_wb_err(file->f_mapping, 0);
3223 trace_cifs_flush_err(inode->i_ino, rc);
3229 cifs_uncached_writedata_release(struct kref *refcount)
3231 struct cifs_writedata *wdata = container_of(refcount,
3232 struct cifs_writedata, refcount);
3234 kref_put(&wdata->ctx->refcount, cifs_aio_ctx_release);
3235 cifs_writedata_release(refcount);
3238 static void collect_uncached_write_data(struct cifs_aio_ctx *ctx);
3241 cifs_uncached_writev_complete(struct work_struct *work)
3243 struct cifs_writedata *wdata = container_of(work,
3244 struct cifs_writedata, work);
3245 struct inode *inode = d_inode(wdata->cfile->dentry);
3246 struct cifsInodeInfo *cifsi = CIFS_I(inode);
3248 spin_lock(&inode->i_lock);
3249 cifs_update_eof(cifsi, wdata->offset, wdata->bytes);
3250 if (cifsi->netfs.remote_i_size > inode->i_size)
3251 i_size_write(inode, cifsi->netfs.remote_i_size);
3252 spin_unlock(&inode->i_lock);
3254 complete(&wdata->done);
3255 collect_uncached_write_data(wdata->ctx);
3256 /* the below call can possibly free the last ref to aio ctx */
3257 kref_put(&wdata->refcount, cifs_uncached_writedata_release);
3261 cifs_resend_wdata(struct cifs_writedata *wdata, struct list_head *wdata_list,
3262 struct cifs_aio_ctx *ctx)
3265 struct cifs_credits credits;
3267 struct TCP_Server_Info *server = wdata->server;
3270 if (wdata->cfile->invalidHandle) {
3271 rc = cifs_reopen_file(wdata->cfile, false);
3280 * Wait for credits to resend this wdata.
3281 * Note: we are attempting to resend the whole wdata not in
3285 rc = server->ops->wait_mtu_credits(server, wdata->bytes,
3290 if (wsize < wdata->bytes) {
3291 add_credits_and_wake_if(server, &credits, 0);
3294 } while (wsize < wdata->bytes);
3295 wdata->credits = credits;
3297 rc = adjust_credits(server, &wdata->credits, wdata->bytes);
3300 if (wdata->cfile->invalidHandle)
3303 wdata->replay = true;
3304 #ifdef CONFIG_CIFS_SMB_DIRECT
3306 wdata->mr->need_invalidate = true;
3307 smbd_deregister_mr(wdata->mr);
3311 rc = server->ops->async_writev(wdata,
3312 cifs_uncached_writedata_release);
3316 /* If the write was successfully sent, we are done */
3318 list_add_tail(&wdata->list, wdata_list);
3322 /* Roll back credits and retry if needed */
3323 add_credits_and_wake_if(server, &wdata->credits, 0);
3324 } while (rc == -EAGAIN);
3327 kref_put(&wdata->refcount, cifs_uncached_writedata_release);
3332 * Select span of a bvec iterator we're going to use. Limit it by both maximum
3333 * size and maximum number of segments.
3335 static size_t cifs_limit_bvec_subset(const struct iov_iter *iter, size_t max_size,
3336 size_t max_segs, unsigned int *_nsegs)
3338 const struct bio_vec *bvecs = iter->bvec;
3339 unsigned int nbv = iter->nr_segs, ix = 0, nsegs = 0;
3340 size_t len, span = 0, n = iter->count;
3341 size_t skip = iter->iov_offset;
3343 if (WARN_ON(!iov_iter_is_bvec(iter)) || n == 0)
3346 while (n && ix < nbv && skip) {
3347 len = bvecs[ix].bv_len;
3355 while (n && ix < nbv) {
3356 len = min3(n, bvecs[ix].bv_len - skip, max_size);
3361 if (max_size == 0 || nsegs >= max_segs)
3372 cifs_write_from_iter(loff_t fpos, size_t len, struct iov_iter *from,
3373 struct cifsFileInfo *open_file,
3374 struct cifs_sb_info *cifs_sb, struct list_head *wdata_list,
3375 struct cifs_aio_ctx *ctx)
3378 size_t cur_len, max_len;
3379 struct cifs_writedata *wdata;
3381 struct TCP_Server_Info *server;
3382 unsigned int xid, max_segs = INT_MAX;
3384 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
3385 pid = open_file->pid;
3387 pid = current->tgid;
3389 server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses);
3392 #ifdef CONFIG_CIFS_SMB_DIRECT
3393 if (server->smbd_conn)
3394 max_segs = server->smbd_conn->max_frmr_depth;
3398 struct cifs_credits credits_on_stack;
3399 struct cifs_credits *credits = &credits_on_stack;
3400 unsigned int wsize, nsegs = 0;
3402 if (signal_pending(current)) {
3407 if (open_file->invalidHandle) {
3408 rc = cifs_reopen_file(open_file, false);
3415 rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->wsize,
3420 max_len = min_t(const size_t, len, wsize);
3423 add_credits_and_wake_if(server, credits, 0);
3427 cur_len = cifs_limit_bvec_subset(from, max_len, max_segs, &nsegs);
3428 cifs_dbg(FYI, "write_from_iter len=%zx/%zx nsegs=%u/%lu/%u\n",
3429 cur_len, max_len, nsegs, from->nr_segs, max_segs);
3432 add_credits_and_wake_if(server, credits, 0);
3436 wdata = cifs_writedata_alloc(cifs_uncached_writev_complete);
3439 add_credits_and_wake_if(server, credits, 0);
3443 wdata->sync_mode = WB_SYNC_ALL;
3444 wdata->offset = (__u64)fpos;
3445 wdata->cfile = cifsFileInfo_get(open_file);
3446 wdata->server = server;
3448 wdata->bytes = cur_len;
3449 wdata->credits = credits_on_stack;
3450 wdata->iter = *from;
3452 kref_get(&ctx->refcount);
3454 iov_iter_truncate(&wdata->iter, cur_len);
3456 rc = adjust_credits(server, &wdata->credits, wdata->bytes);
3459 if (wdata->cfile->invalidHandle)
3462 rc = server->ops->async_writev(wdata,
3463 cifs_uncached_writedata_release);
3467 add_credits_and_wake_if(server, &wdata->credits, 0);
3468 kref_put(&wdata->refcount,
3469 cifs_uncached_writedata_release);
3475 list_add_tail(&wdata->list, wdata_list);
3476 iov_iter_advance(from, cur_len);
3485 static void collect_uncached_write_data(struct cifs_aio_ctx *ctx)
3487 struct cifs_writedata *wdata, *tmp;
3488 struct cifs_tcon *tcon;
3489 struct cifs_sb_info *cifs_sb;
3490 struct dentry *dentry = ctx->cfile->dentry;
3493 tcon = tlink_tcon(ctx->cfile->tlink);
3494 cifs_sb = CIFS_SB(dentry->d_sb);
3496 mutex_lock(&ctx->aio_mutex);
3498 if (list_empty(&ctx->list)) {
3499 mutex_unlock(&ctx->aio_mutex);
3505 * Wait for and collect replies for any successful sends in order of
3506 * increasing offset. Once an error is hit, then return without waiting
3507 * for any more replies.
3510 list_for_each_entry_safe(wdata, tmp, &ctx->list, list) {
3512 if (!try_wait_for_completion(&wdata->done)) {
3513 mutex_unlock(&ctx->aio_mutex);
3520 ctx->total_len += wdata->bytes;
3522 /* resend call if it's a retryable error */
3523 if (rc == -EAGAIN) {
3524 struct list_head tmp_list;
3525 struct iov_iter tmp_from = ctx->iter;
3527 INIT_LIST_HEAD(&tmp_list);
3528 list_del_init(&wdata->list);
3531 rc = cifs_resend_wdata(
3532 wdata, &tmp_list, ctx);
3534 iov_iter_advance(&tmp_from,
3535 wdata->offset - ctx->pos);
3537 rc = cifs_write_from_iter(wdata->offset,
3538 wdata->bytes, &tmp_from,
3539 ctx->cfile, cifs_sb, &tmp_list,
3542 kref_put(&wdata->refcount,
3543 cifs_uncached_writedata_release);
3546 list_splice(&tmp_list, &ctx->list);
3550 list_del_init(&wdata->list);
3551 kref_put(&wdata->refcount, cifs_uncached_writedata_release);
3554 cifs_stats_bytes_written(tcon, ctx->total_len);
3555 set_bit(CIFS_INO_INVALID_MAPPING, &CIFS_I(dentry->d_inode)->flags);
3557 ctx->rc = (rc == 0) ? ctx->total_len : rc;
3559 mutex_unlock(&ctx->aio_mutex);
3561 if (ctx->iocb && ctx->iocb->ki_complete)
3562 ctx->iocb->ki_complete(ctx->iocb, ctx->rc);
3564 complete(&ctx->done);
3567 static ssize_t __cifs_writev(
3568 struct kiocb *iocb, struct iov_iter *from, bool direct)
3570 struct file *file = iocb->ki_filp;
3571 ssize_t total_written = 0;
3572 struct cifsFileInfo *cfile;
3573 struct cifs_tcon *tcon;
3574 struct cifs_sb_info *cifs_sb;
3575 struct cifs_aio_ctx *ctx;
3578 rc = generic_write_checks(iocb, from);
3582 cifs_sb = CIFS_FILE_SB(file);
3583 cfile = file->private_data;
3584 tcon = tlink_tcon(cfile->tlink);
3586 if (!tcon->ses->server->ops->async_writev)
3589 ctx = cifs_aio_ctx_alloc();
3593 ctx->cfile = cifsFileInfo_get(cfile);
3595 if (!is_sync_kiocb(iocb))
3598 ctx->pos = iocb->ki_pos;
3599 ctx->direct_io = direct;
3600 ctx->nr_pinned_pages = 0;
3602 if (user_backed_iter(from)) {
3604 * Extract IOVEC/UBUF-type iterators to a BVEC-type iterator as
3605 * they contain references to the calling process's virtual
3606 * memory layout which won't be available in an async worker
3607 * thread. This also takes a pin on every folio involved.
3609 rc = netfs_extract_user_iter(from, iov_iter_count(from),
3612 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3616 ctx->nr_pinned_pages = rc;
3617 ctx->bv = (void *)ctx->iter.bvec;
3618 ctx->bv_need_unpin = iov_iter_extract_will_pin(from);
3619 } else if ((iov_iter_is_bvec(from) || iov_iter_is_kvec(from)) &&
3620 !is_sync_kiocb(iocb)) {
3622 * If the op is asynchronous, we need to copy the list attached
3623 * to a BVEC/KVEC-type iterator, but we assume that the storage
3624 * will be pinned by the caller; in any case, we may or may not
3625 * be able to pin the pages, so we don't try.
3627 ctx->bv = (void *)dup_iter(&ctx->iter, from, GFP_KERNEL);
3629 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3634 * Otherwise, we just pass the iterator down as-is and rely on
3635 * the caller to make sure the pages referred to by the
3636 * iterator don't evaporate.
3641 ctx->len = iov_iter_count(&ctx->iter);
3643 /* grab a lock here due to read response handlers can access ctx */
3644 mutex_lock(&ctx->aio_mutex);
3646 rc = cifs_write_from_iter(iocb->ki_pos, ctx->len, &ctx->iter,
3647 cfile, cifs_sb, &ctx->list, ctx);
3650 * If at least one write was successfully sent, then discard any rc
3651 * value from the later writes. If the other write succeeds, then
3652 * we'll end up returning whatever was written. If it fails, then
3653 * we'll get a new rc value from that.
3655 if (!list_empty(&ctx->list))
3658 mutex_unlock(&ctx->aio_mutex);
3661 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3665 if (!is_sync_kiocb(iocb)) {
3666 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3667 return -EIOCBQUEUED;
3670 rc = wait_for_completion_killable(&ctx->done);
3672 mutex_lock(&ctx->aio_mutex);
3673 ctx->rc = rc = -EINTR;
3674 total_written = ctx->total_len;
3675 mutex_unlock(&ctx->aio_mutex);
3678 total_written = ctx->total_len;
3681 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3683 if (unlikely(!total_written))
3686 iocb->ki_pos += total_written;
3687 return total_written;
3690 ssize_t cifs_direct_writev(struct kiocb *iocb, struct iov_iter *from)
3692 struct file *file = iocb->ki_filp;
3694 cifs_revalidate_mapping(file->f_inode);
3695 return __cifs_writev(iocb, from, true);
3698 ssize_t cifs_user_writev(struct kiocb *iocb, struct iov_iter *from)
3700 return __cifs_writev(iocb, from, false);
3704 cifs_writev(struct kiocb *iocb, struct iov_iter *from)
3706 struct file *file = iocb->ki_filp;
3707 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
3708 struct inode *inode = file->f_mapping->host;
3709 struct cifsInodeInfo *cinode = CIFS_I(inode);
3710 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
3715 * We need to hold the sem to be sure nobody modifies lock list
3716 * with a brlock that prevents writing.
3718 down_read(&cinode->lock_sem);
3720 rc = generic_write_checks(iocb, from);
3724 if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(from),
3725 server->vals->exclusive_lock_type, 0,
3726 NULL, CIFS_WRITE_OP))
3727 rc = __generic_file_write_iter(iocb, from);
3731 up_read(&cinode->lock_sem);
3732 inode_unlock(inode);
3735 rc = generic_write_sync(iocb, rc);
3740 cifs_strict_writev(struct kiocb *iocb, struct iov_iter *from)
3742 struct inode *inode = file_inode(iocb->ki_filp);
3743 struct cifsInodeInfo *cinode = CIFS_I(inode);
3744 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
3745 struct cifsFileInfo *cfile = (struct cifsFileInfo *)
3746 iocb->ki_filp->private_data;
3747 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
3750 written = cifs_get_writer(cinode);
3754 if (CIFS_CACHE_WRITE(cinode)) {
3755 if (cap_unix(tcon->ses) &&
3756 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability))
3757 && ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) {
3758 written = generic_file_write_iter(iocb, from);
3761 written = cifs_writev(iocb, from);
3765 * For non-oplocked files in strict cache mode we need to write the data
3766 * to the server exactly from the pos to pos+len-1 rather than flush all
3767 * affected pages because it may cause a error with mandatory locks on
3768 * these pages but not on the region from pos to ppos+len-1.
3770 written = cifs_user_writev(iocb, from);
3771 if (CIFS_CACHE_READ(cinode)) {
3773 * We have read level caching and we have just sent a write
3774 * request to the server thus making data in the cache stale.
3775 * Zap the cache and set oplock/lease level to NONE to avoid
3776 * reading stale data from the cache. All subsequent read
3777 * operations will read new data from the server.
3779 cifs_zap_mapping(inode);
3780 cifs_dbg(FYI, "Set Oplock/Lease to NONE for inode=%p after write\n",
3785 cifs_put_writer(cinode);
3789 static struct cifs_readdata *cifs_readdata_alloc(work_func_t complete)
3791 struct cifs_readdata *rdata;
3793 rdata = kzalloc(sizeof(*rdata), GFP_KERNEL);
3795 kref_init(&rdata->refcount);
3796 INIT_LIST_HEAD(&rdata->list);
3797 init_completion(&rdata->done);
3798 INIT_WORK(&rdata->work, complete);
3805 cifs_readdata_release(struct kref *refcount)
3807 struct cifs_readdata *rdata = container_of(refcount,
3808 struct cifs_readdata, refcount);
3811 kref_put(&rdata->ctx->refcount, cifs_aio_ctx_release);
3812 #ifdef CONFIG_CIFS_SMB_DIRECT
3814 smbd_deregister_mr(rdata->mr);
3819 cifsFileInfo_put(rdata->cfile);
3824 static void collect_uncached_read_data(struct cifs_aio_ctx *ctx);
3827 cifs_uncached_readv_complete(struct work_struct *work)
3829 struct cifs_readdata *rdata = container_of(work,
3830 struct cifs_readdata, work);
3832 complete(&rdata->done);
3833 collect_uncached_read_data(rdata->ctx);
3834 /* the below call can possibly free the last ref to aio ctx */
3835 kref_put(&rdata->refcount, cifs_readdata_release);
3838 static int cifs_resend_rdata(struct cifs_readdata *rdata,
3839 struct list_head *rdata_list,
3840 struct cifs_aio_ctx *ctx)
3843 struct cifs_credits credits;
3845 struct TCP_Server_Info *server;
3847 /* XXX: should we pick a new channel here? */
3848 server = rdata->server;
3851 if (rdata->cfile->invalidHandle) {
3852 rc = cifs_reopen_file(rdata->cfile, true);
3860 * Wait for credits to resend this rdata.
3861 * Note: we are attempting to resend the whole rdata not in
3865 rc = server->ops->wait_mtu_credits(server, rdata->bytes,
3871 if (rsize < rdata->bytes) {
3872 add_credits_and_wake_if(server, &credits, 0);
3875 } while (rsize < rdata->bytes);
3876 rdata->credits = credits;
3878 rc = adjust_credits(server, &rdata->credits, rdata->bytes);
3880 if (rdata->cfile->invalidHandle)
3883 #ifdef CONFIG_CIFS_SMB_DIRECT
3885 rdata->mr->need_invalidate = true;
3886 smbd_deregister_mr(rdata->mr);
3890 rc = server->ops->async_readv(rdata);
3894 /* If the read was successfully sent, we are done */
3896 /* Add to aio pending list */
3897 list_add_tail(&rdata->list, rdata_list);
3901 /* Roll back credits and retry if needed */
3902 add_credits_and_wake_if(server, &rdata->credits, 0);
3903 } while (rc == -EAGAIN);
3906 kref_put(&rdata->refcount, cifs_readdata_release);
3911 cifs_send_async_read(loff_t fpos, size_t len, struct cifsFileInfo *open_file,
3912 struct cifs_sb_info *cifs_sb, struct list_head *rdata_list,
3913 struct cifs_aio_ctx *ctx)
3915 struct cifs_readdata *rdata;
3916 unsigned int rsize, nsegs, max_segs = INT_MAX;
3917 struct cifs_credits credits_on_stack;
3918 struct cifs_credits *credits = &credits_on_stack;
3919 size_t cur_len, max_len;
3922 struct TCP_Server_Info *server;
3924 server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses);
3926 #ifdef CONFIG_CIFS_SMB_DIRECT
3927 if (server->smbd_conn)
3928 max_segs = server->smbd_conn->max_frmr_depth;
3931 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
3932 pid = open_file->pid;
3934 pid = current->tgid;
3937 if (open_file->invalidHandle) {
3938 rc = cifs_reopen_file(open_file, true);
3945 if (cifs_sb->ctx->rsize == 0)
3946 cifs_sb->ctx->rsize =
3947 server->ops->negotiate_rsize(tlink_tcon(open_file->tlink),
3950 rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize,
3955 max_len = min_t(size_t, len, rsize);
3957 cur_len = cifs_limit_bvec_subset(&ctx->iter, max_len,
3959 cifs_dbg(FYI, "read-to-iter len=%zx/%zx nsegs=%u/%lu/%u\n",
3960 cur_len, max_len, nsegs, ctx->iter.nr_segs, max_segs);
3963 add_credits_and_wake_if(server, credits, 0);
3967 rdata = cifs_readdata_alloc(cifs_uncached_readv_complete);
3969 add_credits_and_wake_if(server, credits, 0);
3974 rdata->server = server;
3975 rdata->cfile = cifsFileInfo_get(open_file);
3976 rdata->offset = fpos;
3977 rdata->bytes = cur_len;
3979 rdata->credits = credits_on_stack;
3981 kref_get(&ctx->refcount);
3983 rdata->iter = ctx->iter;
3984 iov_iter_truncate(&rdata->iter, cur_len);
3986 rc = adjust_credits(server, &rdata->credits, rdata->bytes);
3989 if (rdata->cfile->invalidHandle)
3992 rc = server->ops->async_readv(rdata);
3996 add_credits_and_wake_if(server, &rdata->credits, 0);
3997 kref_put(&rdata->refcount, cifs_readdata_release);
4003 list_add_tail(&rdata->list, rdata_list);
4004 iov_iter_advance(&ctx->iter, cur_len);
4013 collect_uncached_read_data(struct cifs_aio_ctx *ctx)
4015 struct cifs_readdata *rdata, *tmp;
4016 struct cifs_sb_info *cifs_sb;
4019 cifs_sb = CIFS_SB(ctx->cfile->dentry->d_sb);
4021 mutex_lock(&ctx->aio_mutex);
4023 if (list_empty(&ctx->list)) {
4024 mutex_unlock(&ctx->aio_mutex);
4029 /* the loop below should proceed in the order of increasing offsets */
4031 list_for_each_entry_safe(rdata, tmp, &ctx->list, list) {
4033 if (!try_wait_for_completion(&rdata->done)) {
4034 mutex_unlock(&ctx->aio_mutex);
4038 if (rdata->result == -EAGAIN) {
4039 /* resend call if it's a retryable error */
4040 struct list_head tmp_list;
4041 unsigned int got_bytes = rdata->got_bytes;
4043 list_del_init(&rdata->list);
4044 INIT_LIST_HEAD(&tmp_list);
4046 if (ctx->direct_io) {
4048 * Re-use rdata as this is a
4051 rc = cifs_resend_rdata(
4055 rc = cifs_send_async_read(
4056 rdata->offset + got_bytes,
4057 rdata->bytes - got_bytes,
4058 rdata->cfile, cifs_sb,
4061 kref_put(&rdata->refcount,
4062 cifs_readdata_release);
4065 list_splice(&tmp_list, &ctx->list);
4068 } else if (rdata->result)
4071 /* if there was a short read -- discard anything left */
4072 if (rdata->got_bytes && rdata->got_bytes < rdata->bytes)
4075 ctx->total_len += rdata->got_bytes;
4077 list_del_init(&rdata->list);
4078 kref_put(&rdata->refcount, cifs_readdata_release);
4081 /* mask nodata case */
4085 ctx->rc = (rc == 0) ? (ssize_t)ctx->total_len : rc;
4087 mutex_unlock(&ctx->aio_mutex);
4089 if (ctx->iocb && ctx->iocb->ki_complete)
4090 ctx->iocb->ki_complete(ctx->iocb, ctx->rc);
4092 complete(&ctx->done);
4095 static ssize_t __cifs_readv(
4096 struct kiocb *iocb, struct iov_iter *to, bool direct)
4099 struct file *file = iocb->ki_filp;
4100 struct cifs_sb_info *cifs_sb;
4101 struct cifsFileInfo *cfile;
4102 struct cifs_tcon *tcon;
4103 ssize_t rc, total_read = 0;
4104 loff_t offset = iocb->ki_pos;
4105 struct cifs_aio_ctx *ctx;
4107 len = iov_iter_count(to);
4111 cifs_sb = CIFS_FILE_SB(file);
4112 cfile = file->private_data;
4113 tcon = tlink_tcon(cfile->tlink);
4115 if (!tcon->ses->server->ops->async_readv)
4118 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
4119 cifs_dbg(FYI, "attempting read on write only file instance\n");
4121 ctx = cifs_aio_ctx_alloc();
4126 ctx->direct_io = direct;
4128 ctx->cfile = cifsFileInfo_get(cfile);
4129 ctx->nr_pinned_pages = 0;
4131 if (!is_sync_kiocb(iocb))
4134 if (user_backed_iter(to)) {
4136 * Extract IOVEC/UBUF-type iterators to a BVEC-type iterator as
4137 * they contain references to the calling process's virtual
4138 * memory layout which won't be available in an async worker
4139 * thread. This also takes a pin on every folio involved.
4141 rc = netfs_extract_user_iter(to, iov_iter_count(to),
4144 kref_put(&ctx->refcount, cifs_aio_ctx_release);
4148 ctx->nr_pinned_pages = rc;
4149 ctx->bv = (void *)ctx->iter.bvec;
4150 ctx->bv_need_unpin = iov_iter_extract_will_pin(to);
4151 ctx->should_dirty = true;
4152 } else if ((iov_iter_is_bvec(to) || iov_iter_is_kvec(to)) &&
4153 !is_sync_kiocb(iocb)) {
4155 * If the op is asynchronous, we need to copy the list attached
4156 * to a BVEC/KVEC-type iterator, but we assume that the storage
4157 * will be retained by the caller; in any case, we may or may
4158 * not be able to pin the pages, so we don't try.
4160 ctx->bv = (void *)dup_iter(&ctx->iter, to, GFP_KERNEL);
4162 kref_put(&ctx->refcount, cifs_aio_ctx_release);
4167 * Otherwise, we just pass the iterator down as-is and rely on
4168 * the caller to make sure the pages referred to by the
4169 * iterator don't evaporate.
4175 rc = filemap_write_and_wait_range(file->f_inode->i_mapping,
4176 offset, offset + len - 1);
4178 kref_put(&ctx->refcount, cifs_aio_ctx_release);
4183 /* grab a lock here due to read response handlers can access ctx */
4184 mutex_lock(&ctx->aio_mutex);
4186 rc = cifs_send_async_read(offset, len, cfile, cifs_sb, &ctx->list, ctx);
4188 /* if at least one read request send succeeded, then reset rc */
4189 if (!list_empty(&ctx->list))
4192 mutex_unlock(&ctx->aio_mutex);
4195 kref_put(&ctx->refcount, cifs_aio_ctx_release);
4199 if (!is_sync_kiocb(iocb)) {
4200 kref_put(&ctx->refcount, cifs_aio_ctx_release);
4201 return -EIOCBQUEUED;
4204 rc = wait_for_completion_killable(&ctx->done);
4206 mutex_lock(&ctx->aio_mutex);
4207 ctx->rc = rc = -EINTR;
4208 total_read = ctx->total_len;
4209 mutex_unlock(&ctx->aio_mutex);
4212 total_read = ctx->total_len;
4215 kref_put(&ctx->refcount, cifs_aio_ctx_release);
4218 iocb->ki_pos += total_read;
4224 ssize_t cifs_direct_readv(struct kiocb *iocb, struct iov_iter *to)
4226 return __cifs_readv(iocb, to, true);
4229 ssize_t cifs_user_readv(struct kiocb *iocb, struct iov_iter *to)
4231 return __cifs_readv(iocb, to, false);
4235 cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to)
4237 struct inode *inode = file_inode(iocb->ki_filp);
4238 struct cifsInodeInfo *cinode = CIFS_I(inode);
4239 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
4240 struct cifsFileInfo *cfile = (struct cifsFileInfo *)
4241 iocb->ki_filp->private_data;
4242 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
4246 * In strict cache mode we need to read from the server all the time
4247 * if we don't have level II oplock because the server can delay mtime
4248 * change - so we can't make a decision about inode invalidating.
4249 * And we can also fail with pagereading if there are mandatory locks
4250 * on pages affected by this read but not on the region from pos to
4253 if (!CIFS_CACHE_READ(cinode))
4254 return cifs_user_readv(iocb, to);
4256 if (cap_unix(tcon->ses) &&
4257 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
4258 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
4259 return generic_file_read_iter(iocb, to);
4262 * We need to hold the sem to be sure nobody modifies lock list
4263 * with a brlock that prevents reading.
4265 down_read(&cinode->lock_sem);
4266 if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(to),
4267 tcon->ses->server->vals->shared_lock_type,
4268 0, NULL, CIFS_READ_OP))
4269 rc = generic_file_read_iter(iocb, to);
4270 up_read(&cinode->lock_sem);
4275 cifs_read(struct file *file, char *read_data, size_t read_size, loff_t *offset)
4278 unsigned int bytes_read = 0;
4279 unsigned int total_read;
4280 unsigned int current_read_size;
4282 struct cifs_sb_info *cifs_sb;
4283 struct cifs_tcon *tcon;
4284 struct TCP_Server_Info *server;
4287 struct cifsFileInfo *open_file;
4288 struct cifs_io_parms io_parms = {0};
4289 int buf_type = CIFS_NO_BUFFER;
4293 cifs_sb = CIFS_FILE_SB(file);
4295 /* FIXME: set up handlers for larger reads and/or convert to async */
4296 rsize = min_t(unsigned int, cifs_sb->ctx->rsize, CIFSMaxBufSize);
4298 if (file->private_data == NULL) {
4303 open_file = file->private_data;
4304 tcon = tlink_tcon(open_file->tlink);
4305 server = cifs_pick_channel(tcon->ses);
4307 if (!server->ops->sync_read) {
4312 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
4313 pid = open_file->pid;
4315 pid = current->tgid;
4317 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
4318 cifs_dbg(FYI, "attempting read on write only file instance\n");
4320 for (total_read = 0, cur_offset = read_data; read_size > total_read;
4321 total_read += bytes_read, cur_offset += bytes_read) {
4323 current_read_size = min_t(uint, read_size - total_read,
4326 * For windows me and 9x we do not want to request more
4327 * than it negotiated since it will refuse the read
4330 if (!(tcon->ses->capabilities &
4331 tcon->ses->server->vals->cap_large_files)) {
4332 current_read_size = min_t(uint,
4333 current_read_size, CIFSMaxBufSize);
4335 if (open_file->invalidHandle) {
4336 rc = cifs_reopen_file(open_file, true);
4341 io_parms.tcon = tcon;
4342 io_parms.offset = *offset;
4343 io_parms.length = current_read_size;
4344 io_parms.server = server;
4345 rc = server->ops->sync_read(xid, &open_file->fid, &io_parms,
4346 &bytes_read, &cur_offset,
4348 } while (rc == -EAGAIN);
4350 if (rc || (bytes_read == 0)) {
4358 cifs_stats_bytes_read(tcon, total_read);
4359 *offset += bytes_read;
4367 * If the page is mmap'ed into a process' page tables, then we need to make
4368 * sure that it doesn't change while being written back.
4370 static vm_fault_t cifs_page_mkwrite(struct vm_fault *vmf)
4372 struct folio *folio = page_folio(vmf->page);
4374 /* Wait for the folio to be written to the cache before we allow it to
4375 * be modified. We then assume the entire folio will need writing back.
4377 #ifdef CONFIG_CIFS_FSCACHE
4378 if (folio_test_fscache(folio) &&
4379 folio_wait_fscache_killable(folio) < 0)
4380 return VM_FAULT_RETRY;
4383 folio_wait_writeback(folio);
4385 if (folio_lock_killable(folio) < 0)
4386 return VM_FAULT_RETRY;
4387 return VM_FAULT_LOCKED;
4390 static const struct vm_operations_struct cifs_file_vm_ops = {
4391 .fault = filemap_fault,
4392 .map_pages = filemap_map_pages,
4393 .page_mkwrite = cifs_page_mkwrite,
4396 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
4399 struct inode *inode = file_inode(file);
4403 if (!CIFS_CACHE_READ(CIFS_I(inode)))
4404 rc = cifs_zap_mapping(inode);
4406 rc = generic_file_mmap(file, vma);
4408 vma->vm_ops = &cifs_file_vm_ops;
4414 int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
4420 rc = cifs_revalidate_file(file);
4422 cifs_dbg(FYI, "Validation prior to mmap failed, error=%d\n",
4425 rc = generic_file_mmap(file, vma);
4427 vma->vm_ops = &cifs_file_vm_ops;
4434 * Unlock a bunch of folios in the pagecache.
4436 static void cifs_unlock_folios(struct address_space *mapping, pgoff_t first, pgoff_t last)
4438 struct folio *folio;
4439 XA_STATE(xas, &mapping->i_pages, first);
4442 xas_for_each(&xas, folio, last) {
4443 folio_unlock(folio);
4448 static void cifs_readahead_complete(struct work_struct *work)
4450 struct cifs_readdata *rdata = container_of(work,
4451 struct cifs_readdata, work);
4452 struct folio *folio;
4454 bool good = rdata->result == 0 || (rdata->result == -EAGAIN && rdata->got_bytes);
4456 XA_STATE(xas, &rdata->mapping->i_pages, rdata->offset / PAGE_SIZE);
4459 cifs_readahead_to_fscache(rdata->mapping->host,
4460 rdata->offset, rdata->bytes);
4462 if (iov_iter_count(&rdata->iter) > 0)
4463 iov_iter_zero(iov_iter_count(&rdata->iter), &rdata->iter);
4465 last = (rdata->offset + rdata->bytes - 1) / PAGE_SIZE;
4468 xas_for_each(&xas, folio, last) {
4470 flush_dcache_folio(folio);
4471 folio_mark_uptodate(folio);
4473 folio_unlock(folio);
4477 kref_put(&rdata->refcount, cifs_readdata_release);
4480 static void cifs_readahead(struct readahead_control *ractl)
4482 struct cifsFileInfo *open_file = ractl->file->private_data;
4483 struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(ractl->file);
4484 struct TCP_Server_Info *server;
4485 unsigned int xid, nr_pages, cache_nr_pages = 0;
4486 unsigned int ra_pages;
4487 pgoff_t next_cached = ULONG_MAX, ra_index;
4488 bool caching = fscache_cookie_enabled(cifs_inode_cookie(ractl->mapping->host)) &&
4489 cifs_inode_cookie(ractl->mapping->host)->cache_priv;
4490 bool check_cache = caching;
4494 /* Note that readahead_count() lags behind our dequeuing of pages from
4495 * the ractl, wo we have to keep track for ourselves.
4497 ra_pages = readahead_count(ractl);
4498 ra_index = readahead_index(ractl);
4502 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
4503 pid = open_file->pid;
4505 pid = current->tgid;
4507 server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses);
4509 cifs_dbg(FYI, "%s: file=%p mapping=%p num_pages=%u\n",
4510 __func__, ractl->file, ractl->mapping, ra_pages);
4513 * Chop the readahead request up into rsize-sized read requests.
4515 while ((nr_pages = ra_pages)) {
4516 unsigned int i, rsize;
4517 struct cifs_readdata *rdata;
4518 struct cifs_credits credits_on_stack;
4519 struct cifs_credits *credits = &credits_on_stack;
4520 struct folio *folio;
4524 * Find out if we have anything cached in the range of
4525 * interest, and if so, where the next chunk of cached data is.
4529 rc = cifs_fscache_query_occupancy(
4530 ractl->mapping->host, ra_index, nr_pages,
4531 &next_cached, &cache_nr_pages);
4534 check_cache = false;
4537 if (ra_index == next_cached) {
4539 * TODO: Send a whole batch of pages to be read
4542 folio = readahead_folio(ractl);
4543 fsize = folio_nr_pages(folio);
4546 if (cifs_readpage_from_fscache(ractl->mapping->host,
4547 &folio->page) < 0) {
4549 * TODO: Deal with cache read failure
4550 * here, but for the moment, delegate
4555 folio_unlock(folio);
4556 next_cached += fsize;
4557 cache_nr_pages -= fsize;
4558 if (cache_nr_pages == 0)
4564 if (open_file->invalidHandle) {
4565 rc = cifs_reopen_file(open_file, true);
4573 if (cifs_sb->ctx->rsize == 0)
4574 cifs_sb->ctx->rsize =
4575 server->ops->negotiate_rsize(tlink_tcon(open_file->tlink),
4578 rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize,
4582 nr_pages = min_t(size_t, rsize / PAGE_SIZE, ra_pages);
4583 if (next_cached != ULONG_MAX)
4584 nr_pages = min_t(size_t, nr_pages, next_cached - ra_index);
4587 * Give up immediately if rsize is too small to read an entire
4588 * page. The VFS will fall back to readpage. We should never
4589 * reach this point however since we set ra_pages to 0 when the
4590 * rsize is smaller than a cache page.
4592 if (unlikely(!nr_pages)) {
4593 add_credits_and_wake_if(server, credits, 0);
4597 rdata = cifs_readdata_alloc(cifs_readahead_complete);
4599 /* best to give up if we're out of mem */
4600 add_credits_and_wake_if(server, credits, 0);
4604 rdata->offset = ra_index * PAGE_SIZE;
4605 rdata->bytes = nr_pages * PAGE_SIZE;
4606 rdata->cfile = cifsFileInfo_get(open_file);
4607 rdata->server = server;
4608 rdata->mapping = ractl->mapping;
4610 rdata->credits = credits_on_stack;
4612 for (i = 0; i < nr_pages; i++) {
4613 if (!readahead_folio(ractl))
4616 ra_pages -= nr_pages;
4617 ra_index += nr_pages;
4619 iov_iter_xarray(&rdata->iter, ITER_DEST, &rdata->mapping->i_pages,
4620 rdata->offset, rdata->bytes);
4622 rc = adjust_credits(server, &rdata->credits, rdata->bytes);
4624 if (rdata->cfile->invalidHandle)
4627 rc = server->ops->async_readv(rdata);
4631 add_credits_and_wake_if(server, &rdata->credits, 0);
4632 cifs_unlock_folios(rdata->mapping,
4633 rdata->offset / PAGE_SIZE,
4634 (rdata->offset + rdata->bytes - 1) / PAGE_SIZE);
4635 /* Fallback to the readpage in error/reconnect cases */
4636 kref_put(&rdata->refcount, cifs_readdata_release);
4640 kref_put(&rdata->refcount, cifs_readdata_release);
4647 * cifs_readpage_worker must be called with the page pinned
4649 static int cifs_readpage_worker(struct file *file, struct page *page,
4652 struct inode *inode = file_inode(file);
4653 struct timespec64 atime, mtime;
4657 /* Is the page cached? */
4658 rc = cifs_readpage_from_fscache(inode, page);
4662 read_data = kmap(page);
4663 /* for reads over a certain size could initiate async read ahead */
4665 rc = cifs_read(file, read_data, PAGE_SIZE, poffset);
4670 cifs_dbg(FYI, "Bytes read %d\n", rc);
4672 /* we do not want atime to be less than mtime, it broke some apps */
4673 atime = inode_set_atime_to_ts(inode, current_time(inode));
4674 mtime = inode_get_mtime(inode);
4675 if (timespec64_compare(&atime, &mtime) < 0)
4676 inode_set_atime_to_ts(inode, inode_get_mtime(inode));
4679 memset(read_data + rc, 0, PAGE_SIZE - rc);
4681 flush_dcache_page(page);
4682 SetPageUptodate(page);
4693 static int cifs_read_folio(struct file *file, struct folio *folio)
4695 struct page *page = &folio->page;
4696 loff_t offset = page_file_offset(page);
4702 if (file->private_data == NULL) {
4708 cifs_dbg(FYI, "read_folio %p at offset %d 0x%x\n",
4709 page, (int)offset, (int)offset);
4711 rc = cifs_readpage_worker(file, page, &offset);
4717 static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
4719 struct cifsFileInfo *open_file;
4721 spin_lock(&cifs_inode->open_file_lock);
4722 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
4723 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
4724 spin_unlock(&cifs_inode->open_file_lock);
4728 spin_unlock(&cifs_inode->open_file_lock);
4732 /* We do not want to update the file size from server for inodes
4733 open for write - to avoid races with writepage extending
4734 the file - in the future we could consider allowing
4735 refreshing the inode only on increases in the file size
4736 but this is tricky to do without racing with writebehind
4737 page caching in the current Linux kernel design */
4738 bool is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file)
4743 if (is_inode_writable(cifsInode)) {
4744 /* This inode is open for write at least once */
4745 struct cifs_sb_info *cifs_sb;
4747 cifs_sb = CIFS_SB(cifsInode->netfs.inode.i_sb);
4748 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO) {
4749 /* since no page cache to corrupt on directio
4750 we can change size safely */
4754 if (i_size_read(&cifsInode->netfs.inode) < end_of_file)
4762 static int cifs_write_begin(struct file *file, struct address_space *mapping,
4763 loff_t pos, unsigned len,
4764 struct page **pagep, void **fsdata)
4767 pgoff_t index = pos >> PAGE_SHIFT;
4768 loff_t offset = pos & (PAGE_SIZE - 1);
4769 loff_t page_start = pos & PAGE_MASK;
4774 cifs_dbg(FYI, "write_begin from %lld len %d\n", (long long)pos, len);
4777 page = grab_cache_page_write_begin(mapping, index);
4783 if (PageUptodate(page))
4787 * If we write a full page it will be up to date, no need to read from
4788 * the server. If the write is short, we'll end up doing a sync write
4791 if (len == PAGE_SIZE)
4795 * optimize away the read when we have an oplock, and we're not
4796 * expecting to use any of the data we'd be reading in. That
4797 * is, when the page lies beyond the EOF, or straddles the EOF
4798 * and the write will cover all of the existing data.
4800 if (CIFS_CACHE_READ(CIFS_I(mapping->host))) {
4801 i_size = i_size_read(mapping->host);
4802 if (page_start >= i_size ||
4803 (offset == 0 && (pos + len) >= i_size)) {
4804 zero_user_segments(page, 0, offset,
4808 * PageChecked means that the parts of the page
4809 * to which we're not writing are considered up
4810 * to date. Once the data is copied to the
4811 * page, it can be set uptodate.
4813 SetPageChecked(page);
4818 if ((file->f_flags & O_ACCMODE) != O_WRONLY && !oncethru) {
4820 * might as well read a page, it is fast enough. If we get
4821 * an error, we don't need to return it. cifs_write_end will
4822 * do a sync write instead since PG_uptodate isn't set.
4824 cifs_readpage_worker(file, page, &page_start);
4829 /* we could try using another file handle if there is one -
4830 but how would we lock it to prevent close of that handle
4831 racing with this read? In any case
4832 this will be written out by write_end so is fine */
4839 static bool cifs_release_folio(struct folio *folio, gfp_t gfp)
4841 if (folio_test_private(folio))
4843 if (folio_test_fscache(folio)) {
4844 if (current_is_kswapd() || !(gfp & __GFP_FS))
4846 folio_wait_fscache(folio);
4848 fscache_note_page_release(cifs_inode_cookie(folio->mapping->host));
4852 static void cifs_invalidate_folio(struct folio *folio, size_t offset,
4855 folio_wait_fscache(folio);
4858 static int cifs_launder_folio(struct folio *folio)
4861 loff_t range_start = folio_pos(folio);
4862 loff_t range_end = range_start + folio_size(folio);
4863 struct writeback_control wbc = {
4864 .sync_mode = WB_SYNC_ALL,
4866 .range_start = range_start,
4867 .range_end = range_end,
4870 cifs_dbg(FYI, "Launder page: %lu\n", folio->index);
4872 if (folio_clear_dirty_for_io(folio))
4873 rc = cifs_writepage_locked(&folio->page, &wbc);
4875 folio_wait_fscache(folio);
4879 void cifs_oplock_break(struct work_struct *work)
4881 struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
4883 struct inode *inode = d_inode(cfile->dentry);
4884 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
4885 struct cifsInodeInfo *cinode = CIFS_I(inode);
4886 struct cifs_tcon *tcon;
4887 struct TCP_Server_Info *server;
4888 struct tcon_link *tlink;
4890 bool purge_cache = false, oplock_break_cancelled;
4891 __u64 persistent_fid, volatile_fid;
4894 wait_on_bit(&cinode->flags, CIFS_INODE_PENDING_WRITERS,
4895 TASK_UNINTERRUPTIBLE);
4897 tlink = cifs_sb_tlink(cifs_sb);
4900 tcon = tlink_tcon(tlink);
4901 server = tcon->ses->server;
4903 server->ops->downgrade_oplock(server, cinode, cfile->oplock_level,
4904 cfile->oplock_epoch, &purge_cache);
4906 if (!CIFS_CACHE_WRITE(cinode) && CIFS_CACHE_READ(cinode) &&
4907 cifs_has_mand_locks(cinode)) {
4908 cifs_dbg(FYI, "Reset oplock to None for inode=%p due to mand locks\n",
4913 if (inode && S_ISREG(inode->i_mode)) {
4914 if (CIFS_CACHE_READ(cinode))
4915 break_lease(inode, O_RDONLY);
4917 break_lease(inode, O_WRONLY);
4918 rc = filemap_fdatawrite(inode->i_mapping);
4919 if (!CIFS_CACHE_READ(cinode) || purge_cache) {
4920 rc = filemap_fdatawait(inode->i_mapping);
4921 mapping_set_error(inode->i_mapping, rc);
4922 cifs_zap_mapping(inode);
4924 cifs_dbg(FYI, "Oplock flush inode %p rc %d\n", inode, rc);
4925 if (CIFS_CACHE_WRITE(cinode))
4926 goto oplock_break_ack;
4929 rc = cifs_push_locks(cfile);
4931 cifs_dbg(VFS, "Push locks rc = %d\n", rc);
4935 * When oplock break is received and there are no active
4936 * file handles but cached, then schedule deferred close immediately.
4937 * So, new open will not use cached handle.
4940 if (!CIFS_CACHE_HANDLE(cinode) && !list_empty(&cinode->deferred_closes))
4941 cifs_close_deferred_file(cinode);
4943 persistent_fid = cfile->fid.persistent_fid;
4944 volatile_fid = cfile->fid.volatile_fid;
4945 net_fid = cfile->fid.netfid;
4946 oplock_break_cancelled = cfile->oplock_break_cancelled;
4948 _cifsFileInfo_put(cfile, false /* do not wait for ourself */, false);
4950 * MS-SMB2 3.2.5.19.1 and 3.2.5.19.2 (and MS-CIFS 3.2.5.42) do not require
4951 * an acknowledgment to be sent when the file has already been closed.
4953 spin_lock(&cinode->open_file_lock);
4954 /* check list empty since can race with kill_sb calling tree disconnect */
4955 if (!oplock_break_cancelled && !list_empty(&cinode->openFileList)) {
4956 spin_unlock(&cinode->open_file_lock);
4957 rc = server->ops->oplock_response(tcon, persistent_fid,
4958 volatile_fid, net_fid, cinode);
4959 cifs_dbg(FYI, "Oplock release rc = %d\n", rc);
4961 spin_unlock(&cinode->open_file_lock);
4963 cifs_put_tlink(tlink);
4965 cifs_done_oplock_break(cinode);
4969 * The presence of cifs_direct_io() in the address space ops vector
4970 * allowes open() O_DIRECT flags which would have failed otherwise.
4972 * In the non-cached mode (mount with cache=none), we shunt off direct read and write requests
4973 * so this method should never be called.
4975 * Direct IO is not yet supported in the cached mode.
4978 cifs_direct_io(struct kiocb *iocb, struct iov_iter *iter)
4982 * Eventually need to support direct IO for non forcedirectio mounts
4987 static int cifs_swap_activate(struct swap_info_struct *sis,
4988 struct file *swap_file, sector_t *span)
4990 struct cifsFileInfo *cfile = swap_file->private_data;
4991 struct inode *inode = swap_file->f_mapping->host;
4992 unsigned long blocks;
4995 cifs_dbg(FYI, "swap activate\n");
4997 if (!swap_file->f_mapping->a_ops->swap_rw)
4998 /* Cannot support swap */
5001 spin_lock(&inode->i_lock);
5002 blocks = inode->i_blocks;
5003 isize = inode->i_size;
5004 spin_unlock(&inode->i_lock);
5005 if (blocks*512 < isize) {
5006 pr_warn("swap activate: swapfile has holes\n");
5011 pr_warn_once("Swap support over SMB3 is experimental\n");
5014 * TODO: consider adding ACL (or documenting how) to prevent other
5015 * users (on this or other systems) from reading it
5019 /* TODO: add sk_set_memalloc(inet) or similar */
5022 cfile->swapfile = true;
5024 * TODO: Since file already open, we can't open with DENY_ALL here
5025 * but we could add call to grab a byte range lock to prevent others
5026 * from reading or writing the file
5029 sis->flags |= SWP_FS_OPS;
5030 return add_swap_extent(sis, 0, sis->max, 0);
5033 static void cifs_swap_deactivate(struct file *file)
5035 struct cifsFileInfo *cfile = file->private_data;
5037 cifs_dbg(FYI, "swap deactivate\n");
5039 /* TODO: undo sk_set_memalloc(inet) will eventually be needed */
5042 cfile->swapfile = false;
5044 /* do we need to unpin (or unlock) the file */
5047 const struct address_space_operations cifs_addr_ops = {
5048 .read_folio = cifs_read_folio,
5049 .readahead = cifs_readahead,
5050 .writepages = cifs_writepages,
5051 .write_begin = cifs_write_begin,
5052 .write_end = cifs_write_end,
5053 .dirty_folio = netfs_dirty_folio,
5054 .release_folio = cifs_release_folio,
5055 .direct_IO = cifs_direct_io,
5056 .invalidate_folio = cifs_invalidate_folio,
5057 .launder_folio = cifs_launder_folio,
5058 .migrate_folio = filemap_migrate_folio,
5060 * TODO: investigate and if useful we could add an is_dirty_writeback
5063 .swap_activate = cifs_swap_activate,
5064 .swap_deactivate = cifs_swap_deactivate,
5068 * cifs_readahead requires the server to support a buffer large enough to
5069 * contain the header plus one complete page of data. Otherwise, we need
5070 * to leave cifs_readahead out of the address space operations.
5072 const struct address_space_operations cifs_addr_ops_smallbuf = {
5073 .read_folio = cifs_read_folio,
5074 .writepages = cifs_writepages,
5075 .write_begin = cifs_write_begin,
5076 .write_end = cifs_write_end,
5077 .dirty_folio = netfs_dirty_folio,
5078 .release_folio = cifs_release_folio,
5079 .invalidate_folio = cifs_invalidate_folio,
5080 .launder_folio = cifs_launder_folio,
5081 .migrate_folio = filemap_migrate_folio,