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>
36 #include <asm/div64.h>
40 #include "cifsproto.h"
41 #include "cifs_unicode.h"
42 #include "cifs_debug.h"
43 #include "cifs_fs_sb.h"
47 static inline int cifs_convert_flags(unsigned int flags)
49 if ((flags & O_ACCMODE) == O_RDONLY)
51 else if ((flags & O_ACCMODE) == O_WRONLY)
53 else if ((flags & O_ACCMODE) == O_RDWR) {
54 /* GENERIC_ALL is too much permission to request
55 can cause unnecessary access denied on create */
56 /* return GENERIC_ALL; */
57 return (GENERIC_READ | GENERIC_WRITE);
60 return (READ_CONTROL | FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES |
61 FILE_WRITE_EA | FILE_APPEND_DATA | FILE_WRITE_DATA |
65 static u32 cifs_posix_convert_flags(unsigned int flags)
69 if ((flags & O_ACCMODE) == O_RDONLY)
70 posix_flags = SMB_O_RDONLY;
71 else if ((flags & O_ACCMODE) == O_WRONLY)
72 posix_flags = SMB_O_WRONLY;
73 else if ((flags & O_ACCMODE) == O_RDWR)
74 posix_flags = SMB_O_RDWR;
76 if (flags & O_CREAT) {
77 posix_flags |= SMB_O_CREAT;
79 posix_flags |= SMB_O_EXCL;
80 } else if (flags & O_EXCL)
81 cifs_dbg(FYI, "Application %s pid %d has incorrectly set O_EXCL flag but not O_CREAT on file open. Ignoring O_EXCL\n",
82 current->comm, current->tgid);
85 posix_flags |= SMB_O_TRUNC;
86 /* be safe and imply O_SYNC for O_DSYNC */
88 posix_flags |= SMB_O_SYNC;
89 if (flags & O_DIRECTORY)
90 posix_flags |= SMB_O_DIRECTORY;
91 if (flags & O_NOFOLLOW)
92 posix_flags |= SMB_O_NOFOLLOW;
94 posix_flags |= SMB_O_DIRECT;
99 static inline int cifs_get_disposition(unsigned int flags)
101 if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
103 else if ((flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
104 return FILE_OVERWRITE_IF;
105 else if ((flags & O_CREAT) == O_CREAT)
107 else if ((flags & O_TRUNC) == O_TRUNC)
108 return FILE_OVERWRITE;
113 int cifs_posix_open(char *full_path, struct inode **pinode,
114 struct super_block *sb, int mode, unsigned int f_flags,
115 __u32 *poplock, __u16 *pnetfid, unsigned int xid)
118 FILE_UNIX_BASIC_INFO *presp_data;
119 __u32 posix_flags = 0;
120 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
121 struct cifs_fattr fattr;
122 struct tcon_link *tlink;
123 struct cifs_tcon *tcon;
125 cifs_dbg(FYI, "posix open %s\n", full_path);
127 presp_data = kzalloc(sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL);
128 if (presp_data == NULL)
131 tlink = cifs_sb_tlink(cifs_sb);
137 tcon = tlink_tcon(tlink);
138 mode &= ~current_umask();
140 posix_flags = cifs_posix_convert_flags(f_flags);
141 rc = CIFSPOSIXCreate(xid, tcon, posix_flags, mode, pnetfid, presp_data,
142 poplock, full_path, cifs_sb->local_nls,
143 cifs_sb->mnt_cifs_flags &
144 CIFS_MOUNT_MAP_SPECIAL_CHR);
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;
229 oparms.cifs_sb = cifs_sb;
230 oparms.desired_access = desired_access;
231 oparms.create_options = create_options;
232 oparms.disposition = disposition;
233 oparms.path = full_path;
235 oparms.reconnect = false;
237 rc = server->ops->open(xid, &oparms, oplock, buf);
243 rc = cifs_get_inode_info_unix(&inode, full_path, inode->i_sb,
246 rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb,
255 cifs_has_mand_locks(struct cifsInodeInfo *cinode)
257 struct cifs_fid_locks *cur;
258 bool has_locks = false;
260 down_read(&cinode->lock_sem);
261 list_for_each_entry(cur, &cinode->llist, llist) {
262 if (!list_empty(&cur->locks)) {
267 up_read(&cinode->lock_sem);
271 struct cifsFileInfo *
272 cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
273 struct tcon_link *tlink, __u32 oplock)
275 struct dentry *dentry = file->f_path.dentry;
276 struct inode *inode = dentry->d_inode;
277 struct cifsInodeInfo *cinode = CIFS_I(inode);
278 struct cifsFileInfo *cfile;
279 struct cifs_fid_locks *fdlocks;
280 struct cifs_tcon *tcon = tlink_tcon(tlink);
281 struct TCP_Server_Info *server = tcon->ses->server;
283 cfile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
287 fdlocks = kzalloc(sizeof(struct cifs_fid_locks), GFP_KERNEL);
293 INIT_LIST_HEAD(&fdlocks->locks);
294 fdlocks->cfile = cfile;
295 cfile->llist = fdlocks;
296 down_write(&cinode->lock_sem);
297 list_add(&fdlocks->llist, &cinode->llist);
298 up_write(&cinode->lock_sem);
301 cfile->pid = current->tgid;
302 cfile->uid = current_fsuid();
303 cfile->dentry = dget(dentry);
304 cfile->f_flags = file->f_flags;
305 cfile->invalidHandle = false;
306 cfile->tlink = cifs_get_tlink(tlink);
307 INIT_WORK(&cfile->oplock_break, cifs_oplock_break);
308 mutex_init(&cfile->fh_mutex);
310 cifs_sb_active(inode->i_sb);
313 * If the server returned a read oplock and we have mandatory brlocks,
314 * set oplock level to None.
316 if (oplock == server->vals->oplock_read &&
317 cifs_has_mand_locks(cinode)) {
318 cifs_dbg(FYI, "Reset oplock val from read to None due to mand locks\n");
322 spin_lock(&cifs_file_list_lock);
323 if (fid->pending_open->oplock != CIFS_OPLOCK_NO_CHANGE && oplock)
324 oplock = fid->pending_open->oplock;
325 list_del(&fid->pending_open->olist);
327 server->ops->set_fid(cfile, fid, oplock);
329 list_add(&cfile->tlist, &tcon->openFileList);
330 /* if readable file instance put first in list*/
331 if (file->f_mode & FMODE_READ)
332 list_add(&cfile->flist, &cinode->openFileList);
334 list_add_tail(&cfile->flist, &cinode->openFileList);
335 spin_unlock(&cifs_file_list_lock);
337 file->private_data = cfile;
341 struct cifsFileInfo *
342 cifsFileInfo_get(struct cifsFileInfo *cifs_file)
344 spin_lock(&cifs_file_list_lock);
345 cifsFileInfo_get_locked(cifs_file);
346 spin_unlock(&cifs_file_list_lock);
351 * Release a reference on the file private data. This may involve closing
352 * the filehandle out on the server. Must be called without holding
353 * cifs_file_list_lock.
355 void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
357 struct inode *inode = cifs_file->dentry->d_inode;
358 struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
359 struct TCP_Server_Info *server = tcon->ses->server;
360 struct cifsInodeInfo *cifsi = CIFS_I(inode);
361 struct super_block *sb = inode->i_sb;
362 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
363 struct cifsLockInfo *li, *tmp;
365 struct cifs_pending_open open;
367 spin_lock(&cifs_file_list_lock);
368 if (--cifs_file->count > 0) {
369 spin_unlock(&cifs_file_list_lock);
373 if (server->ops->get_lease_key)
374 server->ops->get_lease_key(inode, &fid);
376 /* store open in pending opens to make sure we don't miss lease break */
377 cifs_add_pending_open_locked(&fid, cifs_file->tlink, &open);
379 /* remove it from the lists */
380 list_del(&cifs_file->flist);
381 list_del(&cifs_file->tlist);
383 if (list_empty(&cifsi->openFileList)) {
384 cifs_dbg(FYI, "closing last open instance for inode %p\n",
385 cifs_file->dentry->d_inode);
387 * In strict cache mode we need invalidate mapping on the last
388 * close because it may cause a error when we open this file
389 * again and get at least level II oplock.
391 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO)
392 CIFS_I(inode)->invalid_mapping = true;
393 cifs_set_oplock_level(cifsi, 0);
395 spin_unlock(&cifs_file_list_lock);
397 cancel_work_sync(&cifs_file->oplock_break);
399 if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
400 struct TCP_Server_Info *server = tcon->ses->server;
404 if (server->ops->close)
405 server->ops->close(xid, tcon, &cifs_file->fid);
409 cifs_del_pending_open(&open);
412 * Delete any outstanding lock records. We'll lose them when the file
415 down_write(&cifsi->lock_sem);
416 list_for_each_entry_safe(li, tmp, &cifs_file->llist->locks, llist) {
417 list_del(&li->llist);
418 cifs_del_lock_waiters(li);
421 list_del(&cifs_file->llist->llist);
422 kfree(cifs_file->llist);
423 up_write(&cifsi->lock_sem);
425 cifs_put_tlink(cifs_file->tlink);
426 dput(cifs_file->dentry);
427 cifs_sb_deactive(sb);
431 int cifs_open(struct inode *inode, struct file *file)
437 struct cifs_sb_info *cifs_sb;
438 struct TCP_Server_Info *server;
439 struct cifs_tcon *tcon;
440 struct tcon_link *tlink;
441 struct cifsFileInfo *cfile = NULL;
442 char *full_path = NULL;
443 bool posix_open_ok = false;
445 struct cifs_pending_open open;
449 cifs_sb = CIFS_SB(inode->i_sb);
450 tlink = cifs_sb_tlink(cifs_sb);
453 return PTR_ERR(tlink);
455 tcon = tlink_tcon(tlink);
456 server = tcon->ses->server;
458 full_path = build_path_from_dentry(file->f_path.dentry);
459 if (full_path == NULL) {
464 cifs_dbg(FYI, "inode = 0x%p file flags are 0x%x for %s\n",
465 inode, file->f_flags, full_path);
472 if (!tcon->broken_posix_open && tcon->unix_ext &&
473 cap_unix(tcon->ses) && (CIFS_UNIX_POSIX_PATH_OPS_CAP &
474 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
475 /* can not refresh inode info since size could be stale */
476 rc = cifs_posix_open(full_path, &inode, inode->i_sb,
477 cifs_sb->mnt_file_mode /* ignored */,
478 file->f_flags, &oplock, &fid.netfid, xid);
480 cifs_dbg(FYI, "posix open succeeded\n");
481 posix_open_ok = true;
482 } else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) {
483 if (tcon->ses->serverNOS)
484 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",
485 tcon->ses->serverName,
486 tcon->ses->serverNOS);
487 tcon->broken_posix_open = true;
488 } else if ((rc != -EIO) && (rc != -EREMOTE) &&
489 (rc != -EOPNOTSUPP)) /* path not found or net err */
492 * Else fallthrough to retry open the old way on network i/o
497 if (server->ops->get_lease_key)
498 server->ops->get_lease_key(inode, &fid);
500 cifs_add_pending_open(&fid, tlink, &open);
502 if (!posix_open_ok) {
503 if (server->ops->get_lease_key)
504 server->ops->get_lease_key(inode, &fid);
506 rc = cifs_nt_open(full_path, inode, cifs_sb, tcon,
507 file->f_flags, &oplock, &fid, xid);
509 cifs_del_pending_open(&open);
514 cfile = cifs_new_fileinfo(&fid, file, tlink, oplock);
516 if (server->ops->close)
517 server->ops->close(xid, tcon, &fid);
518 cifs_del_pending_open(&open);
523 cifs_fscache_set_inode_cookie(inode, file);
525 if ((oplock & CIFS_CREATE_ACTION) && !posix_open_ok && tcon->unix_ext) {
527 * Time to set mode which we can not set earlier due to
528 * problems creating new read-only files.
530 struct cifs_unix_set_info_args args = {
531 .mode = inode->i_mode,
532 .uid = INVALID_UID, /* no change */
533 .gid = INVALID_GID, /* no change */
534 .ctime = NO_CHANGE_64,
535 .atime = NO_CHANGE_64,
536 .mtime = NO_CHANGE_64,
539 CIFSSMBUnixSetFileInfo(xid, tcon, &args, fid.netfid,
546 cifs_put_tlink(tlink);
550 static int cifs_push_posix_locks(struct cifsFileInfo *cfile);
553 * Try to reacquire byte range locks that were released when session
554 * to server was lost.
557 cifs_relock_file(struct cifsFileInfo *cfile)
559 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
560 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
561 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
564 down_read(&cinode->lock_sem);
565 if (cinode->can_cache_brlcks) {
566 /* can cache locks - no need to relock */
567 up_read(&cinode->lock_sem);
571 if (cap_unix(tcon->ses) &&
572 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
573 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
574 rc = cifs_push_posix_locks(cfile);
576 rc = tcon->ses->server->ops->push_mand_locks(cfile);
578 up_read(&cinode->lock_sem);
583 cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush)
588 struct cifs_sb_info *cifs_sb;
589 struct cifs_tcon *tcon;
590 struct TCP_Server_Info *server;
591 struct cifsInodeInfo *cinode;
593 char *full_path = NULL;
595 int disposition = FILE_OPEN;
596 int create_options = CREATE_NOT_DIR;
597 struct cifs_open_parms oparms;
600 mutex_lock(&cfile->fh_mutex);
601 if (!cfile->invalidHandle) {
602 mutex_unlock(&cfile->fh_mutex);
608 inode = cfile->dentry->d_inode;
609 cifs_sb = CIFS_SB(inode->i_sb);
610 tcon = tlink_tcon(cfile->tlink);
611 server = tcon->ses->server;
614 * Can not grab rename sem here because various ops, including those
615 * that already have the rename sem can end up causing writepage to get
616 * called and if the server was down that means we end up here, and we
617 * can never tell if the caller already has the rename_sem.
619 full_path = build_path_from_dentry(cfile->dentry);
620 if (full_path == NULL) {
622 mutex_unlock(&cfile->fh_mutex);
627 cifs_dbg(FYI, "inode = 0x%p file flags 0x%x for %s\n",
628 inode, cfile->f_flags, full_path);
630 if (tcon->ses->server->oplocks)
635 if (tcon->unix_ext && cap_unix(tcon->ses) &&
636 (CIFS_UNIX_POSIX_PATH_OPS_CAP &
637 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
639 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the
640 * original open. Must mask them off for a reopen.
642 unsigned int oflags = cfile->f_flags &
643 ~(O_CREAT | O_EXCL | O_TRUNC);
645 rc = cifs_posix_open(full_path, NULL, inode->i_sb,
646 cifs_sb->mnt_file_mode /* ignored */,
647 oflags, &oplock, &cfile->fid.netfid, xid);
649 cifs_dbg(FYI, "posix reopen succeeded\n");
653 * fallthrough to retry open the old way on errors, especially
654 * in the reconnect path it is important to retry hard
658 desired_access = cifs_convert_flags(cfile->f_flags);
660 if (backup_cred(cifs_sb))
661 create_options |= CREATE_OPEN_BACKUP_INTENT;
663 if (server->ops->get_lease_key)
664 server->ops->get_lease_key(inode, &cfile->fid);
667 oparms.cifs_sb = cifs_sb;
668 oparms.desired_access = desired_access;
669 oparms.create_options = create_options;
670 oparms.disposition = disposition;
671 oparms.path = full_path;
672 oparms.fid = &cfile->fid;
673 oparms.reconnect = true;
676 * Can not refresh inode by passing in file_info buf to be returned by
677 * CIFSSMBOpen and then calling get_inode_info with returned buf since
678 * file might have write behind data that needs to be flushed and server
679 * version of file size can be stale. If we knew for sure that inode was
680 * not dirty locally we could do this.
682 rc = server->ops->open(xid, &oparms, &oplock, NULL);
683 if (rc == -ENOENT && oparms.reconnect == false) {
684 /* durable handle timeout is expired - open the file again */
685 rc = server->ops->open(xid, &oparms, &oplock, NULL);
686 /* indicate that we need to relock the file */
687 oparms.reconnect = true;
691 mutex_unlock(&cfile->fh_mutex);
692 cifs_dbg(FYI, "cifs_reopen returned 0x%x\n", rc);
693 cifs_dbg(FYI, "oplock: %d\n", oplock);
694 goto reopen_error_exit;
698 cfile->invalidHandle = false;
699 mutex_unlock(&cfile->fh_mutex);
700 cinode = CIFS_I(inode);
703 rc = filemap_write_and_wait(inode->i_mapping);
704 mapping_set_error(inode->i_mapping, rc);
707 rc = cifs_get_inode_info_unix(&inode, full_path,
710 rc = cifs_get_inode_info(&inode, full_path, NULL,
711 inode->i_sb, xid, NULL);
714 * Else we are writing out data to server already and could deadlock if
715 * we tried to flush data, and since we do not know if we have data that
716 * would invalidate the current end of file on the server we can not go
717 * to the server to get the new inode info.
720 server->ops->set_fid(cfile, &cfile->fid, oplock);
721 if (oparms.reconnect)
722 cifs_relock_file(cfile);
730 int cifs_close(struct inode *inode, struct file *file)
732 if (file->private_data != NULL) {
733 cifsFileInfo_put(file->private_data);
734 file->private_data = NULL;
737 /* return code from the ->release op is always ignored */
741 int cifs_closedir(struct inode *inode, struct file *file)
745 struct cifsFileInfo *cfile = file->private_data;
746 struct cifs_tcon *tcon;
747 struct TCP_Server_Info *server;
750 cifs_dbg(FYI, "Closedir inode = 0x%p\n", inode);
756 tcon = tlink_tcon(cfile->tlink);
757 server = tcon->ses->server;
759 cifs_dbg(FYI, "Freeing private data in close dir\n");
760 spin_lock(&cifs_file_list_lock);
761 if (!cfile->srch_inf.endOfSearch && !cfile->invalidHandle) {
762 cfile->invalidHandle = true;
763 spin_unlock(&cifs_file_list_lock);
764 if (server->ops->close_dir)
765 rc = server->ops->close_dir(xid, tcon, &cfile->fid);
768 cifs_dbg(FYI, "Closing uncompleted readdir with rc %d\n", rc);
769 /* not much we can do if it fails anyway, ignore rc */
772 spin_unlock(&cifs_file_list_lock);
774 buf = cfile->srch_inf.ntwrk_buf_start;
776 cifs_dbg(FYI, "closedir free smb buf in srch struct\n");
777 cfile->srch_inf.ntwrk_buf_start = NULL;
778 if (cfile->srch_inf.smallBuf)
779 cifs_small_buf_release(buf);
781 cifs_buf_release(buf);
784 cifs_put_tlink(cfile->tlink);
785 kfree(file->private_data);
786 file->private_data = NULL;
787 /* BB can we lock the filestruct while this is going on? */
792 static struct cifsLockInfo *
793 cifs_lock_init(__u64 offset, __u64 length, __u8 type)
795 struct cifsLockInfo *lock =
796 kmalloc(sizeof(struct cifsLockInfo), GFP_KERNEL);
799 lock->offset = offset;
800 lock->length = length;
802 lock->pid = current->tgid;
803 INIT_LIST_HEAD(&lock->blist);
804 init_waitqueue_head(&lock->block_q);
809 cifs_del_lock_waiters(struct cifsLockInfo *lock)
811 struct cifsLockInfo *li, *tmp;
812 list_for_each_entry_safe(li, tmp, &lock->blist, blist) {
813 list_del_init(&li->blist);
814 wake_up(&li->block_q);
818 #define CIFS_LOCK_OP 0
819 #define CIFS_READ_OP 1
820 #define CIFS_WRITE_OP 2
822 /* @rw_check : 0 - no op, 1 - read, 2 - write */
824 cifs_find_fid_lock_conflict(struct cifs_fid_locks *fdlocks, __u64 offset,
825 __u64 length, __u8 type, struct cifsFileInfo *cfile,
826 struct cifsLockInfo **conf_lock, int rw_check)
828 struct cifsLockInfo *li;
829 struct cifsFileInfo *cur_cfile = fdlocks->cfile;
830 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
832 list_for_each_entry(li, &fdlocks->locks, llist) {
833 if (offset + length <= li->offset ||
834 offset >= li->offset + li->length)
836 if (rw_check != CIFS_LOCK_OP && current->tgid == li->pid &&
837 server->ops->compare_fids(cfile, cur_cfile)) {
838 /* shared lock prevents write op through the same fid */
839 if (!(li->type & server->vals->shared_lock_type) ||
840 rw_check != CIFS_WRITE_OP)
843 if ((type & server->vals->shared_lock_type) &&
844 ((server->ops->compare_fids(cfile, cur_cfile) &&
845 current->tgid == li->pid) || type == li->type))
855 cifs_find_lock_conflict(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
856 __u8 type, struct cifsLockInfo **conf_lock,
860 struct cifs_fid_locks *cur;
861 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
863 list_for_each_entry(cur, &cinode->llist, llist) {
864 rc = cifs_find_fid_lock_conflict(cur, offset, length, type,
865 cfile, conf_lock, rw_check);
874 * Check if there is another lock that prevents us to set the lock (mandatory
875 * style). If such a lock exists, update the flock structure with its
876 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
877 * or leave it the same if we can't. Returns 0 if we don't need to request to
878 * the server or 1 otherwise.
881 cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
882 __u8 type, struct file_lock *flock)
885 struct cifsLockInfo *conf_lock;
886 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
887 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
890 down_read(&cinode->lock_sem);
892 exist = cifs_find_lock_conflict(cfile, offset, length, type,
893 &conf_lock, CIFS_LOCK_OP);
895 flock->fl_start = conf_lock->offset;
896 flock->fl_end = conf_lock->offset + conf_lock->length - 1;
897 flock->fl_pid = conf_lock->pid;
898 if (conf_lock->type & server->vals->shared_lock_type)
899 flock->fl_type = F_RDLCK;
901 flock->fl_type = F_WRLCK;
902 } else if (!cinode->can_cache_brlcks)
905 flock->fl_type = F_UNLCK;
907 up_read(&cinode->lock_sem);
912 cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock)
914 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
915 down_write(&cinode->lock_sem);
916 list_add_tail(&lock->llist, &cfile->llist->locks);
917 up_write(&cinode->lock_sem);
921 * Set the byte-range lock (mandatory style). Returns:
922 * 1) 0, if we set the lock and don't need to request to the server;
923 * 2) 1, if no locks prevent us but we need to request to the server;
924 * 3) -EACCESS, if there is a lock that prevents us and wait is false.
927 cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock,
930 struct cifsLockInfo *conf_lock;
931 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
937 down_write(&cinode->lock_sem);
939 exist = cifs_find_lock_conflict(cfile, lock->offset, lock->length,
940 lock->type, &conf_lock, CIFS_LOCK_OP);
941 if (!exist && cinode->can_cache_brlcks) {
942 list_add_tail(&lock->llist, &cfile->llist->locks);
943 up_write(&cinode->lock_sem);
952 list_add_tail(&lock->blist, &conf_lock->blist);
953 up_write(&cinode->lock_sem);
954 rc = wait_event_interruptible(lock->block_q,
955 (lock->blist.prev == &lock->blist) &&
956 (lock->blist.next == &lock->blist));
959 down_write(&cinode->lock_sem);
960 list_del_init(&lock->blist);
963 up_write(&cinode->lock_sem);
968 * Check if there is another lock that prevents us to set the lock (posix
969 * style). If such a lock exists, update the flock structure with its
970 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
971 * or leave it the same if we can't. Returns 0 if we don't need to request to
972 * the server or 1 otherwise.
975 cifs_posix_lock_test(struct file *file, struct file_lock *flock)
978 struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
979 unsigned char saved_type = flock->fl_type;
981 if ((flock->fl_flags & FL_POSIX) == 0)
984 down_read(&cinode->lock_sem);
985 posix_test_lock(file, flock);
987 if (flock->fl_type == F_UNLCK && !cinode->can_cache_brlcks) {
988 flock->fl_type = saved_type;
992 up_read(&cinode->lock_sem);
997 * Set the byte-range lock (posix style). Returns:
998 * 1) 0, if we set the lock and don't need to request to the server;
999 * 2) 1, if we need to request to the server;
1000 * 3) <0, if the error occurs while setting the lock.
1003 cifs_posix_lock_set(struct file *file, struct file_lock *flock)
1005 struct cifsInodeInfo *cinode = CIFS_I(file_inode(file));
1008 if ((flock->fl_flags & FL_POSIX) == 0)
1012 down_write(&cinode->lock_sem);
1013 if (!cinode->can_cache_brlcks) {
1014 up_write(&cinode->lock_sem);
1018 rc = posix_lock_file(file, flock, NULL);
1019 up_write(&cinode->lock_sem);
1020 if (rc == FILE_LOCK_DEFERRED) {
1021 rc = wait_event_interruptible(flock->fl_wait, !flock->fl_next);
1024 posix_unblock_lock(flock);
1030 cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
1033 int rc = 0, stored_rc;
1034 struct cifsLockInfo *li, *tmp;
1035 struct cifs_tcon *tcon;
1036 unsigned int num, max_num, max_buf;
1037 LOCKING_ANDX_RANGE *buf, *cur;
1038 int types[] = {LOCKING_ANDX_LARGE_FILES,
1039 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES};
1043 tcon = tlink_tcon(cfile->tlink);
1046 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1047 * and check it for zero before using.
1049 max_buf = tcon->ses->server->maxBuf;
1055 max_num = (max_buf - sizeof(struct smb_hdr)) /
1056 sizeof(LOCKING_ANDX_RANGE);
1057 buf = kzalloc(max_num * sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1063 for (i = 0; i < 2; i++) {
1066 list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1067 if (li->type != types[i])
1069 cur->Pid = cpu_to_le16(li->pid);
1070 cur->LengthLow = cpu_to_le32((u32)li->length);
1071 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1072 cur->OffsetLow = cpu_to_le32((u32)li->offset);
1073 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1074 if (++num == max_num) {
1075 stored_rc = cifs_lockv(xid, tcon,
1077 (__u8)li->type, 0, num,
1088 stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1089 (__u8)types[i], 0, num, buf);
1100 /* copied from fs/locks.c with a name change */
1101 #define cifs_for_each_lock(inode, lockp) \
1102 for (lockp = &inode->i_flock; *lockp != NULL; \
1103 lockp = &(*lockp)->fl_next)
1105 struct lock_to_push {
1106 struct list_head llist;
1115 cifs_push_posix_locks(struct cifsFileInfo *cfile)
1117 struct inode *inode = cfile->dentry->d_inode;
1118 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1119 struct file_lock *flock, **before;
1120 unsigned int count = 0, i = 0;
1121 int rc = 0, xid, type;
1122 struct list_head locks_to_send, *el;
1123 struct lock_to_push *lck, *tmp;
1128 spin_lock(&inode->i_lock);
1129 cifs_for_each_lock(inode, before) {
1130 if ((*before)->fl_flags & FL_POSIX)
1133 spin_unlock(&inode->i_lock);
1135 INIT_LIST_HEAD(&locks_to_send);
1138 * Allocating count locks is enough because no FL_POSIX locks can be
1139 * added to the list while we are holding cinode->lock_sem that
1140 * protects locking operations of this inode.
1142 for (; i < count; i++) {
1143 lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL);
1148 list_add_tail(&lck->llist, &locks_to_send);
1151 el = locks_to_send.next;
1152 spin_lock(&inode->i_lock);
1153 cifs_for_each_lock(inode, before) {
1155 if ((flock->fl_flags & FL_POSIX) == 0)
1157 if (el == &locks_to_send) {
1159 * The list ended. We don't have enough allocated
1160 * structures - something is really wrong.
1162 cifs_dbg(VFS, "Can't push all brlocks!\n");
1165 length = 1 + flock->fl_end - flock->fl_start;
1166 if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK)
1170 lck = list_entry(el, struct lock_to_push, llist);
1171 lck->pid = flock->fl_pid;
1172 lck->netfid = cfile->fid.netfid;
1173 lck->length = length;
1175 lck->offset = flock->fl_start;
1178 spin_unlock(&inode->i_lock);
1180 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1183 stored_rc = CIFSSMBPosixLock(xid, tcon, lck->netfid, lck->pid,
1184 lck->offset, lck->length, NULL,
1188 list_del(&lck->llist);
1196 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1197 list_del(&lck->llist);
1204 cifs_push_locks(struct cifsFileInfo *cfile)
1206 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1207 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
1208 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1211 /* we are going to update can_cache_brlcks here - need a write access */
1212 down_write(&cinode->lock_sem);
1213 if (!cinode->can_cache_brlcks) {
1214 up_write(&cinode->lock_sem);
1218 if (cap_unix(tcon->ses) &&
1219 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1220 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1221 rc = cifs_push_posix_locks(cfile);
1223 rc = tcon->ses->server->ops->push_mand_locks(cfile);
1225 cinode->can_cache_brlcks = false;
1226 up_write(&cinode->lock_sem);
1231 cifs_read_flock(struct file_lock *flock, __u32 *type, int *lock, int *unlock,
1232 bool *wait_flag, struct TCP_Server_Info *server)
1234 if (flock->fl_flags & FL_POSIX)
1235 cifs_dbg(FYI, "Posix\n");
1236 if (flock->fl_flags & FL_FLOCK)
1237 cifs_dbg(FYI, "Flock\n");
1238 if (flock->fl_flags & FL_SLEEP) {
1239 cifs_dbg(FYI, "Blocking lock\n");
1242 if (flock->fl_flags & FL_ACCESS)
1243 cifs_dbg(FYI, "Process suspended by mandatory locking - not implemented yet\n");
1244 if (flock->fl_flags & FL_LEASE)
1245 cifs_dbg(FYI, "Lease on file - not implemented yet\n");
1246 if (flock->fl_flags &
1247 (~(FL_POSIX | FL_FLOCK | FL_SLEEP |
1248 FL_ACCESS | FL_LEASE | FL_CLOSE)))
1249 cifs_dbg(FYI, "Unknown lock flags 0x%x\n", flock->fl_flags);
1251 *type = server->vals->large_lock_type;
1252 if (flock->fl_type == F_WRLCK) {
1253 cifs_dbg(FYI, "F_WRLCK\n");
1254 *type |= server->vals->exclusive_lock_type;
1256 } else if (flock->fl_type == F_UNLCK) {
1257 cifs_dbg(FYI, "F_UNLCK\n");
1258 *type |= server->vals->unlock_lock_type;
1260 /* Check if unlock includes more than one lock range */
1261 } else if (flock->fl_type == F_RDLCK) {
1262 cifs_dbg(FYI, "F_RDLCK\n");
1263 *type |= server->vals->shared_lock_type;
1265 } else if (flock->fl_type == F_EXLCK) {
1266 cifs_dbg(FYI, "F_EXLCK\n");
1267 *type |= server->vals->exclusive_lock_type;
1269 } else if (flock->fl_type == F_SHLCK) {
1270 cifs_dbg(FYI, "F_SHLCK\n");
1271 *type |= server->vals->shared_lock_type;
1274 cifs_dbg(FYI, "Unknown type of lock\n");
1278 cifs_getlk(struct file *file, struct file_lock *flock, __u32 type,
1279 bool wait_flag, bool posix_lck, unsigned int xid)
1282 __u64 length = 1 + flock->fl_end - flock->fl_start;
1283 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1284 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1285 struct TCP_Server_Info *server = tcon->ses->server;
1286 __u16 netfid = cfile->fid.netfid;
1289 int posix_lock_type;
1291 rc = cifs_posix_lock_test(file, flock);
1295 if (type & server->vals->shared_lock_type)
1296 posix_lock_type = CIFS_RDLCK;
1298 posix_lock_type = CIFS_WRLCK;
1299 rc = CIFSSMBPosixLock(xid, tcon, netfid, current->tgid,
1300 flock->fl_start, length, flock,
1301 posix_lock_type, wait_flag);
1305 rc = cifs_lock_test(cfile, flock->fl_start, length, type, flock);
1309 /* BB we could chain these into one lock request BB */
1310 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length, type,
1313 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1315 flock->fl_type = F_UNLCK;
1317 cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
1322 if (type & server->vals->shared_lock_type) {
1323 flock->fl_type = F_WRLCK;
1327 type &= ~server->vals->exclusive_lock_type;
1329 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1330 type | server->vals->shared_lock_type,
1333 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1334 type | server->vals->shared_lock_type, 0, 1, false);
1335 flock->fl_type = F_RDLCK;
1337 cifs_dbg(VFS, "Error unlocking previously locked range %d during test of lock\n",
1340 flock->fl_type = F_WRLCK;
1346 cifs_move_llist(struct list_head *source, struct list_head *dest)
1348 struct list_head *li, *tmp;
1349 list_for_each_safe(li, tmp, source)
1350 list_move(li, dest);
1354 cifs_free_llist(struct list_head *llist)
1356 struct cifsLockInfo *li, *tmp;
1357 list_for_each_entry_safe(li, tmp, llist, llist) {
1358 cifs_del_lock_waiters(li);
1359 list_del(&li->llist);
1365 cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
1368 int rc = 0, stored_rc;
1369 int types[] = {LOCKING_ANDX_LARGE_FILES,
1370 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES};
1372 unsigned int max_num, num, max_buf;
1373 LOCKING_ANDX_RANGE *buf, *cur;
1374 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1375 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
1376 struct cifsLockInfo *li, *tmp;
1377 __u64 length = 1 + flock->fl_end - flock->fl_start;
1378 struct list_head tmp_llist;
1380 INIT_LIST_HEAD(&tmp_llist);
1383 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1384 * and check it for zero before using.
1386 max_buf = tcon->ses->server->maxBuf;
1390 max_num = (max_buf - sizeof(struct smb_hdr)) /
1391 sizeof(LOCKING_ANDX_RANGE);
1392 buf = kzalloc(max_num * sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1396 down_write(&cinode->lock_sem);
1397 for (i = 0; i < 2; i++) {
1400 list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
1401 if (flock->fl_start > li->offset ||
1402 (flock->fl_start + length) <
1403 (li->offset + li->length))
1405 if (current->tgid != li->pid)
1407 if (types[i] != li->type)
1409 if (cinode->can_cache_brlcks) {
1411 * We can cache brlock requests - simply remove
1412 * a lock from the file's list.
1414 list_del(&li->llist);
1415 cifs_del_lock_waiters(li);
1419 cur->Pid = cpu_to_le16(li->pid);
1420 cur->LengthLow = cpu_to_le32((u32)li->length);
1421 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
1422 cur->OffsetLow = cpu_to_le32((u32)li->offset);
1423 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
1425 * We need to save a lock here to let us add it again to
1426 * the file's list if the unlock range request fails on
1429 list_move(&li->llist, &tmp_llist);
1430 if (++num == max_num) {
1431 stored_rc = cifs_lockv(xid, tcon,
1433 li->type, num, 0, buf);
1436 * We failed on the unlock range
1437 * request - add all locks from the tmp
1438 * list to the head of the file's list.
1440 cifs_move_llist(&tmp_llist,
1441 &cfile->llist->locks);
1445 * The unlock range request succeed -
1446 * free the tmp list.
1448 cifs_free_llist(&tmp_llist);
1455 stored_rc = cifs_lockv(xid, tcon, cfile->fid.netfid,
1456 types[i], num, 0, buf);
1458 cifs_move_llist(&tmp_llist,
1459 &cfile->llist->locks);
1462 cifs_free_llist(&tmp_llist);
1466 up_write(&cinode->lock_sem);
1472 cifs_setlk(struct file *file, struct file_lock *flock, __u32 type,
1473 bool wait_flag, bool posix_lck, int lock, int unlock,
1477 __u64 length = 1 + flock->fl_end - flock->fl_start;
1478 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1479 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1480 struct TCP_Server_Info *server = tcon->ses->server;
1481 struct inode *inode = cfile->dentry->d_inode;
1484 int posix_lock_type;
1486 rc = cifs_posix_lock_set(file, flock);
1490 if (type & server->vals->shared_lock_type)
1491 posix_lock_type = CIFS_RDLCK;
1493 posix_lock_type = CIFS_WRLCK;
1496 posix_lock_type = CIFS_UNLCK;
1498 rc = CIFSSMBPosixLock(xid, tcon, cfile->fid.netfid,
1499 current->tgid, flock->fl_start, length,
1500 NULL, posix_lock_type, wait_flag);
1505 struct cifsLockInfo *lock;
1507 lock = cifs_lock_init(flock->fl_start, length, type);
1511 rc = cifs_lock_add_if(cfile, lock, wait_flag);
1520 * Windows 7 server can delay breaking lease from read to None
1521 * if we set a byte-range lock on a file - break it explicitly
1522 * before sending the lock to the server to be sure the next
1523 * read won't conflict with non-overlapted locks due to
1526 if (!CIFS_I(inode)->clientCanCacheAll &&
1527 CIFS_I(inode)->clientCanCacheRead) {
1528 cifs_invalidate_mapping(inode);
1529 cifs_dbg(FYI, "Set no oplock for inode=%p due to mand locks\n",
1531 CIFS_I(inode)->clientCanCacheRead = false;
1534 rc = server->ops->mand_lock(xid, cfile, flock->fl_start, length,
1535 type, 1, 0, wait_flag);
1541 cifs_lock_add(cfile, lock);
1543 rc = server->ops->mand_unlock_range(cfile, flock, xid);
1546 if (flock->fl_flags & FL_POSIX)
1547 posix_lock_file_wait(file, flock);
1551 int cifs_lock(struct file *file, int cmd, struct file_lock *flock)
1554 int lock = 0, unlock = 0;
1555 bool wait_flag = false;
1556 bool posix_lck = false;
1557 struct cifs_sb_info *cifs_sb;
1558 struct cifs_tcon *tcon;
1559 struct cifsInodeInfo *cinode;
1560 struct cifsFileInfo *cfile;
1567 cifs_dbg(FYI, "Lock parm: 0x%x flockflags: 0x%x flocktype: 0x%x start: %lld end: %lld\n",
1568 cmd, flock->fl_flags, flock->fl_type,
1569 flock->fl_start, flock->fl_end);
1571 cfile = (struct cifsFileInfo *)file->private_data;
1572 tcon = tlink_tcon(cfile->tlink);
1574 cifs_read_flock(flock, &type, &lock, &unlock, &wait_flag,
1577 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
1578 netfid = cfile->fid.netfid;
1579 cinode = CIFS_I(file_inode(file));
1581 if (cap_unix(tcon->ses) &&
1582 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1583 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1586 * BB add code here to normalize offset and length to account for
1587 * negative length which we can not accept over the wire.
1589 if (IS_GETLK(cmd)) {
1590 rc = cifs_getlk(file, flock, type, wait_flag, posix_lck, xid);
1595 if (!lock && !unlock) {
1597 * if no lock or unlock then nothing to do since we do not
1604 rc = cifs_setlk(file, flock, type, wait_flag, posix_lck, lock, unlock,
1611 * update the file size (if needed) after a write. Should be called with
1612 * the inode->i_lock held
1615 cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
1616 unsigned int bytes_written)
1618 loff_t end_of_write = offset + bytes_written;
1620 if (end_of_write > cifsi->server_eof)
1621 cifsi->server_eof = end_of_write;
1625 cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
1626 size_t write_size, loff_t *offset)
1629 unsigned int bytes_written = 0;
1630 unsigned int total_written;
1631 struct cifs_sb_info *cifs_sb;
1632 struct cifs_tcon *tcon;
1633 struct TCP_Server_Info *server;
1635 struct dentry *dentry = open_file->dentry;
1636 struct cifsInodeInfo *cifsi = CIFS_I(dentry->d_inode);
1637 struct cifs_io_parms io_parms;
1639 cifs_sb = CIFS_SB(dentry->d_sb);
1641 cifs_dbg(FYI, "write %zd bytes to offset %lld of %s\n",
1642 write_size, *offset, dentry->d_name.name);
1644 tcon = tlink_tcon(open_file->tlink);
1645 server = tcon->ses->server;
1647 if (!server->ops->sync_write)
1652 for (total_written = 0; write_size > total_written;
1653 total_written += bytes_written) {
1655 while (rc == -EAGAIN) {
1659 if (open_file->invalidHandle) {
1660 /* we could deadlock if we called
1661 filemap_fdatawait from here so tell
1662 reopen_file not to flush data to
1664 rc = cifs_reopen_file(open_file, false);
1669 len = min((size_t)cifs_sb->wsize,
1670 write_size - total_written);
1671 /* iov[0] is reserved for smb header */
1672 iov[1].iov_base = (char *)write_data + total_written;
1673 iov[1].iov_len = len;
1675 io_parms.tcon = tcon;
1676 io_parms.offset = *offset;
1677 io_parms.length = len;
1678 rc = server->ops->sync_write(xid, open_file, &io_parms,
1679 &bytes_written, iov, 1);
1681 if (rc || (bytes_written == 0)) {
1689 spin_lock(&dentry->d_inode->i_lock);
1690 cifs_update_eof(cifsi, *offset, bytes_written);
1691 spin_unlock(&dentry->d_inode->i_lock);
1692 *offset += bytes_written;
1696 cifs_stats_bytes_written(tcon, total_written);
1698 if (total_written > 0) {
1699 spin_lock(&dentry->d_inode->i_lock);
1700 if (*offset > dentry->d_inode->i_size)
1701 i_size_write(dentry->d_inode, *offset);
1702 spin_unlock(&dentry->d_inode->i_lock);
1704 mark_inode_dirty_sync(dentry->d_inode);
1706 return total_written;
1709 struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
1712 struct cifsFileInfo *open_file = NULL;
1713 struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1715 /* only filter by fsuid on multiuser mounts */
1716 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1719 spin_lock(&cifs_file_list_lock);
1720 /* we could simply get the first_list_entry since write-only entries
1721 are always at the end of the list but since the first entry might
1722 have a close pending, we go through the whole list */
1723 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1724 if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
1726 if (OPEN_FMODE(open_file->f_flags) & FMODE_READ) {
1727 if (!open_file->invalidHandle) {
1728 /* found a good file */
1729 /* lock it so it will not be closed on us */
1730 cifsFileInfo_get_locked(open_file);
1731 spin_unlock(&cifs_file_list_lock);
1733 } /* else might as well continue, and look for
1734 another, or simply have the caller reopen it
1735 again rather than trying to fix this handle */
1736 } else /* write only file */
1737 break; /* write only files are last so must be done */
1739 spin_unlock(&cifs_file_list_lock);
1743 struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode,
1746 struct cifsFileInfo *open_file, *inv_file = NULL;
1747 struct cifs_sb_info *cifs_sb;
1748 bool any_available = false;
1750 unsigned int refind = 0;
1752 /* Having a null inode here (because mapping->host was set to zero by
1753 the VFS or MM) should not happen but we had reports of on oops (due to
1754 it being zero) during stress testcases so we need to check for it */
1756 if (cifs_inode == NULL) {
1757 cifs_dbg(VFS, "Null inode passed to cifs_writeable_file\n");
1762 cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1764 /* only filter by fsuid on multiuser mounts */
1765 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1768 spin_lock(&cifs_file_list_lock);
1770 if (refind > MAX_REOPEN_ATT) {
1771 spin_unlock(&cifs_file_list_lock);
1774 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1775 if (!any_available && open_file->pid != current->tgid)
1777 if (fsuid_only && !uid_eq(open_file->uid, current_fsuid()))
1779 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
1780 if (!open_file->invalidHandle) {
1781 /* found a good writable file */
1782 cifsFileInfo_get_locked(open_file);
1783 spin_unlock(&cifs_file_list_lock);
1787 inv_file = open_file;
1791 /* couldn't find useable FH with same pid, try any available */
1792 if (!any_available) {
1793 any_available = true;
1794 goto refind_writable;
1798 any_available = false;
1799 cifsFileInfo_get_locked(inv_file);
1802 spin_unlock(&cifs_file_list_lock);
1805 rc = cifs_reopen_file(inv_file, false);
1809 spin_lock(&cifs_file_list_lock);
1810 list_move_tail(&inv_file->flist,
1811 &cifs_inode->openFileList);
1812 spin_unlock(&cifs_file_list_lock);
1813 cifsFileInfo_put(inv_file);
1814 spin_lock(&cifs_file_list_lock);
1816 goto refind_writable;
1823 static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to)
1825 struct address_space *mapping = page->mapping;
1826 loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
1829 int bytes_written = 0;
1830 struct inode *inode;
1831 struct cifsFileInfo *open_file;
1833 if (!mapping || !mapping->host)
1836 inode = page->mapping->host;
1838 offset += (loff_t)from;
1839 write_data = kmap(page);
1842 if ((to > PAGE_CACHE_SIZE) || (from > to)) {
1847 /* racing with truncate? */
1848 if (offset > mapping->host->i_size) {
1850 return 0; /* don't care */
1853 /* check to make sure that we are not extending the file */
1854 if (mapping->host->i_size - offset < (loff_t)to)
1855 to = (unsigned)(mapping->host->i_size - offset);
1857 open_file = find_writable_file(CIFS_I(mapping->host), false);
1859 bytes_written = cifs_write(open_file, open_file->pid,
1860 write_data, to - from, &offset);
1861 cifsFileInfo_put(open_file);
1862 /* Does mm or vfs already set times? */
1863 inode->i_atime = inode->i_mtime = current_fs_time(inode->i_sb);
1864 if ((bytes_written > 0) && (offset))
1866 else if (bytes_written < 0)
1869 cifs_dbg(FYI, "No writeable filehandles for inode\n");
1877 static int cifs_writepages(struct address_space *mapping,
1878 struct writeback_control *wbc)
1880 struct cifs_sb_info *cifs_sb = CIFS_SB(mapping->host->i_sb);
1881 bool done = false, scanned = false, range_whole = false;
1883 struct cifs_writedata *wdata;
1884 struct TCP_Server_Info *server;
1889 * If wsize is smaller than the page cache size, default to writing
1890 * one page at a time via cifs_writepage
1892 if (cifs_sb->wsize < PAGE_CACHE_SIZE)
1893 return generic_writepages(mapping, wbc);
1895 if (wbc->range_cyclic) {
1896 index = mapping->writeback_index; /* Start from prev offset */
1899 index = wbc->range_start >> PAGE_CACHE_SHIFT;
1900 end = wbc->range_end >> PAGE_CACHE_SHIFT;
1901 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
1906 while (!done && index <= end) {
1907 unsigned int i, nr_pages, found_pages;
1908 pgoff_t next = 0, tofind;
1909 struct page **pages;
1911 tofind = min((cifs_sb->wsize / PAGE_CACHE_SIZE) - 1,
1914 wdata = cifs_writedata_alloc((unsigned int)tofind,
1915 cifs_writev_complete);
1922 * find_get_pages_tag seems to return a max of 256 on each
1923 * iteration, so we must call it several times in order to
1924 * fill the array or the wsize is effectively limited to
1925 * 256 * PAGE_CACHE_SIZE.
1928 pages = wdata->pages;
1930 nr_pages = find_get_pages_tag(mapping, &index,
1931 PAGECACHE_TAG_DIRTY,
1933 found_pages += nr_pages;
1936 } while (nr_pages && tofind && index <= end);
1938 if (found_pages == 0) {
1939 kref_put(&wdata->refcount, cifs_writedata_release);
1944 for (i = 0; i < found_pages; i++) {
1945 page = wdata->pages[i];
1947 * At this point we hold neither mapping->tree_lock nor
1948 * lock on the page itself: the page may be truncated or
1949 * invalidated (changing page->mapping to NULL), or even
1950 * swizzled back from swapper_space to tmpfs file
1956 else if (!trylock_page(page))
1959 if (unlikely(page->mapping != mapping)) {
1964 if (!wbc->range_cyclic && page->index > end) {
1970 if (next && (page->index != next)) {
1971 /* Not next consecutive page */
1976 if (wbc->sync_mode != WB_SYNC_NONE)
1977 wait_on_page_writeback(page);
1979 if (PageWriteback(page) ||
1980 !clear_page_dirty_for_io(page)) {
1986 * This actually clears the dirty bit in the radix tree.
1987 * See cifs_writepage() for more commentary.
1989 set_page_writeback(page);
1991 if (page_offset(page) >= i_size_read(mapping->host)) {
1994 end_page_writeback(page);
1998 wdata->pages[i] = page;
1999 next = page->index + 1;
2003 /* reset index to refind any pages skipped */
2005 index = wdata->pages[0]->index + 1;
2007 /* put any pages we aren't going to use */
2008 for (i = nr_pages; i < found_pages; i++) {
2009 page_cache_release(wdata->pages[i]);
2010 wdata->pages[i] = NULL;
2013 /* nothing to write? */
2014 if (nr_pages == 0) {
2015 kref_put(&wdata->refcount, cifs_writedata_release);
2019 wdata->sync_mode = wbc->sync_mode;
2020 wdata->nr_pages = nr_pages;
2021 wdata->offset = page_offset(wdata->pages[0]);
2022 wdata->pagesz = PAGE_CACHE_SIZE;
2024 min(i_size_read(mapping->host) -
2025 page_offset(wdata->pages[nr_pages - 1]),
2026 (loff_t)PAGE_CACHE_SIZE);
2027 wdata->bytes = ((nr_pages - 1) * PAGE_CACHE_SIZE) +
2031 if (wdata->cfile != NULL)
2032 cifsFileInfo_put(wdata->cfile);
2033 wdata->cfile = find_writable_file(CIFS_I(mapping->host),
2035 if (!wdata->cfile) {
2036 cifs_dbg(VFS, "No writable handles for inode\n");
2040 wdata->pid = wdata->cfile->pid;
2041 server = tlink_tcon(wdata->cfile->tlink)->ses->server;
2042 rc = server->ops->async_writev(wdata);
2043 } while (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN);
2045 for (i = 0; i < nr_pages; ++i)
2046 unlock_page(wdata->pages[i]);
2048 /* send failure -- clean up the mess */
2050 for (i = 0; i < nr_pages; ++i) {
2052 redirty_page_for_writepage(wbc,
2055 SetPageError(wdata->pages[i]);
2056 end_page_writeback(wdata->pages[i]);
2057 page_cache_release(wdata->pages[i]);
2060 mapping_set_error(mapping, rc);
2062 kref_put(&wdata->refcount, cifs_writedata_release);
2064 wbc->nr_to_write -= nr_pages;
2065 if (wbc->nr_to_write <= 0)
2071 if (!scanned && !done) {
2073 * We hit the last page and there is more work to be done: wrap
2074 * back to the start of the file
2081 if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
2082 mapping->writeback_index = index;
2088 cifs_writepage_locked(struct page *page, struct writeback_control *wbc)
2094 /* BB add check for wbc flags */
2095 page_cache_get(page);
2096 if (!PageUptodate(page))
2097 cifs_dbg(FYI, "ppw - page not up to date\n");
2100 * Set the "writeback" flag, and clear "dirty" in the radix tree.
2102 * A writepage() implementation always needs to do either this,
2103 * or re-dirty the page with "redirty_page_for_writepage()" in
2104 * the case of a failure.
2106 * Just unlocking the page will cause the radix tree tag-bits
2107 * to fail to update with the state of the page correctly.
2109 set_page_writeback(page);
2111 rc = cifs_partialpagewrite(page, 0, PAGE_CACHE_SIZE);
2112 if (rc == -EAGAIN && wbc->sync_mode == WB_SYNC_ALL)
2114 else if (rc == -EAGAIN)
2115 redirty_page_for_writepage(wbc, page);
2119 SetPageUptodate(page);
2120 end_page_writeback(page);
2121 page_cache_release(page);
2126 static int cifs_writepage(struct page *page, struct writeback_control *wbc)
2128 int rc = cifs_writepage_locked(page, wbc);
2133 static int cifs_write_end(struct file *file, struct address_space *mapping,
2134 loff_t pos, unsigned len, unsigned copied,
2135 struct page *page, void *fsdata)
2138 struct inode *inode = mapping->host;
2139 struct cifsFileInfo *cfile = file->private_data;
2140 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
2143 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2146 pid = current->tgid;
2148 cifs_dbg(FYI, "write_end for page %p from pos %lld with %d bytes\n",
2151 if (PageChecked(page)) {
2153 SetPageUptodate(page);
2154 ClearPageChecked(page);
2155 } else if (!PageUptodate(page) && copied == PAGE_CACHE_SIZE)
2156 SetPageUptodate(page);
2158 if (!PageUptodate(page)) {
2160 unsigned offset = pos & (PAGE_CACHE_SIZE - 1);
2164 /* this is probably better than directly calling
2165 partialpage_write since in this function the file handle is
2166 known which we might as well leverage */
2167 /* BB check if anything else missing out of ppw
2168 such as updating last write time */
2169 page_data = kmap(page);
2170 rc = cifs_write(cfile, pid, page_data + offset, copied, &pos);
2171 /* if (rc < 0) should we set writebehind rc? */
2178 set_page_dirty(page);
2182 spin_lock(&inode->i_lock);
2183 if (pos > inode->i_size)
2184 i_size_write(inode, pos);
2185 spin_unlock(&inode->i_lock);
2189 page_cache_release(page);
2194 int cifs_strict_fsync(struct file *file, loff_t start, loff_t end,
2199 struct cifs_tcon *tcon;
2200 struct TCP_Server_Info *server;
2201 struct cifsFileInfo *smbfile = file->private_data;
2202 struct inode *inode = file_inode(file);
2203 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2205 rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
2208 mutex_lock(&inode->i_mutex);
2212 cifs_dbg(FYI, "Sync file - name: %s datasync: 0x%x\n",
2213 file->f_path.dentry->d_name.name, datasync);
2215 if (!CIFS_I(inode)->clientCanCacheRead) {
2216 rc = cifs_invalidate_mapping(inode);
2218 cifs_dbg(FYI, "rc: %d during invalidate phase\n", rc);
2219 rc = 0; /* don't care about it in fsync */
2223 tcon = tlink_tcon(smbfile->tlink);
2224 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)) {
2225 server = tcon->ses->server;
2226 if (server->ops->flush)
2227 rc = server->ops->flush(xid, tcon, &smbfile->fid);
2233 mutex_unlock(&inode->i_mutex);
2237 int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
2241 struct cifs_tcon *tcon;
2242 struct TCP_Server_Info *server;
2243 struct cifsFileInfo *smbfile = file->private_data;
2244 struct cifs_sb_info *cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2245 struct inode *inode = file->f_mapping->host;
2247 rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
2250 mutex_lock(&inode->i_mutex);
2254 cifs_dbg(FYI, "Sync file - name: %s datasync: 0x%x\n",
2255 file->f_path.dentry->d_name.name, datasync);
2257 tcon = tlink_tcon(smbfile->tlink);
2258 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC)) {
2259 server = tcon->ses->server;
2260 if (server->ops->flush)
2261 rc = server->ops->flush(xid, tcon, &smbfile->fid);
2267 mutex_unlock(&inode->i_mutex);
2272 * As file closes, flush all cached write data for this inode checking
2273 * for write behind errors.
2275 int cifs_flush(struct file *file, fl_owner_t id)
2277 struct inode *inode = file_inode(file);
2280 if (file->f_mode & FMODE_WRITE)
2281 rc = filemap_write_and_wait(inode->i_mapping);
2283 cifs_dbg(FYI, "Flush inode %p file %p rc %d\n", inode, file, rc);
2289 cifs_write_allocate_pages(struct page **pages, unsigned long num_pages)
2294 for (i = 0; i < num_pages; i++) {
2295 pages[i] = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
2298 * save number of pages we have already allocated and
2299 * return with ENOMEM error
2308 for (i = 0; i < num_pages; i++)
2315 size_t get_numpages(const size_t wsize, const size_t len, size_t *cur_len)
2320 clen = min_t(const size_t, len, wsize);
2321 num_pages = DIV_ROUND_UP(clen, PAGE_SIZE);
2330 cifs_uncached_writev_complete(struct work_struct *work)
2333 struct cifs_writedata *wdata = container_of(work,
2334 struct cifs_writedata, work);
2335 struct inode *inode = wdata->cfile->dentry->d_inode;
2336 struct cifsInodeInfo *cifsi = CIFS_I(inode);
2338 spin_lock(&inode->i_lock);
2339 cifs_update_eof(cifsi, wdata->offset, wdata->bytes);
2340 if (cifsi->server_eof > inode->i_size)
2341 i_size_write(inode, cifsi->server_eof);
2342 spin_unlock(&inode->i_lock);
2344 complete(&wdata->done);
2346 if (wdata->result != -EAGAIN) {
2347 for (i = 0; i < wdata->nr_pages; i++)
2348 put_page(wdata->pages[i]);
2351 kref_put(&wdata->refcount, cifs_writedata_release);
2354 /* attempt to send write to server, retry on any -EAGAIN errors */
2356 cifs_uncached_retry_writev(struct cifs_writedata *wdata)
2359 struct TCP_Server_Info *server;
2361 server = tlink_tcon(wdata->cfile->tlink)->ses->server;
2364 if (wdata->cfile->invalidHandle) {
2365 rc = cifs_reopen_file(wdata->cfile, false);
2369 rc = server->ops->async_writev(wdata);
2370 } while (rc == -EAGAIN);
2376 cifs_iovec_write(struct file *file, const struct iovec *iov,
2377 unsigned long nr_segs, loff_t *poffset)
2379 unsigned long nr_pages, i;
2380 size_t copied, len, cur_len;
2381 ssize_t total_written = 0;
2384 struct cifsFileInfo *open_file;
2385 struct cifs_tcon *tcon;
2386 struct cifs_sb_info *cifs_sb;
2387 struct cifs_writedata *wdata, *tmp;
2388 struct list_head wdata_list;
2392 len = iov_length(iov, nr_segs);
2396 rc = generic_write_checks(file, poffset, &len, 0);
2400 INIT_LIST_HEAD(&wdata_list);
2401 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2402 open_file = file->private_data;
2403 tcon = tlink_tcon(open_file->tlink);
2405 if (!tcon->ses->server->ops->async_writev)
2410 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2411 pid = open_file->pid;
2413 pid = current->tgid;
2415 iov_iter_init(&it, iov, nr_segs, len, 0);
2419 nr_pages = get_numpages(cifs_sb->wsize, len, &cur_len);
2420 wdata = cifs_writedata_alloc(nr_pages,
2421 cifs_uncached_writev_complete);
2427 rc = cifs_write_allocate_pages(wdata->pages, nr_pages);
2434 for (i = 0; i < nr_pages; i++) {
2435 copied = min_t(const size_t, cur_len, PAGE_SIZE);
2436 copied = iov_iter_copy_from_user(wdata->pages[i], &it,
2439 iov_iter_advance(&it, copied);
2441 cur_len = save_len - cur_len;
2443 wdata->sync_mode = WB_SYNC_ALL;
2444 wdata->nr_pages = nr_pages;
2445 wdata->offset = (__u64)offset;
2446 wdata->cfile = cifsFileInfo_get(open_file);
2448 wdata->bytes = cur_len;
2449 wdata->pagesz = PAGE_SIZE;
2450 wdata->tailsz = cur_len - ((nr_pages - 1) * PAGE_SIZE);
2451 rc = cifs_uncached_retry_writev(wdata);
2453 kref_put(&wdata->refcount, cifs_writedata_release);
2457 list_add_tail(&wdata->list, &wdata_list);
2463 * If at least one write was successfully sent, then discard any rc
2464 * value from the later writes. If the other write succeeds, then
2465 * we'll end up returning whatever was written. If it fails, then
2466 * we'll get a new rc value from that.
2468 if (!list_empty(&wdata_list))
2472 * Wait for and collect replies for any successful sends in order of
2473 * increasing offset. Once an error is hit or we get a fatal signal
2474 * while waiting, then return without waiting for any more replies.
2477 list_for_each_entry_safe(wdata, tmp, &wdata_list, list) {
2479 /* FIXME: freezable too? */
2480 rc = wait_for_completion_killable(&wdata->done);
2483 else if (wdata->result)
2486 total_written += wdata->bytes;
2488 /* resend call if it's a retryable error */
2489 if (rc == -EAGAIN) {
2490 rc = cifs_uncached_retry_writev(wdata);
2494 list_del_init(&wdata->list);
2495 kref_put(&wdata->refcount, cifs_writedata_release);
2498 if (total_written > 0)
2499 *poffset += total_written;
2501 cifs_stats_bytes_written(tcon, total_written);
2502 return total_written ? total_written : (ssize_t)rc;
2505 ssize_t cifs_user_writev(struct kiocb *iocb, const struct iovec *iov,
2506 unsigned long nr_segs, loff_t pos)
2509 struct inode *inode;
2511 inode = file_inode(iocb->ki_filp);
2514 * BB - optimize the way when signing is disabled. We can drop this
2515 * extra memory-to-memory copying and use iovec buffers for constructing
2519 written = cifs_iovec_write(iocb->ki_filp, iov, nr_segs, &pos);
2521 CIFS_I(inode)->invalid_mapping = true;
2529 cifs_writev(struct kiocb *iocb, const struct iovec *iov,
2530 unsigned long nr_segs, loff_t pos)
2532 struct file *file = iocb->ki_filp;
2533 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
2534 struct inode *inode = file->f_mapping->host;
2535 struct cifsInodeInfo *cinode = CIFS_I(inode);
2536 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
2537 ssize_t rc = -EACCES;
2539 BUG_ON(iocb->ki_pos != pos);
2542 * We need to hold the sem to be sure nobody modifies lock list
2543 * with a brlock that prevents writing.
2545 down_read(&cinode->lock_sem);
2546 if (!cifs_find_lock_conflict(cfile, pos, iov_length(iov, nr_segs),
2547 server->vals->exclusive_lock_type, NULL,
2549 mutex_lock(&inode->i_mutex);
2550 rc = __generic_file_aio_write(iocb, iov, nr_segs,
2552 mutex_unlock(&inode->i_mutex);
2555 if (rc > 0 || rc == -EIOCBQUEUED) {
2558 err = generic_write_sync(file, pos, rc);
2559 if (err < 0 && rc > 0)
2563 up_read(&cinode->lock_sem);
2568 cifs_strict_writev(struct kiocb *iocb, const struct iovec *iov,
2569 unsigned long nr_segs, loff_t pos)
2571 struct inode *inode = file_inode(iocb->ki_filp);
2572 struct cifsInodeInfo *cinode = CIFS_I(inode);
2573 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2574 struct cifsFileInfo *cfile = (struct cifsFileInfo *)
2575 iocb->ki_filp->private_data;
2576 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
2579 if (cinode->clientCanCacheAll) {
2580 if (cap_unix(tcon->ses) &&
2581 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability))
2582 && ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
2583 return generic_file_aio_write(iocb, iov, nr_segs, pos);
2584 return cifs_writev(iocb, iov, nr_segs, pos);
2587 * For non-oplocked files in strict cache mode we need to write the data
2588 * to the server exactly from the pos to pos+len-1 rather than flush all
2589 * affected pages because it may cause a error with mandatory locks on
2590 * these pages but not on the region from pos to ppos+len-1.
2592 written = cifs_user_writev(iocb, iov, nr_segs, pos);
2593 if (written > 0 && cinode->clientCanCacheRead) {
2595 * Windows 7 server can delay breaking level2 oplock if a write
2596 * request comes - break it on the client to prevent reading
2599 cifs_invalidate_mapping(inode);
2600 cifs_dbg(FYI, "Set no oplock for inode=%p after a write operation\n",
2602 cinode->clientCanCacheRead = false;
2607 static struct cifs_readdata *
2608 cifs_readdata_alloc(unsigned int nr_pages, work_func_t complete)
2610 struct cifs_readdata *rdata;
2612 rdata = kzalloc(sizeof(*rdata) + (sizeof(struct page *) * nr_pages),
2614 if (rdata != NULL) {
2615 kref_init(&rdata->refcount);
2616 INIT_LIST_HEAD(&rdata->list);
2617 init_completion(&rdata->done);
2618 INIT_WORK(&rdata->work, complete);
2625 cifs_readdata_release(struct kref *refcount)
2627 struct cifs_readdata *rdata = container_of(refcount,
2628 struct cifs_readdata, refcount);
2631 cifsFileInfo_put(rdata->cfile);
2637 cifs_read_allocate_pages(struct cifs_readdata *rdata, unsigned int nr_pages)
2643 for (i = 0; i < nr_pages; i++) {
2644 page = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
2649 rdata->pages[i] = page;
2653 for (i = 0; i < nr_pages; i++) {
2654 put_page(rdata->pages[i]);
2655 rdata->pages[i] = NULL;
2662 cifs_uncached_readdata_release(struct kref *refcount)
2664 struct cifs_readdata *rdata = container_of(refcount,
2665 struct cifs_readdata, refcount);
2668 for (i = 0; i < rdata->nr_pages; i++) {
2669 put_page(rdata->pages[i]);
2670 rdata->pages[i] = NULL;
2672 cifs_readdata_release(refcount);
2676 cifs_retry_async_readv(struct cifs_readdata *rdata)
2679 struct TCP_Server_Info *server;
2681 server = tlink_tcon(rdata->cfile->tlink)->ses->server;
2684 if (rdata->cfile->invalidHandle) {
2685 rc = cifs_reopen_file(rdata->cfile, true);
2689 rc = server->ops->async_readv(rdata);
2690 } while (rc == -EAGAIN);
2696 * cifs_readdata_to_iov - copy data from pages in response to an iovec
2697 * @rdata: the readdata response with list of pages holding data
2698 * @iov: vector in which we should copy the data
2699 * @nr_segs: number of segments in vector
2700 * @offset: offset into file of the first iovec
2701 * @copied: used to return the amount of data copied to the iov
2703 * This function copies data from a list of pages in a readdata response into
2704 * an array of iovecs. It will first calculate where the data should go
2705 * based on the info in the readdata and then copy the data into that spot.
2708 cifs_readdata_to_iov(struct cifs_readdata *rdata, const struct iovec *iov,
2709 unsigned long nr_segs, loff_t offset, ssize_t *copied)
2713 size_t pos = rdata->offset - offset;
2714 ssize_t remaining = rdata->bytes;
2715 unsigned char *pdata;
2718 /* set up iov_iter and advance to the correct offset */
2719 iov_iter_init(&ii, iov, nr_segs, iov_length(iov, nr_segs), 0);
2720 iov_iter_advance(&ii, pos);
2723 for (i = 0; i < rdata->nr_pages; i++) {
2725 struct page *page = rdata->pages[i];
2727 /* copy a whole page or whatever's left */
2728 copy = min_t(ssize_t, remaining, PAGE_SIZE);
2730 /* ...but limit it to whatever space is left in the iov */
2731 copy = min_t(ssize_t, copy, iov_iter_count(&ii));
2733 /* go while there's data to be copied and no errors */
2736 rc = memcpy_toiovecend(ii.iov, pdata, ii.iov_offset,
2742 iov_iter_advance(&ii, copy);
2751 cifs_uncached_readv_complete(struct work_struct *work)
2753 struct cifs_readdata *rdata = container_of(work,
2754 struct cifs_readdata, work);
2756 complete(&rdata->done);
2757 kref_put(&rdata->refcount, cifs_uncached_readdata_release);
2761 cifs_uncached_read_into_pages(struct TCP_Server_Info *server,
2762 struct cifs_readdata *rdata, unsigned int len)
2764 int total_read = 0, result = 0;
2766 unsigned int nr_pages = rdata->nr_pages;
2769 rdata->tailsz = PAGE_SIZE;
2770 for (i = 0; i < nr_pages; i++) {
2771 struct page *page = rdata->pages[i];
2773 if (len >= PAGE_SIZE) {
2774 /* enough data to fill the page */
2775 iov.iov_base = kmap(page);
2776 iov.iov_len = PAGE_SIZE;
2777 cifs_dbg(FYI, "%u: iov_base=%p iov_len=%zu\n",
2778 i, iov.iov_base, iov.iov_len);
2780 } else if (len > 0) {
2781 /* enough for partial page, fill and zero the rest */
2782 iov.iov_base = kmap(page);
2784 cifs_dbg(FYI, "%u: iov_base=%p iov_len=%zu\n",
2785 i, iov.iov_base, iov.iov_len);
2786 memset(iov.iov_base + len, '\0', PAGE_SIZE - len);
2787 rdata->tailsz = len;
2790 /* no need to hold page hostage */
2791 rdata->pages[i] = NULL;
2797 result = cifs_readv_from_socket(server, &iov, 1, iov.iov_len);
2802 total_read += result;
2805 return total_read > 0 ? total_read : result;
2809 cifs_iovec_read(struct file *file, const struct iovec *iov,
2810 unsigned long nr_segs, loff_t *poffset)
2813 size_t len, cur_len;
2814 ssize_t total_read = 0;
2815 loff_t offset = *poffset;
2816 unsigned int npages;
2817 struct cifs_sb_info *cifs_sb;
2818 struct cifs_tcon *tcon;
2819 struct cifsFileInfo *open_file;
2820 struct cifs_readdata *rdata, *tmp;
2821 struct list_head rdata_list;
2827 len = iov_length(iov, nr_segs);
2831 INIT_LIST_HEAD(&rdata_list);
2832 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2833 open_file = file->private_data;
2834 tcon = tlink_tcon(open_file->tlink);
2836 if (!tcon->ses->server->ops->async_readv)
2839 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2840 pid = open_file->pid;
2842 pid = current->tgid;
2844 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
2845 cifs_dbg(FYI, "attempting read on write only file instance\n");
2848 cur_len = min_t(const size_t, len - total_read, cifs_sb->rsize);
2849 npages = DIV_ROUND_UP(cur_len, PAGE_SIZE);
2851 /* allocate a readdata struct */
2852 rdata = cifs_readdata_alloc(npages,
2853 cifs_uncached_readv_complete);
2859 rc = cifs_read_allocate_pages(rdata, npages);
2863 rdata->cfile = cifsFileInfo_get(open_file);
2864 rdata->nr_pages = npages;
2865 rdata->offset = offset;
2866 rdata->bytes = cur_len;
2868 rdata->pagesz = PAGE_SIZE;
2869 rdata->read_into_pages = cifs_uncached_read_into_pages;
2871 rc = cifs_retry_async_readv(rdata);
2874 kref_put(&rdata->refcount,
2875 cifs_uncached_readdata_release);
2879 list_add_tail(&rdata->list, &rdata_list);
2884 /* if at least one read request send succeeded, then reset rc */
2885 if (!list_empty(&rdata_list))
2888 /* the loop below should proceed in the order of increasing offsets */
2890 list_for_each_entry_safe(rdata, tmp, &rdata_list, list) {
2894 /* FIXME: freezable sleep too? */
2895 rc = wait_for_completion_killable(&rdata->done);
2898 else if (rdata->result)
2901 rc = cifs_readdata_to_iov(rdata, iov,
2904 total_read += copied;
2907 /* resend call if it's a retryable error */
2908 if (rc == -EAGAIN) {
2909 rc = cifs_retry_async_readv(rdata);
2913 list_del_init(&rdata->list);
2914 kref_put(&rdata->refcount, cifs_uncached_readdata_release);
2917 cifs_stats_bytes_read(tcon, total_read);
2918 *poffset += total_read;
2920 /* mask nodata case */
2924 return total_read ? total_read : rc;
2927 ssize_t cifs_user_readv(struct kiocb *iocb, const struct iovec *iov,
2928 unsigned long nr_segs, loff_t pos)
2932 read = cifs_iovec_read(iocb->ki_filp, iov, nr_segs, &pos);
2940 cifs_strict_readv(struct kiocb *iocb, const struct iovec *iov,
2941 unsigned long nr_segs, loff_t pos)
2943 struct inode *inode = file_inode(iocb->ki_filp);
2944 struct cifsInodeInfo *cinode = CIFS_I(inode);
2945 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2946 struct cifsFileInfo *cfile = (struct cifsFileInfo *)
2947 iocb->ki_filp->private_data;
2948 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
2952 * In strict cache mode we need to read from the server all the time
2953 * if we don't have level II oplock because the server can delay mtime
2954 * change - so we can't make a decision about inode invalidating.
2955 * And we can also fail with pagereading if there are mandatory locks
2956 * on pages affected by this read but not on the region from pos to
2959 if (!cinode->clientCanCacheRead)
2960 return cifs_user_readv(iocb, iov, nr_segs, pos);
2962 if (cap_unix(tcon->ses) &&
2963 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
2964 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
2965 return generic_file_aio_read(iocb, iov, nr_segs, pos);
2968 * We need to hold the sem to be sure nobody modifies lock list
2969 * with a brlock that prevents reading.
2971 down_read(&cinode->lock_sem);
2972 if (!cifs_find_lock_conflict(cfile, pos, iov_length(iov, nr_segs),
2973 tcon->ses->server->vals->shared_lock_type,
2974 NULL, CIFS_READ_OP))
2975 rc = generic_file_aio_read(iocb, iov, nr_segs, pos);
2976 up_read(&cinode->lock_sem);
2981 cifs_read(struct file *file, char *read_data, size_t read_size, loff_t *offset)
2984 unsigned int bytes_read = 0;
2985 unsigned int total_read;
2986 unsigned int current_read_size;
2988 struct cifs_sb_info *cifs_sb;
2989 struct cifs_tcon *tcon;
2990 struct TCP_Server_Info *server;
2993 struct cifsFileInfo *open_file;
2994 struct cifs_io_parms io_parms;
2995 int buf_type = CIFS_NO_BUFFER;
2999 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
3001 /* FIXME: set up handlers for larger reads and/or convert to async */
3002 rsize = min_t(unsigned int, cifs_sb->rsize, CIFSMaxBufSize);
3004 if (file->private_data == NULL) {
3009 open_file = file->private_data;
3010 tcon = tlink_tcon(open_file->tlink);
3011 server = tcon->ses->server;
3013 if (!server->ops->sync_read) {
3018 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
3019 pid = open_file->pid;
3021 pid = current->tgid;
3023 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
3024 cifs_dbg(FYI, "attempting read on write only file instance\n");
3026 for (total_read = 0, cur_offset = read_data; read_size > total_read;
3027 total_read += bytes_read, cur_offset += bytes_read) {
3028 current_read_size = min_t(uint, read_size - total_read, rsize);
3030 * For windows me and 9x we do not want to request more than it
3031 * negotiated since it will refuse the read then.
3033 if ((tcon->ses) && !(tcon->ses->capabilities &
3034 tcon->ses->server->vals->cap_large_files)) {
3035 current_read_size = min_t(uint, current_read_size,
3039 while (rc == -EAGAIN) {
3040 if (open_file->invalidHandle) {
3041 rc = cifs_reopen_file(open_file, true);
3046 io_parms.tcon = tcon;
3047 io_parms.offset = *offset;
3048 io_parms.length = current_read_size;
3049 rc = server->ops->sync_read(xid, open_file, &io_parms,
3050 &bytes_read, &cur_offset,
3053 if (rc || (bytes_read == 0)) {
3061 cifs_stats_bytes_read(tcon, total_read);
3062 *offset += bytes_read;
3070 * If the page is mmap'ed into a process' page tables, then we need to make
3071 * sure that it doesn't change while being written back.
3074 cifs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
3076 struct page *page = vmf->page;
3079 return VM_FAULT_LOCKED;
3082 static struct vm_operations_struct cifs_file_vm_ops = {
3083 .fault = filemap_fault,
3084 .page_mkwrite = cifs_page_mkwrite,
3085 .remap_pages = generic_file_remap_pages,
3088 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
3091 struct inode *inode = file_inode(file);
3095 if (!CIFS_I(inode)->clientCanCacheRead) {
3096 rc = cifs_invalidate_mapping(inode);
3101 rc = generic_file_mmap(file, vma);
3103 vma->vm_ops = &cifs_file_vm_ops;
3108 int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
3113 rc = cifs_revalidate_file(file);
3115 cifs_dbg(FYI, "Validation prior to mmap failed, error=%d\n",
3120 rc = generic_file_mmap(file, vma);
3122 vma->vm_ops = &cifs_file_vm_ops;
3128 cifs_readv_complete(struct work_struct *work)
3131 struct cifs_readdata *rdata = container_of(work,
3132 struct cifs_readdata, work);
3134 for (i = 0; i < rdata->nr_pages; i++) {
3135 struct page *page = rdata->pages[i];
3137 lru_cache_add_file(page);
3139 if (rdata->result == 0) {
3140 flush_dcache_page(page);
3141 SetPageUptodate(page);
3146 if (rdata->result == 0)
3147 cifs_readpage_to_fscache(rdata->mapping->host, page);
3149 page_cache_release(page);
3150 rdata->pages[i] = NULL;
3152 kref_put(&rdata->refcount, cifs_readdata_release);
3156 cifs_readpages_read_into_pages(struct TCP_Server_Info *server,
3157 struct cifs_readdata *rdata, unsigned int len)
3159 int total_read = 0, result = 0;
3163 unsigned int nr_pages = rdata->nr_pages;
3166 /* determine the eof that the server (probably) has */
3167 eof = CIFS_I(rdata->mapping->host)->server_eof;
3168 eof_index = eof ? (eof - 1) >> PAGE_CACHE_SHIFT : 0;
3169 cifs_dbg(FYI, "eof=%llu eof_index=%lu\n", eof, eof_index);
3171 rdata->tailsz = PAGE_CACHE_SIZE;
3172 for (i = 0; i < nr_pages; i++) {
3173 struct page *page = rdata->pages[i];
3175 if (len >= PAGE_CACHE_SIZE) {
3176 /* enough data to fill the page */
3177 iov.iov_base = kmap(page);
3178 iov.iov_len = PAGE_CACHE_SIZE;
3179 cifs_dbg(FYI, "%u: idx=%lu iov_base=%p iov_len=%zu\n",
3180 i, page->index, iov.iov_base, iov.iov_len);
3181 len -= PAGE_CACHE_SIZE;
3182 } else if (len > 0) {
3183 /* enough for partial page, fill and zero the rest */
3184 iov.iov_base = kmap(page);
3186 cifs_dbg(FYI, "%u: idx=%lu iov_base=%p iov_len=%zu\n",
3187 i, page->index, iov.iov_base, iov.iov_len);
3188 memset(iov.iov_base + len,
3189 '\0', PAGE_CACHE_SIZE - len);
3190 rdata->tailsz = len;
3192 } else if (page->index > eof_index) {
3194 * The VFS will not try to do readahead past the
3195 * i_size, but it's possible that we have outstanding
3196 * writes with gaps in the middle and the i_size hasn't
3197 * caught up yet. Populate those with zeroed out pages
3198 * to prevent the VFS from repeatedly attempting to
3199 * fill them until the writes are flushed.
3201 zero_user(page, 0, PAGE_CACHE_SIZE);
3202 lru_cache_add_file(page);
3203 flush_dcache_page(page);
3204 SetPageUptodate(page);
3206 page_cache_release(page);
3207 rdata->pages[i] = NULL;
3211 /* no need to hold page hostage */
3212 lru_cache_add_file(page);
3214 page_cache_release(page);
3215 rdata->pages[i] = NULL;
3220 result = cifs_readv_from_socket(server, &iov, 1, iov.iov_len);
3225 total_read += result;
3228 return total_read > 0 ? total_read : result;
3231 static int cifs_readpages(struct file *file, struct address_space *mapping,
3232 struct list_head *page_list, unsigned num_pages)
3235 struct list_head tmplist;
3236 struct cifsFileInfo *open_file = file->private_data;
3237 struct cifs_sb_info *cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
3238 unsigned int rsize = cifs_sb->rsize;
3242 * Give up immediately if rsize is too small to read an entire page.
3243 * The VFS will fall back to readpage. We should never reach this
3244 * point however since we set ra_pages to 0 when the rsize is smaller
3245 * than a cache page.
3247 if (unlikely(rsize < PAGE_CACHE_SIZE))
3251 * Reads as many pages as possible from fscache. Returns -ENOBUFS
3252 * immediately if the cookie is negative
3254 rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,
3259 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
3260 pid = open_file->pid;
3262 pid = current->tgid;
3265 INIT_LIST_HEAD(&tmplist);
3267 cifs_dbg(FYI, "%s: file=%p mapping=%p num_pages=%u\n",
3268 __func__, file, mapping, num_pages);
3271 * Start with the page at end of list and move it to private
3272 * list. Do the same with any following pages until we hit
3273 * the rsize limit, hit an index discontinuity, or run out of
3274 * pages. Issue the async read and then start the loop again
3275 * until the list is empty.
3277 * Note that list order is important. The page_list is in
3278 * the order of declining indexes. When we put the pages in
3279 * the rdata->pages, then we want them in increasing order.
3281 while (!list_empty(page_list)) {
3283 unsigned int bytes = PAGE_CACHE_SIZE;
3284 unsigned int expected_index;
3285 unsigned int nr_pages = 1;
3287 struct page *page, *tpage;
3288 struct cifs_readdata *rdata;
3290 page = list_entry(page_list->prev, struct page, lru);
3293 * Lock the page and put it in the cache. Since no one else
3294 * should have access to this page, we're safe to simply set
3295 * PG_locked without checking it first.
3297 __set_page_locked(page);
3298 rc = add_to_page_cache_locked(page, mapping,
3299 page->index, GFP_KERNEL);
3301 /* give up if we can't stick it in the cache */
3303 __clear_page_locked(page);
3307 /* move first page to the tmplist */
3308 offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
3309 list_move_tail(&page->lru, &tmplist);
3311 /* now try and add more pages onto the request */
3312 expected_index = page->index + 1;
3313 list_for_each_entry_safe_reverse(page, tpage, page_list, lru) {
3314 /* discontinuity ? */
3315 if (page->index != expected_index)
3318 /* would this page push the read over the rsize? */
3319 if (bytes + PAGE_CACHE_SIZE > rsize)
3322 __set_page_locked(page);
3323 if (add_to_page_cache_locked(page, mapping,
3324 page->index, GFP_KERNEL)) {
3325 __clear_page_locked(page);
3328 list_move_tail(&page->lru, &tmplist);
3329 bytes += PAGE_CACHE_SIZE;
3334 rdata = cifs_readdata_alloc(nr_pages, cifs_readv_complete);
3336 /* best to give up if we're out of mem */
3337 list_for_each_entry_safe(page, tpage, &tmplist, lru) {
3338 list_del(&page->lru);
3339 lru_cache_add_file(page);
3341 page_cache_release(page);
3347 rdata->cfile = cifsFileInfo_get(open_file);
3348 rdata->mapping = mapping;
3349 rdata->offset = offset;
3350 rdata->bytes = bytes;
3352 rdata->pagesz = PAGE_CACHE_SIZE;
3353 rdata->read_into_pages = cifs_readpages_read_into_pages;
3355 list_for_each_entry_safe(page, tpage, &tmplist, lru) {
3356 list_del(&page->lru);
3357 rdata->pages[rdata->nr_pages++] = page;
3360 rc = cifs_retry_async_readv(rdata);
3362 for (i = 0; i < rdata->nr_pages; i++) {
3363 page = rdata->pages[i];
3364 lru_cache_add_file(page);
3366 page_cache_release(page);
3368 kref_put(&rdata->refcount, cifs_readdata_release);
3372 kref_put(&rdata->refcount, cifs_readdata_release);
3378 static int cifs_readpage_worker(struct file *file, struct page *page,
3384 /* Is the page cached? */
3385 rc = cifs_readpage_from_fscache(file_inode(file), page);
3389 page_cache_get(page);
3390 read_data = kmap(page);
3391 /* for reads over a certain size could initiate async read ahead */
3393 rc = cifs_read(file, read_data, PAGE_CACHE_SIZE, poffset);
3398 cifs_dbg(FYI, "Bytes read %d\n", rc);
3400 file_inode(file)->i_atime =
3401 current_fs_time(file_inode(file)->i_sb);
3403 if (PAGE_CACHE_SIZE > rc)
3404 memset(read_data + rc, 0, PAGE_CACHE_SIZE - rc);
3406 flush_dcache_page(page);
3407 SetPageUptodate(page);
3409 /* send this page to the cache */
3410 cifs_readpage_to_fscache(file_inode(file), page);
3416 page_cache_release(page);
3422 static int cifs_readpage(struct file *file, struct page *page)
3424 loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
3430 if (file->private_data == NULL) {
3436 cifs_dbg(FYI, "readpage %p at offset %d 0x%x\n",
3437 page, (int)offset, (int)offset);
3439 rc = cifs_readpage_worker(file, page, &offset);
3447 static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
3449 struct cifsFileInfo *open_file;
3451 spin_lock(&cifs_file_list_lock);
3452 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
3453 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
3454 spin_unlock(&cifs_file_list_lock);
3458 spin_unlock(&cifs_file_list_lock);
3462 /* We do not want to update the file size from server for inodes
3463 open for write - to avoid races with writepage extending
3464 the file - in the future we could consider allowing
3465 refreshing the inode only on increases in the file size
3466 but this is tricky to do without racing with writebehind
3467 page caching in the current Linux kernel design */
3468 bool is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file)
3473 if (is_inode_writable(cifsInode)) {
3474 /* This inode is open for write at least once */
3475 struct cifs_sb_info *cifs_sb;
3477 cifs_sb = CIFS_SB(cifsInode->vfs_inode.i_sb);
3478 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO) {
3479 /* since no page cache to corrupt on directio
3480 we can change size safely */
3484 if (i_size_read(&cifsInode->vfs_inode) < end_of_file)
3492 static int cifs_write_begin(struct file *file, struct address_space *mapping,
3493 loff_t pos, unsigned len, unsigned flags,
3494 struct page **pagep, void **fsdata)
3496 pgoff_t index = pos >> PAGE_CACHE_SHIFT;
3497 loff_t offset = pos & (PAGE_CACHE_SIZE - 1);
3498 loff_t page_start = pos & PAGE_MASK;
3503 cifs_dbg(FYI, "write_begin from %lld len %d\n", (long long)pos, len);
3505 page = grab_cache_page_write_begin(mapping, index, flags);
3511 if (PageUptodate(page))
3515 * If we write a full page it will be up to date, no need to read from
3516 * the server. If the write is short, we'll end up doing a sync write
3519 if (len == PAGE_CACHE_SIZE)
3523 * optimize away the read when we have an oplock, and we're not
3524 * expecting to use any of the data we'd be reading in. That
3525 * is, when the page lies beyond the EOF, or straddles the EOF
3526 * and the write will cover all of the existing data.
3528 if (CIFS_I(mapping->host)->clientCanCacheRead) {
3529 i_size = i_size_read(mapping->host);
3530 if (page_start >= i_size ||
3531 (offset == 0 && (pos + len) >= i_size)) {
3532 zero_user_segments(page, 0, offset,
3536 * PageChecked means that the parts of the page
3537 * to which we're not writing are considered up
3538 * to date. Once the data is copied to the
3539 * page, it can be set uptodate.
3541 SetPageChecked(page);
3546 if ((file->f_flags & O_ACCMODE) != O_WRONLY) {
3548 * might as well read a page, it is fast enough. If we get
3549 * an error, we don't need to return it. cifs_write_end will
3550 * do a sync write instead since PG_uptodate isn't set.
3552 cifs_readpage_worker(file, page, &page_start);
3554 /* we could try using another file handle if there is one -
3555 but how would we lock it to prevent close of that handle
3556 racing with this read? In any case
3557 this will be written out by write_end so is fine */
3564 static int cifs_release_page(struct page *page, gfp_t gfp)
3566 if (PagePrivate(page))
3569 return cifs_fscache_release_page(page, gfp);
3572 static void cifs_invalidate_page(struct page *page, unsigned int offset,
3573 unsigned int length)
3575 struct cifsInodeInfo *cifsi = CIFS_I(page->mapping->host);
3577 if (offset == 0 && length == PAGE_CACHE_SIZE)
3578 cifs_fscache_invalidate_page(page, &cifsi->vfs_inode);
3581 static int cifs_launder_page(struct page *page)
3584 loff_t range_start = page_offset(page);
3585 loff_t range_end = range_start + (loff_t)(PAGE_CACHE_SIZE - 1);
3586 struct writeback_control wbc = {
3587 .sync_mode = WB_SYNC_ALL,
3589 .range_start = range_start,
3590 .range_end = range_end,
3593 cifs_dbg(FYI, "Launder page: %p\n", page);
3595 if (clear_page_dirty_for_io(page))
3596 rc = cifs_writepage_locked(page, &wbc);
3598 cifs_fscache_invalidate_page(page, page->mapping->host);
3602 void cifs_oplock_break(struct work_struct *work)
3604 struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
3606 struct inode *inode = cfile->dentry->d_inode;
3607 struct cifsInodeInfo *cinode = CIFS_I(inode);
3608 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
3611 if (!cinode->clientCanCacheAll && cinode->clientCanCacheRead &&
3612 cifs_has_mand_locks(cinode)) {
3613 cifs_dbg(FYI, "Reset oplock to None for inode=%p due to mand locks\n",
3615 cinode->clientCanCacheRead = false;
3618 if (inode && S_ISREG(inode->i_mode)) {
3619 if (cinode->clientCanCacheRead)
3620 break_lease(inode, O_RDONLY);
3622 break_lease(inode, O_WRONLY);
3623 rc = filemap_fdatawrite(inode->i_mapping);
3624 if (cinode->clientCanCacheRead == 0) {
3625 rc = filemap_fdatawait(inode->i_mapping);
3626 mapping_set_error(inode->i_mapping, rc);
3627 cifs_invalidate_mapping(inode);
3629 cifs_dbg(FYI, "Oplock flush inode %p rc %d\n", inode, rc);
3632 rc = cifs_push_locks(cfile);
3634 cifs_dbg(VFS, "Push locks rc = %d\n", rc);
3637 * releasing stale oplock after recent reconnect of smb session using
3638 * a now incorrect file handle is not a data integrity issue but do
3639 * not bother sending an oplock release if session to server still is
3640 * disconnected since oplock already released by the server
3642 if (!cfile->oplock_break_cancelled) {
3643 rc = tcon->ses->server->ops->oplock_response(tcon, &cfile->fid,
3645 cifs_dbg(FYI, "Oplock release rc = %d\n", rc);
3649 const struct address_space_operations cifs_addr_ops = {
3650 .readpage = cifs_readpage,
3651 .readpages = cifs_readpages,
3652 .writepage = cifs_writepage,
3653 .writepages = cifs_writepages,
3654 .write_begin = cifs_write_begin,
3655 .write_end = cifs_write_end,
3656 .set_page_dirty = __set_page_dirty_nobuffers,
3657 .releasepage = cifs_release_page,
3658 .invalidatepage = cifs_invalidate_page,
3659 .launder_page = cifs_launder_page,
3663 * cifs_readpages requires the server to support a buffer large enough to
3664 * contain the header plus one complete page of data. Otherwise, we need
3665 * to leave cifs_readpages out of the address space operations.
3667 const struct address_space_operations cifs_addr_ops_smallbuf = {
3668 .readpage = cifs_readpage,
3669 .writepage = cifs_writepage,
3670 .writepages = cifs_writepages,
3671 .write_begin = cifs_write_begin,
3672 .write_end = cifs_write_end,
3673 .set_page_dirty = __set_page_dirty_nobuffers,
3674 .releasepage = cifs_release_page,
3675 .invalidatepage = cifs_invalidate_page,
3676 .launder_page = cifs_launder_page,