4 * vfs operations that deal with files
6 * Copyright (C) International Business Machines Corp., 2002,2010
10 * This library is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU Lesser General Public License as published
12 * by the Free Software Foundation; either version 2.1 of the License, or
13 * (at your option) any later version.
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
18 * the GNU Lesser General Public License for more details.
20 * You should have received a copy of the GNU Lesser General Public License
21 * along with this library; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include <linux/backing-dev.h>
26 #include <linux/stat.h>
27 #include <linux/fcntl.h>
28 #include <linux/pagemap.h>
29 #include <linux/pagevec.h>
30 #include <linux/writeback.h>
31 #include <linux/task_io_accounting_ops.h>
32 #include <linux/delay.h>
33 #include <linux/mount.h>
34 #include <linux/slab.h>
35 #include <linux/swap.h>
37 #include <asm/div64.h>
41 #include "cifsproto.h"
42 #include "cifs_unicode.h"
43 #include "cifs_debug.h"
44 #include "cifs_fs_sb.h"
46 #include "smbdirect.h"
48 static inline int cifs_convert_flags(unsigned int flags)
50 if ((flags & O_ACCMODE) == O_RDONLY)
52 else if ((flags & O_ACCMODE) == O_WRONLY)
54 else if ((flags & O_ACCMODE) == O_RDWR) {
55 /* GENERIC_ALL is too much permission to request
56 can cause unnecessary access denied on create */
57 /* return GENERIC_ALL; */
58 return (GENERIC_READ | GENERIC_WRITE);
61 return (READ_CONTROL | FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES |
62 FILE_WRITE_EA | FILE_APPEND_DATA | FILE_WRITE_DATA |
66 static u32 cifs_posix_convert_flags(unsigned int flags)
70 if ((flags & O_ACCMODE) == O_RDONLY)
71 posix_flags = SMB_O_RDONLY;
72 else if ((flags & O_ACCMODE) == O_WRONLY)
73 posix_flags = SMB_O_WRONLY;
74 else if ((flags & O_ACCMODE) == O_RDWR)
75 posix_flags = SMB_O_RDWR;
77 if (flags & O_CREAT) {
78 posix_flags |= SMB_O_CREAT;
80 posix_flags |= SMB_O_EXCL;
81 } else if (flags & O_EXCL)
82 cifs_dbg(FYI, "Application %s pid %d has incorrectly set O_EXCL flag but not O_CREAT on file open. Ignoring O_EXCL\n",
83 current->comm, current->tgid);
86 posix_flags |= SMB_O_TRUNC;
87 /* be safe and imply O_SYNC for O_DSYNC */
89 posix_flags |= SMB_O_SYNC;
90 if (flags & O_DIRECTORY)
91 posix_flags |= SMB_O_DIRECTORY;
92 if (flags & O_NOFOLLOW)
93 posix_flags |= SMB_O_NOFOLLOW;
95 posix_flags |= SMB_O_DIRECT;
100 static inline int cifs_get_disposition(unsigned int flags)
102 if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
104 else if ((flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
105 return FILE_OVERWRITE_IF;
106 else if ((flags & O_CREAT) == O_CREAT)
108 else if ((flags & O_TRUNC) == O_TRUNC)
109 return FILE_OVERWRITE;
114 int cifs_posix_open(char *full_path, struct inode **pinode,
115 struct super_block *sb, int mode, unsigned int f_flags,
116 __u32 *poplock, __u16 *pnetfid, unsigned int xid)
119 FILE_UNIX_BASIC_INFO *presp_data;
120 __u32 posix_flags = 0;
121 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
122 struct cifs_fattr fattr;
123 struct tcon_link *tlink;
124 struct cifs_tcon *tcon;
126 cifs_dbg(FYI, "posix open %s\n", full_path);
128 presp_data = kzalloc(sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL);
129 if (presp_data == NULL)
132 tlink = cifs_sb_tlink(cifs_sb);
138 tcon = tlink_tcon(tlink);
139 mode &= ~current_umask();
141 posix_flags = cifs_posix_convert_flags(f_flags);
142 rc = CIFSPOSIXCreate(xid, tcon, posix_flags, mode, pnetfid, presp_data,
143 poplock, full_path, cifs_sb->local_nls,
144 cifs_remap(cifs_sb));
145 cifs_put_tlink(tlink);
150 if (presp_data->Type == cpu_to_le32(-1))
151 goto posix_open_ret; /* open ok, caller does qpathinfo */
154 goto posix_open_ret; /* caller does not need info */
156 cifs_unix_basic_to_fattr(&fattr, presp_data, cifs_sb);
158 /* get new inode and set it up */
159 if (*pinode == NULL) {
160 cifs_fill_uniqueid(sb, &fattr);
161 *pinode = cifs_iget(sb, &fattr);
167 cifs_fattr_to_inode(*pinode, &fattr);
176 cifs_nt_open(char *full_path, struct inode *inode, struct cifs_sb_info *cifs_sb,
177 struct cifs_tcon *tcon, unsigned int f_flags, __u32 *oplock,
178 struct cifs_fid *fid, unsigned int xid)
183 int create_options = CREATE_NOT_DIR;
185 struct TCP_Server_Info *server = tcon->ses->server;
186 struct cifs_open_parms oparms;
188 if (!server->ops->open)
191 desired_access = cifs_convert_flags(f_flags);
193 /*********************************************************************
194 * open flag mapping table:
196 * POSIX Flag CIFS Disposition
197 * ---------- ----------------
198 * O_CREAT FILE_OPEN_IF
199 * O_CREAT | O_EXCL FILE_CREATE
200 * O_CREAT | O_TRUNC FILE_OVERWRITE_IF
201 * O_TRUNC FILE_OVERWRITE
202 * none of the above FILE_OPEN
204 * Note that there is not a direct match between disposition
205 * FILE_SUPERSEDE (ie create whether or not file exists although
206 * O_CREAT | O_TRUNC is similar but truncates the existing
207 * file rather than creating a new file as FILE_SUPERSEDE does
208 * (which uses the attributes / metadata passed in on open call)
210 *? O_SYNC is a reasonable match to CIFS writethrough flag
211 *? and the read write flags match reasonably. O_LARGEFILE
212 *? is irrelevant because largefile support is always used
213 *? by this client. Flags O_APPEND, O_DIRECT, O_DIRECTORY,
214 * O_FASYNC, O_NOFOLLOW, O_NONBLOCK need further investigation
215 *********************************************************************/
217 disposition = cifs_get_disposition(f_flags);
219 /* BB pass O_SYNC flag through on file attributes .. BB */
221 buf = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
225 if (backup_cred(cifs_sb))
226 create_options |= CREATE_OPEN_BACKUP_INTENT;
228 /* O_SYNC also has bit for O_DSYNC so following check picks up either */
229 if (f_flags & O_SYNC)
230 create_options |= CREATE_WRITE_THROUGH;
232 if (f_flags & O_DIRECT)
233 create_options |= CREATE_NO_BUFFER;
236 oparms.cifs_sb = cifs_sb;
237 oparms.desired_access = desired_access;
238 oparms.create_options = create_options;
239 oparms.disposition = disposition;
240 oparms.path = full_path;
242 oparms.reconnect = false;
244 rc = server->ops->open(xid, &oparms, oplock, buf);
250 rc = cifs_get_inode_info_unix(&inode, full_path, inode->i_sb,
253 rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb,
262 cifs_has_mand_locks(struct cifsInodeInfo *cinode)
264 struct cifs_fid_locks *cur;
265 bool has_locks = false;
267 down_read(&cinode->lock_sem);
268 list_for_each_entry(cur, &cinode->llist, llist) {
269 if (!list_empty(&cur->locks)) {
274 up_read(&cinode->lock_sem);
278 struct cifsFileInfo *
279 cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
280 struct tcon_link *tlink, __u32 oplock)
282 struct dentry *dentry = file_dentry(file);
283 struct inode *inode = d_inode(dentry);
284 struct cifsInodeInfo *cinode = CIFS_I(inode);
285 struct cifsFileInfo *cfile;
286 struct cifs_fid_locks *fdlocks;
287 struct cifs_tcon *tcon = tlink_tcon(tlink);
288 struct TCP_Server_Info *server = tcon->ses->server;
290 cfile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
294 fdlocks = kzalloc(sizeof(struct cifs_fid_locks), GFP_KERNEL);
300 INIT_LIST_HEAD(&fdlocks->locks);
301 fdlocks->cfile = cfile;
302 cfile->llist = fdlocks;
303 down_write(&cinode->lock_sem);
304 list_add(&fdlocks->llist, &cinode->llist);
305 up_write(&cinode->lock_sem);
308 cfile->pid = current->tgid;
309 cfile->uid = current_fsuid();
310 cfile->dentry = dget(dentry);
311 cfile->f_flags = file->f_flags;
312 cfile->invalidHandle = false;
313 cfile->tlink = cifs_get_tlink(tlink);
314 INIT_WORK(&cfile->oplock_break, cifs_oplock_break);
315 mutex_init(&cfile->fh_mutex);
316 spin_lock_init(&cfile->file_info_lock);
318 cifs_sb_active(inode->i_sb);
321 * If the server returned a read oplock and we have mandatory brlocks,
322 * set oplock level to None.
324 if (server->ops->is_read_op(oplock) && cifs_has_mand_locks(cinode)) {
325 cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n");
329 spin_lock(&tcon->open_file_lock);
330 if (fid->pending_open->oplock != CIFS_OPLOCK_NO_CHANGE && oplock)
331 oplock = fid->pending_open->oplock;
332 list_del(&fid->pending_open->olist);
334 fid->purge_cache = false;
335 server->ops->set_fid(cfile, fid, oplock);
337 list_add(&cfile->tlist, &tcon->openFileList);
338 atomic_inc(&tcon->num_local_opens);
340 /* if readable file instance put first in list*/
341 spin_lock(&cinode->open_file_lock);
342 if (file->f_mode & FMODE_READ)
343 list_add(&cfile->flist, &cinode->openFileList);
345 list_add_tail(&cfile->flist, &cinode->openFileList);
346 spin_unlock(&cinode->open_file_lock);
347 spin_unlock(&tcon->open_file_lock);
349 if (fid->purge_cache)
350 cifs_zap_mapping(inode);
352 file->private_data = cfile;
356 struct cifsFileInfo *
357 cifsFileInfo_get(struct cifsFileInfo *cifs_file)
359 spin_lock(&cifs_file->file_info_lock);
360 cifsFileInfo_get_locked(cifs_file);
361 spin_unlock(&cifs_file->file_info_lock);
366 * cifsFileInfo_put - release a reference of file priv data
368 * Always potentially wait for oplock handler. See _cifsFileInfo_put().
370 void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
372 _cifsFileInfo_put(cifs_file, true);
376 * _cifsFileInfo_put - release a reference of file priv data
378 * This may involve closing the filehandle @cifs_file out on the
379 * server. Must be called without holding tcon->open_file_lock and
380 * cifs_file->file_info_lock.
382 * If @wait_for_oplock_handler is true and we are releasing the last
383 * reference, wait for any running oplock break handler of the file
384 * and cancel any pending one. If calling this function from the
385 * oplock break handler, you need to pass false.
388 void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, bool wait_oplock_handler)
390 struct inode *inode = d_inode(cifs_file->dentry);
391 struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
392 struct TCP_Server_Info *server = tcon->ses->server;
393 struct cifsInodeInfo *cifsi = CIFS_I(inode);
394 struct super_block *sb = inode->i_sb;
395 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
396 struct cifsLockInfo *li, *tmp;
398 struct cifs_pending_open open;
399 bool oplock_break_cancelled;
401 spin_lock(&tcon->open_file_lock);
403 spin_lock(&cifs_file->file_info_lock);
404 if (--cifs_file->count > 0) {
405 spin_unlock(&cifs_file->file_info_lock);
406 spin_unlock(&tcon->open_file_lock);
409 spin_unlock(&cifs_file->file_info_lock);
411 if (server->ops->get_lease_key)
412 server->ops->get_lease_key(inode, &fid);
414 /* store open in pending opens to make sure we don't miss lease break */
415 cifs_add_pending_open_locked(&fid, cifs_file->tlink, &open);
417 /* remove it from the lists */
418 spin_lock(&cifsi->open_file_lock);
419 list_del(&cifs_file->flist);
420 spin_unlock(&cifsi->open_file_lock);
421 list_del(&cifs_file->tlist);
422 atomic_dec(&tcon->num_local_opens);
424 if (list_empty(&cifsi->openFileList)) {
425 cifs_dbg(FYI, "closing last open instance for inode %p\n",
426 d_inode(cifs_file->dentry));
428 * In strict cache mode we need invalidate mapping on the last
429 * close because it may cause a error when we open this file
430 * again and get at least level II oplock.
432 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO)
433 set_bit(CIFS_INO_INVALID_MAPPING, &cifsi->flags);
434 cifs_set_oplock_level(cifsi, 0);
437 spin_unlock(&tcon->open_file_lock);
439 oplock_break_cancelled = wait_oplock_handler ?
440 cancel_work_sync(&cifs_file->oplock_break) : false;
442 if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
443 struct TCP_Server_Info *server = tcon->ses->server;
447 if (server->ops->close)
448 server->ops->close(xid, tcon, &cifs_file->fid);
452 if (oplock_break_cancelled)
453 cifs_done_oplock_break(cifsi);
455 cifs_del_pending_open(&open);
458 * Delete any outstanding lock records. We'll lose them when the file
461 down_write(&cifsi->lock_sem);
462 list_for_each_entry_safe(li, tmp, &cifs_file->llist->locks, llist) {
463 list_del(&li->llist);
464 cifs_del_lock_waiters(li);
467 list_del(&cifs_file->llist->llist);
468 kfree(cifs_file->llist);
469 up_write(&cifsi->lock_sem);
471 cifs_put_tlink(cifs_file->tlink);
472 dput(cifs_file->dentry);
473 cifs_sb_deactive(sb);
477 int cifs_open(struct inode *inode, struct file *file)
483 struct cifs_sb_info *cifs_sb;
484 struct TCP_Server_Info *server;
485 struct cifs_tcon *tcon;
486 struct tcon_link *tlink;
487 struct cifsFileInfo *cfile = NULL;
488 char *full_path = NULL;
489 bool posix_open_ok = false;
491 struct cifs_pending_open open;
495 cifs_sb = CIFS_SB(inode->i_sb);
496 tlink = cifs_sb_tlink(cifs_sb);
499 return PTR_ERR(tlink);
501 tcon = tlink_tcon(tlink);
502 server = tcon->ses->server;
504 full_path = build_path_from_dentry(file_dentry(file));
505 if (full_path == NULL) {
510 cifs_dbg(FYI, "inode = 0x%p file flags are 0x%x for %s\n",
511 inode, file->f_flags, full_path);
513 if (file->f_flags & O_DIRECT &&
514 cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO) {
515 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
516 file->f_op = &cifs_file_direct_nobrl_ops;
518 file->f_op = &cifs_file_direct_ops;
526 if (!tcon->broken_posix_open && tcon->unix_ext &&
527 cap_unix(tcon->ses) && (CIFS_UNIX_POSIX_PATH_OPS_CAP &
528 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
529 /* can not refresh inode info since size could be stale */
530 rc = cifs_posix_open(full_path, &inode, inode->i_sb,
531 cifs_sb->mnt_file_mode /* ignored */,
532 file->f_flags, &oplock, &fid.netfid, xid);
534 cifs_dbg(FYI, "posix open succeeded\n");
535 posix_open_ok = true;
536 } else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) {
537 if (tcon->ses->serverNOS)
538 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",
539 tcon->ses->serverName,
540 tcon->ses->serverNOS);
541 tcon->broken_posix_open = true;
542 } else if ((rc != -EIO) && (rc != -EREMOTE) &&
543 (rc != -EOPNOTSUPP)) /* path not found or net err */
546 * Else fallthrough to retry open the old way on network i/o
551 if (server->ops->get_lease_key)
552 server->ops->get_lease_key(inode, &fid);
554 cifs_add_pending_open(&fid, tlink, &open);
556 if (!posix_open_ok) {
557 if (server->ops->get_lease_key)
558 server->ops->get_lease_key(inode, &fid);
560 rc = cifs_nt_open(full_path, inode, cifs_sb, tcon,
561 file->f_flags, &oplock, &fid, xid);
563 cifs_del_pending_open(&open);
568 cfile = cifs_new_fileinfo(&fid, file, tlink, oplock);
570 if (server->ops->close)
571 server->ops->close(xid, tcon, &fid);
572 cifs_del_pending_open(&open);
577 cifs_fscache_set_inode_cookie(inode, file);
579 if ((oplock & CIFS_CREATE_ACTION) && !posix_open_ok && tcon->unix_ext) {
581 * Time to set mode which we can not set earlier due to
582 * problems creating new read-only files.
584 struct cifs_unix_set_info_args args = {
585 .mode = inode->i_mode,
586 .uid = INVALID_UID, /* no change */
587 .gid = INVALID_GID, /* no change */
588 .ctime = NO_CHANGE_64,
589 .atime = NO_CHANGE_64,
590 .mtime = NO_CHANGE_64,
593 CIFSSMBUnixSetFileInfo(xid, tcon, &args, fid.netfid,
600 cifs_put_tlink(tlink);
604 static int cifs_push_posix_locks(struct cifsFileInfo *cfile);
607 * Try to reacquire byte range locks that were released when session
608 * to server was lost.
611 cifs_relock_file(struct cifsFileInfo *cfile)
613 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
614 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
615 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
618 down_read_nested(&cinode->lock_sem, SINGLE_DEPTH_NESTING);
619 if (cinode->can_cache_brlcks) {
620 /* can cache locks - no need to relock */
621 up_read(&cinode->lock_sem);
625 if (cap_unix(tcon->ses) &&
626 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
627 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
628 rc = cifs_push_posix_locks(cfile);
630 rc = tcon->ses->server->ops->push_mand_locks(cfile);
632 up_read(&cinode->lock_sem);
637 cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush)
642 struct cifs_sb_info *cifs_sb;
643 struct cifs_tcon *tcon;
644 struct TCP_Server_Info *server;
645 struct cifsInodeInfo *cinode;
647 char *full_path = NULL;
649 int disposition = FILE_OPEN;
650 int create_options = CREATE_NOT_DIR;
651 struct cifs_open_parms oparms;
654 mutex_lock(&cfile->fh_mutex);
655 if (!cfile->invalidHandle) {
656 mutex_unlock(&cfile->fh_mutex);
662 inode = d_inode(cfile->dentry);
663 cifs_sb = CIFS_SB(inode->i_sb);
664 tcon = tlink_tcon(cfile->tlink);
665 server = tcon->ses->server;
668 * Can not grab rename sem here because various ops, including those
669 * that already have the rename sem can end up causing writepage to get
670 * called and if the server was down that means we end up here, and we
671 * can never tell if the caller already has the rename_sem.
673 full_path = build_path_from_dentry(cfile->dentry);
674 if (full_path == NULL) {
676 mutex_unlock(&cfile->fh_mutex);
681 cifs_dbg(FYI, "inode = 0x%p file flags 0x%x for %s\n",
682 inode, cfile->f_flags, full_path);
684 if (tcon->ses->server->oplocks)
689 if (tcon->unix_ext && cap_unix(tcon->ses) &&
690 (CIFS_UNIX_POSIX_PATH_OPS_CAP &
691 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
693 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the
694 * original open. Must mask them off for a reopen.
696 unsigned int oflags = cfile->f_flags &
697 ~(O_CREAT | O_EXCL | O_TRUNC);
699 rc = cifs_posix_open(full_path, NULL, inode->i_sb,
700 cifs_sb->mnt_file_mode /* ignored */,
701 oflags, &oplock, &cfile->fid.netfid, xid);
703 cifs_dbg(FYI, "posix reopen succeeded\n");
704 oparms.reconnect = true;
708 * fallthrough to retry open the old way on errors, especially
709 * in the reconnect path it is important to retry hard
713 desired_access = cifs_convert_flags(cfile->f_flags);
715 if (backup_cred(cifs_sb))
716 create_options |= CREATE_OPEN_BACKUP_INTENT;
718 if (server->ops->get_lease_key)
719 server->ops->get_lease_key(inode, &cfile->fid);
722 oparms.cifs_sb = cifs_sb;
723 oparms.desired_access = desired_access;
724 oparms.create_options = create_options;
725 oparms.disposition = disposition;
726 oparms.path = full_path;
727 oparms.fid = &cfile->fid;
728 oparms.reconnect = true;
731 * Can not refresh inode by passing in file_info buf to be returned by
732 * ops->open and then calling get_inode_info with returned buf since
733 * file might have write behind data that needs to be flushed and server
734 * version of file size can be stale. If we knew for sure that inode was
735 * not dirty locally we could do this.
737 rc = server->ops->open(xid, &oparms, &oplock, NULL);
738 if (rc == -ENOENT && oparms.reconnect == false) {
739 /* durable handle timeout is expired - open the file again */
740 rc = server->ops->open(xid, &oparms, &oplock, NULL);
741 /* indicate that we need to relock the file */
742 oparms.reconnect = true;
746 mutex_unlock(&cfile->fh_mutex);
747 cifs_dbg(FYI, "cifs_reopen returned 0x%x\n", rc);
748 cifs_dbg(FYI, "oplock: %d\n", oplock);
749 goto reopen_error_exit;
753 cfile->invalidHandle = false;
754 mutex_unlock(&cfile->fh_mutex);
755 cinode = CIFS_I(inode);
758 rc = filemap_write_and_wait(inode->i_mapping);
759 if (!is_interrupt_error(rc))
760 mapping_set_error(inode->i_mapping, rc);
763 rc = cifs_get_inode_info_unix(&inode, full_path,
766 rc = cifs_get_inode_info(&inode, full_path, NULL,
767 inode->i_sb, xid, NULL);
770 * Else we are writing out data to server already and could deadlock if
771 * we tried to flush data, and since we do not know if we have data that
772 * would invalidate the current end of file on the server we can not go
773 * to the server to get the new inode info.
777 * If the server returned a read oplock and we have mandatory brlocks,
778 * set oplock level to None.
780 if (server->ops->is_read_op(oplock) && cifs_has_mand_locks(cinode)) {
781 cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n");
785 server->ops->set_fid(cfile, &cfile->fid, oplock);
786 if (oparms.reconnect)
787 cifs_relock_file(cfile);
795 int cifs_close(struct inode *inode, struct file *file)
797 if (file->private_data != NULL) {
798 cifsFileInfo_put(file->private_data);
799 file->private_data = NULL;
802 /* return code from the ->release op is always ignored */
807 cifs_reopen_persistent_handles(struct cifs_tcon *tcon)
809 struct cifsFileInfo *open_file;
810 struct list_head *tmp;
811 struct list_head *tmp1;
812 struct list_head tmp_list;
814 if (!tcon->use_persistent || !tcon->need_reopen_files)
817 tcon->need_reopen_files = false;
819 cifs_dbg(FYI, "Reopen persistent handles");
820 INIT_LIST_HEAD(&tmp_list);
822 /* list all files open on tree connection, reopen resilient handles */
823 spin_lock(&tcon->open_file_lock);
824 list_for_each(tmp, &tcon->openFileList) {
825 open_file = list_entry(tmp, struct cifsFileInfo, tlist);
826 if (!open_file->invalidHandle)
828 cifsFileInfo_get(open_file);
829 list_add_tail(&open_file->rlist, &tmp_list);
831 spin_unlock(&tcon->open_file_lock);
833 list_for_each_safe(tmp, tmp1, &tmp_list) {
834 open_file = list_entry(tmp, struct cifsFileInfo, rlist);
835 if (cifs_reopen_file(open_file, false /* do not flush */))
836 tcon->need_reopen_files = true;
837 list_del_init(&open_file->rlist);
838 cifsFileInfo_put(open_file);
842 int cifs_closedir(struct inode *inode, struct file *file)
846 struct cifsFileInfo *cfile = file->private_data;
847 struct cifs_tcon *tcon;
848 struct TCP_Server_Info *server;
851 cifs_dbg(FYI, "Closedir inode = 0x%p\n", inode);
857 tcon = tlink_tcon(cfile->tlink);
858 server = tcon->ses->server;
860 cifs_dbg(FYI, "Freeing private data in close dir\n");
861 spin_lock(&cfile->file_info_lock);
862 if (server->ops->dir_needs_close(cfile)) {
863 cfile->invalidHandle = true;
864 spin_unlock(&cfile->file_info_lock);
865 if (server->ops->close_dir)
866 rc = server->ops->close_dir(xid, tcon, &cfile->fid);
869 cifs_dbg(FYI, "Closing uncompleted readdir with rc %d\n", rc);
870 /* not much we can do if it fails anyway, ignore rc */
873 spin_unlock(&cfile->file_info_lock);
875 buf = cfile->srch_inf.ntwrk_buf_start;
877 cifs_dbg(FYI, "closedir free smb buf in srch struct\n");
878 cfile->srch_inf.ntwrk_buf_start = NULL;
879 if (cfile->srch_inf.smallBuf)
880 cifs_small_buf_release(buf);
882 cifs_buf_release(buf);
885 cifs_put_tlink(cfile->tlink);
886 kfree(file->private_data);
887 file->private_data = NULL;
888 /* BB can we lock the filestruct while this is going on? */
893 static struct cifsLockInfo *
894 cifs_lock_init(__u64 offset, __u64 length, __u8 type, __u16 flags)
896 struct cifsLockInfo *lock =
897 kmalloc(sizeof(struct cifsLockInfo), GFP_KERNEL);
900 lock->offset = offset;
901 lock->length = length;
903 lock->pid = current->tgid;
905 INIT_LIST_HEAD(&lock->blist);
906 init_waitqueue_head(&lock->block_q);
911 cifs_del_lock_waiters(struct cifsLockInfo *lock)
913 struct cifsLockInfo *li, *tmp;
914 list_for_each_entry_safe(li, tmp, &lock->blist, blist) {
915 list_del_init(&li->blist);
916 wake_up(&li->block_q);
920 #define CIFS_LOCK_OP 0
921 #define CIFS_READ_OP 1
922 #define CIFS_WRITE_OP 2
924 /* @rw_check : 0 - no op, 1 - read, 2 - write */
926 cifs_find_fid_lock_conflict(struct cifs_fid_locks *fdlocks, __u64 offset,
927 __u64 length, __u8 type, __u16 flags,
928 struct cifsFileInfo *cfile,
929 struct cifsLockInfo **conf_lock, int rw_check)
931 struct cifsLockInfo *li;
932 struct cifsFileInfo *cur_cfile = fdlocks->cfile;
933 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
935 list_for_each_entry(li, &fdlocks->locks, llist) {
936 if (offset + length <= li->offset ||
937 offset >= li->offset + li->length)
939 if (rw_check != CIFS_LOCK_OP && current->tgid == li->pid &&
940 server->ops->compare_fids(cfile, cur_cfile)) {
941 /* shared lock prevents write op through the same fid */
942 if (!(li->type & server->vals->shared_lock_type) ||
943 rw_check != CIFS_WRITE_OP)
946 if ((type & server->vals->shared_lock_type) &&
947 ((server->ops->compare_fids(cfile, cur_cfile) &&
948 current->tgid == li->pid) || type == li->type))
950 if (rw_check == CIFS_LOCK_OP &&
951 (flags & FL_OFDLCK) && (li->flags & FL_OFDLCK) &&
952 server->ops->compare_fids(cfile, cur_cfile))
962 cifs_find_lock_conflict(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
963 __u8 type, __u16 flags,
964 struct cifsLockInfo **conf_lock, int rw_check)
967 struct cifs_fid_locks *cur;
968 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
970 list_for_each_entry(cur, &cinode->llist, llist) {
971 rc = cifs_find_fid_lock_conflict(cur, offset, length, type,
972 flags, cfile, conf_lock,
982 * Check if there is another lock that prevents us to set the lock (mandatory
983 * style). If such a lock exists, update the flock structure with its
984 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
985 * or leave it the same if we can't. Returns 0 if we don't need to request to
986 * the server or 1 otherwise.
989 cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
990 __u8 type, struct file_lock *flock)
993 struct cifsLockInfo *conf_lock;
994 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
995 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
998 down_read(&cinode->lock_sem);
1000 exist = cifs_find_lock_conflict(cfile, offset, length, type,
1001 flock->fl_flags, &conf_lock,
1004 flock->fl_start = conf_lock->offset;
1005 flock->fl_end = conf_lock->offset + conf_lock->length - 1;
1006 flock->fl_pid = conf_lock->pid;
1007 if (conf_lock->type & server->vals->shared_lock_type)
1008 flock->fl_type = F_RDLCK;
1010 flock->fl_type = F_WRLCK;
1011 } else if (!cinode->can_cache_brlcks)
1014 flock->fl_type = F_UNLCK;
1016 up_read(&cinode->lock_sem);
1021 cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock)
1023 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1024 down_write(&cinode->lock_sem);
1025 list_add_tail(&lock->llist, &cfile->llist->locks);
1026 up_write(&cinode->lock_sem);
1030 * Set the byte-range lock (mandatory style). Returns:
1031 * 1) 0, if we set the lock and don't need to request to the server;
1032 * 2) 1, if no locks prevent us but we need to request to the server;
1033 * 3) -EACCES, if there is a lock that prevents us and wait is false.
1036 cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock,
1039 struct cifsLockInfo *conf_lock;
1040 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1046 down_write(&cinode->lock_sem);
1048 exist = cifs_find_lock_conflict(cfile, lock->offset, lock->length,
1049 lock->type, lock->flags, &conf_lock,
1051 if (!exist && cinode->can_cache_brlcks) {
1052 list_add_tail(&lock->llist, &cfile->llist->locks);
1053 up_write(&cinode->lock_sem);
1062 list_add_tail(&lock->blist, &conf_lock->blist);
1063 up_write(&cinode->lock_sem);
1064 rc = wait_event_interruptible(lock->block_q,
1065 (lock->blist.prev == &lock->blist) &&
1066 (lock->blist.next == &lock->blist));
1069 down_write(&cinode->lock_sem);
1070 list_del_init(&lock->blist);
1073 up_write(&cinode->lock_sem);
1078 * Check if there is another lock that prevents us to set the lock (posix
1079 * style). If such a lock exists, update the flock structure with its
1080 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
1081 * or leave it the same if we can't. Returns 0 if we don't need to request to
1082 * the server or 1 otherwise.
1085 cifs_posix_lock_test(struct file *file, struct file_lock *flock)
1088 struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1089 unsigned char saved_type = flock->fl_type;
1091 if ((flock->fl_flags & FL_POSIX) == 0)
1094 down_read(&cinode->lock_sem);
1095 posix_test_lock(file, flock);
1097 if (flock->fl_type == F_UNLCK && !cinode->can_cache_brlcks) {
1098 flock->fl_type = saved_type;
1102 up_read(&cinode->lock_sem);
1107 * Set the byte-range lock (posix style). Returns:
1108 * 1) 0, if we set the lock and don't need to request to the server;
1109 * 2) 1, if we need to request to the server;
1110 * 3) <0, if the error occurs while setting the lock.
1113 cifs_posix_lock_set(struct file *file, struct file_lock *flock)
1115 struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1118 if ((flock->fl_flags & FL_POSIX) == 0)
1122 down_write(&cinode->lock_sem);
1123 if (!cinode->can_cache_brlcks) {
1124 up_write(&cinode->lock_sem);
1128 rc = posix_lock_file(file, flock, NULL);
1129 up_write(&cinode->lock_sem);
1130 if (rc == FILE_LOCK_DEFERRED) {
1131 rc = wait_event_interruptible(flock->fl_wait, !flock->fl_blocker);
1134 locks_delete_block(flock);
1140 cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
1143 int rc = 0, stored_rc;
1144 struct cifsLockInfo *li, *tmp;
1145 struct cifs_tcon *tcon;
1146 unsigned int num, max_num, max_buf;
1147 LOCKING_ANDX_RANGE *buf, *cur;
1148 static const int types[] = {
1149 LOCKING_ANDX_LARGE_FILES,
1150 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES
1155 tcon = tlink_tcon(cfile->tlink);
1158 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1159 * and check it before using.
1161 max_buf = tcon->ses->server->maxBuf;
1162 if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) {
1167 BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
1169 max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
1171 max_num = (max_buf - sizeof(struct smb_hdr)) /
1172 sizeof(LOCKING_ANDX_RANGE);
1173 buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1179 for (i = 0; i < 2; i++) {
1182 list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1183 if (li->type != types[i])
1185 cur->Pid = cpu_to_le16(li->pid);
1186 cur->LengthLow = cpu_to_le32((u32)li->length);
1187 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1188 cur->OffsetLow = cpu_to_le32((u32)li->offset);
1189 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1190 if (++num == max_num) {
1191 stored_rc = cifs_lockv(xid, tcon,
1193 (__u8)li->type, 0, num,
1204 stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1205 (__u8)types[i], 0, num, buf);
1217 hash_lockowner(fl_owner_t owner)
1219 return cifs_lock_secret ^ hash32_ptr((const void *)owner);
1222 struct lock_to_push {
1223 struct list_head llist;
1232 cifs_push_posix_locks(struct cifsFileInfo *cfile)
1234 struct inode *inode = d_inode(cfile->dentry);
1235 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1236 struct file_lock *flock;
1237 struct file_lock_context *flctx = inode->i_flctx;
1238 unsigned int count = 0, i;
1239 int rc = 0, xid, type;
1240 struct list_head locks_to_send, *el;
1241 struct lock_to_push *lck, *tmp;
1249 spin_lock(&flctx->flc_lock);
1250 list_for_each(el, &flctx->flc_posix) {
1253 spin_unlock(&flctx->flc_lock);
1255 INIT_LIST_HEAD(&locks_to_send);
1258 * Allocating count locks is enough because no FL_POSIX locks can be
1259 * added to the list while we are holding cinode->lock_sem that
1260 * protects locking operations of this inode.
1262 for (i = 0; i < count; i++) {
1263 lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL);
1268 list_add_tail(&lck->llist, &locks_to_send);
1271 el = locks_to_send.next;
1272 spin_lock(&flctx->flc_lock);
1273 list_for_each_entry(flock, &flctx->flc_posix, fl_list) {
1274 if (el == &locks_to_send) {
1276 * The list ended. We don't have enough allocated
1277 * structures - something is really wrong.
1279 cifs_dbg(VFS, "Can't push all brlocks!\n");
1282 length = 1 + flock->fl_end - flock->fl_start;
1283 if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK)
1287 lck = list_entry(el, struct lock_to_push, llist);
1288 lck->pid = hash_lockowner(flock->fl_owner);
1289 lck->netfid = cfile->fid.netfid;
1290 lck->length = length;
1292 lck->offset = flock->fl_start;
1294 spin_unlock(&flctx->flc_lock);
1296 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1299 stored_rc = CIFSSMBPosixLock(xid, tcon, lck->netfid, lck->pid,
1300 lck->offset, lck->length, NULL,
1304 list_del(&lck->llist);
1312 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1313 list_del(&lck->llist);
1320 cifs_push_locks(struct cifsFileInfo *cfile)
1322 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1323 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1324 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1327 /* we are going to update can_cache_brlcks here - need a write access */
1328 down_write(&cinode->lock_sem);
1329 if (!cinode->can_cache_brlcks) {
1330 up_write(&cinode->lock_sem);
1334 if (cap_unix(tcon->ses) &&
1335 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1336 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1337 rc = cifs_push_posix_locks(cfile);
1339 rc = tcon->ses->server->ops->push_mand_locks(cfile);
1341 cinode->can_cache_brlcks = false;
1342 up_write(&cinode->lock_sem);
1347 cifs_read_flock(struct file_lock *flock, __u32 *type, int *lock, int *unlock,
1348 bool *wait_flag, struct TCP_Server_Info *server)
1350 if (flock->fl_flags & FL_POSIX)
1351 cifs_dbg(FYI, "Posix\n");
1352 if (flock->fl_flags & FL_FLOCK)
1353 cifs_dbg(FYI, "Flock\n");
1354 if (flock->fl_flags & FL_SLEEP) {
1355 cifs_dbg(FYI, "Blocking lock\n");
1358 if (flock->fl_flags & FL_ACCESS)
1359 cifs_dbg(FYI, "Process suspended by mandatory locking - not implemented yet\n");
1360 if (flock->fl_flags & FL_LEASE)
1361 cifs_dbg(FYI, "Lease on file - not implemented yet\n");
1362 if (flock->fl_flags &
1363 (~(FL_POSIX | FL_FLOCK | FL_SLEEP |
1364 FL_ACCESS | FL_LEASE | FL_CLOSE | FL_OFDLCK)))
1365 cifs_dbg(FYI, "Unknown lock flags 0x%x\n", flock->fl_flags);
1367 *type = server->vals->large_lock_type;
1368 if (flock->fl_type == F_WRLCK) {
1369 cifs_dbg(FYI, "F_WRLCK\n");
1370 *type |= server->vals->exclusive_lock_type;
1372 } else if (flock->fl_type == F_UNLCK) {
1373 cifs_dbg(FYI, "F_UNLCK\n");
1374 *type |= server->vals->unlock_lock_type;
1376 /* Check if unlock includes more than one lock range */
1377 } else if (flock->fl_type == F_RDLCK) {
1378 cifs_dbg(FYI, "F_RDLCK\n");
1379 *type |= server->vals->shared_lock_type;
1381 } else if (flock->fl_type == F_EXLCK) {
1382 cifs_dbg(FYI, "F_EXLCK\n");
1383 *type |= server->vals->exclusive_lock_type;
1385 } else if (flock->fl_type == F_SHLCK) {
1386 cifs_dbg(FYI, "F_SHLCK\n");
1387 *type |= server->vals->shared_lock_type;
1390 cifs_dbg(FYI, "Unknown type of lock\n");
1394 cifs_getlk(struct file *file, struct file_lock *flock, __u32 type,
1395 bool wait_flag, bool posix_lck, unsigned int xid)
1398 __u64 length = 1 + flock->fl_end - flock->fl_start;
1399 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1400 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1401 struct TCP_Server_Info *server = tcon->ses->server;
1402 __u16 netfid = cfile->fid.netfid;
1405 int posix_lock_type;
1407 rc = cifs_posix_lock_test(file, flock);
1411 if (type & server->vals->shared_lock_type)
1412 posix_lock_type = CIFS_RDLCK;
1414 posix_lock_type = CIFS_WRLCK;
1415 rc = CIFSSMBPosixLock(xid, tcon, netfid,
1416 hash_lockowner(flock->fl_owner),
1417 flock->fl_start, length, flock,
1418 posix_lock_type, wait_flag);
1422 rc = cifs_lock_test(cfile, flock->fl_start, length, type, flock);
1426 /* BB we could chain these into one lock request BB */
1427 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length, type,
1430 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1432 flock->fl_type = F_UNLCK;
1434 cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
1439 if (type & server->vals->shared_lock_type) {
1440 flock->fl_type = F_WRLCK;
1444 type &= ~server->vals->exclusive_lock_type;
1446 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1447 type | server->vals->shared_lock_type,
1450 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1451 type | server->vals->shared_lock_type, 0, 1, false);
1452 flock->fl_type = F_RDLCK;
1454 cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
1457 flock->fl_type = F_WRLCK;
1463 cifs_move_llist(struct list_head *source, struct list_head *dest)
1465 struct list_head *li, *tmp;
1466 list_for_each_safe(li, tmp, source)
1467 list_move(li, dest);
1471 cifs_free_llist(struct list_head *llist)
1473 struct cifsLockInfo *li, *tmp;
1474 list_for_each_entry_safe(li, tmp, llist, llist) {
1475 cifs_del_lock_waiters(li);
1476 list_del(&li->llist);
1482 cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
1485 int rc = 0, stored_rc;
1486 static const int types[] = {
1487 LOCKING_ANDX_LARGE_FILES,
1488 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES
1491 unsigned int max_num, num, max_buf;
1492 LOCKING_ANDX_RANGE *buf, *cur;
1493 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1494 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
1495 struct cifsLockInfo *li, *tmp;
1496 __u64 length = 1 + flock->fl_end - flock->fl_start;
1497 struct list_head tmp_llist;
1499 INIT_LIST_HEAD(&tmp_llist);
1502 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1503 * and check it before using.
1505 max_buf = tcon->ses->server->maxBuf;
1506 if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE)))
1509 BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
1511 max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
1513 max_num = (max_buf - sizeof(struct smb_hdr)) /
1514 sizeof(LOCKING_ANDX_RANGE);
1515 buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1519 down_write(&cinode->lock_sem);
1520 for (i = 0; i < 2; i++) {
1523 list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1524 if (flock->fl_start > li->offset ||
1525 (flock->fl_start + length) <
1526 (li->offset + li->length))
1528 if (current->tgid != li->pid)
1530 if (types[i] != li->type)
1532 if (cinode->can_cache_brlcks) {
1534 * We can cache brlock requests - simply remove
1535 * a lock from the file's list.
1537 list_del(&li->llist);
1538 cifs_del_lock_waiters(li);
1542 cur->Pid = cpu_to_le16(li->pid);
1543 cur->LengthLow = cpu_to_le32((u32)li->length);
1544 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1545 cur->OffsetLow = cpu_to_le32((u32)li->offset);
1546 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1548 * We need to save a lock here to let us add it again to
1549 * the file's list if the unlock range request fails on
1552 list_move(&li->llist, &tmp_llist);
1553 if (++num == max_num) {
1554 stored_rc = cifs_lockv(xid, tcon,
1556 li->type, num, 0, buf);
1559 * We failed on the unlock range
1560 * request - add all locks from the tmp
1561 * list to the head of the file's list.
1563 cifs_move_llist(&tmp_llist,
1564 &cfile->llist->locks);
1568 * The unlock range request succeed -
1569 * free the tmp list.
1571 cifs_free_llist(&tmp_llist);
1578 stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1579 types[i], num, 0, buf);
1581 cifs_move_llist(&tmp_llist,
1582 &cfile->llist->locks);
1585 cifs_free_llist(&tmp_llist);
1589 up_write(&cinode->lock_sem);
1595 cifs_setlk(struct file *file, struct file_lock *flock, __u32 type,
1596 bool wait_flag, bool posix_lck, int lock, int unlock,
1600 __u64 length = 1 + flock->fl_end - flock->fl_start;
1601 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1602 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1603 struct TCP_Server_Info *server = tcon->ses->server;
1604 struct inode *inode = d_inode(cfile->dentry);
1607 int posix_lock_type;
1609 rc = cifs_posix_lock_set(file, flock);
1613 if (type & server->vals->shared_lock_type)
1614 posix_lock_type = CIFS_RDLCK;
1616 posix_lock_type = CIFS_WRLCK;
1619 posix_lock_type = CIFS_UNLCK;
1621 rc = CIFSSMBPosixLock(xid, tcon, cfile->fid.netfid,
1622 hash_lockowner(flock->fl_owner),
1623 flock->fl_start, length,
1624 NULL, posix_lock_type, wait_flag);
1629 struct cifsLockInfo *lock;
1631 lock = cifs_lock_init(flock->fl_start, length, type,
1636 rc = cifs_lock_add_if(cfile, lock, wait_flag);
1645 * Windows 7 server can delay breaking lease from read to None
1646 * if we set a byte-range lock on a file - break it explicitly
1647 * before sending the lock to the server to be sure the next
1648 * read won't conflict with non-overlapted locks due to
1651 if (!CIFS_CACHE_WRITE(CIFS_I(inode)) &&
1652 CIFS_CACHE_READ(CIFS_I(inode))) {
1653 cifs_zap_mapping(inode);
1654 cifs_dbg(FYI, "Set no oplock for inode=%p due to mand locks\n",
1656 CIFS_I(inode)->oplock = 0;
1659 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1660 type, 1, 0, wait_flag);
1666 cifs_lock_add(cfile, lock);
1668 rc = server->ops->mand_unlock_range(cfile, flock, xid);
1671 if (flock->fl_flags & FL_POSIX) {
1673 * If this is a request to remove all locks because we
1674 * are closing the file, it doesn't matter if the
1675 * unlocking failed as both cifs.ko and the SMB server
1676 * remove the lock on file close
1679 cifs_dbg(VFS, "%s failed rc=%d\n", __func__, rc);
1680 if (!(flock->fl_flags & FL_CLOSE))
1683 rc = locks_lock_file_wait(file, flock);
1688 int cifs_lock(struct file *file, int cmd, struct file_lock *flock)
1691 int lock = 0, unlock = 0;
1692 bool wait_flag = false;
1693 bool posix_lck = false;
1694 struct cifs_sb_info *cifs_sb;
1695 struct cifs_tcon *tcon;
1696 struct cifsFileInfo *cfile;
1702 cifs_dbg(FYI, "Lock parm: 0x%x flockflags: 0x%x flocktype: 0x%x start: %lld end: %lld\n",
1703 cmd, flock->fl_flags, flock->fl_type,
1704 flock->fl_start, flock->fl_end);
1706 cfile = (struct cifsFileInfo *)file->private_data;
1707 tcon = tlink_tcon(cfile->tlink);
1709 cifs_read_flock(flock, &type, &lock, &unlock, &wait_flag,
1711 cifs_sb = CIFS_FILE_SB(file);
1713 if (cap_unix(tcon->ses) &&
1714 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1715 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1718 * BB add code here to normalize offset and length to account for
1719 * negative length which we can not accept over the wire.
1721 if (IS_GETLK(cmd)) {
1722 rc = cifs_getlk(file, flock, type, wait_flag, posix_lck, xid);
1727 if (!lock && !unlock) {
1729 * if no lock or unlock then nothing to do since we do not
1736 rc = cifs_setlk(file, flock, type, wait_flag, posix_lck, lock, unlock,
1743 * update the file size (if needed) after a write. Should be called with
1744 * the inode->i_lock held
1747 cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
1748 unsigned int bytes_written)
1750 loff_t end_of_write = offset + bytes_written;
1752 if (end_of_write > cifsi->server_eof)
1753 cifsi->server_eof = end_of_write;
1757 cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
1758 size_t write_size, loff_t *offset)
1761 unsigned int bytes_written = 0;
1762 unsigned int total_written;
1763 struct cifs_tcon *tcon;
1764 struct TCP_Server_Info *server;
1766 struct dentry *dentry = open_file->dentry;
1767 struct cifsInodeInfo *cifsi = CIFS_I(d_inode(dentry));
1768 struct cifs_io_parms io_parms;
1770 cifs_dbg(FYI, "write %zd bytes to offset %lld of %pd\n",
1771 write_size, *offset, dentry);
1773 tcon = tlink_tcon(open_file->tlink);
1774 server = tcon->ses->server;
1776 if (!server->ops->sync_write)
1781 for (total_written = 0; write_size > total_written;
1782 total_written += bytes_written) {
1784 while (rc == -EAGAIN) {
1788 if (open_file->invalidHandle) {
1789 /* we could deadlock if we called
1790 filemap_fdatawait from here so tell
1791 reopen_file not to flush data to
1793 rc = cifs_reopen_file(open_file, false);
1798 len = min(server->ops->wp_retry_size(d_inode(dentry)),
1799 (unsigned int)write_size - total_written);
1800 /* iov[0] is reserved for smb header */
1801 iov[1].iov_base = (char *)write_data + total_written;
1802 iov[1].iov_len = len;
1804 io_parms.tcon = tcon;
1805 io_parms.offset = *offset;
1806 io_parms.length = len;
1807 rc = server->ops->sync_write(xid, &open_file->fid,
1808 &io_parms, &bytes_written, iov, 1);
1810 if (rc || (bytes_written == 0)) {
1818 spin_lock(&d_inode(dentry)->i_lock);
1819 cifs_update_eof(cifsi, *offset, bytes_written);
1820 spin_unlock(&d_inode(dentry)->i_lock);
1821 *offset += bytes_written;
1825 cifs_stats_bytes_written(tcon, total_written);
1827 if (total_written > 0) {
1828 spin_lock(&d_inode(dentry)->i_lock);
1829 if (*offset > d_inode(dentry)->i_size)
1830 i_size_write(d_inode(dentry), *offset);
1831 spin_unlock(&d_inode(dentry)->i_lock);
1833 mark_inode_dirty_sync(d_inode(dentry));
1835 return total_written;
1838 struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
1841 struct cifsFileInfo *open_file = NULL;
1842 struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1843 struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
1845 /* only filter by fsuid on multiuser mounts */
1846 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1849 spin_lock(&tcon->open_file_lock);
1850 /* we could simply get the first_list_entry since write-only entries
1851 are always at the end of the list but since the first entry might
1852 have a close pending, we go through the whole list */
1853 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1854 if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
1856 if (OPEN_FMODE(open_file->f_flags) & FMODE_READ) {
1857 if (!open_file->invalidHandle) {
1858 /* found a good file */
1859 /* lock it so it will not be closed on us */
1860 cifsFileInfo_get(open_file);
1861 spin_unlock(&tcon->open_file_lock);
1863 } /* else might as well continue, and look for
1864 another, or simply have the caller reopen it
1865 again rather than trying to fix this handle */
1866 } else /* write only file */
1867 break; /* write only files are last so must be done */
1869 spin_unlock(&tcon->open_file_lock);
1873 /* Return -EBADF if no handle is found and general rc otherwise */
1875 cifs_get_writable_file(struct cifsInodeInfo *cifs_inode, bool fsuid_only,
1876 struct cifsFileInfo **ret_file)
1878 struct cifsFileInfo *open_file, *inv_file = NULL;
1879 struct cifs_sb_info *cifs_sb;
1880 struct cifs_tcon *tcon;
1881 bool any_available = false;
1883 unsigned int refind = 0;
1888 * Having a null inode here (because mapping->host was set to zero by
1889 * the VFS or MM) should not happen but we had reports of on oops (due
1890 * to it being zero) during stress testcases so we need to check for it
1893 if (cifs_inode == NULL) {
1894 cifs_dbg(VFS, "Null inode passed to cifs_writeable_file\n");
1899 cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1900 tcon = cifs_sb_master_tcon(cifs_sb);
1902 /* only filter by fsuid on multiuser mounts */
1903 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1906 spin_lock(&tcon->open_file_lock);
1908 if (refind > MAX_REOPEN_ATT) {
1909 spin_unlock(&tcon->open_file_lock);
1912 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1913 if (!any_available && open_file->pid != current->tgid)
1915 if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
1917 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
1918 if (!open_file->invalidHandle) {
1919 /* found a good writable file */
1920 cifsFileInfo_get(open_file);
1921 spin_unlock(&tcon->open_file_lock);
1922 *ret_file = open_file;
1926 inv_file = open_file;
1930 /* couldn't find useable FH with same pid, try any available */
1931 if (!any_available) {
1932 any_available = true;
1933 goto refind_writable;
1937 any_available = false;
1938 cifsFileInfo_get(inv_file);
1941 spin_unlock(&tcon->open_file_lock);
1944 rc = cifs_reopen_file(inv_file, false);
1946 *ret_file = inv_file;
1950 spin_lock(&cifs_inode->open_file_lock);
1951 list_move_tail(&inv_file->flist, &cifs_inode->openFileList);
1952 spin_unlock(&cifs_inode->open_file_lock);
1953 cifsFileInfo_put(inv_file);
1956 spin_lock(&tcon->open_file_lock);
1957 goto refind_writable;
1963 struct cifsFileInfo *
1964 find_writable_file(struct cifsInodeInfo *cifs_inode, bool fsuid_only)
1966 struct cifsFileInfo *cfile;
1969 rc = cifs_get_writable_file(cifs_inode, fsuid_only, &cfile);
1971 cifs_dbg(FYI, "couldn't find writable handle rc=%d", rc);
1977 cifs_get_writable_path(struct cifs_tcon *tcon, const char *name,
1978 struct cifsFileInfo **ret_file)
1980 struct list_head *tmp;
1981 struct cifsFileInfo *cfile;
1982 struct cifsInodeInfo *cinode;
1987 spin_lock(&tcon->open_file_lock);
1988 list_for_each(tmp, &tcon->openFileList) {
1989 cfile = list_entry(tmp, struct cifsFileInfo,
1991 full_path = build_path_from_dentry(cfile->dentry);
1992 if (full_path == NULL) {
1993 spin_unlock(&tcon->open_file_lock);
1996 if (strcmp(full_path, name)) {
2002 cinode = CIFS_I(d_inode(cfile->dentry));
2003 spin_unlock(&tcon->open_file_lock);
2004 return cifs_get_writable_file(cinode, 0, ret_file);
2007 spin_unlock(&tcon->open_file_lock);
2012 cifs_get_readable_path(struct cifs_tcon *tcon, const char *name,
2013 struct cifsFileInfo **ret_file)
2015 struct list_head *tmp;
2016 struct cifsFileInfo *cfile;
2017 struct cifsInodeInfo *cinode;
2022 spin_lock(&tcon->open_file_lock);
2023 list_for_each(tmp, &tcon->openFileList) {
2024 cfile = list_entry(tmp, struct cifsFileInfo,
2026 full_path = build_path_from_dentry(cfile->dentry);
2027 if (full_path == NULL) {
2028 spin_unlock(&tcon->open_file_lock);
2031 if (strcmp(full_path, name)) {
2037 cinode = CIFS_I(d_inode(cfile->dentry));
2038 spin_unlock(&tcon->open_file_lock);
2039 *ret_file = find_readable_file(cinode, 0);
2040 return *ret_file ? 0 : -ENOENT;
2043 spin_unlock(&tcon->open_file_lock);
2047 static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to)
2049 struct address_space *mapping = page->mapping;
2050 loff_t offset = (loff_t)page->index << PAGE_SHIFT;
2053 int bytes_written = 0;
2054 struct inode *inode;
2055 struct cifsFileInfo *open_file;
2057 if (!mapping || !mapping->host)
2060 inode = page->mapping->host;
2062 offset += (loff_t)from;
2063 write_data = kmap(page);
2066 if ((to > PAGE_SIZE) || (from > to)) {
2071 /* racing with truncate? */
2072 if (offset > mapping->host->i_size) {
2074 return 0; /* don't care */
2077 /* check to make sure that we are not extending the file */
2078 if (mapping->host->i_size - offset < (loff_t)to)
2079 to = (unsigned)(mapping->host->i_size - offset);
2081 rc = cifs_get_writable_file(CIFS_I(mapping->host), false, &open_file);
2083 bytes_written = cifs_write(open_file, open_file->pid,
2084 write_data, to - from, &offset);
2085 cifsFileInfo_put(open_file);
2086 /* Does mm or vfs already set times? */
2087 inode->i_atime = inode->i_mtime = current_time(inode);
2088 if ((bytes_written > 0) && (offset))
2090 else if (bytes_written < 0)
2095 cifs_dbg(FYI, "No writable handle for write page rc=%d\n", rc);
2096 if (!is_retryable_error(rc))
2104 static struct cifs_writedata *
2105 wdata_alloc_and_fillpages(pgoff_t tofind, struct address_space *mapping,
2106 pgoff_t end, pgoff_t *index,
2107 unsigned int *found_pages)
2109 struct cifs_writedata *wdata;
2111 wdata = cifs_writedata_alloc((unsigned int)tofind,
2112 cifs_writev_complete);
2116 *found_pages = find_get_pages_range_tag(mapping, index, end,
2117 PAGECACHE_TAG_DIRTY, tofind, wdata->pages);
2122 wdata_prepare_pages(struct cifs_writedata *wdata, unsigned int found_pages,
2123 struct address_space *mapping,
2124 struct writeback_control *wbc,
2125 pgoff_t end, pgoff_t *index, pgoff_t *next, bool *done)
2127 unsigned int nr_pages = 0, i;
2130 for (i = 0; i < found_pages; i++) {
2131 page = wdata->pages[i];
2133 * At this point we hold neither the i_pages lock nor the
2134 * page lock: the page may be truncated or invalidated
2135 * (changing page->mapping to NULL), or even swizzled
2136 * back from swapper_space to tmpfs file mapping
2141 else if (!trylock_page(page))
2144 if (unlikely(page->mapping != mapping)) {
2149 if (!wbc->range_cyclic && page->index > end) {
2155 if (*next && (page->index != *next)) {
2156 /* Not next consecutive page */
2161 if (wbc->sync_mode != WB_SYNC_NONE)
2162 wait_on_page_writeback(page);
2164 if (PageWriteback(page) ||
2165 !clear_page_dirty_for_io(page)) {
2171 * This actually clears the dirty bit in the radix tree.
2172 * See cifs_writepage() for more commentary.
2174 set_page_writeback(page);
2175 if (page_offset(page) >= i_size_read(mapping->host)) {
2178 end_page_writeback(page);
2182 wdata->pages[i] = page;
2183 *next = page->index + 1;
2187 /* reset index to refind any pages skipped */
2189 *index = wdata->pages[0]->index + 1;
2191 /* put any pages we aren't going to use */
2192 for (i = nr_pages; i < found_pages; i++) {
2193 put_page(wdata->pages[i]);
2194 wdata->pages[i] = NULL;
2201 wdata_send_pages(struct cifs_writedata *wdata, unsigned int nr_pages,
2202 struct address_space *mapping, struct writeback_control *wbc)
2205 struct TCP_Server_Info *server =
2206 tlink_tcon(wdata->cfile->tlink)->ses->server;
2208 wdata->sync_mode = wbc->sync_mode;
2209 wdata->nr_pages = nr_pages;
2210 wdata->offset = page_offset(wdata->pages[0]);
2211 wdata->pagesz = PAGE_SIZE;
2212 wdata->tailsz = min(i_size_read(mapping->host) -
2213 page_offset(wdata->pages[nr_pages - 1]),
2215 wdata->bytes = ((nr_pages - 1) * PAGE_SIZE) + wdata->tailsz;
2216 wdata->pid = wdata->cfile->pid;
2218 rc = adjust_credits(server, &wdata->credits, wdata->bytes);
2222 if (wdata->cfile->invalidHandle)
2225 rc = server->ops->async_writev(wdata, cifs_writedata_release);
2230 static int cifs_writepages(struct address_space *mapping,
2231 struct writeback_control *wbc)
2233 struct inode *inode = mapping->host;
2234 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2235 struct TCP_Server_Info *server;
2236 bool done = false, scanned = false, range_whole = false;
2238 struct cifs_writedata *wdata;
2239 struct cifsFileInfo *cfile = NULL;
2245 * If wsize is smaller than the page cache size, default to writing
2246 * one page at a time via cifs_writepage
2248 if (cifs_sb->wsize < PAGE_SIZE)
2249 return generic_writepages(mapping, wbc);
2252 if (wbc->range_cyclic) {
2253 index = mapping->writeback_index; /* Start from prev offset */
2256 index = wbc->range_start >> PAGE_SHIFT;
2257 end = wbc->range_end >> PAGE_SHIFT;
2258 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
2262 server = cifs_sb_master_tcon(cifs_sb)->ses->server;
2264 while (!done && index <= end) {
2265 unsigned int i, nr_pages, found_pages, wsize;
2266 pgoff_t next = 0, tofind, saved_index = index;
2267 struct cifs_credits credits_on_stack;
2268 struct cifs_credits *credits = &credits_on_stack;
2269 int get_file_rc = 0;
2272 cifsFileInfo_put(cfile);
2274 rc = cifs_get_writable_file(CIFS_I(inode), false, &cfile);
2276 /* in case of an error store it to return later */
2280 rc = server->ops->wait_mtu_credits(server, cifs_sb->wsize,
2287 tofind = min((wsize / PAGE_SIZE) - 1, end - index) + 1;
2289 wdata = wdata_alloc_and_fillpages(tofind, mapping, end, &index,
2294 add_credits_and_wake_if(server, credits, 0);
2298 if (found_pages == 0) {
2299 kref_put(&wdata->refcount, cifs_writedata_release);
2300 add_credits_and_wake_if(server, credits, 0);
2304 nr_pages = wdata_prepare_pages(wdata, found_pages, mapping, wbc,
2305 end, &index, &next, &done);
2307 /* nothing to write? */
2308 if (nr_pages == 0) {
2309 kref_put(&wdata->refcount, cifs_writedata_release);
2310 add_credits_and_wake_if(server, credits, 0);
2314 wdata->credits = credits_on_stack;
2315 wdata->cfile = cfile;
2318 if (!wdata->cfile) {
2319 cifs_dbg(VFS, "No writable handle in writepages rc=%d\n",
2321 if (is_retryable_error(get_file_rc))
2326 rc = wdata_send_pages(wdata, nr_pages, mapping, wbc);
2328 for (i = 0; i < nr_pages; ++i)
2329 unlock_page(wdata->pages[i]);
2331 /* send failure -- clean up the mess */
2333 add_credits_and_wake_if(server, &wdata->credits, 0);
2334 for (i = 0; i < nr_pages; ++i) {
2335 if (is_retryable_error(rc))
2336 redirty_page_for_writepage(wbc,
2339 SetPageError(wdata->pages[i]);
2340 end_page_writeback(wdata->pages[i]);
2341 put_page(wdata->pages[i]);
2343 if (!is_retryable_error(rc))
2344 mapping_set_error(mapping, rc);
2346 kref_put(&wdata->refcount, cifs_writedata_release);
2348 if (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN) {
2349 index = saved_index;
2353 /* Return immediately if we received a signal during writing */
2354 if (is_interrupt_error(rc)) {
2359 if (rc != 0 && saved_rc == 0)
2362 wbc->nr_to_write -= nr_pages;
2363 if (wbc->nr_to_write <= 0)
2369 if (!scanned && !done) {
2371 * We hit the last page and there is more work to be done: wrap
2372 * back to the start of the file
2382 if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
2383 mapping->writeback_index = index;
2386 cifsFileInfo_put(cfile);
2392 cifs_writepage_locked(struct page *page, struct writeback_control *wbc)
2398 /* BB add check for wbc flags */
2400 if (!PageUptodate(page))
2401 cifs_dbg(FYI, "ppw - page not up to date\n");
2404 * Set the "writeback" flag, and clear "dirty" in the radix tree.
2406 * A writepage() implementation always needs to do either this,
2407 * or re-dirty the page with "redirty_page_for_writepage()" in
2408 * the case of a failure.
2410 * Just unlocking the page will cause the radix tree tag-bits
2411 * to fail to update with the state of the page correctly.
2413 set_page_writeback(page);
2415 rc = cifs_partialpagewrite(page, 0, PAGE_SIZE);
2416 if (is_retryable_error(rc)) {
2417 if (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN)
2419 redirty_page_for_writepage(wbc, page);
2420 } else if (rc != 0) {
2422 mapping_set_error(page->mapping, rc);
2424 SetPageUptodate(page);
2426 end_page_writeback(page);
2432 static int cifs_writepage(struct page *page, struct writeback_control *wbc)
2434 int rc = cifs_writepage_locked(page, wbc);
2439 static int cifs_write_end(struct file *file, struct address_space *mapping,
2440 loff_t pos, unsigned len, unsigned copied,
2441 struct page *page, void *fsdata)
2444 struct inode *inode = mapping->host;
2445 struct cifsFileInfo *cfile = file->private_data;
2446 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
2449 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2452 pid = current->tgid;
2454 cifs_dbg(FYI, "write_end for page %p from pos %lld with %d bytes\n",
2457 if (PageChecked(page)) {
2459 SetPageUptodate(page);
2460 ClearPageChecked(page);
2461 } else if (!PageUptodate(page) && copied == PAGE_SIZE)
2462 SetPageUptodate(page);
2464 if (!PageUptodate(page)) {
2466 unsigned offset = pos & (PAGE_SIZE - 1);
2470 /* this is probably better than directly calling
2471 partialpage_write since in this function the file handle is
2472 known which we might as well leverage */
2473 /* BB check if anything else missing out of ppw
2474 such as updating last write time */
2475 page_data = kmap(page);
2476 rc = cifs_write(cfile, pid, page_data + offset, copied, &pos);
2477 /* if (rc < 0) should we set writebehind rc? */
2484 set_page_dirty(page);
2488 spin_lock(&inode->i_lock);
2489 if (pos > inode->i_size)
2490 i_size_write(inode, pos);
2491 spin_unlock(&inode->i_lock);
2500 int cifs_strict_fsync(struct file *file, loff_t start, loff_t end,
2505 struct cifs_tcon *tcon;
2506 struct TCP_Server_Info *server;
2507 struct cifsFileInfo *smbfile = file->private_data;
2508 struct inode *inode = file_inode(file);
2509 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2511 rc = file_write_and_wait_range(file, start, end);
2517 cifs_dbg(FYI, "Sync file - name: %pD datasync: 0x%x\n",
2520 if (!CIFS_CACHE_READ(CIFS_I(inode))) {
2521 rc = cifs_zap_mapping(inode);
2523 cifs_dbg(FYI, "rc: %d during invalidate phase\n", rc);
2524 rc = 0; /* don't care about it in fsync */
2528 tcon = tlink_tcon(smbfile->tlink);
2529 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)) {
2530 server = tcon->ses->server;
2531 if (server->ops->flush)
2532 rc = server->ops->flush(xid, tcon, &smbfile->fid);
2541 int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
2545 struct cifs_tcon *tcon;
2546 struct TCP_Server_Info *server;
2547 struct cifsFileInfo *smbfile = file->private_data;
2548 struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
2550 rc = file_write_and_wait_range(file, start, end);
2556 cifs_dbg(FYI, "Sync file - name: %pD datasync: 0x%x\n",
2559 tcon = tlink_tcon(smbfile->tlink);
2560 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)) {
2561 server = tcon->ses->server;
2562 if (server->ops->flush)
2563 rc = server->ops->flush(xid, tcon, &smbfile->fid);
2573 * As file closes, flush all cached write data for this inode checking
2574 * for write behind errors.
2576 int cifs_flush(struct file *file, fl_owner_t id)
2578 struct inode *inode = file_inode(file);
2581 if (file->f_mode & FMODE_WRITE)
2582 rc = filemap_write_and_wait(inode->i_mapping);
2584 cifs_dbg(FYI, "Flush inode %p file %p rc %d\n", inode, file, rc);
2590 cifs_write_allocate_pages(struct page **pages, unsigned long num_pages)
2595 for (i = 0; i < num_pages; i++) {
2596 pages[i] = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
2599 * save number of pages we have already allocated and
2600 * return with ENOMEM error
2609 for (i = 0; i < num_pages; i++)
2616 size_t get_numpages(const size_t wsize, const size_t len, size_t *cur_len)
2621 clen = min_t(const size_t, len, wsize);
2622 num_pages = DIV_ROUND_UP(clen, PAGE_SIZE);
2631 cifs_uncached_writedata_release(struct kref *refcount)
2634 struct cifs_writedata *wdata = container_of(refcount,
2635 struct cifs_writedata, refcount);
2637 kref_put(&wdata->ctx->refcount, cifs_aio_ctx_release);
2638 for (i = 0; i < wdata->nr_pages; i++)
2639 put_page(wdata->pages[i]);
2640 cifs_writedata_release(refcount);
2643 static void collect_uncached_write_data(struct cifs_aio_ctx *ctx);
2646 cifs_uncached_writev_complete(struct work_struct *work)
2648 struct cifs_writedata *wdata = container_of(work,
2649 struct cifs_writedata, work);
2650 struct inode *inode = d_inode(wdata->cfile->dentry);
2651 struct cifsInodeInfo *cifsi = CIFS_I(inode);
2653 spin_lock(&inode->i_lock);
2654 cifs_update_eof(cifsi, wdata->offset, wdata->bytes);
2655 if (cifsi->server_eof > inode->i_size)
2656 i_size_write(inode, cifsi->server_eof);
2657 spin_unlock(&inode->i_lock);
2659 complete(&wdata->done);
2660 collect_uncached_write_data(wdata->ctx);
2661 /* the below call can possibly free the last ref to aio ctx */
2662 kref_put(&wdata->refcount, cifs_uncached_writedata_release);
2666 wdata_fill_from_iovec(struct cifs_writedata *wdata, struct iov_iter *from,
2667 size_t *len, unsigned long *num_pages)
2669 size_t save_len, copied, bytes, cur_len = *len;
2670 unsigned long i, nr_pages = *num_pages;
2673 for (i = 0; i < nr_pages; i++) {
2674 bytes = min_t(const size_t, cur_len, PAGE_SIZE);
2675 copied = copy_page_from_iter(wdata->pages[i], 0, bytes, from);
2678 * If we didn't copy as much as we expected, then that
2679 * may mean we trod into an unmapped area. Stop copying
2680 * at that point. On the next pass through the big
2681 * loop, we'll likely end up getting a zero-length
2682 * write and bailing out of it.
2687 cur_len = save_len - cur_len;
2691 * If we have no data to send, then that probably means that
2692 * the copy above failed altogether. That's most likely because
2693 * the address in the iovec was bogus. Return -EFAULT and let
2694 * the caller free anything we allocated and bail out.
2700 * i + 1 now represents the number of pages we actually used in
2701 * the copy phase above.
2708 cifs_resend_wdata(struct cifs_writedata *wdata, struct list_head *wdata_list,
2709 struct cifs_aio_ctx *ctx)
2712 struct cifs_credits credits;
2714 struct TCP_Server_Info *server =
2715 tlink_tcon(wdata->cfile->tlink)->ses->server;
2718 if (wdata->cfile->invalidHandle) {
2719 rc = cifs_reopen_file(wdata->cfile, false);
2728 * Wait for credits to resend this wdata.
2729 * Note: we are attempting to resend the whole wdata not in
2733 rc = server->ops->wait_mtu_credits(server, wdata->bytes,
2738 if (wsize < wdata->bytes) {
2739 add_credits_and_wake_if(server, &credits, 0);
2742 } while (wsize < wdata->bytes);
2743 wdata->credits = credits;
2745 rc = adjust_credits(server, &wdata->credits, wdata->bytes);
2748 if (wdata->cfile->invalidHandle)
2751 rc = server->ops->async_writev(wdata,
2752 cifs_uncached_writedata_release);
2755 /* If the write was successfully sent, we are done */
2757 list_add_tail(&wdata->list, wdata_list);
2761 /* Roll back credits and retry if needed */
2762 add_credits_and_wake_if(server, &wdata->credits, 0);
2763 } while (rc == -EAGAIN);
2766 kref_put(&wdata->refcount, cifs_uncached_writedata_release);
2771 cifs_write_from_iter(loff_t offset, size_t len, struct iov_iter *from,
2772 struct cifsFileInfo *open_file,
2773 struct cifs_sb_info *cifs_sb, struct list_head *wdata_list,
2774 struct cifs_aio_ctx *ctx)
2778 unsigned long nr_pages, num_pages, i;
2779 struct cifs_writedata *wdata;
2780 struct iov_iter saved_from = *from;
2781 loff_t saved_offset = offset;
2783 struct TCP_Server_Info *server;
2784 struct page **pagevec;
2788 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2789 pid = open_file->pid;
2791 pid = current->tgid;
2793 server = tlink_tcon(open_file->tlink)->ses->server;
2798 struct cifs_credits credits_on_stack;
2799 struct cifs_credits *credits = &credits_on_stack;
2801 if (open_file->invalidHandle) {
2802 rc = cifs_reopen_file(open_file, false);
2809 rc = server->ops->wait_mtu_credits(server, cifs_sb->wsize,
2814 cur_len = min_t(const size_t, len, wsize);
2816 if (ctx->direct_io) {
2819 result = iov_iter_get_pages_alloc(
2820 from, &pagevec, cur_len, &start);
2823 "direct_writev couldn't get user pages "
2824 "(rc=%zd) iter type %d iov_offset %zd "
2827 from->iov_offset, from->count);
2831 add_credits_and_wake_if(server, credits, 0);
2834 cur_len = (size_t)result;
2835 iov_iter_advance(from, cur_len);
2838 (cur_len + start + PAGE_SIZE - 1) / PAGE_SIZE;
2840 wdata = cifs_writedata_direct_alloc(pagevec,
2841 cifs_uncached_writev_complete);
2844 add_credits_and_wake_if(server, credits, 0);
2849 wdata->page_offset = start;
2852 cur_len - (PAGE_SIZE - start) -
2853 (nr_pages - 2) * PAGE_SIZE :
2856 nr_pages = get_numpages(wsize, len, &cur_len);
2857 wdata = cifs_writedata_alloc(nr_pages,
2858 cifs_uncached_writev_complete);
2861 add_credits_and_wake_if(server, credits, 0);
2865 rc = cifs_write_allocate_pages(wdata->pages, nr_pages);
2867 kvfree(wdata->pages);
2869 add_credits_and_wake_if(server, credits, 0);
2873 num_pages = nr_pages;
2874 rc = wdata_fill_from_iovec(
2875 wdata, from, &cur_len, &num_pages);
2877 for (i = 0; i < nr_pages; i++)
2878 put_page(wdata->pages[i]);
2879 kvfree(wdata->pages);
2881 add_credits_and_wake_if(server, credits, 0);
2886 * Bring nr_pages down to the number of pages we
2887 * actually used, and free any pages that we didn't use.
2889 for ( ; nr_pages > num_pages; nr_pages--)
2890 put_page(wdata->pages[nr_pages - 1]);
2892 wdata->tailsz = cur_len - ((nr_pages - 1) * PAGE_SIZE);
2895 wdata->sync_mode = WB_SYNC_ALL;
2896 wdata->nr_pages = nr_pages;
2897 wdata->offset = (__u64)offset;
2898 wdata->cfile = cifsFileInfo_get(open_file);
2900 wdata->bytes = cur_len;
2901 wdata->pagesz = PAGE_SIZE;
2902 wdata->credits = credits_on_stack;
2904 kref_get(&ctx->refcount);
2906 rc = adjust_credits(server, &wdata->credits, wdata->bytes);
2909 if (wdata->cfile->invalidHandle)
2912 rc = server->ops->async_writev(wdata,
2913 cifs_uncached_writedata_release);
2917 add_credits_and_wake_if(server, &wdata->credits, 0);
2918 kref_put(&wdata->refcount,
2919 cifs_uncached_writedata_release);
2920 if (rc == -EAGAIN) {
2922 iov_iter_advance(from, offset - saved_offset);
2928 list_add_tail(&wdata->list, wdata_list);
2937 static void collect_uncached_write_data(struct cifs_aio_ctx *ctx)
2939 struct cifs_writedata *wdata, *tmp;
2940 struct cifs_tcon *tcon;
2941 struct cifs_sb_info *cifs_sb;
2942 struct dentry *dentry = ctx->cfile->dentry;
2945 tcon = tlink_tcon(ctx->cfile->tlink);
2946 cifs_sb = CIFS_SB(dentry->d_sb);
2948 mutex_lock(&ctx->aio_mutex);
2950 if (list_empty(&ctx->list)) {
2951 mutex_unlock(&ctx->aio_mutex);
2957 * Wait for and collect replies for any successful sends in order of
2958 * increasing offset. Once an error is hit, then return without waiting
2959 * for any more replies.
2962 list_for_each_entry_safe(wdata, tmp, &ctx->list, list) {
2964 if (!try_wait_for_completion(&wdata->done)) {
2965 mutex_unlock(&ctx->aio_mutex);
2972 ctx->total_len += wdata->bytes;
2974 /* resend call if it's a retryable error */
2975 if (rc == -EAGAIN) {
2976 struct list_head tmp_list;
2977 struct iov_iter tmp_from = ctx->iter;
2979 INIT_LIST_HEAD(&tmp_list);
2980 list_del_init(&wdata->list);
2983 rc = cifs_resend_wdata(
2984 wdata, &tmp_list, ctx);
2986 iov_iter_advance(&tmp_from,
2987 wdata->offset - ctx->pos);
2989 rc = cifs_write_from_iter(wdata->offset,
2990 wdata->bytes, &tmp_from,
2991 ctx->cfile, cifs_sb, &tmp_list,
2994 kref_put(&wdata->refcount,
2995 cifs_uncached_writedata_release);
2998 list_splice(&tmp_list, &ctx->list);
3002 list_del_init(&wdata->list);
3003 kref_put(&wdata->refcount, cifs_uncached_writedata_release);
3006 cifs_stats_bytes_written(tcon, ctx->total_len);
3007 set_bit(CIFS_INO_INVALID_MAPPING, &CIFS_I(dentry->d_inode)->flags);
3009 ctx->rc = (rc == 0) ? ctx->total_len : rc;
3011 mutex_unlock(&ctx->aio_mutex);
3013 if (ctx->iocb && ctx->iocb->ki_complete)
3014 ctx->iocb->ki_complete(ctx->iocb, ctx->rc, 0);
3016 complete(&ctx->done);
3019 static ssize_t __cifs_writev(
3020 struct kiocb *iocb, struct iov_iter *from, bool direct)
3022 struct file *file = iocb->ki_filp;
3023 ssize_t total_written = 0;
3024 struct cifsFileInfo *cfile;
3025 struct cifs_tcon *tcon;
3026 struct cifs_sb_info *cifs_sb;
3027 struct cifs_aio_ctx *ctx;
3028 struct iov_iter saved_from = *from;
3029 size_t len = iov_iter_count(from);
3033 * iov_iter_get_pages_alloc doesn't work with ITER_KVEC.
3034 * In this case, fall back to non-direct write function.
3035 * this could be improved by getting pages directly in ITER_KVEC
3037 if (direct && from->type & ITER_KVEC) {
3038 cifs_dbg(FYI, "use non-direct cifs_writev for kvec I/O\n");
3042 rc = generic_write_checks(iocb, from);
3046 cifs_sb = CIFS_FILE_SB(file);
3047 cfile = file->private_data;
3048 tcon = tlink_tcon(cfile->tlink);
3050 if (!tcon->ses->server->ops->async_writev)
3053 ctx = cifs_aio_ctx_alloc();
3057 ctx->cfile = cifsFileInfo_get(cfile);
3059 if (!is_sync_kiocb(iocb))
3062 ctx->pos = iocb->ki_pos;
3065 ctx->direct_io = true;
3069 rc = setup_aio_ctx_iter(ctx, from, WRITE);
3071 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3076 /* grab a lock here due to read response handlers can access ctx */
3077 mutex_lock(&ctx->aio_mutex);
3079 rc = cifs_write_from_iter(iocb->ki_pos, ctx->len, &saved_from,
3080 cfile, cifs_sb, &ctx->list, ctx);
3083 * If at least one write was successfully sent, then discard any rc
3084 * value from the later writes. If the other write succeeds, then
3085 * we'll end up returning whatever was written. If it fails, then
3086 * we'll get a new rc value from that.
3088 if (!list_empty(&ctx->list))
3091 mutex_unlock(&ctx->aio_mutex);
3094 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3098 if (!is_sync_kiocb(iocb)) {
3099 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3100 return -EIOCBQUEUED;
3103 rc = wait_for_completion_killable(&ctx->done);
3105 mutex_lock(&ctx->aio_mutex);
3106 ctx->rc = rc = -EINTR;
3107 total_written = ctx->total_len;
3108 mutex_unlock(&ctx->aio_mutex);
3111 total_written = ctx->total_len;
3114 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3116 if (unlikely(!total_written))
3119 iocb->ki_pos += total_written;
3120 return total_written;
3123 ssize_t cifs_direct_writev(struct kiocb *iocb, struct iov_iter *from)
3125 return __cifs_writev(iocb, from, true);
3128 ssize_t cifs_user_writev(struct kiocb *iocb, struct iov_iter *from)
3130 return __cifs_writev(iocb, from, false);
3134 cifs_writev(struct kiocb *iocb, struct iov_iter *from)
3136 struct file *file = iocb->ki_filp;
3137 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
3138 struct inode *inode = file->f_mapping->host;
3139 struct cifsInodeInfo *cinode = CIFS_I(inode);
3140 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
3145 * We need to hold the sem to be sure nobody modifies lock list
3146 * with a brlock that prevents writing.
3148 down_read(&cinode->lock_sem);
3150 rc = generic_write_checks(iocb, from);
3154 if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(from),
3155 server->vals->exclusive_lock_type, 0,
3156 NULL, CIFS_WRITE_OP))
3157 rc = __generic_file_write_iter(iocb, from);
3161 up_read(&cinode->lock_sem);
3162 inode_unlock(inode);
3165 rc = generic_write_sync(iocb, rc);
3170 cifs_strict_writev(struct kiocb *iocb, struct iov_iter *from)
3172 struct inode *inode = file_inode(iocb->ki_filp);
3173 struct cifsInodeInfo *cinode = CIFS_I(inode);
3174 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
3175 struct cifsFileInfo *cfile = (struct cifsFileInfo *)
3176 iocb->ki_filp->private_data;
3177 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
3180 written = cifs_get_writer(cinode);
3184 if (CIFS_CACHE_WRITE(cinode)) {
3185 if (cap_unix(tcon->ses) &&
3186 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability))
3187 && ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) {
3188 written = generic_file_write_iter(iocb, from);
3191 written = cifs_writev(iocb, from);
3195 * For non-oplocked files in strict cache mode we need to write the data
3196 * to the server exactly from the pos to pos+len-1 rather than flush all
3197 * affected pages because it may cause a error with mandatory locks on
3198 * these pages but not on the region from pos to ppos+len-1.
3200 written = cifs_user_writev(iocb, from);
3201 if (CIFS_CACHE_READ(cinode)) {
3203 * We have read level caching and we have just sent a write
3204 * request to the server thus making data in the cache stale.
3205 * Zap the cache and set oplock/lease level to NONE to avoid
3206 * reading stale data from the cache. All subsequent read
3207 * operations will read new data from the server.
3209 cifs_zap_mapping(inode);
3210 cifs_dbg(FYI, "Set Oplock/Lease to NONE for inode=%p after write\n",
3215 cifs_put_writer(cinode);
3219 static struct cifs_readdata *
3220 cifs_readdata_direct_alloc(struct page **pages, work_func_t complete)
3222 struct cifs_readdata *rdata;
3224 rdata = kzalloc(sizeof(*rdata), GFP_KERNEL);
3225 if (rdata != NULL) {
3226 rdata->pages = pages;
3227 kref_init(&rdata->refcount);
3228 INIT_LIST_HEAD(&rdata->list);
3229 init_completion(&rdata->done);
3230 INIT_WORK(&rdata->work, complete);
3236 static struct cifs_readdata *
3237 cifs_readdata_alloc(unsigned int nr_pages, work_func_t complete)
3239 struct page **pages =
3240 kcalloc(nr_pages, sizeof(struct page *), GFP_KERNEL);
3241 struct cifs_readdata *ret = NULL;
3244 ret = cifs_readdata_direct_alloc(pages, complete);
3253 cifs_readdata_release(struct kref *refcount)
3255 struct cifs_readdata *rdata = container_of(refcount,
3256 struct cifs_readdata, refcount);
3257 #ifdef CONFIG_CIFS_SMB_DIRECT
3259 smbd_deregister_mr(rdata->mr);
3264 cifsFileInfo_put(rdata->cfile);
3266 kvfree(rdata->pages);
3271 cifs_read_allocate_pages(struct cifs_readdata *rdata, unsigned int nr_pages)
3277 for (i = 0; i < nr_pages; i++) {
3278 page = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
3283 rdata->pages[i] = page;
3287 unsigned int nr_page_failed = i;
3289 for (i = 0; i < nr_page_failed; i++) {
3290 put_page(rdata->pages[i]);
3291 rdata->pages[i] = NULL;
3298 cifs_uncached_readdata_release(struct kref *refcount)
3300 struct cifs_readdata *rdata = container_of(refcount,
3301 struct cifs_readdata, refcount);
3304 kref_put(&rdata->ctx->refcount, cifs_aio_ctx_release);
3305 for (i = 0; i < rdata->nr_pages; i++) {
3306 put_page(rdata->pages[i]);
3308 cifs_readdata_release(refcount);
3312 * cifs_readdata_to_iov - copy data from pages in response to an iovec
3313 * @rdata: the readdata response with list of pages holding data
3314 * @iter: destination for our data
3316 * This function copies data from a list of pages in a readdata response into
3317 * an array of iovecs. It will first calculate where the data should go
3318 * based on the info in the readdata and then copy the data into that spot.
3321 cifs_readdata_to_iov(struct cifs_readdata *rdata, struct iov_iter *iter)
3323 size_t remaining = rdata->got_bytes;
3326 for (i = 0; i < rdata->nr_pages; i++) {
3327 struct page *page = rdata->pages[i];
3328 size_t copy = min_t(size_t, remaining, PAGE_SIZE);
3331 if (unlikely(iov_iter_is_pipe(iter))) {
3332 void *addr = kmap_atomic(page);
3334 written = copy_to_iter(addr, copy, iter);
3335 kunmap_atomic(addr);
3337 written = copy_page_to_iter(page, 0, copy, iter);
3338 remaining -= written;
3339 if (written < copy && iov_iter_count(iter) > 0)
3342 return remaining ? -EFAULT : 0;
3345 static void collect_uncached_read_data(struct cifs_aio_ctx *ctx);
3348 cifs_uncached_readv_complete(struct work_struct *work)
3350 struct cifs_readdata *rdata = container_of(work,
3351 struct cifs_readdata, work);
3353 complete(&rdata->done);
3354 collect_uncached_read_data(rdata->ctx);
3355 /* the below call can possibly free the last ref to aio ctx */
3356 kref_put(&rdata->refcount, cifs_uncached_readdata_release);
3360 uncached_fill_pages(struct TCP_Server_Info *server,
3361 struct cifs_readdata *rdata, struct iov_iter *iter,
3366 unsigned int nr_pages = rdata->nr_pages;
3367 unsigned int page_offset = rdata->page_offset;
3369 rdata->got_bytes = 0;
3370 rdata->tailsz = PAGE_SIZE;
3371 for (i = 0; i < nr_pages; i++) {
3372 struct page *page = rdata->pages[i];
3374 unsigned int segment_size = rdata->pagesz;
3377 segment_size -= page_offset;
3383 /* no need to hold page hostage */
3384 rdata->pages[i] = NULL;
3391 if (len >= segment_size)
3392 /* enough data to fill the page */
3395 rdata->tailsz = len;
3399 result = copy_page_from_iter(
3400 page, page_offset, n, iter);
3401 #ifdef CONFIG_CIFS_SMB_DIRECT
3406 result = cifs_read_page_from_socket(
3407 server, page, page_offset, n);
3411 rdata->got_bytes += result;
3414 return rdata->got_bytes > 0 && result != -ECONNABORTED ?
3415 rdata->got_bytes : result;
3419 cifs_uncached_read_into_pages(struct TCP_Server_Info *server,
3420 struct cifs_readdata *rdata, unsigned int len)
3422 return uncached_fill_pages(server, rdata, NULL, len);
3426 cifs_uncached_copy_into_pages(struct TCP_Server_Info *server,
3427 struct cifs_readdata *rdata,
3428 struct iov_iter *iter)
3430 return uncached_fill_pages(server, rdata, iter, iter->count);
3433 static int cifs_resend_rdata(struct cifs_readdata *rdata,
3434 struct list_head *rdata_list,
3435 struct cifs_aio_ctx *ctx)
3438 struct cifs_credits credits;
3440 struct TCP_Server_Info *server =
3441 tlink_tcon(rdata->cfile->tlink)->ses->server;
3444 if (rdata->cfile->invalidHandle) {
3445 rc = cifs_reopen_file(rdata->cfile, true);
3453 * Wait for credits to resend this rdata.
3454 * Note: we are attempting to resend the whole rdata not in
3458 rc = server->ops->wait_mtu_credits(server, rdata->bytes,
3464 if (rsize < rdata->bytes) {
3465 add_credits_and_wake_if(server, &credits, 0);
3468 } while (rsize < rdata->bytes);
3469 rdata->credits = credits;
3471 rc = adjust_credits(server, &rdata->credits, rdata->bytes);
3473 if (rdata->cfile->invalidHandle)
3476 rc = server->ops->async_readv(rdata);
3479 /* If the read was successfully sent, we are done */
3481 /* Add to aio pending list */
3482 list_add_tail(&rdata->list, rdata_list);
3486 /* Roll back credits and retry if needed */
3487 add_credits_and_wake_if(server, &rdata->credits, 0);
3488 } while (rc == -EAGAIN);
3491 kref_put(&rdata->refcount, cifs_uncached_readdata_release);
3496 cifs_send_async_read(loff_t offset, size_t len, struct cifsFileInfo *open_file,
3497 struct cifs_sb_info *cifs_sb, struct list_head *rdata_list,
3498 struct cifs_aio_ctx *ctx)
3500 struct cifs_readdata *rdata;
3501 unsigned int npages, rsize;
3502 struct cifs_credits credits_on_stack;
3503 struct cifs_credits *credits = &credits_on_stack;
3507 struct TCP_Server_Info *server;
3508 struct page **pagevec;
3510 struct iov_iter direct_iov = ctx->iter;
3512 server = tlink_tcon(open_file->tlink)->ses->server;
3514 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
3515 pid = open_file->pid;
3517 pid = current->tgid;
3520 iov_iter_advance(&direct_iov, offset - ctx->pos);
3523 if (open_file->invalidHandle) {
3524 rc = cifs_reopen_file(open_file, true);
3531 rc = server->ops->wait_mtu_credits(server, cifs_sb->rsize,
3536 cur_len = min_t(const size_t, len, rsize);
3538 if (ctx->direct_io) {
3541 result = iov_iter_get_pages_alloc(
3542 &direct_iov, &pagevec,
3546 "couldn't get user pages (rc=%zd)"
3548 " iov_offset %zd count %zd\n",
3549 result, direct_iov.type,
3550 direct_iov.iov_offset,
3555 add_credits_and_wake_if(server, credits, 0);
3558 cur_len = (size_t)result;
3559 iov_iter_advance(&direct_iov, cur_len);
3561 rdata = cifs_readdata_direct_alloc(
3562 pagevec, cifs_uncached_readv_complete);
3564 add_credits_and_wake_if(server, credits, 0);
3569 npages = (cur_len + start + PAGE_SIZE-1) / PAGE_SIZE;
3570 rdata->page_offset = start;
3571 rdata->tailsz = npages > 1 ?
3572 cur_len-(PAGE_SIZE-start)-(npages-2)*PAGE_SIZE :
3577 npages = DIV_ROUND_UP(cur_len, PAGE_SIZE);
3578 /* allocate a readdata struct */
3579 rdata = cifs_readdata_alloc(npages,
3580 cifs_uncached_readv_complete);
3582 add_credits_and_wake_if(server, credits, 0);
3587 rc = cifs_read_allocate_pages(rdata, npages);
3589 kvfree(rdata->pages);
3591 add_credits_and_wake_if(server, credits, 0);
3595 rdata->tailsz = PAGE_SIZE;
3598 rdata->cfile = cifsFileInfo_get(open_file);
3599 rdata->nr_pages = npages;
3600 rdata->offset = offset;
3601 rdata->bytes = cur_len;
3603 rdata->pagesz = PAGE_SIZE;
3604 rdata->read_into_pages = cifs_uncached_read_into_pages;
3605 rdata->copy_into_pages = cifs_uncached_copy_into_pages;
3606 rdata->credits = credits_on_stack;
3608 kref_get(&ctx->refcount);
3610 rc = adjust_credits(server, &rdata->credits, rdata->bytes);
3613 if (rdata->cfile->invalidHandle)
3616 rc = server->ops->async_readv(rdata);
3620 add_credits_and_wake_if(server, &rdata->credits, 0);
3621 kref_put(&rdata->refcount,
3622 cifs_uncached_readdata_release);
3623 if (rc == -EAGAIN) {
3624 iov_iter_revert(&direct_iov, cur_len);
3630 list_add_tail(&rdata->list, rdata_list);
3639 collect_uncached_read_data(struct cifs_aio_ctx *ctx)
3641 struct cifs_readdata *rdata, *tmp;
3642 struct iov_iter *to = &ctx->iter;
3643 struct cifs_sb_info *cifs_sb;
3646 cifs_sb = CIFS_SB(ctx->cfile->dentry->d_sb);
3648 mutex_lock(&ctx->aio_mutex);
3650 if (list_empty(&ctx->list)) {
3651 mutex_unlock(&ctx->aio_mutex);
3656 /* the loop below should proceed in the order of increasing offsets */
3658 list_for_each_entry_safe(rdata, tmp, &ctx->list, list) {
3660 if (!try_wait_for_completion(&rdata->done)) {
3661 mutex_unlock(&ctx->aio_mutex);
3665 if (rdata->result == -EAGAIN) {
3666 /* resend call if it's a retryable error */
3667 struct list_head tmp_list;
3668 unsigned int got_bytes = rdata->got_bytes;
3670 list_del_init(&rdata->list);
3671 INIT_LIST_HEAD(&tmp_list);
3674 * Got a part of data and then reconnect has
3675 * happened -- fill the buffer and continue
3678 if (got_bytes && got_bytes < rdata->bytes) {
3680 if (!ctx->direct_io)
3681 rc = cifs_readdata_to_iov(rdata, to);
3683 kref_put(&rdata->refcount,
3684 cifs_uncached_readdata_release);
3689 if (ctx->direct_io) {
3691 * Re-use rdata as this is a
3694 rc = cifs_resend_rdata(
3698 rc = cifs_send_async_read(
3699 rdata->offset + got_bytes,
3700 rdata->bytes - got_bytes,
3701 rdata->cfile, cifs_sb,
3704 kref_put(&rdata->refcount,
3705 cifs_uncached_readdata_release);
3708 list_splice(&tmp_list, &ctx->list);
3711 } else if (rdata->result)
3713 else if (!ctx->direct_io)
3714 rc = cifs_readdata_to_iov(rdata, to);
3716 /* if there was a short read -- discard anything left */
3717 if (rdata->got_bytes && rdata->got_bytes < rdata->bytes)
3720 ctx->total_len += rdata->got_bytes;
3722 list_del_init(&rdata->list);
3723 kref_put(&rdata->refcount, cifs_uncached_readdata_release);
3726 if (!ctx->direct_io)
3727 ctx->total_len = ctx->len - iov_iter_count(to);
3729 /* mask nodata case */
3733 ctx->rc = (rc == 0) ? ctx->total_len : rc;
3735 mutex_unlock(&ctx->aio_mutex);
3737 if (ctx->iocb && ctx->iocb->ki_complete)
3738 ctx->iocb->ki_complete(ctx->iocb, ctx->rc, 0);
3740 complete(&ctx->done);
3743 static ssize_t __cifs_readv(
3744 struct kiocb *iocb, struct iov_iter *to, bool direct)
3747 struct file *file = iocb->ki_filp;
3748 struct cifs_sb_info *cifs_sb;
3749 struct cifsFileInfo *cfile;
3750 struct cifs_tcon *tcon;
3751 ssize_t rc, total_read = 0;
3752 loff_t offset = iocb->ki_pos;
3753 struct cifs_aio_ctx *ctx;
3756 * iov_iter_get_pages_alloc() doesn't work with ITER_KVEC,
3757 * fall back to data copy read path
3758 * this could be improved by getting pages directly in ITER_KVEC
3760 if (direct && to->type & ITER_KVEC) {
3761 cifs_dbg(FYI, "use non-direct cifs_user_readv for kvec I/O\n");
3765 len = iov_iter_count(to);
3769 cifs_sb = CIFS_FILE_SB(file);
3770 cfile = file->private_data;
3771 tcon = tlink_tcon(cfile->tlink);
3773 if (!tcon->ses->server->ops->async_readv)
3776 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
3777 cifs_dbg(FYI, "attempting read on write only file instance\n");
3779 ctx = cifs_aio_ctx_alloc();
3783 ctx->cfile = cifsFileInfo_get(cfile);
3785 if (!is_sync_kiocb(iocb))
3788 if (iter_is_iovec(to))
3789 ctx->should_dirty = true;
3793 ctx->direct_io = true;
3797 rc = setup_aio_ctx_iter(ctx, to, READ);
3799 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3805 /* grab a lock here due to read response handlers can access ctx */
3806 mutex_lock(&ctx->aio_mutex);
3808 rc = cifs_send_async_read(offset, len, cfile, cifs_sb, &ctx->list, ctx);
3810 /* if at least one read request send succeeded, then reset rc */
3811 if (!list_empty(&ctx->list))
3814 mutex_unlock(&ctx->aio_mutex);
3817 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3821 if (!is_sync_kiocb(iocb)) {
3822 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3823 return -EIOCBQUEUED;
3826 rc = wait_for_completion_killable(&ctx->done);
3828 mutex_lock(&ctx->aio_mutex);
3829 ctx->rc = rc = -EINTR;
3830 total_read = ctx->total_len;
3831 mutex_unlock(&ctx->aio_mutex);
3834 total_read = ctx->total_len;
3837 kref_put(&ctx->refcount, cifs_aio_ctx_release);
3840 iocb->ki_pos += total_read;
3846 ssize_t cifs_direct_readv(struct kiocb *iocb, struct iov_iter *to)
3848 return __cifs_readv(iocb, to, true);
3851 ssize_t cifs_user_readv(struct kiocb *iocb, struct iov_iter *to)
3853 return __cifs_readv(iocb, to, false);
3857 cifs_strict_readv(struct kiocb *iocb, struct iov_iter *to)
3859 struct inode *inode = file_inode(iocb->ki_filp);
3860 struct cifsInodeInfo *cinode = CIFS_I(inode);
3861 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
3862 struct cifsFileInfo *cfile = (struct cifsFileInfo *)
3863 iocb->ki_filp->private_data;
3864 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
3868 * In strict cache mode we need to read from the server all the time
3869 * if we don't have level II oplock because the server can delay mtime
3870 * change - so we can't make a decision about inode invalidating.
3871 * And we can also fail with pagereading if there are mandatory locks
3872 * on pages affected by this read but not on the region from pos to
3875 if (!CIFS_CACHE_READ(cinode))
3876 return cifs_user_readv(iocb, to);
3878 if (cap_unix(tcon->ses) &&
3879 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
3880 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
3881 return generic_file_read_iter(iocb, to);
3884 * We need to hold the sem to be sure nobody modifies lock list
3885 * with a brlock that prevents reading.
3887 down_read(&cinode->lock_sem);
3888 if (!cifs_find_lock_conflict(cfile, iocb->ki_pos, iov_iter_count(to),
3889 tcon->ses->server->vals->shared_lock_type,
3890 0, NULL, CIFS_READ_OP))
3891 rc = generic_file_read_iter(iocb, to);
3892 up_read(&cinode->lock_sem);
3897 cifs_read(struct file *file, char *read_data, size_t read_size, loff_t *offset)
3900 unsigned int bytes_read = 0;
3901 unsigned int total_read;
3902 unsigned int current_read_size;
3904 struct cifs_sb_info *cifs_sb;
3905 struct cifs_tcon *tcon;
3906 struct TCP_Server_Info *server;
3909 struct cifsFileInfo *open_file;
3910 struct cifs_io_parms io_parms;
3911 int buf_type = CIFS_NO_BUFFER;
3915 cifs_sb = CIFS_FILE_SB(file);
3917 /* FIXME: set up handlers for larger reads and/or convert to async */
3918 rsize = min_t(unsigned int, cifs_sb->rsize, CIFSMaxBufSize);
3920 if (file->private_data == NULL) {
3925 open_file = file->private_data;
3926 tcon = tlink_tcon(open_file->tlink);
3927 server = tcon->ses->server;
3929 if (!server->ops->sync_read) {
3934 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
3935 pid = open_file->pid;
3937 pid = current->tgid;
3939 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
3940 cifs_dbg(FYI, "attempting read on write only file instance\n");
3942 for (total_read = 0, cur_offset = read_data; read_size > total_read;
3943 total_read += bytes_read, cur_offset += bytes_read) {
3945 current_read_size = min_t(uint, read_size - total_read,
3948 * For windows me and 9x we do not want to request more
3949 * than it negotiated since it will refuse the read
3952 if ((tcon->ses) && !(tcon->ses->capabilities &
3953 tcon->ses->server->vals->cap_large_files)) {
3954 current_read_size = min_t(uint,
3955 current_read_size, CIFSMaxBufSize);
3957 if (open_file->invalidHandle) {
3958 rc = cifs_reopen_file(open_file, true);
3963 io_parms.tcon = tcon;
3964 io_parms.offset = *offset;
3965 io_parms.length = current_read_size;
3966 rc = server->ops->sync_read(xid, &open_file->fid, &io_parms,
3967 &bytes_read, &cur_offset,
3969 } while (rc == -EAGAIN);
3971 if (rc || (bytes_read == 0)) {
3979 cifs_stats_bytes_read(tcon, total_read);
3980 *offset += bytes_read;
3988 * If the page is mmap'ed into a process' page tables, then we need to make
3989 * sure that it doesn't change while being written back.
3992 cifs_page_mkwrite(struct vm_fault *vmf)
3994 struct page *page = vmf->page;
3997 return VM_FAULT_LOCKED;
4000 static const struct vm_operations_struct cifs_file_vm_ops = {
4001 .fault = filemap_fault,
4002 .map_pages = filemap_map_pages,
4003 .page_mkwrite = cifs_page_mkwrite,
4006 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
4009 struct inode *inode = file_inode(file);
4013 if (!CIFS_CACHE_READ(CIFS_I(inode)))
4014 rc = cifs_zap_mapping(inode);
4016 rc = generic_file_mmap(file, vma);
4018 vma->vm_ops = &cifs_file_vm_ops;
4024 int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
4030 rc = cifs_revalidate_file(file);
4032 cifs_dbg(FYI, "Validation prior to mmap failed, error=%d\n",
4035 rc = generic_file_mmap(file, vma);
4037 vma->vm_ops = &cifs_file_vm_ops;
4044 cifs_readv_complete(struct work_struct *work)
4046 unsigned int i, got_bytes;
4047 struct cifs_readdata *rdata = container_of(work,
4048 struct cifs_readdata, work);
4050 got_bytes = rdata->got_bytes;
4051 for (i = 0; i < rdata->nr_pages; i++) {
4052 struct page *page = rdata->pages[i];
4054 lru_cache_add_file(page);
4056 if (rdata->result == 0 ||
4057 (rdata->result == -EAGAIN && got_bytes)) {
4058 flush_dcache_page(page);
4059 SetPageUptodate(page);
4064 if (rdata->result == 0 ||
4065 (rdata->result == -EAGAIN && got_bytes))
4066 cifs_readpage_to_fscache(rdata->mapping->host, page);
4068 got_bytes -= min_t(unsigned int, PAGE_SIZE, got_bytes);
4071 rdata->pages[i] = NULL;
4073 kref_put(&rdata->refcount, cifs_readdata_release);
4077 readpages_fill_pages(struct TCP_Server_Info *server,
4078 struct cifs_readdata *rdata, struct iov_iter *iter,
4085 unsigned int nr_pages = rdata->nr_pages;
4086 unsigned int page_offset = rdata->page_offset;
4088 /* determine the eof that the server (probably) has */
4089 eof = CIFS_I(rdata->mapping->host)->server_eof;
4090 eof_index = eof ? (eof - 1) >> PAGE_SHIFT : 0;
4091 cifs_dbg(FYI, "eof=%llu eof_index=%lu\n", eof, eof_index);
4093 rdata->got_bytes = 0;
4094 rdata->tailsz = PAGE_SIZE;
4095 for (i = 0; i < nr_pages; i++) {
4096 struct page *page = rdata->pages[i];
4097 unsigned int to_read = rdata->pagesz;
4101 to_read -= page_offset;
4107 if (len >= to_read) {
4109 } else if (len > 0) {
4110 /* enough for partial page, fill and zero the rest */
4111 zero_user(page, len + page_offset, to_read - len);
4112 n = rdata->tailsz = len;
4114 } else if (page->index > eof_index) {
4116 * The VFS will not try to do readahead past the
4117 * i_size, but it's possible that we have outstanding
4118 * writes with gaps in the middle and the i_size hasn't
4119 * caught up yet. Populate those with zeroed out pages
4120 * to prevent the VFS from repeatedly attempting to
4121 * fill them until the writes are flushed.
4123 zero_user(page, 0, PAGE_SIZE);
4124 lru_cache_add_file(page);
4125 flush_dcache_page(page);
4126 SetPageUptodate(page);
4129 rdata->pages[i] = NULL;
4133 /* no need to hold page hostage */
4134 lru_cache_add_file(page);
4137 rdata->pages[i] = NULL;
4143 result = copy_page_from_iter(
4144 page, page_offset, n, iter);
4145 #ifdef CONFIG_CIFS_SMB_DIRECT
4150 result = cifs_read_page_from_socket(
4151 server, page, page_offset, n);
4155 rdata->got_bytes += result;
4158 return rdata->got_bytes > 0 && result != -ECONNABORTED ?
4159 rdata->got_bytes : result;
4163 cifs_readpages_read_into_pages(struct TCP_Server_Info *server,
4164 struct cifs_readdata *rdata, unsigned int len)
4166 return readpages_fill_pages(server, rdata, NULL, len);
4170 cifs_readpages_copy_into_pages(struct TCP_Server_Info *server,
4171 struct cifs_readdata *rdata,
4172 struct iov_iter *iter)
4174 return readpages_fill_pages(server, rdata, iter, iter->count);
4178 readpages_get_pages(struct address_space *mapping, struct list_head *page_list,
4179 unsigned int rsize, struct list_head *tmplist,
4180 unsigned int *nr_pages, loff_t *offset, unsigned int *bytes)
4182 struct page *page, *tpage;
4183 unsigned int expected_index;
4185 gfp_t gfp = readahead_gfp_mask(mapping);
4187 INIT_LIST_HEAD(tmplist);
4189 page = lru_to_page(page_list);
4192 * Lock the page and put it in the cache. Since no one else
4193 * should have access to this page, we're safe to simply set
4194 * PG_locked without checking it first.
4196 __SetPageLocked(page);
4197 rc = add_to_page_cache_locked(page, mapping,
4200 /* give up if we can't stick it in the cache */
4202 __ClearPageLocked(page);
4206 /* move first page to the tmplist */
4207 *offset = (loff_t)page->index << PAGE_SHIFT;
4210 list_move_tail(&page->lru, tmplist);
4212 /* now try and add more pages onto the request */
4213 expected_index = page->index + 1;
4214 list_for_each_entry_safe_reverse(page, tpage, page_list, lru) {
4215 /* discontinuity ? */
4216 if (page->index != expected_index)
4219 /* would this page push the read over the rsize? */
4220 if (*bytes + PAGE_SIZE > rsize)
4223 __SetPageLocked(page);
4224 if (add_to_page_cache_locked(page, mapping, page->index, gfp)) {
4225 __ClearPageLocked(page);
4228 list_move_tail(&page->lru, tmplist);
4229 (*bytes) += PAGE_SIZE;
4236 static int cifs_readpages(struct file *file, struct address_space *mapping,
4237 struct list_head *page_list, unsigned num_pages)
4240 struct list_head tmplist;
4241 struct cifsFileInfo *open_file = file->private_data;
4242 struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
4243 struct TCP_Server_Info *server;
4249 * Reads as many pages as possible from fscache. Returns -ENOBUFS
4250 * immediately if the cookie is negative
4252 * After this point, every page in the list might have PG_fscache set,
4253 * so we will need to clean that up off of every page we don't use.
4255 rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,
4262 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
4263 pid = open_file->pid;
4265 pid = current->tgid;
4268 server = tlink_tcon(open_file->tlink)->ses->server;
4270 cifs_dbg(FYI, "%s: file=%p mapping=%p num_pages=%u\n",
4271 __func__, file, mapping, num_pages);
4274 * Start with the page at end of list and move it to private
4275 * list. Do the same with any following pages until we hit
4276 * the rsize limit, hit an index discontinuity, or run out of
4277 * pages. Issue the async read and then start the loop again
4278 * until the list is empty.
4280 * Note that list order is important. The page_list is in
4281 * the order of declining indexes. When we put the pages in
4282 * the rdata->pages, then we want them in increasing order.
4284 while (!list_empty(page_list)) {
4285 unsigned int i, nr_pages, bytes, rsize;
4287 struct page *page, *tpage;
4288 struct cifs_readdata *rdata;
4289 struct cifs_credits credits_on_stack;
4290 struct cifs_credits *credits = &credits_on_stack;
4292 if (open_file->invalidHandle) {
4293 rc = cifs_reopen_file(open_file, true);
4300 rc = server->ops->wait_mtu_credits(server, cifs_sb->rsize,
4306 * Give up immediately if rsize is too small to read an entire
4307 * page. The VFS will fall back to readpage. We should never
4308 * reach this point however since we set ra_pages to 0 when the
4309 * rsize is smaller than a cache page.
4311 if (unlikely(rsize < PAGE_SIZE)) {
4312 add_credits_and_wake_if(server, credits, 0);
4317 rc = readpages_get_pages(mapping, page_list, rsize, &tmplist,
4318 &nr_pages, &offset, &bytes);
4320 add_credits_and_wake_if(server, credits, 0);
4324 rdata = cifs_readdata_alloc(nr_pages, cifs_readv_complete);
4326 /* best to give up if we're out of mem */
4327 list_for_each_entry_safe(page, tpage, &tmplist, lru) {
4328 list_del(&page->lru);
4329 lru_cache_add_file(page);
4334 add_credits_and_wake_if(server, credits, 0);
4338 rdata->cfile = cifsFileInfo_get(open_file);
4339 rdata->mapping = mapping;
4340 rdata->offset = offset;
4341 rdata->bytes = bytes;
4343 rdata->pagesz = PAGE_SIZE;
4344 rdata->tailsz = PAGE_SIZE;
4345 rdata->read_into_pages = cifs_readpages_read_into_pages;
4346 rdata->copy_into_pages = cifs_readpages_copy_into_pages;
4347 rdata->credits = credits_on_stack;
4349 list_for_each_entry_safe(page, tpage, &tmplist, lru) {
4350 list_del(&page->lru);
4351 rdata->pages[rdata->nr_pages++] = page;
4354 rc = adjust_credits(server, &rdata->credits, rdata->bytes);
4357 if (rdata->cfile->invalidHandle)
4360 rc = server->ops->async_readv(rdata);
4364 add_credits_and_wake_if(server, &rdata->credits, 0);
4365 for (i = 0; i < rdata->nr_pages; i++) {
4366 page = rdata->pages[i];
4367 lru_cache_add_file(page);
4371 /* Fallback to the readpage in error/reconnect cases */
4372 kref_put(&rdata->refcount, cifs_readdata_release);
4376 kref_put(&rdata->refcount, cifs_readdata_release);
4379 /* Any pages that have been shown to fscache but didn't get added to
4380 * the pagecache must be uncached before they get returned to the
4383 cifs_fscache_readpages_cancel(mapping->host, page_list);
4389 * cifs_readpage_worker must be called with the page pinned
4391 static int cifs_readpage_worker(struct file *file, struct page *page,
4397 /* Is the page cached? */
4398 rc = cifs_readpage_from_fscache(file_inode(file), page);
4402 read_data = kmap(page);
4403 /* for reads over a certain size could initiate async read ahead */
4405 rc = cifs_read(file, read_data, PAGE_SIZE, poffset);
4410 cifs_dbg(FYI, "Bytes read %d\n", rc);
4412 /* we do not want atime to be less than mtime, it broke some apps */
4413 file_inode(file)->i_atime = current_time(file_inode(file));
4414 if (timespec64_compare(&(file_inode(file)->i_atime), &(file_inode(file)->i_mtime)))
4415 file_inode(file)->i_atime = file_inode(file)->i_mtime;
4417 file_inode(file)->i_atime = current_time(file_inode(file));
4420 memset(read_data + rc, 0, PAGE_SIZE - rc);
4422 flush_dcache_page(page);
4423 SetPageUptodate(page);
4425 /* send this page to the cache */
4426 cifs_readpage_to_fscache(file_inode(file), page);
4438 static int cifs_readpage(struct file *file, struct page *page)
4440 loff_t offset = (loff_t)page->index << PAGE_SHIFT;
4446 if (file->private_data == NULL) {
4452 cifs_dbg(FYI, "readpage %p at offset %d 0x%x\n",
4453 page, (int)offset, (int)offset);
4455 rc = cifs_readpage_worker(file, page, &offset);
4461 static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
4463 struct cifsFileInfo *open_file;
4464 struct cifs_tcon *tcon =
4465 cifs_sb_master_tcon(CIFS_SB(cifs_inode->vfs_inode.i_sb));
4467 spin_lock(&tcon->open_file_lock);
4468 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
4469 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
4470 spin_unlock(&tcon->open_file_lock);
4474 spin_unlock(&tcon->open_file_lock);
4478 /* We do not want to update the file size from server for inodes
4479 open for write - to avoid races with writepage extending
4480 the file - in the future we could consider allowing
4481 refreshing the inode only on increases in the file size
4482 but this is tricky to do without racing with writebehind
4483 page caching in the current Linux kernel design */
4484 bool is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file)
4489 if (is_inode_writable(cifsInode)) {
4490 /* This inode is open for write at least once */
4491 struct cifs_sb_info *cifs_sb;
4493 cifs_sb = CIFS_SB(cifsInode->vfs_inode.i_sb);
4494 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO) {
4495 /* since no page cache to corrupt on directio
4496 we can change size safely */
4500 if (i_size_read(&cifsInode->vfs_inode) < end_of_file)
4508 static int cifs_write_begin(struct file *file, struct address_space *mapping,
4509 loff_t pos, unsigned len, unsigned flags,
4510 struct page **pagep, void **fsdata)
4513 pgoff_t index = pos >> PAGE_SHIFT;
4514 loff_t offset = pos & (PAGE_SIZE - 1);
4515 loff_t page_start = pos & PAGE_MASK;
4520 cifs_dbg(FYI, "write_begin from %lld len %d\n", (long long)pos, len);
4523 page = grab_cache_page_write_begin(mapping, index, flags);
4529 if (PageUptodate(page))
4533 * If we write a full page it will be up to date, no need to read from
4534 * the server. If the write is short, we'll end up doing a sync write
4537 if (len == PAGE_SIZE)
4541 * optimize away the read when we have an oplock, and we're not
4542 * expecting to use any of the data we'd be reading in. That
4543 * is, when the page lies beyond the EOF, or straddles the EOF
4544 * and the write will cover all of the existing data.
4546 if (CIFS_CACHE_READ(CIFS_I(mapping->host))) {
4547 i_size = i_size_read(mapping->host);
4548 if (page_start >= i_size ||
4549 (offset == 0 && (pos + len) >= i_size)) {
4550 zero_user_segments(page, 0, offset,
4554 * PageChecked means that the parts of the page
4555 * to which we're not writing are considered up
4556 * to date. Once the data is copied to the
4557 * page, it can be set uptodate.
4559 SetPageChecked(page);
4564 if ((file->f_flags & O_ACCMODE) != O_WRONLY && !oncethru) {
4566 * might as well read a page, it is fast enough. If we get
4567 * an error, we don't need to return it. cifs_write_end will
4568 * do a sync write instead since PG_uptodate isn't set.
4570 cifs_readpage_worker(file, page, &page_start);
4575 /* we could try using another file handle if there is one -
4576 but how would we lock it to prevent close of that handle
4577 racing with this read? In any case
4578 this will be written out by write_end so is fine */
4585 static int cifs_release_page(struct page *page, gfp_t gfp)
4587 if (PagePrivate(page))
4590 return cifs_fscache_release_page(page, gfp);
4593 static void cifs_invalidate_page(struct page *page, unsigned int offset,
4594 unsigned int length)
4596 struct cifsInodeInfo *cifsi = CIFS_I(page->mapping->host);
4598 if (offset == 0 && length == PAGE_SIZE)
4599 cifs_fscache_invalidate_page(page, &cifsi->vfs_inode);
4602 static int cifs_launder_page(struct page *page)
4605 loff_t range_start = page_offset(page);
4606 loff_t range_end = range_start + (loff_t)(PAGE_SIZE - 1);
4607 struct writeback_control wbc = {
4608 .sync_mode = WB_SYNC_ALL,
4610 .range_start = range_start,
4611 .range_end = range_end,
4614 cifs_dbg(FYI, "Launder page: %p\n", page);
4616 if (clear_page_dirty_for_io(page))
4617 rc = cifs_writepage_locked(page, &wbc);
4619 cifs_fscache_invalidate_page(page, page->mapping->host);
4623 void cifs_oplock_break(struct work_struct *work)
4625 struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
4627 struct inode *inode = d_inode(cfile->dentry);
4628 struct cifsInodeInfo *cinode = CIFS_I(inode);
4629 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
4630 struct TCP_Server_Info *server = tcon->ses->server;
4633 wait_on_bit(&cinode->flags, CIFS_INODE_PENDING_WRITERS,
4634 TASK_UNINTERRUPTIBLE);
4636 server->ops->downgrade_oplock(server, cinode,
4637 test_bit(CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2, &cinode->flags));
4639 if (!CIFS_CACHE_WRITE(cinode) && CIFS_CACHE_READ(cinode) &&
4640 cifs_has_mand_locks(cinode)) {
4641 cifs_dbg(FYI, "Reset oplock to None for inode=%p due to mand locks\n",
4646 if (inode && S_ISREG(inode->i_mode)) {
4647 if (CIFS_CACHE_READ(cinode))
4648 break_lease(inode, O_RDONLY);
4650 break_lease(inode, O_WRONLY);
4651 rc = filemap_fdatawrite(inode->i_mapping);
4652 if (!CIFS_CACHE_READ(cinode)) {
4653 rc = filemap_fdatawait(inode->i_mapping);
4654 mapping_set_error(inode->i_mapping, rc);
4655 cifs_zap_mapping(inode);
4657 cifs_dbg(FYI, "Oplock flush inode %p rc %d\n", inode, rc);
4660 rc = cifs_push_locks(cfile);
4662 cifs_dbg(VFS, "Push locks rc = %d\n", rc);
4665 * releasing stale oplock after recent reconnect of smb session using
4666 * a now incorrect file handle is not a data integrity issue but do
4667 * not bother sending an oplock release if session to server still is
4668 * disconnected since oplock already released by the server
4670 if (!cfile->oplock_break_cancelled) {
4671 rc = tcon->ses->server->ops->oplock_response(tcon, &cfile->fid,
4673 cifs_dbg(FYI, "Oplock release rc = %d\n", rc);
4675 _cifsFileInfo_put(cfile, false /* do not wait for ourself */);
4676 cifs_done_oplock_break(cinode);
4680 * The presence of cifs_direct_io() in the address space ops vector
4681 * allowes open() O_DIRECT flags which would have failed otherwise.
4683 * In the non-cached mode (mount with cache=none), we shunt off direct read and write requests
4684 * so this method should never be called.
4686 * Direct IO is not yet supported in the cached mode.
4689 cifs_direct_io(struct kiocb *iocb, struct iov_iter *iter)
4693 * Eventually need to support direct IO for non forcedirectio mounts
4699 const struct address_space_operations cifs_addr_ops = {
4700 .readpage = cifs_readpage,
4701 .readpages = cifs_readpages,
4702 .writepage = cifs_writepage,
4703 .writepages = cifs_writepages,
4704 .write_begin = cifs_write_begin,
4705 .write_end = cifs_write_end,
4706 .set_page_dirty = __set_page_dirty_nobuffers,
4707 .releasepage = cifs_release_page,
4708 .direct_IO = cifs_direct_io,
4709 .invalidatepage = cifs_invalidate_page,
4710 .launder_page = cifs_launder_page,
4714 * cifs_readpages requires the server to support a buffer large enough to
4715 * contain the header plus one complete page of data. Otherwise, we need
4716 * to leave cifs_readpages out of the address space operations.
4718 const struct address_space_operations cifs_addr_ops_smallbuf = {
4719 .readpage = cifs_readpage,
4720 .writepage = cifs_writepage,
4721 .writepages = cifs_writepages,
4722 .write_begin = cifs_write_begin,
4723 .write_end = cifs_write_end,
4724 .set_page_dirty = __set_page_dirty_nobuffers,
4725 .releasepage = cifs_release_page,
4726 .invalidatepage = cifs_invalidate_page,
4727 .launder_page = cifs_launder_page,