4 * vfs operations that deal with files
6 * Copyright (C) International Business Machines Corp., 2002,2010
7 * Author(s): Steve French (sfrench@us.ibm.com)
8 * Jeremy Allison (jra@samba.org)
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 <asm/div64.h>
39 #include "cifsproto.h"
40 #include "cifs_unicode.h"
41 #include "cifs_debug.h"
42 #include "cifs_fs_sb.h"
45 static inline int cifs_convert_flags(unsigned int flags)
47 if ((flags & O_ACCMODE) == O_RDONLY)
49 else if ((flags & O_ACCMODE) == O_WRONLY)
51 else if ((flags & O_ACCMODE) == O_RDWR) {
52 /* GENERIC_ALL is too much permission to request
53 can cause unnecessary access denied on create */
54 /* return GENERIC_ALL; */
55 return (GENERIC_READ | GENERIC_WRITE);
58 return (READ_CONTROL | FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES |
59 FILE_WRITE_EA | FILE_APPEND_DATA | FILE_WRITE_DATA |
63 static u32 cifs_posix_convert_flags(unsigned int flags)
67 if ((flags & O_ACCMODE) == O_RDONLY)
68 posix_flags = SMB_O_RDONLY;
69 else if ((flags & O_ACCMODE) == O_WRONLY)
70 posix_flags = SMB_O_WRONLY;
71 else if ((flags & O_ACCMODE) == O_RDWR)
72 posix_flags = SMB_O_RDWR;
75 posix_flags |= SMB_O_CREAT;
77 posix_flags |= SMB_O_EXCL;
79 posix_flags |= SMB_O_TRUNC;
80 /* be safe and imply O_SYNC for O_DSYNC */
82 posix_flags |= SMB_O_SYNC;
83 if (flags & O_DIRECTORY)
84 posix_flags |= SMB_O_DIRECTORY;
85 if (flags & O_NOFOLLOW)
86 posix_flags |= SMB_O_NOFOLLOW;
88 posix_flags |= SMB_O_DIRECT;
93 static inline int cifs_get_disposition(unsigned int flags)
95 if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
97 else if ((flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
98 return FILE_OVERWRITE_IF;
99 else if ((flags & O_CREAT) == O_CREAT)
101 else if ((flags & O_TRUNC) == O_TRUNC)
102 return FILE_OVERWRITE;
107 int cifs_posix_open(char *full_path, struct inode **pinode,
108 struct super_block *sb, int mode, unsigned int f_flags,
109 __u32 *poplock, __u16 *pnetfid, int xid)
112 FILE_UNIX_BASIC_INFO *presp_data;
113 __u32 posix_flags = 0;
114 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
115 struct cifs_fattr fattr;
116 struct tcon_link *tlink;
117 struct cifs_tcon *tcon;
119 cFYI(1, "posix open %s", full_path);
121 presp_data = kzalloc(sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL);
122 if (presp_data == NULL)
125 tlink = cifs_sb_tlink(cifs_sb);
131 tcon = tlink_tcon(tlink);
132 mode &= ~current_umask();
134 posix_flags = cifs_posix_convert_flags(f_flags);
135 rc = CIFSPOSIXCreate(xid, tcon, posix_flags, mode, pnetfid, presp_data,
136 poplock, full_path, cifs_sb->local_nls,
137 cifs_sb->mnt_cifs_flags &
138 CIFS_MOUNT_MAP_SPECIAL_CHR);
139 cifs_put_tlink(tlink);
144 if (presp_data->Type == cpu_to_le32(-1))
145 goto posix_open_ret; /* open ok, caller does qpathinfo */
148 goto posix_open_ret; /* caller does not need info */
150 cifs_unix_basic_to_fattr(&fattr, presp_data, cifs_sb);
152 /* get new inode and set it up */
153 if (*pinode == NULL) {
154 cifs_fill_uniqueid(sb, &fattr);
155 *pinode = cifs_iget(sb, &fattr);
161 cifs_fattr_to_inode(*pinode, &fattr);
170 cifs_nt_open(char *full_path, struct inode *inode, struct cifs_sb_info *cifs_sb,
171 struct cifs_tcon *tcon, unsigned int f_flags, __u32 *poplock,
172 __u16 *pnetfid, int xid)
177 int create_options = CREATE_NOT_DIR;
180 desiredAccess = cifs_convert_flags(f_flags);
182 /*********************************************************************
183 * open flag mapping table:
185 * POSIX Flag CIFS Disposition
186 * ---------- ----------------
187 * O_CREAT FILE_OPEN_IF
188 * O_CREAT | O_EXCL FILE_CREATE
189 * O_CREAT | O_TRUNC FILE_OVERWRITE_IF
190 * O_TRUNC FILE_OVERWRITE
191 * none of the above FILE_OPEN
193 * Note that there is not a direct match between disposition
194 * FILE_SUPERSEDE (ie create whether or not file exists although
195 * O_CREAT | O_TRUNC is similar but truncates the existing
196 * file rather than creating a new file as FILE_SUPERSEDE does
197 * (which uses the attributes / metadata passed in on open call)
199 *? O_SYNC is a reasonable match to CIFS writethrough flag
200 *? and the read write flags match reasonably. O_LARGEFILE
201 *? is irrelevant because largefile support is always used
202 *? by this client. Flags O_APPEND, O_DIRECT, O_DIRECTORY,
203 * O_FASYNC, O_NOFOLLOW, O_NONBLOCK need further investigation
204 *********************************************************************/
206 disposition = cifs_get_disposition(f_flags);
208 /* BB pass O_SYNC flag through on file attributes .. BB */
210 buf = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
214 if (backup_cred(cifs_sb))
215 create_options |= CREATE_OPEN_BACKUP_INTENT;
217 if (tcon->ses->capabilities & CAP_NT_SMBS)
218 rc = CIFSSMBOpen(xid, tcon, full_path, disposition,
219 desiredAccess, create_options, pnetfid, poplock, buf,
220 cifs_sb->local_nls, cifs_sb->mnt_cifs_flags
221 & CIFS_MOUNT_MAP_SPECIAL_CHR);
223 rc = SMBLegacyOpen(xid, tcon, full_path, disposition,
224 desiredAccess, CREATE_NOT_DIR, pnetfid, poplock, buf,
225 cifs_sb->local_nls, cifs_sb->mnt_cifs_flags
226 & CIFS_MOUNT_MAP_SPECIAL_CHR);
232 rc = cifs_get_inode_info_unix(&inode, full_path, inode->i_sb,
235 rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb,
243 struct cifsFileInfo *
244 cifs_new_fileinfo(__u16 fileHandle, struct file *file,
245 struct tcon_link *tlink, __u32 oplock)
247 struct dentry *dentry = file->f_path.dentry;
248 struct inode *inode = dentry->d_inode;
249 struct cifsInodeInfo *pCifsInode = CIFS_I(inode);
250 struct cifsFileInfo *pCifsFile;
252 pCifsFile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
253 if (pCifsFile == NULL)
256 pCifsFile->count = 1;
257 pCifsFile->netfid = fileHandle;
258 pCifsFile->pid = current->tgid;
259 pCifsFile->uid = current_fsuid();
260 pCifsFile->dentry = dget(dentry);
261 pCifsFile->f_flags = file->f_flags;
262 pCifsFile->invalidHandle = false;
263 pCifsFile->tlink = cifs_get_tlink(tlink);
264 mutex_init(&pCifsFile->fh_mutex);
265 mutex_init(&pCifsFile->lock_mutex);
266 INIT_LIST_HEAD(&pCifsFile->llist);
267 INIT_WORK(&pCifsFile->oplock_break, cifs_oplock_break);
269 spin_lock(&cifs_file_list_lock);
270 list_add(&pCifsFile->tlist, &(tlink_tcon(tlink)->openFileList));
271 /* if readable file instance put first in list*/
272 if (file->f_mode & FMODE_READ)
273 list_add(&pCifsFile->flist, &pCifsInode->openFileList);
275 list_add_tail(&pCifsFile->flist, &pCifsInode->openFileList);
276 spin_unlock(&cifs_file_list_lock);
278 cifs_set_oplock_level(pCifsInode, oplock);
280 file->private_data = pCifsFile;
285 * Release a reference on the file private data. This may involve closing
286 * the filehandle out on the server. Must be called without holding
287 * cifs_file_list_lock.
289 void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
291 struct inode *inode = cifs_file->dentry->d_inode;
292 struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
293 struct cifsInodeInfo *cifsi = CIFS_I(inode);
294 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
295 struct cifsLockInfo *li, *tmp;
297 spin_lock(&cifs_file_list_lock);
298 if (--cifs_file->count > 0) {
299 spin_unlock(&cifs_file_list_lock);
303 /* remove it from the lists */
304 list_del(&cifs_file->flist);
305 list_del(&cifs_file->tlist);
307 if (list_empty(&cifsi->openFileList)) {
308 cFYI(1, "closing last open instance for inode %p",
309 cifs_file->dentry->d_inode);
311 /* in strict cache mode we need invalidate mapping on the last
312 close because it may cause a error when we open this file
313 again and get at least level II oplock */
314 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO)
315 CIFS_I(inode)->invalid_mapping = true;
317 cifs_set_oplock_level(cifsi, 0);
319 spin_unlock(&cifs_file_list_lock);
321 cancel_work_sync(&cifs_file->oplock_break);
323 if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
327 rc = CIFSSMBClose(xid, tcon, cifs_file->netfid);
331 /* Delete any outstanding lock records. We'll lose them when the file
334 mutex_lock(&cifs_file->lock_mutex);
335 list_for_each_entry_safe(li, tmp, &cifs_file->llist, llist) {
336 list_del(&li->llist);
339 mutex_unlock(&cifs_file->lock_mutex);
341 cifs_put_tlink(cifs_file->tlink);
342 dput(cifs_file->dentry);
346 int cifs_open(struct inode *inode, struct file *file)
351 struct cifs_sb_info *cifs_sb;
352 struct cifs_tcon *tcon;
353 struct tcon_link *tlink;
354 struct cifsFileInfo *pCifsFile = NULL;
355 char *full_path = NULL;
356 bool posix_open_ok = false;
361 cifs_sb = CIFS_SB(inode->i_sb);
362 tlink = cifs_sb_tlink(cifs_sb);
365 return PTR_ERR(tlink);
367 tcon = tlink_tcon(tlink);
369 full_path = build_path_from_dentry(file->f_path.dentry);
370 if (full_path == NULL) {
375 cFYI(1, "inode = 0x%p file flags are 0x%x for %s",
376 inode, file->f_flags, full_path);
383 if (!tcon->broken_posix_open && tcon->unix_ext &&
384 (tcon->ses->capabilities & CAP_UNIX) &&
385 (CIFS_UNIX_POSIX_PATH_OPS_CAP &
386 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
387 /* can not refresh inode info since size could be stale */
388 rc = cifs_posix_open(full_path, &inode, inode->i_sb,
389 cifs_sb->mnt_file_mode /* ignored */,
390 file->f_flags, &oplock, &netfid, xid);
392 cFYI(1, "posix open succeeded");
393 posix_open_ok = true;
394 } else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) {
395 if (tcon->ses->serverNOS)
396 cERROR(1, "server %s of type %s returned"
397 " unexpected error on SMB posix open"
398 ", disabling posix open support."
399 " Check if server update available.",
400 tcon->ses->serverName,
401 tcon->ses->serverNOS);
402 tcon->broken_posix_open = true;
403 } else if ((rc != -EIO) && (rc != -EREMOTE) &&
404 (rc != -EOPNOTSUPP)) /* path not found or net err */
406 /* else fallthrough to retry open the old way on network i/o
410 if (!posix_open_ok) {
411 rc = cifs_nt_open(full_path, inode, cifs_sb, tcon,
412 file->f_flags, &oplock, &netfid, xid);
417 pCifsFile = cifs_new_fileinfo(netfid, file, tlink, oplock);
418 if (pCifsFile == NULL) {
419 CIFSSMBClose(xid, tcon, netfid);
424 cifs_fscache_set_inode_cookie(inode, file);
426 if ((oplock & CIFS_CREATE_ACTION) && !posix_open_ok && tcon->unix_ext) {
427 /* time to set mode which we can not set earlier due to
428 problems creating new read-only files */
429 struct cifs_unix_set_info_args args = {
430 .mode = inode->i_mode,
433 .ctime = NO_CHANGE_64,
434 .atime = NO_CHANGE_64,
435 .mtime = NO_CHANGE_64,
438 CIFSSMBUnixSetFileInfo(xid, tcon, &args, netfid,
445 cifs_put_tlink(tlink);
449 /* Try to reacquire byte range locks that were released when session */
450 /* to server was lost */
451 static int cifs_relock_file(struct cifsFileInfo *cifsFile)
455 /* BB list all locks open on this file and relock */
460 static int cifs_reopen_file(struct cifsFileInfo *pCifsFile, bool can_flush)
465 struct cifs_sb_info *cifs_sb;
466 struct cifs_tcon *tcon;
467 struct cifsInodeInfo *pCifsInode;
469 char *full_path = NULL;
471 int disposition = FILE_OPEN;
472 int create_options = CREATE_NOT_DIR;
476 mutex_lock(&pCifsFile->fh_mutex);
477 if (!pCifsFile->invalidHandle) {
478 mutex_unlock(&pCifsFile->fh_mutex);
484 inode = pCifsFile->dentry->d_inode;
485 cifs_sb = CIFS_SB(inode->i_sb);
486 tcon = tlink_tcon(pCifsFile->tlink);
488 /* can not grab rename sem here because various ops, including
489 those that already have the rename sem can end up causing writepage
490 to get called and if the server was down that means we end up here,
491 and we can never tell if the caller already has the rename_sem */
492 full_path = build_path_from_dentry(pCifsFile->dentry);
493 if (full_path == NULL) {
495 mutex_unlock(&pCifsFile->fh_mutex);
500 cFYI(1, "inode = 0x%p file flags 0x%x for %s",
501 inode, pCifsFile->f_flags, full_path);
508 if (tcon->unix_ext && (tcon->ses->capabilities & CAP_UNIX) &&
509 (CIFS_UNIX_POSIX_PATH_OPS_CAP &
510 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
513 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the
514 * original open. Must mask them off for a reopen.
516 unsigned int oflags = pCifsFile->f_flags &
517 ~(O_CREAT | O_EXCL | O_TRUNC);
519 rc = cifs_posix_open(full_path, NULL, inode->i_sb,
520 cifs_sb->mnt_file_mode /* ignored */,
521 oflags, &oplock, &netfid, xid);
523 cFYI(1, "posix reopen succeeded");
526 /* fallthrough to retry open the old way on errors, especially
527 in the reconnect path it is important to retry hard */
530 desiredAccess = cifs_convert_flags(pCifsFile->f_flags);
532 if (backup_cred(cifs_sb))
533 create_options |= CREATE_OPEN_BACKUP_INTENT;
535 /* Can not refresh inode by passing in file_info buf to be returned
536 by SMBOpen and then calling get_inode_info with returned buf
537 since file might have write behind data that needs to be flushed
538 and server version of file size can be stale. If we knew for sure
539 that inode was not dirty locally we could do this */
541 rc = CIFSSMBOpen(xid, tcon, full_path, disposition, desiredAccess,
542 create_options, &netfid, &oplock, NULL,
543 cifs_sb->local_nls, cifs_sb->mnt_cifs_flags &
544 CIFS_MOUNT_MAP_SPECIAL_CHR);
546 mutex_unlock(&pCifsFile->fh_mutex);
547 cFYI(1, "cifs_open returned 0x%x", rc);
548 cFYI(1, "oplock: %d", oplock);
549 goto reopen_error_exit;
553 pCifsFile->netfid = netfid;
554 pCifsFile->invalidHandle = false;
555 mutex_unlock(&pCifsFile->fh_mutex);
556 pCifsInode = CIFS_I(inode);
559 rc = filemap_write_and_wait(inode->i_mapping);
560 mapping_set_error(inode->i_mapping, rc);
563 rc = cifs_get_inode_info_unix(&inode,
564 full_path, inode->i_sb, xid);
566 rc = cifs_get_inode_info(&inode,
567 full_path, NULL, inode->i_sb,
569 } /* else we are writing out data to server already
570 and could deadlock if we tried to flush data, and
571 since we do not know if we have data that would
572 invalidate the current end of file on the server
573 we can not go to the server to get the new inod
576 cifs_set_oplock_level(pCifsInode, oplock);
578 cifs_relock_file(pCifsFile);
586 int cifs_close(struct inode *inode, struct file *file)
588 if (file->private_data != NULL) {
589 cifsFileInfo_put(file->private_data);
590 file->private_data = NULL;
593 /* return code from the ->release op is always ignored */
597 int cifs_closedir(struct inode *inode, struct file *file)
601 struct cifsFileInfo *pCFileStruct = file->private_data;
604 cFYI(1, "Closedir inode = 0x%p", inode);
609 struct cifs_tcon *pTcon = tlink_tcon(pCFileStruct->tlink);
611 cFYI(1, "Freeing private data in close dir");
612 spin_lock(&cifs_file_list_lock);
613 if (!pCFileStruct->srch_inf.endOfSearch &&
614 !pCFileStruct->invalidHandle) {
615 pCFileStruct->invalidHandle = true;
616 spin_unlock(&cifs_file_list_lock);
617 rc = CIFSFindClose(xid, pTcon, pCFileStruct->netfid);
618 cFYI(1, "Closing uncompleted readdir with rc %d",
620 /* not much we can do if it fails anyway, ignore rc */
623 spin_unlock(&cifs_file_list_lock);
624 ptmp = pCFileStruct->srch_inf.ntwrk_buf_start;
626 cFYI(1, "closedir free smb buf in srch struct");
627 pCFileStruct->srch_inf.ntwrk_buf_start = NULL;
628 if (pCFileStruct->srch_inf.smallBuf)
629 cifs_small_buf_release(ptmp);
631 cifs_buf_release(ptmp);
633 cifs_put_tlink(pCFileStruct->tlink);
634 kfree(file->private_data);
635 file->private_data = NULL;
637 /* BB can we lock the filestruct while this is going on? */
642 static int store_file_lock(struct cifsFileInfo *fid, __u64 len,
643 __u64 offset, __u8 lockType)
645 struct cifsLockInfo *li =
646 kmalloc(sizeof(struct cifsLockInfo), GFP_KERNEL);
652 mutex_lock(&fid->lock_mutex);
653 list_add(&li->llist, &fid->llist);
654 mutex_unlock(&fid->lock_mutex);
658 int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
664 bool wait_flag = false;
665 struct cifs_sb_info *cifs_sb;
666 struct cifs_tcon *tcon;
668 __u8 lockType = LOCKING_ANDX_LARGE_FILES;
669 bool posix_locking = 0;
671 length = 1 + pfLock->fl_end - pfLock->fl_start;
675 cFYI(1, "Lock parm: 0x%x flockflags: "
676 "0x%x flocktype: 0x%x start: %lld end: %lld",
677 cmd, pfLock->fl_flags, pfLock->fl_type, pfLock->fl_start,
680 if (pfLock->fl_flags & FL_POSIX)
682 if (pfLock->fl_flags & FL_FLOCK)
684 if (pfLock->fl_flags & FL_SLEEP) {
685 cFYI(1, "Blocking lock");
688 if (pfLock->fl_flags & FL_ACCESS)
689 cFYI(1, "Process suspended by mandatory locking - "
690 "not implemented yet");
691 if (pfLock->fl_flags & FL_LEASE)
692 cFYI(1, "Lease on file - not implemented yet");
693 if (pfLock->fl_flags &
694 (~(FL_POSIX | FL_FLOCK | FL_SLEEP | FL_ACCESS | FL_LEASE)))
695 cFYI(1, "Unknown lock flags 0x%x", pfLock->fl_flags);
697 if (pfLock->fl_type == F_WRLCK) {
700 } else if (pfLock->fl_type == F_UNLCK) {
703 /* Check if unlock includes more than
705 } else if (pfLock->fl_type == F_RDLCK) {
707 lockType |= LOCKING_ANDX_SHARED_LOCK;
709 } else if (pfLock->fl_type == F_EXLCK) {
712 } else if (pfLock->fl_type == F_SHLCK) {
714 lockType |= LOCKING_ANDX_SHARED_LOCK;
717 cFYI(1, "Unknown type of lock");
719 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
720 tcon = tlink_tcon(((struct cifsFileInfo *)file->private_data)->tlink);
721 netfid = ((struct cifsFileInfo *)file->private_data)->netfid;
723 if ((tcon->ses->capabilities & CAP_UNIX) &&
724 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
725 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
727 /* BB add code here to normalize offset and length to
728 account for negative length which we can not accept over the
733 if (lockType & LOCKING_ANDX_SHARED_LOCK)
734 posix_lock_type = CIFS_RDLCK;
736 posix_lock_type = CIFS_WRLCK;
737 rc = CIFSSMBPosixLock(xid, tcon, netfid, 1 /* get */,
738 length, pfLock, posix_lock_type,
744 /* BB we could chain these into one lock request BB */
745 rc = CIFSSMBLock(xid, tcon, netfid, length, pfLock->fl_start,
746 0, 1, lockType, 0 /* wait flag */, 0);
748 rc = CIFSSMBLock(xid, tcon, netfid, length,
749 pfLock->fl_start, 1 /* numUnlock */ ,
750 0 /* numLock */ , lockType,
751 0 /* wait flag */, 0);
752 pfLock->fl_type = F_UNLCK;
754 cERROR(1, "Error unlocking previously locked "
755 "range %d during test of lock", rc);
759 /* if rc == ERR_SHARING_VIOLATION ? */
762 if (lockType & LOCKING_ANDX_SHARED_LOCK) {
763 pfLock->fl_type = F_WRLCK;
765 rc = CIFSSMBLock(xid, tcon, netfid, length,
766 pfLock->fl_start, 0, 1,
767 lockType | LOCKING_ANDX_SHARED_LOCK,
768 0 /* wait flag */, 0);
770 rc = CIFSSMBLock(xid, tcon, netfid,
771 length, pfLock->fl_start, 1, 0,
773 LOCKING_ANDX_SHARED_LOCK,
774 0 /* wait flag */, 0);
775 pfLock->fl_type = F_RDLCK;
777 cERROR(1, "Error unlocking "
778 "previously locked range %d "
779 "during test of lock", rc);
782 pfLock->fl_type = F_WRLCK;
792 if (!numLock && !numUnlock) {
793 /* if no lock or unlock then nothing
794 to do since we do not know what it is */
801 if (lockType & LOCKING_ANDX_SHARED_LOCK)
802 posix_lock_type = CIFS_RDLCK;
804 posix_lock_type = CIFS_WRLCK;
807 posix_lock_type = CIFS_UNLCK;
809 rc = CIFSSMBPosixLock(xid, tcon, netfid, 0 /* set */,
810 length, pfLock, posix_lock_type,
813 struct cifsFileInfo *fid = file->private_data;
816 rc = CIFSSMBLock(xid, tcon, netfid, length,
817 pfLock->fl_start, 0, numLock, lockType,
821 /* For Windows locks we must store them. */
822 rc = store_file_lock(fid, length,
823 pfLock->fl_start, lockType);
825 } else if (numUnlock) {
826 /* For each stored lock that this unlock overlaps
827 completely, unlock it. */
829 struct cifsLockInfo *li, *tmp;
832 mutex_lock(&fid->lock_mutex);
833 list_for_each_entry_safe(li, tmp, &fid->llist, llist) {
834 if (pfLock->fl_start <= li->offset &&
835 (pfLock->fl_start + length) >=
836 (li->offset + li->length)) {
837 stored_rc = CIFSSMBLock(xid, tcon,
844 list_del(&li->llist);
849 mutex_unlock(&fid->lock_mutex);
853 if (pfLock->fl_flags & FL_POSIX)
854 posix_lock_file_wait(file, pfLock);
859 /* update the file size (if needed) after a write */
861 cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
862 unsigned int bytes_written)
864 loff_t end_of_write = offset + bytes_written;
866 if (end_of_write > cifsi->server_eof)
867 cifsi->server_eof = end_of_write;
870 static ssize_t cifs_write(struct cifsFileInfo *open_file, __u32 pid,
871 const char *write_data, size_t write_size,
875 unsigned int bytes_written = 0;
876 unsigned int total_written;
877 struct cifs_sb_info *cifs_sb;
878 struct cifs_tcon *pTcon;
880 struct dentry *dentry = open_file->dentry;
881 struct cifsInodeInfo *cifsi = CIFS_I(dentry->d_inode);
882 struct cifs_io_parms io_parms;
884 cifs_sb = CIFS_SB(dentry->d_sb);
886 cFYI(1, "write %zd bytes to offset %lld of %s", write_size,
887 *poffset, dentry->d_name.name);
889 pTcon = tlink_tcon(open_file->tlink);
893 for (total_written = 0; write_size > total_written;
894 total_written += bytes_written) {
896 while (rc == -EAGAIN) {
900 if (open_file->invalidHandle) {
901 /* we could deadlock if we called
902 filemap_fdatawait from here so tell
903 reopen_file not to flush data to
905 rc = cifs_reopen_file(open_file, false);
910 len = min((size_t)cifs_sb->wsize,
911 write_size - total_written);
912 /* iov[0] is reserved for smb header */
913 iov[1].iov_base = (char *)write_data + total_written;
914 iov[1].iov_len = len;
915 io_parms.netfid = open_file->netfid;
917 io_parms.tcon = pTcon;
918 io_parms.offset = *poffset;
919 io_parms.length = len;
920 rc = CIFSSMBWrite2(xid, &io_parms, &bytes_written, iov,
923 if (rc || (bytes_written == 0)) {
931 cifs_update_eof(cifsi, *poffset, bytes_written);
932 *poffset += bytes_written;
936 cifs_stats_bytes_written(pTcon, total_written);
938 if (total_written > 0) {
939 spin_lock(&dentry->d_inode->i_lock);
940 if (*poffset > dentry->d_inode->i_size)
941 i_size_write(dentry->d_inode, *poffset);
942 spin_unlock(&dentry->d_inode->i_lock);
944 mark_inode_dirty_sync(dentry->d_inode);
946 return total_written;
949 struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
952 struct cifsFileInfo *open_file = NULL;
953 struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
955 /* only filter by fsuid on multiuser mounts */
956 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
959 spin_lock(&cifs_file_list_lock);
960 /* we could simply get the first_list_entry since write-only entries
961 are always at the end of the list but since the first entry might
962 have a close pending, we go through the whole list */
963 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
964 if (fsuid_only && open_file->uid != current_fsuid())
966 if (OPEN_FMODE(open_file->f_flags) & FMODE_READ) {
967 if (!open_file->invalidHandle) {
968 /* found a good file */
969 /* lock it so it will not be closed on us */
970 cifsFileInfo_get(open_file);
971 spin_unlock(&cifs_file_list_lock);
973 } /* else might as well continue, and look for
974 another, or simply have the caller reopen it
975 again rather than trying to fix this handle */
976 } else /* write only file */
977 break; /* write only files are last so must be done */
979 spin_unlock(&cifs_file_list_lock);
983 struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode,
986 struct cifsFileInfo *open_file;
987 struct cifs_sb_info *cifs_sb;
988 bool any_available = false;
991 /* Having a null inode here (because mapping->host was set to zero by
992 the VFS or MM) should not happen but we had reports of on oops (due to
993 it being zero) during stress testcases so we need to check for it */
995 if (cifs_inode == NULL) {
996 cERROR(1, "Null inode passed to cifs_writeable_file");
1001 cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1003 /* only filter by fsuid on multiuser mounts */
1004 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1007 spin_lock(&cifs_file_list_lock);
1009 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1010 if (!any_available && open_file->pid != current->tgid)
1012 if (fsuid_only && open_file->uid != current_fsuid())
1014 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
1015 cifsFileInfo_get(open_file);
1017 if (!open_file->invalidHandle) {
1018 /* found a good writable file */
1019 spin_unlock(&cifs_file_list_lock);
1023 spin_unlock(&cifs_file_list_lock);
1025 /* Had to unlock since following call can block */
1026 rc = cifs_reopen_file(open_file, false);
1030 /* if it fails, try another handle if possible */
1031 cFYI(1, "wp failed on reopen file");
1032 cifsFileInfo_put(open_file);
1034 spin_lock(&cifs_file_list_lock);
1036 /* else we simply continue to the next entry. Thus
1037 we do not loop on reopen errors. If we
1038 can not reopen the file, for example if we
1039 reconnected to a server with another client
1040 racing to delete or lock the file we would not
1041 make progress if we restarted before the beginning
1042 of the loop here. */
1045 /* couldn't find useable FH with same pid, try any available */
1046 if (!any_available) {
1047 any_available = true;
1048 goto refind_writable;
1050 spin_unlock(&cifs_file_list_lock);
1054 static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to)
1056 struct address_space *mapping = page->mapping;
1057 loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
1060 int bytes_written = 0;
1061 struct inode *inode;
1062 struct cifsFileInfo *open_file;
1064 if (!mapping || !mapping->host)
1067 inode = page->mapping->host;
1069 offset += (loff_t)from;
1070 write_data = kmap(page);
1073 if ((to > PAGE_CACHE_SIZE) || (from > to)) {
1078 /* racing with truncate? */
1079 if (offset > mapping->host->i_size) {
1081 return 0; /* don't care */
1084 /* check to make sure that we are not extending the file */
1085 if (mapping->host->i_size - offset < (loff_t)to)
1086 to = (unsigned)(mapping->host->i_size - offset);
1088 open_file = find_writable_file(CIFS_I(mapping->host), false);
1090 bytes_written = cifs_write(open_file, open_file->pid,
1091 write_data, to - from, &offset);
1092 cifsFileInfo_put(open_file);
1093 /* Does mm or vfs already set times? */
1094 inode->i_atime = inode->i_mtime = current_fs_time(inode->i_sb);
1095 if ((bytes_written > 0) && (offset))
1097 else if (bytes_written < 0)
1100 cFYI(1, "No writeable filehandles for inode");
1108 static int cifs_writepages(struct address_space *mapping,
1109 struct writeback_control *wbc)
1111 struct cifs_sb_info *cifs_sb = CIFS_SB(mapping->host->i_sb);
1112 bool done = false, scanned = false, range_whole = false;
1114 struct cifs_writedata *wdata;
1119 * If wsize is smaller than the page cache size, default to writing
1120 * one page at a time via cifs_writepage
1122 if (cifs_sb->wsize < PAGE_CACHE_SIZE)
1123 return generic_writepages(mapping, wbc);
1125 if (wbc->range_cyclic) {
1126 index = mapping->writeback_index; /* Start from prev offset */
1129 index = wbc->range_start >> PAGE_CACHE_SHIFT;
1130 end = wbc->range_end >> PAGE_CACHE_SHIFT;
1131 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
1136 while (!done && index <= end) {
1137 unsigned int i, nr_pages, found_pages;
1138 pgoff_t next = 0, tofind;
1139 struct page **pages;
1141 tofind = min((cifs_sb->wsize / PAGE_CACHE_SIZE) - 1,
1144 wdata = cifs_writedata_alloc((unsigned int)tofind);
1151 * find_get_pages_tag seems to return a max of 256 on each
1152 * iteration, so we must call it several times in order to
1153 * fill the array or the wsize is effectively limited to
1154 * 256 * PAGE_CACHE_SIZE.
1157 pages = wdata->pages;
1159 nr_pages = find_get_pages_tag(mapping, &index,
1160 PAGECACHE_TAG_DIRTY,
1162 found_pages += nr_pages;
1165 } while (nr_pages && tofind && index <= end);
1167 if (found_pages == 0) {
1168 kref_put(&wdata->refcount, cifs_writedata_release);
1173 for (i = 0; i < found_pages; i++) {
1174 page = wdata->pages[i];
1176 * At this point we hold neither mapping->tree_lock nor
1177 * lock on the page itself: the page may be truncated or
1178 * invalidated (changing page->mapping to NULL), or even
1179 * swizzled back from swapper_space to tmpfs file
1185 else if (!trylock_page(page))
1188 if (unlikely(page->mapping != mapping)) {
1193 if (!wbc->range_cyclic && page->index > end) {
1199 if (next && (page->index != next)) {
1200 /* Not next consecutive page */
1205 if (wbc->sync_mode != WB_SYNC_NONE)
1206 wait_on_page_writeback(page);
1208 if (PageWriteback(page) ||
1209 !clear_page_dirty_for_io(page)) {
1215 * This actually clears the dirty bit in the radix tree.
1216 * See cifs_writepage() for more commentary.
1218 set_page_writeback(page);
1220 if (page_offset(page) >= mapping->host->i_size) {
1223 end_page_writeback(page);
1227 wdata->pages[i] = page;
1228 next = page->index + 1;
1232 /* reset index to refind any pages skipped */
1234 index = wdata->pages[0]->index + 1;
1236 /* put any pages we aren't going to use */
1237 for (i = nr_pages; i < found_pages; i++) {
1238 page_cache_release(wdata->pages[i]);
1239 wdata->pages[i] = NULL;
1242 /* nothing to write? */
1243 if (nr_pages == 0) {
1244 kref_put(&wdata->refcount, cifs_writedata_release);
1248 wdata->sync_mode = wbc->sync_mode;
1249 wdata->nr_pages = nr_pages;
1250 wdata->offset = page_offset(wdata->pages[0]);
1253 if (wdata->cfile != NULL)
1254 cifsFileInfo_put(wdata->cfile);
1255 wdata->cfile = find_writable_file(CIFS_I(mapping->host),
1257 if (!wdata->cfile) {
1258 cERROR(1, "No writable handles for inode");
1262 rc = cifs_async_writev(wdata);
1263 } while (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN);
1265 for (i = 0; i < nr_pages; ++i)
1266 unlock_page(wdata->pages[i]);
1268 /* send failure -- clean up the mess */
1270 for (i = 0; i < nr_pages; ++i) {
1272 redirty_page_for_writepage(wbc,
1275 SetPageError(wdata->pages[i]);
1276 end_page_writeback(wdata->pages[i]);
1277 page_cache_release(wdata->pages[i]);
1280 mapping_set_error(mapping, rc);
1282 kref_put(&wdata->refcount, cifs_writedata_release);
1284 wbc->nr_to_write -= nr_pages;
1285 if (wbc->nr_to_write <= 0)
1291 if (!scanned && !done) {
1293 * We hit the last page and there is more work to be done: wrap
1294 * back to the start of the file
1301 if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
1302 mapping->writeback_index = index;
1308 cifs_writepage_locked(struct page *page, struct writeback_control *wbc)
1314 /* BB add check for wbc flags */
1315 page_cache_get(page);
1316 if (!PageUptodate(page))
1317 cFYI(1, "ppw - page not up to date");
1320 * Set the "writeback" flag, and clear "dirty" in the radix tree.
1322 * A writepage() implementation always needs to do either this,
1323 * or re-dirty the page with "redirty_page_for_writepage()" in
1324 * the case of a failure.
1326 * Just unlocking the page will cause the radix tree tag-bits
1327 * to fail to update with the state of the page correctly.
1329 set_page_writeback(page);
1331 rc = cifs_partialpagewrite(page, 0, PAGE_CACHE_SIZE);
1332 if (rc == -EAGAIN && wbc->sync_mode == WB_SYNC_ALL)
1334 else if (rc == -EAGAIN)
1335 redirty_page_for_writepage(wbc, page);
1339 SetPageUptodate(page);
1340 end_page_writeback(page);
1341 page_cache_release(page);
1346 static int cifs_writepage(struct page *page, struct writeback_control *wbc)
1348 int rc = cifs_writepage_locked(page, wbc);
1353 static int cifs_write_end(struct file *file, struct address_space *mapping,
1354 loff_t pos, unsigned len, unsigned copied,
1355 struct page *page, void *fsdata)
1358 struct inode *inode = mapping->host;
1359 struct cifsFileInfo *cfile = file->private_data;
1360 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1363 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
1366 pid = current->tgid;
1368 cFYI(1, "write_end for page %p from pos %lld with %d bytes",
1371 if (PageChecked(page)) {
1373 SetPageUptodate(page);
1374 ClearPageChecked(page);
1375 } else if (!PageUptodate(page) && copied == PAGE_CACHE_SIZE)
1376 SetPageUptodate(page);
1378 if (!PageUptodate(page)) {
1380 unsigned offset = pos & (PAGE_CACHE_SIZE - 1);
1384 /* this is probably better than directly calling
1385 partialpage_write since in this function the file handle is
1386 known which we might as well leverage */
1387 /* BB check if anything else missing out of ppw
1388 such as updating last write time */
1389 page_data = kmap(page);
1390 rc = cifs_write(cfile, pid, page_data + offset, copied, &pos);
1391 /* if (rc < 0) should we set writebehind rc? */
1398 set_page_dirty(page);
1402 spin_lock(&inode->i_lock);
1403 if (pos > inode->i_size)
1404 i_size_write(inode, pos);
1405 spin_unlock(&inode->i_lock);
1409 page_cache_release(page);
1414 int cifs_strict_fsync(struct file *file, loff_t start, loff_t end,
1419 struct cifs_tcon *tcon;
1420 struct cifsFileInfo *smbfile = file->private_data;
1421 struct inode *inode = file->f_path.dentry->d_inode;
1422 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
1424 rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
1427 mutex_lock(&inode->i_mutex);
1431 cFYI(1, "Sync file - name: %s datasync: 0x%x",
1432 file->f_path.dentry->d_name.name, datasync);
1434 if (!CIFS_I(inode)->clientCanCacheRead) {
1435 rc = cifs_invalidate_mapping(inode);
1437 cFYI(1, "rc: %d during invalidate phase", rc);
1438 rc = 0; /* don't care about it in fsync */
1442 tcon = tlink_tcon(smbfile->tlink);
1443 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC))
1444 rc = CIFSSMBFlush(xid, tcon, smbfile->netfid);
1447 mutex_unlock(&inode->i_mutex);
1451 int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
1455 struct cifs_tcon *tcon;
1456 struct cifsFileInfo *smbfile = file->private_data;
1457 struct cifs_sb_info *cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
1458 struct inode *inode = file->f_mapping->host;
1460 rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
1463 mutex_lock(&inode->i_mutex);
1467 cFYI(1, "Sync file - name: %s datasync: 0x%x",
1468 file->f_path.dentry->d_name.name, datasync);
1470 tcon = tlink_tcon(smbfile->tlink);
1471 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC))
1472 rc = CIFSSMBFlush(xid, tcon, smbfile->netfid);
1475 mutex_unlock(&inode->i_mutex);
1480 * As file closes, flush all cached write data for this inode checking
1481 * for write behind errors.
1483 int cifs_flush(struct file *file, fl_owner_t id)
1485 struct inode *inode = file->f_path.dentry->d_inode;
1488 if (file->f_mode & FMODE_WRITE)
1489 rc = filemap_write_and_wait(inode->i_mapping);
1491 cFYI(1, "Flush inode %p file %p rc %d", inode, file, rc);
1497 cifs_write_allocate_pages(struct page **pages, unsigned long num_pages)
1502 for (i = 0; i < num_pages; i++) {
1503 pages[i] = alloc_page(__GFP_HIGHMEM);
1506 * save number of pages we have already allocated and
1507 * return with ENOMEM error
1518 for (i = 0; i < num_pages; i++)
1524 size_t get_numpages(const size_t wsize, const size_t len, size_t *cur_len)
1529 clen = min_t(const size_t, len, wsize);
1530 num_pages = clen / PAGE_CACHE_SIZE;
1531 if (clen % PAGE_CACHE_SIZE)
1541 cifs_iovec_write(struct file *file, const struct iovec *iov,
1542 unsigned long nr_segs, loff_t *poffset)
1544 unsigned int written;
1545 unsigned long num_pages, npages, i;
1546 size_t copied, len, cur_len;
1547 ssize_t total_written = 0;
1548 struct kvec *to_send;
1549 struct page **pages;
1551 struct inode *inode;
1552 struct cifsFileInfo *open_file;
1553 struct cifs_tcon *pTcon;
1554 struct cifs_sb_info *cifs_sb;
1555 struct cifs_io_parms io_parms;
1559 len = iov_length(iov, nr_segs);
1563 rc = generic_write_checks(file, poffset, &len, 0);
1567 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
1568 num_pages = get_numpages(cifs_sb->wsize, len, &cur_len);
1570 pages = kmalloc(sizeof(struct pages *)*num_pages, GFP_KERNEL);
1574 to_send = kmalloc(sizeof(struct kvec)*(num_pages + 1), GFP_KERNEL);
1580 rc = cifs_write_allocate_pages(pages, num_pages);
1588 open_file = file->private_data;
1590 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
1591 pid = open_file->pid;
1593 pid = current->tgid;
1595 pTcon = tlink_tcon(open_file->tlink);
1596 inode = file->f_path.dentry->d_inode;
1598 iov_iter_init(&it, iov, nr_segs, len, 0);
1602 size_t save_len = cur_len;
1603 for (i = 0; i < npages; i++) {
1604 copied = min_t(const size_t, cur_len, PAGE_CACHE_SIZE);
1605 copied = iov_iter_copy_from_user(pages[i], &it, 0,
1608 iov_iter_advance(&it, copied);
1609 to_send[i+1].iov_base = kmap(pages[i]);
1610 to_send[i+1].iov_len = copied;
1613 cur_len = save_len - cur_len;
1616 if (open_file->invalidHandle) {
1617 rc = cifs_reopen_file(open_file, false);
1621 io_parms.netfid = open_file->netfid;
1623 io_parms.tcon = pTcon;
1624 io_parms.offset = *poffset;
1625 io_parms.length = cur_len;
1626 rc = CIFSSMBWrite2(xid, &io_parms, &written, to_send,
1628 } while (rc == -EAGAIN);
1630 for (i = 0; i < npages; i++)
1635 total_written += written;
1636 cifs_update_eof(CIFS_I(inode), *poffset, written);
1637 *poffset += written;
1638 } else if (rc < 0) {
1644 /* get length and number of kvecs of the next write */
1645 npages = get_numpages(cifs_sb->wsize, len, &cur_len);
1648 if (total_written > 0) {
1649 spin_lock(&inode->i_lock);
1650 if (*poffset > inode->i_size)
1651 i_size_write(inode, *poffset);
1652 spin_unlock(&inode->i_lock);
1655 cifs_stats_bytes_written(pTcon, total_written);
1656 mark_inode_dirty_sync(inode);
1658 for (i = 0; i < num_pages; i++)
1663 return total_written;
1666 ssize_t cifs_user_writev(struct kiocb *iocb, const struct iovec *iov,
1667 unsigned long nr_segs, loff_t pos)
1670 struct inode *inode;
1672 inode = iocb->ki_filp->f_path.dentry->d_inode;
1675 * BB - optimize the way when signing is disabled. We can drop this
1676 * extra memory-to-memory copying and use iovec buffers for constructing
1680 written = cifs_iovec_write(iocb->ki_filp, iov, nr_segs, &pos);
1682 CIFS_I(inode)->invalid_mapping = true;
1689 ssize_t cifs_strict_writev(struct kiocb *iocb, const struct iovec *iov,
1690 unsigned long nr_segs, loff_t pos)
1692 struct inode *inode;
1694 inode = iocb->ki_filp->f_path.dentry->d_inode;
1696 if (CIFS_I(inode)->clientCanCacheAll)
1697 return generic_file_aio_write(iocb, iov, nr_segs, pos);
1700 * In strict cache mode we need to write the data to the server exactly
1701 * from the pos to pos+len-1 rather than flush all affected pages
1702 * because it may cause a error with mandatory locks on these pages but
1703 * not on the region from pos to ppos+len-1.
1706 return cifs_user_writev(iocb, iov, nr_segs, pos);
1710 cifs_iovec_read(struct file *file, const struct iovec *iov,
1711 unsigned long nr_segs, loff_t *poffset)
1716 unsigned int bytes_read = 0;
1717 size_t len, cur_len;
1719 struct cifs_sb_info *cifs_sb;
1720 struct cifs_tcon *pTcon;
1721 struct cifsFileInfo *open_file;
1722 struct smb_com_read_rsp *pSMBr;
1723 struct cifs_io_parms io_parms;
1730 len = iov_length(iov, nr_segs);
1735 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
1737 open_file = file->private_data;
1738 pTcon = tlink_tcon(open_file->tlink);
1740 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
1741 pid = open_file->pid;
1743 pid = current->tgid;
1745 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
1746 cFYI(1, "attempting read on write only file instance");
1748 for (total_read = 0; total_read < len; total_read += bytes_read) {
1749 cur_len = min_t(const size_t, len - total_read, cifs_sb->rsize);
1753 while (rc == -EAGAIN) {
1754 int buf_type = CIFS_NO_BUFFER;
1755 if (open_file->invalidHandle) {
1756 rc = cifs_reopen_file(open_file, true);
1760 io_parms.netfid = open_file->netfid;
1762 io_parms.tcon = pTcon;
1763 io_parms.offset = *poffset;
1764 io_parms.length = cur_len;
1765 rc = CIFSSMBRead(xid, &io_parms, &bytes_read,
1766 &read_data, &buf_type);
1767 pSMBr = (struct smb_com_read_rsp *)read_data;
1769 char *data_offset = read_data + 4 +
1770 le16_to_cpu(pSMBr->DataOffset);
1771 if (memcpy_toiovecend(iov, data_offset,
1772 iov_offset, bytes_read))
1774 if (buf_type == CIFS_SMALL_BUFFER)
1775 cifs_small_buf_release(read_data);
1776 else if (buf_type == CIFS_LARGE_BUFFER)
1777 cifs_buf_release(read_data);
1779 iov_offset += bytes_read;
1783 if (rc || (bytes_read == 0)) {
1791 cifs_stats_bytes_read(pTcon, bytes_read);
1792 *poffset += bytes_read;
1800 ssize_t cifs_user_readv(struct kiocb *iocb, const struct iovec *iov,
1801 unsigned long nr_segs, loff_t pos)
1805 read = cifs_iovec_read(iocb->ki_filp, iov, nr_segs, &pos);
1812 ssize_t cifs_strict_readv(struct kiocb *iocb, const struct iovec *iov,
1813 unsigned long nr_segs, loff_t pos)
1815 struct inode *inode;
1817 inode = iocb->ki_filp->f_path.dentry->d_inode;
1819 if (CIFS_I(inode)->clientCanCacheRead)
1820 return generic_file_aio_read(iocb, iov, nr_segs, pos);
1823 * In strict cache mode we need to read from the server all the time
1824 * if we don't have level II oplock because the server can delay mtime
1825 * change - so we can't make a decision about inode invalidating.
1826 * And we can also fail with pagereading if there are mandatory locks
1827 * on pages affected by this read but not on the region from pos to
1831 return cifs_user_readv(iocb, iov, nr_segs, pos);
1834 static ssize_t cifs_read(struct file *file, char *read_data, size_t read_size,
1838 unsigned int bytes_read = 0;
1839 unsigned int total_read;
1840 unsigned int current_read_size;
1841 struct cifs_sb_info *cifs_sb;
1842 struct cifs_tcon *pTcon;
1844 char *current_offset;
1845 struct cifsFileInfo *open_file;
1846 struct cifs_io_parms io_parms;
1847 int buf_type = CIFS_NO_BUFFER;
1851 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
1853 if (file->private_data == NULL) {
1858 open_file = file->private_data;
1859 pTcon = tlink_tcon(open_file->tlink);
1861 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
1862 pid = open_file->pid;
1864 pid = current->tgid;
1866 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
1867 cFYI(1, "attempting read on write only file instance");
1869 for (total_read = 0, current_offset = read_data;
1870 read_size > total_read;
1871 total_read += bytes_read, current_offset += bytes_read) {
1872 current_read_size = min_t(const int, read_size - total_read,
1874 /* For windows me and 9x we do not want to request more
1875 than it negotiated since it will refuse the read then */
1877 !(pTcon->ses->capabilities & CAP_LARGE_FILES)) {
1878 current_read_size = min_t(const int, current_read_size,
1882 while (rc == -EAGAIN) {
1883 if (open_file->invalidHandle) {
1884 rc = cifs_reopen_file(open_file, true);
1888 io_parms.netfid = open_file->netfid;
1890 io_parms.tcon = pTcon;
1891 io_parms.offset = *poffset;
1892 io_parms.length = current_read_size;
1893 rc = CIFSSMBRead(xid, &io_parms, &bytes_read,
1894 ¤t_offset, &buf_type);
1896 if (rc || (bytes_read == 0)) {
1904 cifs_stats_bytes_read(pTcon, total_read);
1905 *poffset += bytes_read;
1913 * If the page is mmap'ed into a process' page tables, then we need to make
1914 * sure that it doesn't change while being written back.
1917 cifs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
1919 struct page *page = vmf->page;
1922 return VM_FAULT_LOCKED;
1925 static struct vm_operations_struct cifs_file_vm_ops = {
1926 .fault = filemap_fault,
1927 .page_mkwrite = cifs_page_mkwrite,
1930 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
1933 struct inode *inode = file->f_path.dentry->d_inode;
1937 if (!CIFS_I(inode)->clientCanCacheRead) {
1938 rc = cifs_invalidate_mapping(inode);
1943 rc = generic_file_mmap(file, vma);
1945 vma->vm_ops = &cifs_file_vm_ops;
1950 int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
1955 rc = cifs_revalidate_file(file);
1957 cFYI(1, "Validation prior to mmap failed, error=%d", rc);
1961 rc = generic_file_mmap(file, vma);
1963 vma->vm_ops = &cifs_file_vm_ops;
1969 static void cifs_copy_cache_pages(struct address_space *mapping,
1970 struct list_head *pages, int bytes_read, char *data)
1975 while (bytes_read > 0) {
1976 if (list_empty(pages))
1979 page = list_entry(pages->prev, struct page, lru);
1980 list_del(&page->lru);
1982 if (add_to_page_cache_lru(page, mapping, page->index,
1984 page_cache_release(page);
1985 cFYI(1, "Add page cache failed");
1986 data += PAGE_CACHE_SIZE;
1987 bytes_read -= PAGE_CACHE_SIZE;
1990 page_cache_release(page);
1992 target = kmap_atomic(page, KM_USER0);
1994 if (PAGE_CACHE_SIZE > bytes_read) {
1995 memcpy(target, data, bytes_read);
1996 /* zero the tail end of this partial page */
1997 memset(target + bytes_read, 0,
1998 PAGE_CACHE_SIZE - bytes_read);
2001 memcpy(target, data, PAGE_CACHE_SIZE);
2002 bytes_read -= PAGE_CACHE_SIZE;
2004 kunmap_atomic(target, KM_USER0);
2006 flush_dcache_page(page);
2007 SetPageUptodate(page);
2009 data += PAGE_CACHE_SIZE;
2011 /* add page to FS-Cache */
2012 cifs_readpage_to_fscache(mapping->host, page);
2017 static int cifs_readpages(struct file *file, struct address_space *mapping,
2018 struct list_head *page_list, unsigned num_pages)
2024 struct cifs_sb_info *cifs_sb;
2025 struct cifs_tcon *pTcon;
2026 unsigned int bytes_read = 0;
2027 unsigned int read_size, i;
2028 char *smb_read_data = NULL;
2029 struct smb_com_read_rsp *pSMBr;
2030 struct cifsFileInfo *open_file;
2031 struct cifs_io_parms io_parms;
2032 int buf_type = CIFS_NO_BUFFER;
2036 if (file->private_data == NULL) {
2041 open_file = file->private_data;
2042 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2043 pTcon = tlink_tcon(open_file->tlink);
2046 * Reads as many pages as possible from fscache. Returns -ENOBUFS
2047 * immediately if the cookie is negative
2049 rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,
2054 cFYI(DBG2, "rpages: num pages %d", num_pages);
2055 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2056 pid = open_file->pid;
2058 pid = current->tgid;
2060 for (i = 0; i < num_pages; ) {
2061 unsigned contig_pages;
2062 struct page *tmp_page;
2063 unsigned long expected_index;
2065 if (list_empty(page_list))
2068 page = list_entry(page_list->prev, struct page, lru);
2069 offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
2071 /* count adjacent pages that we will read into */
2074 list_entry(page_list->prev, struct page, lru)->index;
2075 list_for_each_entry_reverse(tmp_page, page_list, lru) {
2076 if (tmp_page->index == expected_index) {
2082 if (contig_pages + i > num_pages)
2083 contig_pages = num_pages - i;
2085 /* for reads over a certain size could initiate async
2088 read_size = contig_pages * PAGE_CACHE_SIZE;
2089 /* Read size needs to be in multiples of one page */
2090 read_size = min_t(const unsigned int, read_size,
2091 cifs_sb->rsize & PAGE_CACHE_MASK);
2092 cFYI(DBG2, "rpages: read size 0x%x contiguous pages %d",
2093 read_size, contig_pages);
2095 while (rc == -EAGAIN) {
2096 if (open_file->invalidHandle) {
2097 rc = cifs_reopen_file(open_file, true);
2101 io_parms.netfid = open_file->netfid;
2103 io_parms.tcon = pTcon;
2104 io_parms.offset = offset;
2105 io_parms.length = read_size;
2106 rc = CIFSSMBRead(xid, &io_parms, &bytes_read,
2107 &smb_read_data, &buf_type);
2108 /* BB more RC checks ? */
2109 if (rc == -EAGAIN) {
2110 if (smb_read_data) {
2111 if (buf_type == CIFS_SMALL_BUFFER)
2112 cifs_small_buf_release(smb_read_data);
2113 else if (buf_type == CIFS_LARGE_BUFFER)
2114 cifs_buf_release(smb_read_data);
2115 smb_read_data = NULL;
2119 if ((rc < 0) || (smb_read_data == NULL)) {
2120 cFYI(1, "Read error in readpages: %d", rc);
2122 } else if (bytes_read > 0) {
2123 task_io_account_read(bytes_read);
2124 pSMBr = (struct smb_com_read_rsp *)smb_read_data;
2125 cifs_copy_cache_pages(mapping, page_list, bytes_read,
2126 smb_read_data + 4 /* RFC1001 hdr */ +
2127 le16_to_cpu(pSMBr->DataOffset));
2129 i += bytes_read >> PAGE_CACHE_SHIFT;
2130 cifs_stats_bytes_read(pTcon, bytes_read);
2131 if ((bytes_read & PAGE_CACHE_MASK) != bytes_read) {
2132 i++; /* account for partial page */
2134 /* server copy of file can have smaller size
2136 /* BB do we need to verify this common case ?
2137 this case is ok - if we are at server EOF
2138 we will hit it on next read */
2143 cFYI(1, "No bytes read (%d) at offset %lld . "
2144 "Cleaning remaining pages from readahead list",
2145 bytes_read, offset);
2146 /* BB turn off caching and do new lookup on
2147 file size at server? */
2150 if (smb_read_data) {
2151 if (buf_type == CIFS_SMALL_BUFFER)
2152 cifs_small_buf_release(smb_read_data);
2153 else if (buf_type == CIFS_LARGE_BUFFER)
2154 cifs_buf_release(smb_read_data);
2155 smb_read_data = NULL;
2160 /* need to free smb_read_data buf before exit */
2161 if (smb_read_data) {
2162 if (buf_type == CIFS_SMALL_BUFFER)
2163 cifs_small_buf_release(smb_read_data);
2164 else if (buf_type == CIFS_LARGE_BUFFER)
2165 cifs_buf_release(smb_read_data);
2166 smb_read_data = NULL;
2174 static int cifs_readpage_worker(struct file *file, struct page *page,
2180 /* Is the page cached? */
2181 rc = cifs_readpage_from_fscache(file->f_path.dentry->d_inode, page);
2185 page_cache_get(page);
2186 read_data = kmap(page);
2187 /* for reads over a certain size could initiate async read ahead */
2189 rc = cifs_read(file, read_data, PAGE_CACHE_SIZE, poffset);
2194 cFYI(1, "Bytes read %d", rc);
2196 file->f_path.dentry->d_inode->i_atime =
2197 current_fs_time(file->f_path.dentry->d_inode->i_sb);
2199 if (PAGE_CACHE_SIZE > rc)
2200 memset(read_data + rc, 0, PAGE_CACHE_SIZE - rc);
2202 flush_dcache_page(page);
2203 SetPageUptodate(page);
2205 /* send this page to the cache */
2206 cifs_readpage_to_fscache(file->f_path.dentry->d_inode, page);
2212 page_cache_release(page);
2218 static int cifs_readpage(struct file *file, struct page *page)
2220 loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
2226 if (file->private_data == NULL) {
2232 cFYI(1, "readpage %p at offset %d 0x%x\n",
2233 page, (int)offset, (int)offset);
2235 rc = cifs_readpage_worker(file, page, &offset);
2243 static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
2245 struct cifsFileInfo *open_file;
2247 spin_lock(&cifs_file_list_lock);
2248 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
2249 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
2250 spin_unlock(&cifs_file_list_lock);
2254 spin_unlock(&cifs_file_list_lock);
2258 /* We do not want to update the file size from server for inodes
2259 open for write - to avoid races with writepage extending
2260 the file - in the future we could consider allowing
2261 refreshing the inode only on increases in the file size
2262 but this is tricky to do without racing with writebehind
2263 page caching in the current Linux kernel design */
2264 bool is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file)
2269 if (is_inode_writable(cifsInode)) {
2270 /* This inode is open for write at least once */
2271 struct cifs_sb_info *cifs_sb;
2273 cifs_sb = CIFS_SB(cifsInode->vfs_inode.i_sb);
2274 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO) {
2275 /* since no page cache to corrupt on directio
2276 we can change size safely */
2280 if (i_size_read(&cifsInode->vfs_inode) < end_of_file)
2288 static int cifs_write_begin(struct file *file, struct address_space *mapping,
2289 loff_t pos, unsigned len, unsigned flags,
2290 struct page **pagep, void **fsdata)
2292 pgoff_t index = pos >> PAGE_CACHE_SHIFT;
2293 loff_t offset = pos & (PAGE_CACHE_SIZE - 1);
2294 loff_t page_start = pos & PAGE_MASK;
2299 cFYI(1, "write_begin from %lld len %d", (long long)pos, len);
2301 page = grab_cache_page_write_begin(mapping, index, flags);
2307 if (PageUptodate(page))
2311 * If we write a full page it will be up to date, no need to read from
2312 * the server. If the write is short, we'll end up doing a sync write
2315 if (len == PAGE_CACHE_SIZE)
2319 * optimize away the read when we have an oplock, and we're not
2320 * expecting to use any of the data we'd be reading in. That
2321 * is, when the page lies beyond the EOF, or straddles the EOF
2322 * and the write will cover all of the existing data.
2324 if (CIFS_I(mapping->host)->clientCanCacheRead) {
2325 i_size = i_size_read(mapping->host);
2326 if (page_start >= i_size ||
2327 (offset == 0 && (pos + len) >= i_size)) {
2328 zero_user_segments(page, 0, offset,
2332 * PageChecked means that the parts of the page
2333 * to which we're not writing are considered up
2334 * to date. Once the data is copied to the
2335 * page, it can be set uptodate.
2337 SetPageChecked(page);
2342 if ((file->f_flags & O_ACCMODE) != O_WRONLY) {
2344 * might as well read a page, it is fast enough. If we get
2345 * an error, we don't need to return it. cifs_write_end will
2346 * do a sync write instead since PG_uptodate isn't set.
2348 cifs_readpage_worker(file, page, &page_start);
2350 /* we could try using another file handle if there is one -
2351 but how would we lock it to prevent close of that handle
2352 racing with this read? In any case
2353 this will be written out by write_end so is fine */
2360 static int cifs_release_page(struct page *page, gfp_t gfp)
2362 if (PagePrivate(page))
2365 return cifs_fscache_release_page(page, gfp);
2368 static void cifs_invalidate_page(struct page *page, unsigned long offset)
2370 struct cifsInodeInfo *cifsi = CIFS_I(page->mapping->host);
2373 cifs_fscache_invalidate_page(page, &cifsi->vfs_inode);
2376 static int cifs_launder_page(struct page *page)
2379 loff_t range_start = page_offset(page);
2380 loff_t range_end = range_start + (loff_t)(PAGE_CACHE_SIZE - 1);
2381 struct writeback_control wbc = {
2382 .sync_mode = WB_SYNC_ALL,
2384 .range_start = range_start,
2385 .range_end = range_end,
2388 cFYI(1, "Launder page: %p", page);
2390 if (clear_page_dirty_for_io(page))
2391 rc = cifs_writepage_locked(page, &wbc);
2393 cifs_fscache_invalidate_page(page, page->mapping->host);
2397 void cifs_oplock_break(struct work_struct *work)
2399 struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
2401 struct inode *inode = cfile->dentry->d_inode;
2402 struct cifsInodeInfo *cinode = CIFS_I(inode);
2405 if (inode && S_ISREG(inode->i_mode)) {
2406 if (cinode->clientCanCacheRead)
2407 break_lease(inode, O_RDONLY);
2409 break_lease(inode, O_WRONLY);
2410 rc = filemap_fdatawrite(inode->i_mapping);
2411 if (cinode->clientCanCacheRead == 0) {
2412 rc = filemap_fdatawait(inode->i_mapping);
2413 mapping_set_error(inode->i_mapping, rc);
2414 invalidate_remote_inode(inode);
2416 cFYI(1, "Oplock flush inode %p rc %d", inode, rc);
2420 * releasing stale oplock after recent reconnect of smb session using
2421 * a now incorrect file handle is not a data integrity issue but do
2422 * not bother sending an oplock release if session to server still is
2423 * disconnected since oplock already released by the server
2425 if (!cfile->oplock_break_cancelled) {
2426 rc = CIFSSMBLock(0, tlink_tcon(cfile->tlink), cfile->netfid, 0,
2427 0, 0, 0, LOCKING_ANDX_OPLOCK_RELEASE, false,
2428 cinode->clientCanCacheRead ? 1 : 0);
2429 cFYI(1, "Oplock release rc = %d", rc);
2433 const struct address_space_operations cifs_addr_ops = {
2434 .readpage = cifs_readpage,
2435 .readpages = cifs_readpages,
2436 .writepage = cifs_writepage,
2437 .writepages = cifs_writepages,
2438 .write_begin = cifs_write_begin,
2439 .write_end = cifs_write_end,
2440 .set_page_dirty = __set_page_dirty_nobuffers,
2441 .releasepage = cifs_release_page,
2442 .invalidatepage = cifs_invalidate_page,
2443 .launder_page = cifs_launder_page,
2447 * cifs_readpages requires the server to support a buffer large enough to
2448 * contain the header plus one complete page of data. Otherwise, we need
2449 * to leave cifs_readpages out of the address space operations.
2451 const struct address_space_operations cifs_addr_ops_smallbuf = {
2452 .readpage = cifs_readpage,
2453 .writepage = cifs_writepage,
2454 .writepages = cifs_writepages,
2455 .write_begin = cifs_write_begin,
2456 .write_end = cifs_write_end,
2457 .set_page_dirty = __set_page_dirty_nobuffers,
2458 .releasepage = cifs_release_page,
2459 .invalidatepage = cifs_invalidate_page,
2460 .launder_page = cifs_launder_page,