1 // SPDX-License-Identifier: LGPL-2.1
4 * vfs operations that deal with files
6 * Copyright (C) International Business Machines Corp., 2002,2010
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(folio), 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(folio), 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(folio), 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, inode->i_sb, xid);
1025 else if (tcon->unix_ext)
1026 rc = cifs_get_inode_info_unix(&inode, full_path,
1029 rc = cifs_get_inode_info(&inode, full_path, NULL,
1030 inode->i_sb, xid, NULL);
1033 * Else we are writing out data to server already and could deadlock if
1034 * we tried to flush data, and since we do not know if we have data that
1035 * would invalidate the current end of file on the server we can not go
1036 * to the server to get the new inode info.
1040 * If the server returned a read oplock and we have mandatory brlocks,
1041 * set oplock level to None.
1043 if (server->ops->is_read_op(oplock) && cifs_has_mand_locks(cinode)) {
1044 cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n");
1048 server->ops->set_fid(cfile, &cfile->fid, oplock);
1049 if (oparms.reconnect)
1050 cifs_relock_file(cfile);
1053 free_dentry_path(page);
1058 void smb2_deferred_work_close(struct work_struct *work)
1060 struct cifsFileInfo *cfile = container_of(work,
1061 struct cifsFileInfo, deferred.work);
1063 spin_lock(&CIFS_I(d_inode(cfile->dentry))->deferred_lock);
1064 cifs_del_deferred_close(cfile);
1065 cfile->deferred_close_scheduled = false;
1066 spin_unlock(&CIFS_I(d_inode(cfile->dentry))->deferred_lock);
1067 _cifsFileInfo_put(cfile, true, false);
1070 int cifs_close(struct inode *inode, struct file *file)
1072 struct cifsFileInfo *cfile;
1073 struct cifsInodeInfo *cinode = CIFS_I(inode);
1074 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
1075 struct cifs_deferred_close *dclose;
1077 cifs_fscache_unuse_inode_cookie(inode, file->f_mode & FMODE_WRITE);
1079 if (file->private_data != NULL) {
1080 cfile = file->private_data;
1081 file->private_data = NULL;
1082 dclose = kmalloc(sizeof(struct cifs_deferred_close), GFP_KERNEL);
1083 if ((cifs_sb->ctx->closetimeo && cinode->oplock == CIFS_CACHE_RHW_FLG)
1084 && cinode->lease_granted &&
1085 !test_bit(CIFS_INO_CLOSE_ON_LOCK, &cinode->flags) &&
1087 if (test_and_clear_bit(CIFS_INO_MODIFIED_ATTR, &cinode->flags)) {
1088 inode_set_mtime_to_ts(inode,
1089 inode_set_ctime_current(inode));
1091 spin_lock(&cinode->deferred_lock);
1092 cifs_add_deferred_close(cfile, dclose);
1093 if (cfile->deferred_close_scheduled &&
1094 delayed_work_pending(&cfile->deferred)) {
1096 * If there is no pending work, mod_delayed_work queues new work.
1097 * So, Increase the ref count to avoid use-after-free.
1099 if (!mod_delayed_work(deferredclose_wq,
1100 &cfile->deferred, cifs_sb->ctx->closetimeo))
1101 cifsFileInfo_get(cfile);
1103 /* Deferred close for files */
1104 queue_delayed_work(deferredclose_wq,
1105 &cfile->deferred, cifs_sb->ctx->closetimeo);
1106 cfile->deferred_close_scheduled = true;
1107 spin_unlock(&cinode->deferred_lock);
1110 spin_unlock(&cinode->deferred_lock);
1111 _cifsFileInfo_put(cfile, true, false);
1113 _cifsFileInfo_put(cfile, true, false);
1118 /* return code from the ->release op is always ignored */
1123 cifs_reopen_persistent_handles(struct cifs_tcon *tcon)
1125 struct cifsFileInfo *open_file, *tmp;
1126 struct list_head tmp_list;
1128 if (!tcon->use_persistent || !tcon->need_reopen_files)
1131 tcon->need_reopen_files = false;
1133 cifs_dbg(FYI, "Reopen persistent handles\n");
1134 INIT_LIST_HEAD(&tmp_list);
1136 /* list all files open on tree connection, reopen resilient handles */
1137 spin_lock(&tcon->open_file_lock);
1138 list_for_each_entry(open_file, &tcon->openFileList, tlist) {
1139 if (!open_file->invalidHandle)
1141 cifsFileInfo_get(open_file);
1142 list_add_tail(&open_file->rlist, &tmp_list);
1144 spin_unlock(&tcon->open_file_lock);
1146 list_for_each_entry_safe(open_file, tmp, &tmp_list, rlist) {
1147 if (cifs_reopen_file(open_file, false /* do not flush */))
1148 tcon->need_reopen_files = true;
1149 list_del_init(&open_file->rlist);
1150 cifsFileInfo_put(open_file);
1154 int cifs_closedir(struct inode *inode, struct file *file)
1158 struct cifsFileInfo *cfile = file->private_data;
1159 struct cifs_tcon *tcon;
1160 struct TCP_Server_Info *server;
1163 cifs_dbg(FYI, "Closedir inode = 0x%p\n", inode);
1169 tcon = tlink_tcon(cfile->tlink);
1170 server = tcon->ses->server;
1172 cifs_dbg(FYI, "Freeing private data in close dir\n");
1173 spin_lock(&cfile->file_info_lock);
1174 if (server->ops->dir_needs_close(cfile)) {
1175 cfile->invalidHandle = true;
1176 spin_unlock(&cfile->file_info_lock);
1177 if (server->ops->close_dir)
1178 rc = server->ops->close_dir(xid, tcon, &cfile->fid);
1181 cifs_dbg(FYI, "Closing uncompleted readdir with rc %d\n", rc);
1182 /* not much we can do if it fails anyway, ignore rc */
1185 spin_unlock(&cfile->file_info_lock);
1187 buf = cfile->srch_inf.ntwrk_buf_start;
1189 cifs_dbg(FYI, "closedir free smb buf in srch struct\n");
1190 cfile->srch_inf.ntwrk_buf_start = NULL;
1191 if (cfile->srch_inf.smallBuf)
1192 cifs_small_buf_release(buf);
1194 cifs_buf_release(buf);
1197 cifs_put_tlink(cfile->tlink);
1198 kfree(file->private_data);
1199 file->private_data = NULL;
1200 /* BB can we lock the filestruct while this is going on? */
1205 static struct cifsLockInfo *
1206 cifs_lock_init(__u64 offset, __u64 length, __u8 type, __u16 flags)
1208 struct cifsLockInfo *lock =
1209 kmalloc(sizeof(struct cifsLockInfo), GFP_KERNEL);
1212 lock->offset = offset;
1213 lock->length = length;
1215 lock->pid = current->tgid;
1216 lock->flags = flags;
1217 INIT_LIST_HEAD(&lock->blist);
1218 init_waitqueue_head(&lock->block_q);
1223 cifs_del_lock_waiters(struct cifsLockInfo *lock)
1225 struct cifsLockInfo *li, *tmp;
1226 list_for_each_entry_safe(li, tmp, &lock->blist, blist) {
1227 list_del_init(&li->blist);
1228 wake_up(&li->block_q);
1232 #define CIFS_LOCK_OP 0
1233 #define CIFS_READ_OP 1
1234 #define CIFS_WRITE_OP 2
1236 /* @rw_check : 0 - no op, 1 - read, 2 - write */
1238 cifs_find_fid_lock_conflict(struct cifs_fid_locks *fdlocks, __u64 offset,
1239 __u64 length, __u8 type, __u16 flags,
1240 struct cifsFileInfo *cfile,
1241 struct cifsLockInfo **conf_lock, int rw_check)
1243 struct cifsLockInfo *li;
1244 struct cifsFileInfo *cur_cfile = fdlocks->cfile;
1245 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
1247 list_for_each_entry(li, &fdlocks->locks, llist) {
1248 if (offset + length <= li->offset ||
1249 offset >= li->offset + li->length)
1251 if (rw_check != CIFS_LOCK_OP && current->tgid == li->pid &&
1252 server->ops->compare_fids(cfile, cur_cfile)) {
1253 /* shared lock prevents write op through the same fid */
1254 if (!(li->type & server->vals->shared_lock_type) ||
1255 rw_check != CIFS_WRITE_OP)
1258 if ((type & server->vals->shared_lock_type) &&
1259 ((server->ops->compare_fids(cfile, cur_cfile) &&
1260 current->tgid == li->pid) || type == li->type))
1262 if (rw_check == CIFS_LOCK_OP &&
1263 (flags & FL_OFDLCK) && (li->flags & FL_OFDLCK) &&
1264 server->ops->compare_fids(cfile, cur_cfile))
1274 cifs_find_lock_conflict(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
1275 __u8 type, __u16 flags,
1276 struct cifsLockInfo **conf_lock, int rw_check)
1279 struct cifs_fid_locks *cur;
1280 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1282 list_for_each_entry(cur, &cinode->llist, llist) {
1283 rc = cifs_find_fid_lock_conflict(cur, offset, length, type,
1284 flags, cfile, conf_lock,
1294 * Check if there is another lock that prevents us to set the lock (mandatory
1295 * style). If such a lock exists, update the flock structure with its
1296 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
1297 * or leave it the same if we can't. Returns 0 if we don't need to request to
1298 * the server or 1 otherwise.
1301 cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
1302 __u8 type, struct file_lock *flock)
1305 struct cifsLockInfo *conf_lock;
1306 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1307 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
1310 down_read(&cinode->lock_sem);
1312 exist = cifs_find_lock_conflict(cfile, offset, length, type,
1313 flock->fl_flags, &conf_lock,
1316 flock->fl_start = conf_lock->offset;
1317 flock->fl_end = conf_lock->offset + conf_lock->length - 1;
1318 flock->fl_pid = conf_lock->pid;
1319 if (conf_lock->type & server->vals->shared_lock_type)
1320 flock->fl_type = F_RDLCK;
1322 flock->fl_type = F_WRLCK;
1323 } else if (!cinode->can_cache_brlcks)
1326 flock->fl_type = F_UNLCK;
1328 up_read(&cinode->lock_sem);
1333 cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock)
1335 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1336 cifs_down_write(&cinode->lock_sem);
1337 list_add_tail(&lock->llist, &cfile->llist->locks);
1338 up_write(&cinode->lock_sem);
1342 * Set the byte-range lock (mandatory style). Returns:
1343 * 1) 0, if we set the lock and don't need to request to the server;
1344 * 2) 1, if no locks prevent us but we need to request to the server;
1345 * 3) -EACCES, if there is a lock that prevents us and wait is false.
1348 cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock,
1351 struct cifsLockInfo *conf_lock;
1352 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1358 cifs_down_write(&cinode->lock_sem);
1360 exist = cifs_find_lock_conflict(cfile, lock->offset, lock->length,
1361 lock->type, lock->flags, &conf_lock,
1363 if (!exist && cinode->can_cache_brlcks) {
1364 list_add_tail(&lock->llist, &cfile->llist->locks);
1365 up_write(&cinode->lock_sem);
1374 list_add_tail(&lock->blist, &conf_lock->blist);
1375 up_write(&cinode->lock_sem);
1376 rc = wait_event_interruptible(lock->block_q,
1377 (lock->blist.prev == &lock->blist) &&
1378 (lock->blist.next == &lock->blist));
1381 cifs_down_write(&cinode->lock_sem);
1382 list_del_init(&lock->blist);
1385 up_write(&cinode->lock_sem);
1389 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1391 * Check if there is another lock that prevents us to set the lock (posix
1392 * style). If such a lock exists, update the flock structure with its
1393 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
1394 * or leave it the same if we can't. Returns 0 if we don't need to request to
1395 * the server or 1 otherwise.
1398 cifs_posix_lock_test(struct file *file, struct file_lock *flock)
1401 struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1402 unsigned char saved_type = flock->fl_type;
1404 if ((flock->fl_flags & FL_POSIX) == 0)
1407 down_read(&cinode->lock_sem);
1408 posix_test_lock(file, flock);
1410 if (flock->fl_type == F_UNLCK && !cinode->can_cache_brlcks) {
1411 flock->fl_type = saved_type;
1415 up_read(&cinode->lock_sem);
1420 * Set the byte-range lock (posix style). Returns:
1421 * 1) <0, if the error occurs while setting the lock;
1422 * 2) 0, if we set the lock and don't need to request to the server;
1423 * 3) FILE_LOCK_DEFERRED, if we will wait for some other file_lock;
1424 * 4) FILE_LOCK_DEFERRED + 1, if we need to request to the server.
1427 cifs_posix_lock_set(struct file *file, struct file_lock *flock)
1429 struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1430 int rc = FILE_LOCK_DEFERRED + 1;
1432 if ((flock->fl_flags & FL_POSIX) == 0)
1435 cifs_down_write(&cinode->lock_sem);
1436 if (!cinode->can_cache_brlcks) {
1437 up_write(&cinode->lock_sem);
1441 rc = posix_lock_file(file, flock, NULL);
1442 up_write(&cinode->lock_sem);
1447 cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
1450 int rc = 0, stored_rc;
1451 struct cifsLockInfo *li, *tmp;
1452 struct cifs_tcon *tcon;
1453 unsigned int num, max_num, max_buf;
1454 LOCKING_ANDX_RANGE *buf, *cur;
1455 static const int types[] = {
1456 LOCKING_ANDX_LARGE_FILES,
1457 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES
1462 tcon = tlink_tcon(cfile->tlink);
1465 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1466 * and check it before using.
1468 max_buf = tcon->ses->server->maxBuf;
1469 if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) {
1474 BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
1476 max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
1478 max_num = (max_buf - sizeof(struct smb_hdr)) /
1479 sizeof(LOCKING_ANDX_RANGE);
1480 buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1486 for (i = 0; i < 2; i++) {
1489 list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1490 if (li->type != types[i])
1492 cur->Pid = cpu_to_le16(li->pid);
1493 cur->LengthLow = cpu_to_le32((u32)li->length);
1494 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1495 cur->OffsetLow = cpu_to_le32((u32)li->offset);
1496 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1497 if (++num == max_num) {
1498 stored_rc = cifs_lockv(xid, tcon,
1500 (__u8)li->type, 0, num,
1511 stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1512 (__u8)types[i], 0, num, buf);
1524 hash_lockowner(fl_owner_t owner)
1526 return cifs_lock_secret ^ hash32_ptr((const void *)owner);
1528 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1530 struct lock_to_push {
1531 struct list_head llist;
1539 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1541 cifs_push_posix_locks(struct cifsFileInfo *cfile)
1543 struct inode *inode = d_inode(cfile->dentry);
1544 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1545 struct file_lock *flock;
1546 struct file_lock_context *flctx = locks_inode_context(inode);
1547 unsigned int count = 0, i;
1548 int rc = 0, xid, type;
1549 struct list_head locks_to_send, *el;
1550 struct lock_to_push *lck, *tmp;
1558 spin_lock(&flctx->flc_lock);
1559 list_for_each(el, &flctx->flc_posix) {
1562 spin_unlock(&flctx->flc_lock);
1564 INIT_LIST_HEAD(&locks_to_send);
1567 * Allocating count locks is enough because no FL_POSIX locks can be
1568 * added to the list while we are holding cinode->lock_sem that
1569 * protects locking operations of this inode.
1571 for (i = 0; i < count; i++) {
1572 lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL);
1577 list_add_tail(&lck->llist, &locks_to_send);
1580 el = locks_to_send.next;
1581 spin_lock(&flctx->flc_lock);
1582 list_for_each_entry(flock, &flctx->flc_posix, fl_list) {
1583 if (el == &locks_to_send) {
1585 * The list ended. We don't have enough allocated
1586 * structures - something is really wrong.
1588 cifs_dbg(VFS, "Can't push all brlocks!\n");
1591 length = cifs_flock_len(flock);
1592 if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK)
1596 lck = list_entry(el, struct lock_to_push, llist);
1597 lck->pid = hash_lockowner(flock->fl_owner);
1598 lck->netfid = cfile->fid.netfid;
1599 lck->length = length;
1601 lck->offset = flock->fl_start;
1603 spin_unlock(&flctx->flc_lock);
1605 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1608 stored_rc = CIFSSMBPosixLock(xid, tcon, lck->netfid, lck->pid,
1609 lck->offset, lck->length, NULL,
1613 list_del(&lck->llist);
1621 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1622 list_del(&lck->llist);
1627 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1630 cifs_push_locks(struct cifsFileInfo *cfile)
1632 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1633 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1635 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1636 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1637 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1639 /* we are going to update can_cache_brlcks here - need a write access */
1640 cifs_down_write(&cinode->lock_sem);
1641 if (!cinode->can_cache_brlcks) {
1642 up_write(&cinode->lock_sem);
1646 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1647 if (cap_unix(tcon->ses) &&
1648 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1649 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1650 rc = cifs_push_posix_locks(cfile);
1652 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1653 rc = tcon->ses->server->ops->push_mand_locks(cfile);
1655 cinode->can_cache_brlcks = false;
1656 up_write(&cinode->lock_sem);
1661 cifs_read_flock(struct file_lock *flock, __u32 *type, int *lock, int *unlock,
1662 bool *wait_flag, struct TCP_Server_Info *server)
1664 if (flock->fl_flags & FL_POSIX)
1665 cifs_dbg(FYI, "Posix\n");
1666 if (flock->fl_flags & FL_FLOCK)
1667 cifs_dbg(FYI, "Flock\n");
1668 if (flock->fl_flags & FL_SLEEP) {
1669 cifs_dbg(FYI, "Blocking lock\n");
1672 if (flock->fl_flags & FL_ACCESS)
1673 cifs_dbg(FYI, "Process suspended by mandatory locking - not implemented yet\n");
1674 if (flock->fl_flags & FL_LEASE)
1675 cifs_dbg(FYI, "Lease on file - not implemented yet\n");
1676 if (flock->fl_flags &
1677 (~(FL_POSIX | FL_FLOCK | FL_SLEEP |
1678 FL_ACCESS | FL_LEASE | FL_CLOSE | FL_OFDLCK)))
1679 cifs_dbg(FYI, "Unknown lock flags 0x%x\n", flock->fl_flags);
1681 *type = server->vals->large_lock_type;
1682 if (flock->fl_type == F_WRLCK) {
1683 cifs_dbg(FYI, "F_WRLCK\n");
1684 *type |= server->vals->exclusive_lock_type;
1686 } else if (flock->fl_type == F_UNLCK) {
1687 cifs_dbg(FYI, "F_UNLCK\n");
1688 *type |= server->vals->unlock_lock_type;
1690 /* Check if unlock includes more than one lock range */
1691 } else if (flock->fl_type == F_RDLCK) {
1692 cifs_dbg(FYI, "F_RDLCK\n");
1693 *type |= server->vals->shared_lock_type;
1695 } else if (flock->fl_type == F_EXLCK) {
1696 cifs_dbg(FYI, "F_EXLCK\n");
1697 *type |= server->vals->exclusive_lock_type;
1699 } else if (flock->fl_type == F_SHLCK) {
1700 cifs_dbg(FYI, "F_SHLCK\n");
1701 *type |= server->vals->shared_lock_type;
1704 cifs_dbg(FYI, "Unknown type of lock\n");
1708 cifs_getlk(struct file *file, struct file_lock *flock, __u32 type,
1709 bool wait_flag, bool posix_lck, unsigned int xid)
1712 __u64 length = cifs_flock_len(flock);
1713 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1714 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1715 struct TCP_Server_Info *server = tcon->ses->server;
1716 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1717 __u16 netfid = cfile->fid.netfid;
1720 int posix_lock_type;
1722 rc = cifs_posix_lock_test(file, flock);
1726 if (type & server->vals->shared_lock_type)
1727 posix_lock_type = CIFS_RDLCK;
1729 posix_lock_type = CIFS_WRLCK;
1730 rc = CIFSSMBPosixLock(xid, tcon, netfid,
1731 hash_lockowner(flock->fl_owner),
1732 flock->fl_start, length, flock,
1733 posix_lock_type, wait_flag);
1736 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1738 rc = cifs_lock_test(cfile, flock->fl_start, length, type, flock);
1742 /* BB we could chain these into one lock request BB */
1743 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length, type,
1746 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1748 flock->fl_type = F_UNLCK;
1750 cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
1755 if (type & server->vals->shared_lock_type) {
1756 flock->fl_type = F_WRLCK;
1760 type &= ~server->vals->exclusive_lock_type;
1762 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1763 type | server->vals->shared_lock_type,
1766 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1767 type | server->vals->shared_lock_type, 0, 1, false);
1768 flock->fl_type = F_RDLCK;
1770 cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
1773 flock->fl_type = F_WRLCK;
1779 cifs_move_llist(struct list_head *source, struct list_head *dest)
1781 struct list_head *li, *tmp;
1782 list_for_each_safe(li, tmp, source)
1783 list_move(li, dest);
1787 cifs_free_llist(struct list_head *llist)
1789 struct cifsLockInfo *li, *tmp;
1790 list_for_each_entry_safe(li, tmp, llist, llist) {
1791 cifs_del_lock_waiters(li);
1792 list_del(&li->llist);
1797 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1799 cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
1802 int rc = 0, stored_rc;
1803 static const int types[] = {
1804 LOCKING_ANDX_LARGE_FILES,
1805 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES
1808 unsigned int max_num, num, max_buf;
1809 LOCKING_ANDX_RANGE *buf, *cur;
1810 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1811 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1812 struct cifsLockInfo *li, *tmp;
1813 __u64 length = cifs_flock_len(flock);
1814 struct list_head tmp_llist;
1816 INIT_LIST_HEAD(&tmp_llist);
1819 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1820 * and check it before using.
1822 max_buf = tcon->ses->server->maxBuf;
1823 if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE)))
1826 BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
1828 max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
1830 max_num = (max_buf - sizeof(struct smb_hdr)) /
1831 sizeof(LOCKING_ANDX_RANGE);
1832 buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1836 cifs_down_write(&cinode->lock_sem);
1837 for (i = 0; i < 2; i++) {
1840 list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1841 if (flock->fl_start > li->offset ||
1842 (flock->fl_start + length) <
1843 (li->offset + li->length))
1845 if (current->tgid != li->pid)
1847 if (types[i] != li->type)
1849 if (cinode->can_cache_brlcks) {
1851 * We can cache brlock requests - simply remove
1852 * a lock from the file's list.
1854 list_del(&li->llist);
1855 cifs_del_lock_waiters(li);
1859 cur->Pid = cpu_to_le16(li->pid);
1860 cur->LengthLow = cpu_to_le32((u32)li->length);
1861 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1862 cur->OffsetLow = cpu_to_le32((u32)li->offset);
1863 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1865 * We need to save a lock here to let us add it again to
1866 * the file's list if the unlock range request fails on
1869 list_move(&li->llist, &tmp_llist);
1870 if (++num == max_num) {
1871 stored_rc = cifs_lockv(xid, tcon,
1873 li->type, num, 0, buf);
1876 * We failed on the unlock range
1877 * request - add all locks from the tmp
1878 * list to the head of the file's list.
1880 cifs_move_llist(&tmp_llist,
1881 &cfile->llist->locks);
1885 * The unlock range request succeed -
1886 * free the tmp list.
1888 cifs_free_llist(&tmp_llist);
1895 stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1896 types[i], num, 0, buf);
1898 cifs_move_llist(&tmp_llist,
1899 &cfile->llist->locks);
1902 cifs_free_llist(&tmp_llist);
1906 up_write(&cinode->lock_sem);
1910 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1913 cifs_setlk(struct file *file, struct file_lock *flock, __u32 type,
1914 bool wait_flag, bool posix_lck, int lock, int unlock,
1918 __u64 length = cifs_flock_len(flock);
1919 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1920 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1921 struct TCP_Server_Info *server = tcon->ses->server;
1922 struct inode *inode = d_inode(cfile->dentry);
1924 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
1926 int posix_lock_type;
1928 rc = cifs_posix_lock_set(file, flock);
1929 if (rc <= FILE_LOCK_DEFERRED)
1932 if (type & server->vals->shared_lock_type)
1933 posix_lock_type = CIFS_RDLCK;
1935 posix_lock_type = CIFS_WRLCK;
1938 posix_lock_type = CIFS_UNLCK;
1940 rc = CIFSSMBPosixLock(xid, tcon, cfile->fid.netfid,
1941 hash_lockowner(flock->fl_owner),
1942 flock->fl_start, length,
1943 NULL, posix_lock_type, wait_flag);
1946 #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
1948 struct cifsLockInfo *lock;
1950 lock = cifs_lock_init(flock->fl_start, length, type,
1955 rc = cifs_lock_add_if(cfile, lock, wait_flag);
1964 * Windows 7 server can delay breaking lease from read to None
1965 * if we set a byte-range lock on a file - break it explicitly
1966 * before sending the lock to the server to be sure the next
1967 * read won't conflict with non-overlapted locks due to
1970 if (!CIFS_CACHE_WRITE(CIFS_I(inode)) &&
1971 CIFS_CACHE_READ(CIFS_I(inode))) {
1972 cifs_zap_mapping(inode);
1973 cifs_dbg(FYI, "Set no oplock for inode=%p due to mand locks\n",
1975 CIFS_I(inode)->oplock = 0;
1978 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1979 type, 1, 0, wait_flag);
1985 cifs_lock_add(cfile, lock);
1987 rc = server->ops->mand_unlock_range(cfile, flock, xid);
1990 if ((flock->fl_flags & FL_POSIX) || (flock->fl_flags & FL_FLOCK)) {
1992 * If this is a request to remove all locks because we
1993 * are closing the file, it doesn't matter if the
1994 * unlocking failed as both cifs.ko and the SMB server
1995 * remove the lock on file close
1998 cifs_dbg(VFS, "%s failed rc=%d\n", __func__, rc);
1999 if (!(flock->fl_flags & FL_CLOSE))
2002 rc = locks_lock_file_wait(file, flock);
2007 int cifs_flock(struct file *file, int cmd, struct file_lock *fl)
2010 int lock = 0, unlock = 0;
2011 bool wait_flag = false;
2012 bool posix_lck = false;
2013 struct cifs_sb_info *cifs_sb;
2014 struct cifs_tcon *tcon;
2015 struct cifsFileInfo *cfile;
2020 if (!(fl->fl_flags & FL_FLOCK)) {
2026 cfile = (struct cifsFileInfo *)file->private_data;
2027 tcon = tlink_tcon(cfile->tlink);
2029 cifs_read_flock(fl, &type, &lock, &unlock, &wait_flag,
2031 cifs_sb = CIFS_FILE_SB(file);
2033 if (cap_unix(tcon->ses) &&
2034 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
2035 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
2038 if (!lock && !unlock) {
2040 * if no lock or unlock then nothing to do since we do not
2048 rc = cifs_setlk(file, fl, type, wait_flag, posix_lck, lock, unlock,
2056 int cifs_lock(struct file *file, int cmd, struct file_lock *flock)
2059 int lock = 0, unlock = 0;
2060 bool wait_flag = false;
2061 bool posix_lck = false;
2062 struct cifs_sb_info *cifs_sb;
2063 struct cifs_tcon *tcon;
2064 struct cifsFileInfo *cfile;
2070 cifs_dbg(FYI, "%s: %pD2 cmd=0x%x type=0x%x flags=0x%x r=%lld:%lld\n", __func__, file, cmd,
2071 flock->fl_flags, flock->fl_type, (long long)flock->fl_start,
2072 (long long)flock->fl_end);
2074 cfile = (struct cifsFileInfo *)file->private_data;
2075 tcon = tlink_tcon(cfile->tlink);
2077 cifs_read_flock(flock, &type, &lock, &unlock, &wait_flag,
2079 cifs_sb = CIFS_FILE_SB(file);
2080 set_bit(CIFS_INO_CLOSE_ON_LOCK, &CIFS_I(d_inode(cfile->dentry))->flags);
2082 if (cap_unix(tcon->ses) &&
2083 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
2084 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
2087 * BB add code here to normalize offset and length to account for
2088 * negative length which we can not accept over the wire.
2090 if (IS_GETLK(cmd)) {
2091 rc = cifs_getlk(file, flock, type, wait_flag, posix_lck, xid);
2096 if (!lock && !unlock) {
2098 * if no lock or unlock then nothing to do since we do not
2105 rc = cifs_setlk(file, flock, type, wait_flag, posix_lck, lock, unlock,
2112 * update the file size (if needed) after a write. Should be called with
2113 * the inode->i_lock held
2116 cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
2117 unsigned int bytes_written)
2119 loff_t end_of_write = offset + bytes_written;
2121 if (end_of_write > cifsi->server_eof)
2122 cifsi->server_eof = end_of_write;
2126 cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
2127 size_t write_size, loff_t *offset)
2130 unsigned int bytes_written = 0;
2131 unsigned int total_written;
2132 struct cifs_tcon *tcon;
2133 struct TCP_Server_Info *server;
2135 struct dentry *dentry = open_file->dentry;
2136 struct cifsInodeInfo *cifsi = CIFS_I(d_inode(dentry));
2137 struct cifs_io_parms io_parms = {0};
2139 cifs_dbg(FYI, "write %zd bytes to offset %lld of %pd\n",
2140 write_size, *offset, dentry);
2142 tcon = tlink_tcon(open_file->tlink);
2143 server = tcon->ses->server;
2145 if (!server->ops->sync_write)
2150 for (total_written = 0; write_size > total_written;
2151 total_written += bytes_written) {
2153 while (rc == -EAGAIN) {
2157 if (open_file->invalidHandle) {
2158 /* we could deadlock if we called
2159 filemap_fdatawait from here so tell
2160 reopen_file not to flush data to
2162 rc = cifs_reopen_file(open_file, false);
2167 len = min(server->ops->wp_retry_size(d_inode(dentry)),
2168 (unsigned int)write_size - total_written);
2169 /* iov[0] is reserved for smb header */
2170 iov[1].iov_base = (char *)write_data + total_written;
2171 iov[1].iov_len = len;
2173 io_parms.tcon = tcon;
2174 io_parms.offset = *offset;
2175 io_parms.length = len;
2176 rc = server->ops->sync_write(xid, &open_file->fid,
2177 &io_parms, &bytes_written, iov, 1);
2179 if (rc || (bytes_written == 0)) {
2187 spin_lock(&d_inode(dentry)->i_lock);
2188 cifs_update_eof(cifsi, *offset, bytes_written);
2189 spin_unlock(&d_inode(dentry)->i_lock);
2190 *offset += bytes_written;
2194 cifs_stats_bytes_written(tcon, total_written);
2196 if (total_written > 0) {
2197 spin_lock(&d_inode(dentry)->i_lock);
2198 if (*offset > d_inode(dentry)->i_size) {
2199 i_size_write(d_inode(dentry), *offset);
2200 d_inode(dentry)->i_blocks = (512 - 1 + *offset) >> 9;
2202 spin_unlock(&d_inode(dentry)->i_lock);
2204 mark_inode_dirty_sync(d_inode(dentry));
2206 return total_written;
2209 struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
2212 struct cifsFileInfo *open_file = NULL;
2213 struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->netfs.inode.i_sb);
2215 /* only filter by fsuid on multiuser mounts */
2216 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
2219 spin_lock(&cifs_inode->open_file_lock);
2220 /* we could simply get the first_list_entry since write-only entries
2221 are always at the end of the list but since the first entry might
2222 have a close pending, we go through the whole list */
2223 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
2224 if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
2226 if (OPEN_FMODE(open_file->f_flags) & FMODE_READ) {
2227 if ((!open_file->invalidHandle)) {
2228 /* found a good file */
2229 /* lock it so it will not be closed on us */
2230 cifsFileInfo_get(open_file);
2231 spin_unlock(&cifs_inode->open_file_lock);
2233 } /* else might as well continue, and look for
2234 another, or simply have the caller reopen it
2235 again rather than trying to fix this handle */
2236 } else /* write only file */
2237 break; /* write only files are last so must be done */
2239 spin_unlock(&cifs_inode->open_file_lock);
2243 /* Return -EBADF if no handle is found and general rc otherwise */
2245 cifs_get_writable_file(struct cifsInodeInfo *cifs_inode, int flags,
2246 struct cifsFileInfo **ret_file)
2248 struct cifsFileInfo *open_file, *inv_file = NULL;
2249 struct cifs_sb_info *cifs_sb;
2250 bool any_available = false;
2252 unsigned int refind = 0;
2253 bool fsuid_only = flags & FIND_WR_FSUID_ONLY;
2254 bool with_delete = flags & FIND_WR_WITH_DELETE;
2258 * Having a null inode here (because mapping->host was set to zero by
2259 * the VFS or MM) should not happen but we had reports of on oops (due
2260 * to it being zero) during stress testcases so we need to check for it
2263 if (cifs_inode == NULL) {
2264 cifs_dbg(VFS, "Null inode passed to cifs_writeable_file\n");
2269 cifs_sb = CIFS_SB(cifs_inode->netfs.inode.i_sb);
2271 /* only filter by fsuid on multiuser mounts */
2272 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
2275 spin_lock(&cifs_inode->open_file_lock);
2277 if (refind > MAX_REOPEN_ATT) {
2278 spin_unlock(&cifs_inode->open_file_lock);
2281 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
2282 if (!any_available && open_file->pid != current->tgid)
2284 if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
2286 if (with_delete && !(open_file->fid.access & DELETE))
2288 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
2289 if (!open_file->invalidHandle) {
2290 /* found a good writable file */
2291 cifsFileInfo_get(open_file);
2292 spin_unlock(&cifs_inode->open_file_lock);
2293 *ret_file = open_file;
2297 inv_file = open_file;
2301 /* couldn't find useable FH with same pid, try any available */
2302 if (!any_available) {
2303 any_available = true;
2304 goto refind_writable;
2308 any_available = false;
2309 cifsFileInfo_get(inv_file);
2312 spin_unlock(&cifs_inode->open_file_lock);
2315 rc = cifs_reopen_file(inv_file, false);
2317 *ret_file = inv_file;
2321 spin_lock(&cifs_inode->open_file_lock);
2322 list_move_tail(&inv_file->flist, &cifs_inode->openFileList);
2323 spin_unlock(&cifs_inode->open_file_lock);
2324 cifsFileInfo_put(inv_file);
2327 spin_lock(&cifs_inode->open_file_lock);
2328 goto refind_writable;
2334 struct cifsFileInfo *
2335 find_writable_file(struct cifsInodeInfo *cifs_inode, int flags)
2337 struct cifsFileInfo *cfile;
2340 rc = cifs_get_writable_file(cifs_inode, flags, &cfile);
2342 cifs_dbg(FYI, "Couldn't find writable handle rc=%d\n", rc);
2348 cifs_get_writable_path(struct cifs_tcon *tcon, const char *name,
2350 struct cifsFileInfo **ret_file)
2352 struct cifsFileInfo *cfile;
2353 void *page = alloc_dentry_path();
2357 spin_lock(&tcon->open_file_lock);
2358 list_for_each_entry(cfile, &tcon->openFileList, tlist) {
2359 struct cifsInodeInfo *cinode;
2360 const char *full_path = build_path_from_dentry(cfile->dentry, page);
2361 if (IS_ERR(full_path)) {
2362 spin_unlock(&tcon->open_file_lock);
2363 free_dentry_path(page);
2364 return PTR_ERR(full_path);
2366 if (strcmp(full_path, name))
2369 cinode = CIFS_I(d_inode(cfile->dentry));
2370 spin_unlock(&tcon->open_file_lock);
2371 free_dentry_path(page);
2372 return cifs_get_writable_file(cinode, flags, ret_file);
2375 spin_unlock(&tcon->open_file_lock);
2376 free_dentry_path(page);
2381 cifs_get_readable_path(struct cifs_tcon *tcon, const char *name,
2382 struct cifsFileInfo **ret_file)
2384 struct cifsFileInfo *cfile;
2385 void *page = alloc_dentry_path();
2389 spin_lock(&tcon->open_file_lock);
2390 list_for_each_entry(cfile, &tcon->openFileList, tlist) {
2391 struct cifsInodeInfo *cinode;
2392 const char *full_path = build_path_from_dentry(cfile->dentry, page);
2393 if (IS_ERR(full_path)) {
2394 spin_unlock(&tcon->open_file_lock);
2395 free_dentry_path(page);
2396 return PTR_ERR(full_path);
2398 if (strcmp(full_path, name))
2401 cinode = CIFS_I(d_inode(cfile->dentry));
2402 spin_unlock(&tcon->open_file_lock);
2403 free_dentry_path(page);
2404 *ret_file = find_readable_file(cinode, 0);
2405 return *ret_file ? 0 : -ENOENT;
2408 spin_unlock(&tcon->open_file_lock);
2409 free_dentry_path(page);
2414 cifs_writedata_release(struct kref *refcount)
2416 struct cifs_writedata *wdata = container_of(refcount,
2417 struct cifs_writedata, refcount);
2418 #ifdef CONFIG_CIFS_SMB_DIRECT
2420 smbd_deregister_mr(wdata->mr);
2426 cifsFileInfo_put(wdata->cfile);
2432 * Write failed with a retryable error. Resend the write request. It's also
2433 * possible that the page was redirtied so re-clean the page.
2436 cifs_writev_requeue(struct cifs_writedata *wdata)
2439 struct inode *inode = d_inode(wdata->cfile->dentry);
2440 struct TCP_Server_Info *server;
2441 unsigned int rest_len = wdata->bytes;
2442 loff_t fpos = wdata->offset;
2444 server = tlink_tcon(wdata->cfile->tlink)->ses->server;
2446 struct cifs_writedata *wdata2;
2447 unsigned int wsize, cur_len;
2449 wsize = server->ops->wp_retry_size(inode);
2450 if (wsize < rest_len) {
2451 if (wsize < PAGE_SIZE) {
2455 cur_len = min(round_down(wsize, PAGE_SIZE), rest_len);
2460 wdata2 = cifs_writedata_alloc(cifs_writev_complete);
2466 wdata2->sync_mode = wdata->sync_mode;
2467 wdata2->offset = fpos;
2468 wdata2->bytes = cur_len;
2469 wdata2->iter = wdata->iter;
2471 iov_iter_advance(&wdata2->iter, fpos - wdata->offset);
2472 iov_iter_truncate(&wdata2->iter, wdata2->bytes);
2474 if (iov_iter_is_xarray(&wdata2->iter))
2475 /* Check for pages having been redirtied and clean
2476 * them. We can do this by walking the xarray. If
2477 * it's not an xarray, then it's a DIO and we shouldn't
2478 * be mucking around with the page bits.
2480 cifs_undirty_folios(inode, fpos, cur_len);
2482 rc = cifs_get_writable_file(CIFS_I(inode), FIND_WR_ANY,
2484 if (!wdata2->cfile) {
2485 cifs_dbg(VFS, "No writable handle to retry writepages rc=%d\n",
2487 if (!is_retryable_error(rc))
2490 wdata2->pid = wdata2->cfile->pid;
2491 rc = server->ops->async_writev(wdata2,
2492 cifs_writedata_release);
2495 kref_put(&wdata2->refcount, cifs_writedata_release);
2497 if (is_retryable_error(rc))
2500 rest_len -= cur_len;
2505 rest_len -= cur_len;
2506 } while (rest_len > 0);
2508 /* Clean up remaining pages from the original wdata */
2509 if (iov_iter_is_xarray(&wdata->iter))
2510 cifs_pages_write_failed(inode, fpos, rest_len);
2512 if (rc != 0 && !is_retryable_error(rc))
2513 mapping_set_error(inode->i_mapping, rc);
2514 kref_put(&wdata->refcount, cifs_writedata_release);
2518 cifs_writev_complete(struct work_struct *work)
2520 struct cifs_writedata *wdata = container_of(work,
2521 struct cifs_writedata, work);
2522 struct inode *inode = d_inode(wdata->cfile->dentry);
2524 if (wdata->result == 0) {
2525 spin_lock(&inode->i_lock);
2526 cifs_update_eof(CIFS_I(inode), wdata->offset, wdata->bytes);
2527 spin_unlock(&inode->i_lock);
2528 cifs_stats_bytes_written(tlink_tcon(wdata->cfile->tlink),
2530 } else if (wdata->sync_mode == WB_SYNC_ALL && wdata->result == -EAGAIN)
2531 return cifs_writev_requeue(wdata);
2533 if (wdata->result == -EAGAIN)
2534 cifs_pages_write_redirty(inode, wdata->offset, wdata->bytes);
2535 else if (wdata->result < 0)
2536 cifs_pages_write_failed(inode, wdata->offset, wdata->bytes);
2538 cifs_pages_written_back(inode, wdata->offset, wdata->bytes);
2540 if (wdata->result != -EAGAIN)
2541 mapping_set_error(inode->i_mapping, wdata->result);
2542 kref_put(&wdata->refcount, cifs_writedata_release);
2545 struct cifs_writedata *cifs_writedata_alloc(work_func_t complete)
2547 struct cifs_writedata *wdata;
2549 wdata = kzalloc(sizeof(*wdata), GFP_NOFS);
2550 if (wdata != NULL) {
2551 kref_init(&wdata->refcount);
2552 INIT_LIST_HEAD(&wdata->list);
2553 init_completion(&wdata->done);
2554 INIT_WORK(&wdata->work, complete);
2559 static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to)
2561 struct address_space *mapping = page->mapping;
2562 loff_t offset = (loff_t)page->index << PAGE_SHIFT;
2565 int bytes_written = 0;
2566 struct inode *inode;
2567 struct cifsFileInfo *open_file;
2569 if (!mapping || !mapping->host)
2572 inode = page->mapping->host;
2574 offset += (loff_t)from;
2575 write_data = kmap(page);
2578 if ((to > PAGE_SIZE) || (from > to)) {
2583 /* racing with truncate? */
2584 if (offset > mapping->host->i_size) {
2586 return 0; /* don't care */
2589 /* check to make sure that we are not extending the file */
2590 if (mapping->host->i_size - offset < (loff_t)to)
2591 to = (unsigned)(mapping->host->i_size - offset);
2593 rc = cifs_get_writable_file(CIFS_I(mapping->host), FIND_WR_ANY,
2596 bytes_written = cifs_write(open_file, open_file->pid,
2597 write_data, to - from, &offset);
2598 cifsFileInfo_put(open_file);
2599 /* Does mm or vfs already set times? */
2600 simple_inode_init_ts(inode);
2601 if ((bytes_written > 0) && (offset))
2603 else if (bytes_written < 0)
2608 cifs_dbg(FYI, "No writable handle for write page rc=%d\n", rc);
2609 if (!is_retryable_error(rc))
2618 * Extend the region to be written back to include subsequent contiguously
2619 * dirty pages if possible, but don't sleep while doing so.
2621 static void cifs_extend_writeback(struct address_space *mapping,
2628 struct folio_batch batch;
2629 struct folio *folio;
2630 unsigned int psize, nr_pages;
2632 pgoff_t index = (start + len) / PAGE_SIZE;
2635 XA_STATE(xas, &mapping->i_pages, index);
2637 folio_batch_init(&batch);
2640 /* Firstly, we gather up a batch of contiguous dirty pages
2641 * under the RCU read lock - but we can't clear the dirty flags
2642 * there if any of those pages are mapped.
2646 xas_for_each(&xas, folio, ULONG_MAX) {
2648 if (xas_retry(&xas, folio))
2650 if (xa_is_value(folio))
2652 if (folio_index(folio) != index)
2654 if (!folio_try_get_rcu(folio)) {
2658 nr_pages = folio_nr_pages(folio);
2659 if (nr_pages > max_pages)
2662 /* Has the page moved or been split? */
2663 if (unlikely(folio != xas_reload(&xas))) {
2668 if (!folio_trylock(folio)) {
2672 if (!folio_test_dirty(folio) || folio_test_writeback(folio)) {
2673 folio_unlock(folio);
2678 max_pages -= nr_pages;
2679 psize = folio_size(folio);
2682 if (max_pages <= 0 || len >= max_len || *_count <= 0)
2686 if (!folio_batch_add(&batch, folio))
2696 /* Now, if we obtained any pages, we can shift them to being
2697 * writable and mark them for caching.
2699 if (!folio_batch_count(&batch))
2702 for (i = 0; i < folio_batch_count(&batch); i++) {
2703 folio = batch.folios[i];
2704 /* The folio should be locked, dirty and not undergoing
2705 * writeback from the loop above.
2707 if (!folio_clear_dirty_for_io(folio))
2709 if (folio_start_writeback(folio))
2712 *_count -= folio_nr_pages(folio);
2713 folio_unlock(folio);
2716 folio_batch_release(&batch);
2724 * Write back the locked page and any subsequent non-locked dirty pages.
2726 static ssize_t cifs_write_back_from_locked_folio(struct address_space *mapping,
2727 struct writeback_control *wbc,
2728 struct folio *folio,
2729 loff_t start, loff_t end)
2731 struct inode *inode = mapping->host;
2732 struct TCP_Server_Info *server;
2733 struct cifs_writedata *wdata;
2734 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2735 struct cifs_credits credits_on_stack;
2736 struct cifs_credits *credits = &credits_on_stack;
2737 struct cifsFileInfo *cfile = NULL;
2738 unsigned int xid, wsize, len;
2739 loff_t i_size = i_size_read(inode);
2741 long count = wbc->nr_to_write;
2744 /* The folio should be locked, dirty and not undergoing writeback. */
2745 if (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(folio) != 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->server_eof > inode->i_size)
3251 i_size_write(inode, cifsi->server_eof);
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 #ifdef CONFIG_CIFS_SMB_DIRECT
3305 wdata->mr->need_invalidate = true;
3306 smbd_deregister_mr(wdata->mr);
3310 rc = server->ops->async_writev(wdata,
3311 cifs_uncached_writedata_release);
3315 /* If the write was successfully sent, we are done */
3317 list_add_tail(&wdata->list, wdata_list);
3321 /* Roll back credits and retry if needed */
3322 add_credits_and_wake_if(server, &wdata->credits, 0);
3323 } while (rc == -EAGAIN);
3326 kref_put(&wdata->refcount, cifs_uncached_writedata_release);
3331 * Select span of a bvec iterator we're going to use. Limit it by both maximum
3332 * size and maximum number of segments.
3334 static size_t cifs_limit_bvec_subset(const struct iov_iter *iter, size_t max_size,
3335 size_t max_segs, unsigned int *_nsegs)
3337 const struct bio_vec *bvecs = iter->bvec;
3338 unsigned int nbv = iter->nr_segs, ix = 0, nsegs = 0;
3339 size_t len, span = 0, n = iter->count;
3340 size_t skip = iter->iov_offset;
3342 if (WARN_ON(!iov_iter_is_bvec(iter)) || n == 0)
3345 while (n && ix < nbv && skip) {
3346 len = bvecs[ix].bv_len;
3354 while (n && ix < nbv) {
3355 len = min3(n, bvecs[ix].bv_len - skip, max_size);
3360 if (max_size == 0 || nsegs >= max_segs)
3371 cifs_write_from_iter(loff_t fpos, size_t len, struct iov_iter *from,
3372 struct cifsFileInfo *open_file,
3373 struct cifs_sb_info *cifs_sb, struct list_head *wdata_list,
3374 struct cifs_aio_ctx *ctx)
3377 size_t cur_len, max_len;
3378 struct cifs_writedata *wdata;
3380 struct TCP_Server_Info *server;
3381 unsigned int xid, max_segs = INT_MAX;
3383 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
3384 pid = open_file->pid;
3386 pid = current->tgid;
3388 server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses);
3391 #ifdef CONFIG_CIFS_SMB_DIRECT
3392 if (server->smbd_conn)
3393 max_segs = server->smbd_conn->max_frmr_depth;
3397 struct cifs_credits credits_on_stack;
3398 struct cifs_credits *credits = &credits_on_stack;
3399 unsigned int wsize, nsegs = 0;
3401 if (signal_pending(current)) {
3406 if (open_file->invalidHandle) {
3407 rc = cifs_reopen_file(open_file, false);
3414 rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->wsize,
3419 max_len = min_t(const size_t, len, wsize);
3422 add_credits_and_wake_if(server, credits, 0);
3426 cur_len = cifs_limit_bvec_subset(from, max_len, max_segs, &nsegs);
3427 cifs_dbg(FYI, "write_from_iter len=%zx/%zx nsegs=%u/%lu/%u\n",
3428 cur_len, max_len, nsegs, from->nr_segs, max_segs);
3431 add_credits_and_wake_if(server, credits, 0);
3435 wdata = cifs_writedata_alloc(cifs_uncached_writev_complete);
3438 add_credits_and_wake_if(server, credits, 0);
3442 wdata->sync_mode = WB_SYNC_ALL;
3443 wdata->offset = (__u64)fpos;
3444 wdata->cfile = cifsFileInfo_get(open_file);
3445 wdata->server = server;
3447 wdata->bytes = cur_len;
3448 wdata->credits = credits_on_stack;
3449 wdata->iter = *from;
3451 kref_get(&ctx->refcount);
3453 iov_iter_truncate(&wdata->iter, cur_len);
3455 rc = adjust_credits(server, &wdata->credits, wdata->bytes);
3458 if (wdata->cfile->invalidHandle)
3461 rc = server->ops->async_writev(wdata,
3462 cifs_uncached_writedata_release);
3466 add_credits_and_wake_if(server, &wdata->credits, 0);
3467 kref_put(&wdata->refcount,
3468 cifs_uncached_writedata_release);
3474 list_add_tail(&wdata->list, wdata_list);
3475 iov_iter_advance(from, cur_len);
3484 static void collect_uncached_write_data(struct cifs_aio_ctx *ctx)
3486 struct cifs_writedata *wdata, *tmp;
3487 struct cifs_tcon *tcon;
3488 struct cifs_sb_info *cifs_sb;
3489 struct dentry *dentry = ctx->cfile->dentry;
3492 tcon = tlink_tcon(ctx->cfile->tlink);
3493 cifs_sb = CIFS_SB(dentry->d_sb);
3495 mutex_lock(&ctx->aio_mutex);
3497 if (list_empty(&ctx->list)) {
3498 mutex_unlock(&ctx->aio_mutex);
3504 * Wait for and collect replies for any successful sends in order of
3505 * increasing offset. Once an error is hit, then return without waiting
3506 * for any more replies.
3509 list_for_each_entry_safe(wdata, tmp, &ctx->list, list) {
3511 if (!try_wait_for_completion(&wdata->done)) {
3512 mutex_unlock(&ctx->aio_mutex);
3519 ctx->total_len += wdata->bytes;
3521 /* resend call if it's a retryable error */
3522 if (rc == -EAGAIN) {
3523 struct list_head tmp_list;
3524 struct iov_iter tmp_from = ctx->iter;
3526 INIT_LIST_HEAD(&tmp_list);
3527 list_del_init(&wdata->list);
3530 rc = cifs_resend_wdata(
3531 wdata, &tmp_list, ctx);
3533 iov_iter_advance(&tmp_from,
3534 wdata->offset - ctx->pos);
3536 rc = cifs_write_from_iter(wdata->offset,
3537 wdata->bytes, &tmp_from,
3538 ctx->cfile, cifs_sb, &tmp_list,
3541 kref_put(&wdata->refcount,
3542 cifs_uncached_writedata_release);
3545 list_splice(&tmp_list, &ctx->list);
3549 list_del_init(&wdata->list);
3550 kref_put(&wdata->refcount, cifs_uncached_writedata_release);
3553 cifs_stats_bytes_written(tcon, ctx->total_len);
3554 set_bit(CIFS_INO_INVALID_MAPPING, &CIFS_I(dentry->d_inode)->flags);
3556 ctx->rc = (rc == 0) ? ctx->total_len : rc;
3558 mutex_unlock(&ctx->aio_mutex);
3560 if (ctx->iocb && ctx->iocb->ki_complete)
3561 ctx->iocb->ki_complete(ctx->iocb, ctx->rc);
3563 complete(&ctx->done);
3566 static ssize_t __cifs_writev(
3567 struct kiocb *iocb, struct iov_iter *from, bool direct)
3569 struct file *file = iocb->ki_filp;
3570 ssize_t total_written = 0;
3571 struct cifsFileInfo *cfile;
3572 struct cifs_tcon *tcon;
3573 struct cifs_sb_info *cifs_sb;
3574 struct cifs_aio_ctx *ctx;
3577 rc = generic_write_checks(iocb, from);
3581 cifs_sb = CIFS_FILE_SB(file);
3582 cfile = file->private_data;
3583 tcon = tlink_tcon(cfile->tlink);
3585 if (!tcon->ses->server->ops->async_writev)
3588 ctx = cifs_aio_ctx_alloc();
3592 ctx->cfile = cifsFileInfo_get(cfile);
3594 if (!is_sync_kiocb(iocb))
3597 ctx->pos = iocb->ki_pos;
3598 ctx->direct_io = direct;
3599 ctx->nr_pinned_pages = 0;
3601 if (user_backed_iter(from)) {
3603 * Extract IOVEC/UBUF-type iterators to a BVEC-type iterator as
3604 * they contain references to the calling process's virtual
3605 * memory layout which won't be available in an async worker
3606 * thread. This also takes a pin on every folio involved.
3608 rc = netfs_extract_user_iter(from, iov_iter_count(from),
3611 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3615 ctx->nr_pinned_pages = rc;
3616 ctx->bv = (void *)ctx->iter.bvec;
3617 ctx->bv_need_unpin = iov_iter_extract_will_pin(from);
3618 } else if ((iov_iter_is_bvec(from) || iov_iter_is_kvec(from)) &&
3619 !is_sync_kiocb(iocb)) {
3621 * If the op is asynchronous, we need to copy the list attached
3622 * to a BVEC/KVEC-type iterator, but we assume that the storage
3623 * will be pinned by the caller; in any case, we may or may not
3624 * be able to pin the pages, so we don't try.
3626 ctx->bv = (void *)dup_iter(&ctx->iter, from, GFP_KERNEL);
3628 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3633 * Otherwise, we just pass the iterator down as-is and rely on
3634 * the caller to make sure the pages referred to by the
3635 * iterator don't evaporate.
3640 ctx->len = iov_iter_count(&ctx->iter);
3642 /* grab a lock here due to read response handlers can access ctx */
3643 mutex_lock(&ctx->aio_mutex);
3645 rc = cifs_write_from_iter(iocb->ki_pos, ctx->len, &ctx->iter,
3646 cfile, cifs_sb, &ctx->list, ctx);
3649 * If at least one write was successfully sent, then discard any rc
3650 * value from the later writes. If the other write succeeds, then
3651 * we'll end up returning whatever was written. If it fails, then
3652 * we'll get a new rc value from that.
3654 if (!list_empty(&ctx->list))
3657 mutex_unlock(&ctx->aio_mutex);
3660 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3664 if (!is_sync_kiocb(iocb)) {
3665 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3666 return -EIOCBQUEUED;
3669 rc = wait_for_completion_killable(&ctx->done);
3671 mutex_lock(&ctx->aio_mutex);
3672 ctx->rc = rc = -EINTR;
3673 total_written = ctx->total_len;
3674 mutex_unlock(&ctx->aio_mutex);
3677 total_written = ctx->total_len;
3680 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3682 if (unlikely(!total_written))
3685 iocb->ki_pos += total_written;
3686 return total_written;
3689 ssize_t cifs_direct_writev(struct kiocb *iocb, struct iov_iter *from)
3691 struct file *file = iocb->ki_filp;
3693 cifs_revalidate_mapping(file->f_inode);
3694 return __cifs_writev(iocb, from, true);
3697 ssize_t cifs_user_writev(struct kiocb *iocb, struct iov_iter *from)
3699 return __cifs_writev(iocb, from, false);
3703 cifs_writev(struct kiocb *iocb, struct iov_iter *from)
3705 struct file *file = iocb->ki_filp;
3706 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
3707 struct inode *inode = file->f_mapping->host;
3708 struct cifsInodeInfo *cinode = CIFS_I(inode);
3709 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
3714 * We need to hold the sem to be sure nobody modifies lock list
3715 * with a brlock that prevents writing.
3717 down_read(&cinode->lock_sem);
3719 rc = generic_write_checks(iocb, from);
3723 if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(from),
3724 server->vals->exclusive_lock_type, 0,
3725 NULL, CIFS_WRITE_OP))
3726 rc = __generic_file_write_iter(iocb, from);
3730 up_read(&cinode->lock_sem);
3731 inode_unlock(inode);
3734 rc = generic_write_sync(iocb, rc);
3739 cifs_strict_writev(struct kiocb *iocb, struct iov_iter *from)
3741 struct inode *inode = file_inode(iocb->ki_filp);
3742 struct cifsInodeInfo *cinode = CIFS_I(inode);
3743 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
3744 struct cifsFileInfo *cfile = (struct cifsFileInfo *)
3745 iocb->ki_filp->private_data;
3746 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
3749 written = cifs_get_writer(cinode);
3753 if (CIFS_CACHE_WRITE(cinode)) {
3754 if (cap_unix(tcon->ses) &&
3755 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability))
3756 && ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) {
3757 written = generic_file_write_iter(iocb, from);
3760 written = cifs_writev(iocb, from);
3764 * For non-oplocked files in strict cache mode we need to write the data
3765 * to the server exactly from the pos to pos+len-1 rather than flush all
3766 * affected pages because it may cause a error with mandatory locks on
3767 * these pages but not on the region from pos to ppos+len-1.
3769 written = cifs_user_writev(iocb, from);
3770 if (CIFS_CACHE_READ(cinode)) {
3772 * We have read level caching and we have just sent a write
3773 * request to the server thus making data in the cache stale.
3774 * Zap the cache and set oplock/lease level to NONE to avoid
3775 * reading stale data from the cache. All subsequent read
3776 * operations will read new data from the server.
3778 cifs_zap_mapping(inode);
3779 cifs_dbg(FYI, "Set Oplock/Lease to NONE for inode=%p after write\n",
3784 cifs_put_writer(cinode);
3788 static struct cifs_readdata *cifs_readdata_alloc(work_func_t complete)
3790 struct cifs_readdata *rdata;
3792 rdata = kzalloc(sizeof(*rdata), GFP_KERNEL);
3794 kref_init(&rdata->refcount);
3795 INIT_LIST_HEAD(&rdata->list);
3796 init_completion(&rdata->done);
3797 INIT_WORK(&rdata->work, complete);
3804 cifs_readdata_release(struct kref *refcount)
3806 struct cifs_readdata *rdata = container_of(refcount,
3807 struct cifs_readdata, refcount);
3810 kref_put(&rdata->ctx->refcount, cifs_aio_ctx_release);
3811 #ifdef CONFIG_CIFS_SMB_DIRECT
3813 smbd_deregister_mr(rdata->mr);
3818 cifsFileInfo_put(rdata->cfile);
3823 static void collect_uncached_read_data(struct cifs_aio_ctx *ctx);
3826 cifs_uncached_readv_complete(struct work_struct *work)
3828 struct cifs_readdata *rdata = container_of(work,
3829 struct cifs_readdata, work);
3831 complete(&rdata->done);
3832 collect_uncached_read_data(rdata->ctx);
3833 /* the below call can possibly free the last ref to aio ctx */
3834 kref_put(&rdata->refcount, cifs_readdata_release);
3837 static int cifs_resend_rdata(struct cifs_readdata *rdata,
3838 struct list_head *rdata_list,
3839 struct cifs_aio_ctx *ctx)
3842 struct cifs_credits credits;
3844 struct TCP_Server_Info *server;
3846 /* XXX: should we pick a new channel here? */
3847 server = rdata->server;
3850 if (rdata->cfile->invalidHandle) {
3851 rc = cifs_reopen_file(rdata->cfile, true);
3859 * Wait for credits to resend this rdata.
3860 * Note: we are attempting to resend the whole rdata not in
3864 rc = server->ops->wait_mtu_credits(server, rdata->bytes,
3870 if (rsize < rdata->bytes) {
3871 add_credits_and_wake_if(server, &credits, 0);
3874 } while (rsize < rdata->bytes);
3875 rdata->credits = credits;
3877 rc = adjust_credits(server, &rdata->credits, rdata->bytes);
3879 if (rdata->cfile->invalidHandle)
3882 #ifdef CONFIG_CIFS_SMB_DIRECT
3884 rdata->mr->need_invalidate = true;
3885 smbd_deregister_mr(rdata->mr);
3889 rc = server->ops->async_readv(rdata);
3893 /* If the read was successfully sent, we are done */
3895 /* Add to aio pending list */
3896 list_add_tail(&rdata->list, rdata_list);
3900 /* Roll back credits and retry if needed */
3901 add_credits_and_wake_if(server, &rdata->credits, 0);
3902 } while (rc == -EAGAIN);
3905 kref_put(&rdata->refcount, cifs_readdata_release);
3910 cifs_send_async_read(loff_t fpos, size_t len, struct cifsFileInfo *open_file,
3911 struct cifs_sb_info *cifs_sb, struct list_head *rdata_list,
3912 struct cifs_aio_ctx *ctx)
3914 struct cifs_readdata *rdata;
3915 unsigned int rsize, nsegs, max_segs = INT_MAX;
3916 struct cifs_credits credits_on_stack;
3917 struct cifs_credits *credits = &credits_on_stack;
3918 size_t cur_len, max_len;
3921 struct TCP_Server_Info *server;
3923 server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses);
3925 #ifdef CONFIG_CIFS_SMB_DIRECT
3926 if (server->smbd_conn)
3927 max_segs = server->smbd_conn->max_frmr_depth;
3930 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
3931 pid = open_file->pid;
3933 pid = current->tgid;
3936 if (open_file->invalidHandle) {
3937 rc = cifs_reopen_file(open_file, true);
3944 if (cifs_sb->ctx->rsize == 0)
3945 cifs_sb->ctx->rsize =
3946 server->ops->negotiate_rsize(tlink_tcon(open_file->tlink),
3949 rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize,
3954 max_len = min_t(size_t, len, rsize);
3956 cur_len = cifs_limit_bvec_subset(&ctx->iter, max_len,
3958 cifs_dbg(FYI, "read-to-iter len=%zx/%zx nsegs=%u/%lu/%u\n",
3959 cur_len, max_len, nsegs, ctx->iter.nr_segs, max_segs);
3962 add_credits_and_wake_if(server, credits, 0);
3966 rdata = cifs_readdata_alloc(cifs_uncached_readv_complete);
3968 add_credits_and_wake_if(server, credits, 0);
3973 rdata->server = server;
3974 rdata->cfile = cifsFileInfo_get(open_file);
3975 rdata->offset = fpos;
3976 rdata->bytes = cur_len;
3978 rdata->credits = credits_on_stack;
3980 kref_get(&ctx->refcount);
3982 rdata->iter = ctx->iter;
3983 iov_iter_truncate(&rdata->iter, cur_len);
3985 rc = adjust_credits(server, &rdata->credits, rdata->bytes);
3988 if (rdata->cfile->invalidHandle)
3991 rc = server->ops->async_readv(rdata);
3995 add_credits_and_wake_if(server, &rdata->credits, 0);
3996 kref_put(&rdata->refcount, cifs_readdata_release);
4002 list_add_tail(&rdata->list, rdata_list);
4003 iov_iter_advance(&ctx->iter, cur_len);
4012 collect_uncached_read_data(struct cifs_aio_ctx *ctx)
4014 struct cifs_readdata *rdata, *tmp;
4015 struct cifs_sb_info *cifs_sb;
4018 cifs_sb = CIFS_SB(ctx->cfile->dentry->d_sb);
4020 mutex_lock(&ctx->aio_mutex);
4022 if (list_empty(&ctx->list)) {
4023 mutex_unlock(&ctx->aio_mutex);
4028 /* the loop below should proceed in the order of increasing offsets */
4030 list_for_each_entry_safe(rdata, tmp, &ctx->list, list) {
4032 if (!try_wait_for_completion(&rdata->done)) {
4033 mutex_unlock(&ctx->aio_mutex);
4037 if (rdata->result == -EAGAIN) {
4038 /* resend call if it's a retryable error */
4039 struct list_head tmp_list;
4040 unsigned int got_bytes = rdata->got_bytes;
4042 list_del_init(&rdata->list);
4043 INIT_LIST_HEAD(&tmp_list);
4045 if (ctx->direct_io) {
4047 * Re-use rdata as this is a
4050 rc = cifs_resend_rdata(
4054 rc = cifs_send_async_read(
4055 rdata->offset + got_bytes,
4056 rdata->bytes - got_bytes,
4057 rdata->cfile, cifs_sb,
4060 kref_put(&rdata->refcount,
4061 cifs_readdata_release);
4064 list_splice(&tmp_list, &ctx->list);
4067 } else if (rdata->result)
4070 /* if there was a short read -- discard anything left */
4071 if (rdata->got_bytes && rdata->got_bytes < rdata->bytes)
4074 ctx->total_len += rdata->got_bytes;
4076 list_del_init(&rdata->list);
4077 kref_put(&rdata->refcount, cifs_readdata_release);
4080 /* mask nodata case */
4084 ctx->rc = (rc == 0) ? (ssize_t)ctx->total_len : rc;
4086 mutex_unlock(&ctx->aio_mutex);
4088 if (ctx->iocb && ctx->iocb->ki_complete)
4089 ctx->iocb->ki_complete(ctx->iocb, ctx->rc);
4091 complete(&ctx->done);
4094 static ssize_t __cifs_readv(
4095 struct kiocb *iocb, struct iov_iter *to, bool direct)
4098 struct file *file = iocb->ki_filp;
4099 struct cifs_sb_info *cifs_sb;
4100 struct cifsFileInfo *cfile;
4101 struct cifs_tcon *tcon;
4102 ssize_t rc, total_read = 0;
4103 loff_t offset = iocb->ki_pos;
4104 struct cifs_aio_ctx *ctx;
4106 len = iov_iter_count(to);
4110 cifs_sb = CIFS_FILE_SB(file);
4111 cfile = file->private_data;
4112 tcon = tlink_tcon(cfile->tlink);
4114 if (!tcon->ses->server->ops->async_readv)
4117 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
4118 cifs_dbg(FYI, "attempting read on write only file instance\n");
4120 ctx = cifs_aio_ctx_alloc();
4125 ctx->direct_io = direct;
4127 ctx->cfile = cifsFileInfo_get(cfile);
4128 ctx->nr_pinned_pages = 0;
4130 if (!is_sync_kiocb(iocb))
4133 if (user_backed_iter(to)) {
4135 * Extract IOVEC/UBUF-type iterators to a BVEC-type iterator as
4136 * they contain references to the calling process's virtual
4137 * memory layout which won't be available in an async worker
4138 * thread. This also takes a pin on every folio involved.
4140 rc = netfs_extract_user_iter(to, iov_iter_count(to),
4143 kref_put(&ctx->refcount, cifs_aio_ctx_release);
4147 ctx->nr_pinned_pages = rc;
4148 ctx->bv = (void *)ctx->iter.bvec;
4149 ctx->bv_need_unpin = iov_iter_extract_will_pin(to);
4150 ctx->should_dirty = true;
4151 } else if ((iov_iter_is_bvec(to) || iov_iter_is_kvec(to)) &&
4152 !is_sync_kiocb(iocb)) {
4154 * If the op is asynchronous, we need to copy the list attached
4155 * to a BVEC/KVEC-type iterator, but we assume that the storage
4156 * will be retained by the caller; in any case, we may or may
4157 * not be able to pin the pages, so we don't try.
4159 ctx->bv = (void *)dup_iter(&ctx->iter, to, GFP_KERNEL);
4161 kref_put(&ctx->refcount, cifs_aio_ctx_release);
4166 * Otherwise, we just pass the iterator down as-is and rely on
4167 * the caller to make sure the pages referred to by the
4168 * iterator don't evaporate.
4174 rc = filemap_write_and_wait_range(file->f_inode->i_mapping,
4175 offset, offset + len - 1);
4177 kref_put(&ctx->refcount, cifs_aio_ctx_release);
4182 /* grab a lock here due to read response handlers can access ctx */
4183 mutex_lock(&ctx->aio_mutex);
4185 rc = cifs_send_async_read(offset, len, cfile, cifs_sb, &ctx->list, ctx);
4187 /* if at least one read request send succeeded, then reset rc */
4188 if (!list_empty(&ctx->list))
4191 mutex_unlock(&ctx->aio_mutex);
4194 kref_put(&ctx->refcount, cifs_aio_ctx_release);
4198 if (!is_sync_kiocb(iocb)) {
4199 kref_put(&ctx->refcount, cifs_aio_ctx_release);
4200 return -EIOCBQUEUED;
4203 rc = wait_for_completion_killable(&ctx->done);
4205 mutex_lock(&ctx->aio_mutex);
4206 ctx->rc = rc = -EINTR;
4207 total_read = ctx->total_len;
4208 mutex_unlock(&ctx->aio_mutex);
4211 total_read = ctx->total_len;
4214 kref_put(&ctx->refcount, cifs_aio_ctx_release);
4217 iocb->ki_pos += total_read;
4223 ssize_t cifs_direct_readv(struct kiocb *iocb, struct iov_iter *to)
4225 return __cifs_readv(iocb, to, true);
4228 ssize_t cifs_user_readv(struct kiocb *iocb, struct iov_iter *to)
4230 return __cifs_readv(iocb, to, false);
4234 cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to)
4236 struct inode *inode = file_inode(iocb->ki_filp);
4237 struct cifsInodeInfo *cinode = CIFS_I(inode);
4238 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
4239 struct cifsFileInfo *cfile = (struct cifsFileInfo *)
4240 iocb->ki_filp->private_data;
4241 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
4245 * In strict cache mode we need to read from the server all the time
4246 * if we don't have level II oplock because the server can delay mtime
4247 * change - so we can't make a decision about inode invalidating.
4248 * And we can also fail with pagereading if there are mandatory locks
4249 * on pages affected by this read but not on the region from pos to
4252 if (!CIFS_CACHE_READ(cinode))
4253 return cifs_user_readv(iocb, to);
4255 if (cap_unix(tcon->ses) &&
4256 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
4257 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
4258 return generic_file_read_iter(iocb, to);
4261 * We need to hold the sem to be sure nobody modifies lock list
4262 * with a brlock that prevents reading.
4264 down_read(&cinode->lock_sem);
4265 if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(to),
4266 tcon->ses->server->vals->shared_lock_type,
4267 0, NULL, CIFS_READ_OP))
4268 rc = generic_file_read_iter(iocb, to);
4269 up_read(&cinode->lock_sem);
4274 cifs_read(struct file *file, char *read_data, size_t read_size, loff_t *offset)
4277 unsigned int bytes_read = 0;
4278 unsigned int total_read;
4279 unsigned int current_read_size;
4281 struct cifs_sb_info *cifs_sb;
4282 struct cifs_tcon *tcon;
4283 struct TCP_Server_Info *server;
4286 struct cifsFileInfo *open_file;
4287 struct cifs_io_parms io_parms = {0};
4288 int buf_type = CIFS_NO_BUFFER;
4292 cifs_sb = CIFS_FILE_SB(file);
4294 /* FIXME: set up handlers for larger reads and/or convert to async */
4295 rsize = min_t(unsigned int, cifs_sb->ctx->rsize, CIFSMaxBufSize);
4297 if (file->private_data == NULL) {
4302 open_file = file->private_data;
4303 tcon = tlink_tcon(open_file->tlink);
4304 server = cifs_pick_channel(tcon->ses);
4306 if (!server->ops->sync_read) {
4311 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
4312 pid = open_file->pid;
4314 pid = current->tgid;
4316 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
4317 cifs_dbg(FYI, "attempting read on write only file instance\n");
4319 for (total_read = 0, cur_offset = read_data; read_size > total_read;
4320 total_read += bytes_read, cur_offset += bytes_read) {
4322 current_read_size = min_t(uint, read_size - total_read,
4325 * For windows me and 9x we do not want to request more
4326 * than it negotiated since it will refuse the read
4329 if (!(tcon->ses->capabilities &
4330 tcon->ses->server->vals->cap_large_files)) {
4331 current_read_size = min_t(uint,
4332 current_read_size, CIFSMaxBufSize);
4334 if (open_file->invalidHandle) {
4335 rc = cifs_reopen_file(open_file, true);
4340 io_parms.tcon = tcon;
4341 io_parms.offset = *offset;
4342 io_parms.length = current_read_size;
4343 io_parms.server = server;
4344 rc = server->ops->sync_read(xid, &open_file->fid, &io_parms,
4345 &bytes_read, &cur_offset,
4347 } while (rc == -EAGAIN);
4349 if (rc || (bytes_read == 0)) {
4357 cifs_stats_bytes_read(tcon, total_read);
4358 *offset += bytes_read;
4366 * If the page is mmap'ed into a process' page tables, then we need to make
4367 * sure that it doesn't change while being written back.
4369 static vm_fault_t cifs_page_mkwrite(struct vm_fault *vmf)
4371 struct folio *folio = page_folio(vmf->page);
4373 /* Wait for the folio to be written to the cache before we allow it to
4374 * be modified. We then assume the entire folio will need writing back.
4376 #ifdef CONFIG_CIFS_FSCACHE
4377 if (folio_test_fscache(folio) &&
4378 folio_wait_fscache_killable(folio) < 0)
4379 return VM_FAULT_RETRY;
4382 folio_wait_writeback(folio);
4384 if (folio_lock_killable(folio) < 0)
4385 return VM_FAULT_RETRY;
4386 return VM_FAULT_LOCKED;
4389 static const struct vm_operations_struct cifs_file_vm_ops = {
4390 .fault = filemap_fault,
4391 .map_pages = filemap_map_pages,
4392 .page_mkwrite = cifs_page_mkwrite,
4395 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
4398 struct inode *inode = file_inode(file);
4402 if (!CIFS_CACHE_READ(CIFS_I(inode)))
4403 rc = cifs_zap_mapping(inode);
4405 rc = generic_file_mmap(file, vma);
4407 vma->vm_ops = &cifs_file_vm_ops;
4413 int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
4419 rc = cifs_revalidate_file(file);
4421 cifs_dbg(FYI, "Validation prior to mmap failed, error=%d\n",
4424 rc = generic_file_mmap(file, vma);
4426 vma->vm_ops = &cifs_file_vm_ops;
4433 * Unlock a bunch of folios in the pagecache.
4435 static void cifs_unlock_folios(struct address_space *mapping, pgoff_t first, pgoff_t last)
4437 struct folio *folio;
4438 XA_STATE(xas, &mapping->i_pages, first);
4441 xas_for_each(&xas, folio, last) {
4442 folio_unlock(folio);
4447 static void cifs_readahead_complete(struct work_struct *work)
4449 struct cifs_readdata *rdata = container_of(work,
4450 struct cifs_readdata, work);
4451 struct folio *folio;
4453 bool good = rdata->result == 0 || (rdata->result == -EAGAIN && rdata->got_bytes);
4455 XA_STATE(xas, &rdata->mapping->i_pages, rdata->offset / PAGE_SIZE);
4458 cifs_readahead_to_fscache(rdata->mapping->host,
4459 rdata->offset, rdata->bytes);
4461 if (iov_iter_count(&rdata->iter) > 0)
4462 iov_iter_zero(iov_iter_count(&rdata->iter), &rdata->iter);
4464 last = (rdata->offset + rdata->bytes - 1) / PAGE_SIZE;
4467 xas_for_each(&xas, folio, last) {
4469 flush_dcache_folio(folio);
4470 folio_mark_uptodate(folio);
4472 folio_unlock(folio);
4476 kref_put(&rdata->refcount, cifs_readdata_release);
4479 static void cifs_readahead(struct readahead_control *ractl)
4481 struct cifsFileInfo *open_file = ractl->file->private_data;
4482 struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(ractl->file);
4483 struct TCP_Server_Info *server;
4484 unsigned int xid, nr_pages, cache_nr_pages = 0;
4485 unsigned int ra_pages;
4486 pgoff_t next_cached = ULONG_MAX, ra_index;
4487 bool caching = fscache_cookie_enabled(cifs_inode_cookie(ractl->mapping->host)) &&
4488 cifs_inode_cookie(ractl->mapping->host)->cache_priv;
4489 bool check_cache = caching;
4493 /* Note that readahead_count() lags behind our dequeuing of pages from
4494 * the ractl, wo we have to keep track for ourselves.
4496 ra_pages = readahead_count(ractl);
4497 ra_index = readahead_index(ractl);
4501 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
4502 pid = open_file->pid;
4504 pid = current->tgid;
4506 server = cifs_pick_channel(tlink_tcon(open_file->tlink)->ses);
4508 cifs_dbg(FYI, "%s: file=%p mapping=%p num_pages=%u\n",
4509 __func__, ractl->file, ractl->mapping, ra_pages);
4512 * Chop the readahead request up into rsize-sized read requests.
4514 while ((nr_pages = ra_pages)) {
4515 unsigned int i, rsize;
4516 struct cifs_readdata *rdata;
4517 struct cifs_credits credits_on_stack;
4518 struct cifs_credits *credits = &credits_on_stack;
4519 struct folio *folio;
4523 * Find out if we have anything cached in the range of
4524 * interest, and if so, where the next chunk of cached data is.
4528 rc = cifs_fscache_query_occupancy(
4529 ractl->mapping->host, ra_index, nr_pages,
4530 &next_cached, &cache_nr_pages);
4533 check_cache = false;
4536 if (ra_index == next_cached) {
4538 * TODO: Send a whole batch of pages to be read
4541 folio = readahead_folio(ractl);
4542 fsize = folio_nr_pages(folio);
4545 if (cifs_readpage_from_fscache(ractl->mapping->host,
4546 &folio->page) < 0) {
4548 * TODO: Deal with cache read failure
4549 * here, but for the moment, delegate
4554 folio_unlock(folio);
4555 next_cached += fsize;
4556 cache_nr_pages -= fsize;
4557 if (cache_nr_pages == 0)
4563 if (open_file->invalidHandle) {
4564 rc = cifs_reopen_file(open_file, true);
4572 if (cifs_sb->ctx->rsize == 0)
4573 cifs_sb->ctx->rsize =
4574 server->ops->negotiate_rsize(tlink_tcon(open_file->tlink),
4577 rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize,
4581 nr_pages = min_t(size_t, rsize / PAGE_SIZE, ra_pages);
4582 if (next_cached != ULONG_MAX)
4583 nr_pages = min_t(size_t, nr_pages, next_cached - ra_index);
4586 * Give up immediately if rsize is too small to read an entire
4587 * page. The VFS will fall back to readpage. We should never
4588 * reach this point however since we set ra_pages to 0 when the
4589 * rsize is smaller than a cache page.
4591 if (unlikely(!nr_pages)) {
4592 add_credits_and_wake_if(server, credits, 0);
4596 rdata = cifs_readdata_alloc(cifs_readahead_complete);
4598 /* best to give up if we're out of mem */
4599 add_credits_and_wake_if(server, credits, 0);
4603 rdata->offset = ra_index * PAGE_SIZE;
4604 rdata->bytes = nr_pages * PAGE_SIZE;
4605 rdata->cfile = cifsFileInfo_get(open_file);
4606 rdata->server = server;
4607 rdata->mapping = ractl->mapping;
4609 rdata->credits = credits_on_stack;
4611 for (i = 0; i < nr_pages; i++) {
4612 if (!readahead_folio(ractl))
4615 ra_pages -= nr_pages;
4616 ra_index += nr_pages;
4618 iov_iter_xarray(&rdata->iter, ITER_DEST, &rdata->mapping->i_pages,
4619 rdata->offset, rdata->bytes);
4621 rc = adjust_credits(server, &rdata->credits, rdata->bytes);
4623 if (rdata->cfile->invalidHandle)
4626 rc = server->ops->async_readv(rdata);
4630 add_credits_and_wake_if(server, &rdata->credits, 0);
4631 cifs_unlock_folios(rdata->mapping,
4632 rdata->offset / PAGE_SIZE,
4633 (rdata->offset + rdata->bytes - 1) / PAGE_SIZE);
4634 /* Fallback to the readpage in error/reconnect cases */
4635 kref_put(&rdata->refcount, cifs_readdata_release);
4639 kref_put(&rdata->refcount, cifs_readdata_release);
4646 * cifs_readpage_worker must be called with the page pinned
4648 static int cifs_readpage_worker(struct file *file, struct page *page,
4651 struct inode *inode = file_inode(file);
4652 struct timespec64 atime, mtime;
4656 /* Is the page cached? */
4657 rc = cifs_readpage_from_fscache(inode, page);
4661 read_data = kmap(page);
4662 /* for reads over a certain size could initiate async read ahead */
4664 rc = cifs_read(file, read_data, PAGE_SIZE, poffset);
4669 cifs_dbg(FYI, "Bytes read %d\n", rc);
4671 /* we do not want atime to be less than mtime, it broke some apps */
4672 atime = inode_set_atime_to_ts(inode, current_time(inode));
4673 mtime = inode_get_mtime(inode);
4674 if (timespec64_compare(&atime, &mtime))
4675 inode_set_atime_to_ts(inode, inode_get_mtime(inode));
4678 memset(read_data + rc, 0, PAGE_SIZE - rc);
4680 flush_dcache_page(page);
4681 SetPageUptodate(page);
4692 static int cifs_read_folio(struct file *file, struct folio *folio)
4694 struct page *page = &folio->page;
4695 loff_t offset = page_file_offset(page);
4701 if (file->private_data == NULL) {
4707 cifs_dbg(FYI, "read_folio %p at offset %d 0x%x\n",
4708 page, (int)offset, (int)offset);
4710 rc = cifs_readpage_worker(file, page, &offset);
4716 static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
4718 struct cifsFileInfo *open_file;
4720 spin_lock(&cifs_inode->open_file_lock);
4721 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
4722 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
4723 spin_unlock(&cifs_inode->open_file_lock);
4727 spin_unlock(&cifs_inode->open_file_lock);
4731 /* We do not want to update the file size from server for inodes
4732 open for write - to avoid races with writepage extending
4733 the file - in the future we could consider allowing
4734 refreshing the inode only on increases in the file size
4735 but this is tricky to do without racing with writebehind
4736 page caching in the current Linux kernel design */
4737 bool is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file)
4742 if (is_inode_writable(cifsInode)) {
4743 /* This inode is open for write at least once */
4744 struct cifs_sb_info *cifs_sb;
4746 cifs_sb = CIFS_SB(cifsInode->netfs.inode.i_sb);
4747 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO) {
4748 /* since no page cache to corrupt on directio
4749 we can change size safely */
4753 if (i_size_read(&cifsInode->netfs.inode) < end_of_file)
4761 static int cifs_write_begin(struct file *file, struct address_space *mapping,
4762 loff_t pos, unsigned len,
4763 struct page **pagep, void **fsdata)
4766 pgoff_t index = pos >> PAGE_SHIFT;
4767 loff_t offset = pos & (PAGE_SIZE - 1);
4768 loff_t page_start = pos & PAGE_MASK;
4773 cifs_dbg(FYI, "write_begin from %lld len %d\n", (long long)pos, len);
4776 page = grab_cache_page_write_begin(mapping, index);
4782 if (PageUptodate(page))
4786 * If we write a full page it will be up to date, no need to read from
4787 * the server. If the write is short, we'll end up doing a sync write
4790 if (len == PAGE_SIZE)
4794 * optimize away the read when we have an oplock, and we're not
4795 * expecting to use any of the data we'd be reading in. That
4796 * is, when the page lies beyond the EOF, or straddles the EOF
4797 * and the write will cover all of the existing data.
4799 if (CIFS_CACHE_READ(CIFS_I(mapping->host))) {
4800 i_size = i_size_read(mapping->host);
4801 if (page_start >= i_size ||
4802 (offset == 0 && (pos + len) >= i_size)) {
4803 zero_user_segments(page, 0, offset,
4807 * PageChecked means that the parts of the page
4808 * to which we're not writing are considered up
4809 * to date. Once the data is copied to the
4810 * page, it can be set uptodate.
4812 SetPageChecked(page);
4817 if ((file->f_flags & O_ACCMODE) != O_WRONLY && !oncethru) {
4819 * might as well read a page, it is fast enough. If we get
4820 * an error, we don't need to return it. cifs_write_end will
4821 * do a sync write instead since PG_uptodate isn't set.
4823 cifs_readpage_worker(file, page, &page_start);
4828 /* we could try using another file handle if there is one -
4829 but how would we lock it to prevent close of that handle
4830 racing with this read? In any case
4831 this will be written out by write_end so is fine */
4838 static bool cifs_release_folio(struct folio *folio, gfp_t gfp)
4840 if (folio_test_private(folio))
4842 if (folio_test_fscache(folio)) {
4843 if (current_is_kswapd() || !(gfp & __GFP_FS))
4845 folio_wait_fscache(folio);
4847 fscache_note_page_release(cifs_inode_cookie(folio->mapping->host));
4851 static void cifs_invalidate_folio(struct folio *folio, size_t offset,
4854 folio_wait_fscache(folio);
4857 static int cifs_launder_folio(struct folio *folio)
4860 loff_t range_start = folio_pos(folio);
4861 loff_t range_end = range_start + folio_size(folio);
4862 struct writeback_control wbc = {
4863 .sync_mode = WB_SYNC_ALL,
4865 .range_start = range_start,
4866 .range_end = range_end,
4869 cifs_dbg(FYI, "Launder page: %lu\n", folio->index);
4871 if (folio_clear_dirty_for_io(folio))
4872 rc = cifs_writepage_locked(&folio->page, &wbc);
4874 folio_wait_fscache(folio);
4878 void cifs_oplock_break(struct work_struct *work)
4880 struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
4882 struct inode *inode = d_inode(cfile->dentry);
4883 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
4884 struct cifsInodeInfo *cinode = CIFS_I(inode);
4885 struct cifs_tcon *tcon;
4886 struct TCP_Server_Info *server;
4887 struct tcon_link *tlink;
4889 bool purge_cache = false, oplock_break_cancelled;
4890 __u64 persistent_fid, volatile_fid;
4893 wait_on_bit(&cinode->flags, CIFS_INODE_PENDING_WRITERS,
4894 TASK_UNINTERRUPTIBLE);
4896 tlink = cifs_sb_tlink(cifs_sb);
4899 tcon = tlink_tcon(tlink);
4900 server = tcon->ses->server;
4902 server->ops->downgrade_oplock(server, cinode, cfile->oplock_level,
4903 cfile->oplock_epoch, &purge_cache);
4905 if (!CIFS_CACHE_WRITE(cinode) && CIFS_CACHE_READ(cinode) &&
4906 cifs_has_mand_locks(cinode)) {
4907 cifs_dbg(FYI, "Reset oplock to None for inode=%p due to mand locks\n",
4912 if (inode && S_ISREG(inode->i_mode)) {
4913 if (CIFS_CACHE_READ(cinode))
4914 break_lease(inode, O_RDONLY);
4916 break_lease(inode, O_WRONLY);
4917 rc = filemap_fdatawrite(inode->i_mapping);
4918 if (!CIFS_CACHE_READ(cinode) || purge_cache) {
4919 rc = filemap_fdatawait(inode->i_mapping);
4920 mapping_set_error(inode->i_mapping, rc);
4921 cifs_zap_mapping(inode);
4923 cifs_dbg(FYI, "Oplock flush inode %p rc %d\n", inode, rc);
4924 if (CIFS_CACHE_WRITE(cinode))
4925 goto oplock_break_ack;
4928 rc = cifs_push_locks(cfile);
4930 cifs_dbg(VFS, "Push locks rc = %d\n", rc);
4934 * When oplock break is received and there are no active
4935 * file handles but cached, then schedule deferred close immediately.
4936 * So, new open will not use cached handle.
4939 if (!CIFS_CACHE_HANDLE(cinode) && !list_empty(&cinode->deferred_closes))
4940 cifs_close_deferred_file(cinode);
4942 persistent_fid = cfile->fid.persistent_fid;
4943 volatile_fid = cfile->fid.volatile_fid;
4944 net_fid = cfile->fid.netfid;
4945 oplock_break_cancelled = cfile->oplock_break_cancelled;
4947 _cifsFileInfo_put(cfile, false /* do not wait for ourself */, false);
4949 * MS-SMB2 3.2.5.19.1 and 3.2.5.19.2 (and MS-CIFS 3.2.5.42) do not require
4950 * an acknowledgment to be sent when the file has already been closed.
4952 spin_lock(&cinode->open_file_lock);
4953 /* check list empty since can race with kill_sb calling tree disconnect */
4954 if (!oplock_break_cancelled && !list_empty(&cinode->openFileList)) {
4955 spin_unlock(&cinode->open_file_lock);
4956 rc = server->ops->oplock_response(tcon, persistent_fid,
4957 volatile_fid, net_fid, cinode);
4958 cifs_dbg(FYI, "Oplock release rc = %d\n", rc);
4960 spin_unlock(&cinode->open_file_lock);
4962 cifs_put_tlink(tlink);
4964 cifs_done_oplock_break(cinode);
4968 * The presence of cifs_direct_io() in the address space ops vector
4969 * allowes open() O_DIRECT flags which would have failed otherwise.
4971 * In the non-cached mode (mount with cache=none), we shunt off direct read and write requests
4972 * so this method should never be called.
4974 * Direct IO is not yet supported in the cached mode.
4977 cifs_direct_io(struct kiocb *iocb, struct iov_iter *iter)
4981 * Eventually need to support direct IO for non forcedirectio mounts
4986 static int cifs_swap_activate(struct swap_info_struct *sis,
4987 struct file *swap_file, sector_t *span)
4989 struct cifsFileInfo *cfile = swap_file->private_data;
4990 struct inode *inode = swap_file->f_mapping->host;
4991 unsigned long blocks;
4994 cifs_dbg(FYI, "swap activate\n");
4996 if (!swap_file->f_mapping->a_ops->swap_rw)
4997 /* Cannot support swap */
5000 spin_lock(&inode->i_lock);
5001 blocks = inode->i_blocks;
5002 isize = inode->i_size;
5003 spin_unlock(&inode->i_lock);
5004 if (blocks*512 < isize) {
5005 pr_warn("swap activate: swapfile has holes\n");
5010 pr_warn_once("Swap support over SMB3 is experimental\n");
5013 * TODO: consider adding ACL (or documenting how) to prevent other
5014 * users (on this or other systems) from reading it
5018 /* TODO: add sk_set_memalloc(inet) or similar */
5021 cfile->swapfile = true;
5023 * TODO: Since file already open, we can't open with DENY_ALL here
5024 * but we could add call to grab a byte range lock to prevent others
5025 * from reading or writing the file
5028 sis->flags |= SWP_FS_OPS;
5029 return add_swap_extent(sis, 0, sis->max, 0);
5032 static void cifs_swap_deactivate(struct file *file)
5034 struct cifsFileInfo *cfile = file->private_data;
5036 cifs_dbg(FYI, "swap deactivate\n");
5038 /* TODO: undo sk_set_memalloc(inet) will eventually be needed */
5041 cfile->swapfile = false;
5043 /* do we need to unpin (or unlock) the file */
5047 * Mark a page as having been made dirty and thus needing writeback. We also
5048 * need to pin the cache object to write back to.
5050 #ifdef CONFIG_CIFS_FSCACHE
5051 static bool cifs_dirty_folio(struct address_space *mapping, struct folio *folio)
5053 return fscache_dirty_folio(mapping, folio,
5054 cifs_inode_cookie(mapping->host));
5057 #define cifs_dirty_folio filemap_dirty_folio
5060 const struct address_space_operations cifs_addr_ops = {
5061 .read_folio = cifs_read_folio,
5062 .readahead = cifs_readahead,
5063 .writepages = cifs_writepages,
5064 .write_begin = cifs_write_begin,
5065 .write_end = cifs_write_end,
5066 .dirty_folio = cifs_dirty_folio,
5067 .release_folio = cifs_release_folio,
5068 .direct_IO = cifs_direct_io,
5069 .invalidate_folio = cifs_invalidate_folio,
5070 .launder_folio = cifs_launder_folio,
5071 .migrate_folio = filemap_migrate_folio,
5073 * TODO: investigate and if useful we could add an is_dirty_writeback
5076 .swap_activate = cifs_swap_activate,
5077 .swap_deactivate = cifs_swap_deactivate,
5081 * cifs_readahead requires the server to support a buffer large enough to
5082 * contain the header plus one complete page of data. Otherwise, we need
5083 * to leave cifs_readahead out of the address space operations.
5085 const struct address_space_operations cifs_addr_ops_smallbuf = {
5086 .read_folio = cifs_read_folio,
5087 .writepages = cifs_writepages,
5088 .write_begin = cifs_write_begin,
5089 .write_end = cifs_write_end,
5090 .dirty_folio = cifs_dirty_folio,
5091 .release_folio = cifs_release_folio,
5092 .invalidate_folio = cifs_invalidate_folio,
5093 .launder_folio = cifs_launder_folio,
5094 .migrate_folio = filemap_migrate_folio,