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 <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"
46 static inline int cifs_convert_flags(unsigned int flags)
48 if ((flags & O_ACCMODE) == O_RDONLY)
50 else if ((flags & O_ACCMODE) == O_WRONLY)
52 else if ((flags & O_ACCMODE) == O_RDWR) {
53 /* GENERIC_ALL is too much permission to request
54 can cause unnecessary access denied on create */
55 /* return GENERIC_ALL; */
56 return (GENERIC_READ | GENERIC_WRITE);
59 return (READ_CONTROL | FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES |
60 FILE_WRITE_EA | FILE_APPEND_DATA | FILE_WRITE_DATA |
64 static u32 cifs_posix_convert_flags(unsigned int flags)
68 if ((flags & O_ACCMODE) == O_RDONLY)
69 posix_flags = SMB_O_RDONLY;
70 else if ((flags & O_ACCMODE) == O_WRONLY)
71 posix_flags = SMB_O_WRONLY;
72 else if ((flags & O_ACCMODE) == O_RDWR)
73 posix_flags = SMB_O_RDWR;
76 posix_flags |= SMB_O_CREAT;
78 posix_flags |= SMB_O_EXCL;
80 posix_flags |= SMB_O_TRUNC;
81 /* be safe and imply O_SYNC for O_DSYNC */
83 posix_flags |= SMB_O_SYNC;
84 if (flags & O_DIRECTORY)
85 posix_flags |= SMB_O_DIRECTORY;
86 if (flags & O_NOFOLLOW)
87 posix_flags |= SMB_O_NOFOLLOW;
89 posix_flags |= SMB_O_DIRECT;
94 static inline int cifs_get_disposition(unsigned int flags)
96 if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
98 else if ((flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
99 return FILE_OVERWRITE_IF;
100 else if ((flags & O_CREAT) == O_CREAT)
102 else if ((flags & O_TRUNC) == O_TRUNC)
103 return FILE_OVERWRITE;
108 int cifs_posix_open(char *full_path, struct inode **pinode,
109 struct super_block *sb, int mode, unsigned int f_flags,
110 __u32 *poplock, __u16 *pnetfid, int xid)
113 FILE_UNIX_BASIC_INFO *presp_data;
114 __u32 posix_flags = 0;
115 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
116 struct cifs_fattr fattr;
117 struct tcon_link *tlink;
118 struct cifs_tcon *tcon;
120 cFYI(1, "posix open %s", full_path);
122 presp_data = kzalloc(sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL);
123 if (presp_data == NULL)
126 tlink = cifs_sb_tlink(cifs_sb);
132 tcon = tlink_tcon(tlink);
133 mode &= ~current_umask();
135 posix_flags = cifs_posix_convert_flags(f_flags);
136 rc = CIFSPOSIXCreate(xid, tcon, posix_flags, mode, pnetfid, presp_data,
137 poplock, full_path, cifs_sb->local_nls,
138 cifs_sb->mnt_cifs_flags &
139 CIFS_MOUNT_MAP_SPECIAL_CHR);
140 cifs_put_tlink(tlink);
145 if (presp_data->Type == cpu_to_le32(-1))
146 goto posix_open_ret; /* open ok, caller does qpathinfo */
149 goto posix_open_ret; /* caller does not need info */
151 cifs_unix_basic_to_fattr(&fattr, presp_data, cifs_sb);
153 /* get new inode and set it up */
154 if (*pinode == NULL) {
155 cifs_fill_uniqueid(sb, &fattr);
156 *pinode = cifs_iget(sb, &fattr);
162 cifs_fattr_to_inode(*pinode, &fattr);
171 cifs_nt_open(char *full_path, struct inode *inode, struct cifs_sb_info *cifs_sb,
172 struct cifs_tcon *tcon, unsigned int f_flags, __u32 *poplock,
173 __u16 *pnetfid, int xid)
178 int create_options = CREATE_NOT_DIR;
181 desiredAccess = cifs_convert_flags(f_flags);
183 /*********************************************************************
184 * open flag mapping table:
186 * POSIX Flag CIFS Disposition
187 * ---------- ----------------
188 * O_CREAT FILE_OPEN_IF
189 * O_CREAT | O_EXCL FILE_CREATE
190 * O_CREAT | O_TRUNC FILE_OVERWRITE_IF
191 * O_TRUNC FILE_OVERWRITE
192 * none of the above FILE_OPEN
194 * Note that there is not a direct match between disposition
195 * FILE_SUPERSEDE (ie create whether or not file exists although
196 * O_CREAT | O_TRUNC is similar but truncates the existing
197 * file rather than creating a new file as FILE_SUPERSEDE does
198 * (which uses the attributes / metadata passed in on open call)
200 *? O_SYNC is a reasonable match to CIFS writethrough flag
201 *? and the read write flags match reasonably. O_LARGEFILE
202 *? is irrelevant because largefile support is always used
203 *? by this client. Flags O_APPEND, O_DIRECT, O_DIRECTORY,
204 * O_FASYNC, O_NOFOLLOW, O_NONBLOCK need further investigation
205 *********************************************************************/
207 disposition = cifs_get_disposition(f_flags);
209 /* BB pass O_SYNC flag through on file attributes .. BB */
211 buf = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
215 if (backup_cred(cifs_sb))
216 create_options |= CREATE_OPEN_BACKUP_INTENT;
218 if (tcon->ses->capabilities & CAP_NT_SMBS)
219 rc = CIFSSMBOpen(xid, tcon, full_path, disposition,
220 desiredAccess, create_options, pnetfid, poplock, buf,
221 cifs_sb->local_nls, cifs_sb->mnt_cifs_flags
222 & CIFS_MOUNT_MAP_SPECIAL_CHR);
224 rc = SMBLegacyOpen(xid, tcon, full_path, disposition,
225 desiredAccess, CREATE_NOT_DIR, pnetfid, poplock, buf,
226 cifs_sb->local_nls, cifs_sb->mnt_cifs_flags
227 & CIFS_MOUNT_MAP_SPECIAL_CHR);
233 rc = cifs_get_inode_info_unix(&inode, full_path, inode->i_sb,
236 rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb,
244 struct cifsFileInfo *
245 cifs_new_fileinfo(__u16 fileHandle, struct file *file,
246 struct tcon_link *tlink, __u32 oplock)
248 struct dentry *dentry = file->f_path.dentry;
249 struct inode *inode = dentry->d_inode;
250 struct cifsInodeInfo *pCifsInode = CIFS_I(inode);
251 struct cifsFileInfo *pCifsFile;
253 pCifsFile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
254 if (pCifsFile == NULL)
257 pCifsFile->count = 1;
258 pCifsFile->netfid = fileHandle;
259 pCifsFile->pid = current->tgid;
260 pCifsFile->uid = current_fsuid();
261 pCifsFile->dentry = dget(dentry);
262 pCifsFile->f_flags = file->f_flags;
263 pCifsFile->invalidHandle = false;
264 pCifsFile->tlink = cifs_get_tlink(tlink);
265 mutex_init(&pCifsFile->fh_mutex);
266 INIT_WORK(&pCifsFile->oplock_break, cifs_oplock_break);
267 INIT_LIST_HEAD(&pCifsFile->llist);
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);
279 pCifsInode->can_cache_brlcks = pCifsInode->clientCanCacheAll;
281 file->private_data = pCifsFile;
285 static void cifs_del_lock_waiters(struct cifsLockInfo *lock);
288 * Release a reference on the file private data. This may involve closing
289 * the filehandle out on the server. Must be called without holding
290 * cifs_file_list_lock.
292 void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
294 struct inode *inode = cifs_file->dentry->d_inode;
295 struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
296 struct cifsInodeInfo *cifsi = CIFS_I(inode);
297 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
298 struct cifsLockInfo *li, *tmp;
300 spin_lock(&cifs_file_list_lock);
301 if (--cifs_file->count > 0) {
302 spin_unlock(&cifs_file_list_lock);
306 /* remove it from the lists */
307 list_del(&cifs_file->flist);
308 list_del(&cifs_file->tlist);
310 if (list_empty(&cifsi->openFileList)) {
311 cFYI(1, "closing last open instance for inode %p",
312 cifs_file->dentry->d_inode);
314 /* in strict cache mode we need invalidate mapping on the last
315 close because it may cause a error when we open this file
316 again and get at least level II oplock */
317 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO)
318 CIFS_I(inode)->invalid_mapping = true;
320 cifs_set_oplock_level(cifsi, 0);
322 spin_unlock(&cifs_file_list_lock);
324 cancel_work_sync(&cifs_file->oplock_break);
326 if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
330 rc = CIFSSMBClose(xid, tcon, cifs_file->netfid);
334 /* Delete any outstanding lock records. We'll lose them when the file
337 mutex_lock(&cifsi->lock_mutex);
338 list_for_each_entry_safe(li, tmp, &cifs_file->llist, llist) {
339 list_del(&li->llist);
340 cifs_del_lock_waiters(li);
343 mutex_unlock(&cifsi->lock_mutex);
345 cifs_put_tlink(cifs_file->tlink);
346 dput(cifs_file->dentry);
350 int cifs_open(struct inode *inode, struct file *file)
355 struct cifs_sb_info *cifs_sb;
356 struct cifs_tcon *tcon;
357 struct tcon_link *tlink;
358 struct cifsFileInfo *pCifsFile = NULL;
359 char *full_path = NULL;
360 bool posix_open_ok = false;
365 cifs_sb = CIFS_SB(inode->i_sb);
366 tlink = cifs_sb_tlink(cifs_sb);
369 return PTR_ERR(tlink);
371 tcon = tlink_tcon(tlink);
373 full_path = build_path_from_dentry(file->f_path.dentry);
374 if (full_path == NULL) {
379 cFYI(1, "inode = 0x%p file flags are 0x%x for %s",
380 inode, file->f_flags, full_path);
382 if (tcon->ses->server->oplocks)
387 if (!tcon->broken_posix_open && tcon->unix_ext &&
388 (tcon->ses->capabilities & CAP_UNIX) &&
389 (CIFS_UNIX_POSIX_PATH_OPS_CAP &
390 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
391 /* can not refresh inode info since size could be stale */
392 rc = cifs_posix_open(full_path, &inode, inode->i_sb,
393 cifs_sb->mnt_file_mode /* ignored */,
394 file->f_flags, &oplock, &netfid, xid);
396 cFYI(1, "posix open succeeded");
397 posix_open_ok = true;
398 } else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) {
399 if (tcon->ses->serverNOS)
400 cERROR(1, "server %s of type %s returned"
401 " unexpected error on SMB posix open"
402 ", disabling posix open support."
403 " Check if server update available.",
404 tcon->ses->serverName,
405 tcon->ses->serverNOS);
406 tcon->broken_posix_open = true;
407 } else if ((rc != -EIO) && (rc != -EREMOTE) &&
408 (rc != -EOPNOTSUPP)) /* path not found or net err */
410 /* else fallthrough to retry open the old way on network i/o
414 if (!posix_open_ok) {
415 rc = cifs_nt_open(full_path, inode, cifs_sb, tcon,
416 file->f_flags, &oplock, &netfid, xid);
421 pCifsFile = cifs_new_fileinfo(netfid, file, tlink, oplock);
422 if (pCifsFile == NULL) {
423 CIFSSMBClose(xid, tcon, netfid);
428 cifs_fscache_set_inode_cookie(inode, file);
430 if ((oplock & CIFS_CREATE_ACTION) && !posix_open_ok && tcon->unix_ext) {
431 /* time to set mode which we can not set earlier due to
432 problems creating new read-only files */
433 struct cifs_unix_set_info_args args = {
434 .mode = inode->i_mode,
437 .ctime = NO_CHANGE_64,
438 .atime = NO_CHANGE_64,
439 .mtime = NO_CHANGE_64,
442 CIFSSMBUnixSetFileInfo(xid, tcon, &args, netfid,
449 cifs_put_tlink(tlink);
453 /* Try to reacquire byte range locks that were released when session */
454 /* to server was lost */
455 static int cifs_relock_file(struct cifsFileInfo *cifsFile)
459 /* BB list all locks open on this file and relock */
464 static int cifs_reopen_file(struct cifsFileInfo *pCifsFile, bool can_flush)
469 struct cifs_sb_info *cifs_sb;
470 struct cifs_tcon *tcon;
471 struct cifsInodeInfo *pCifsInode;
473 char *full_path = NULL;
475 int disposition = FILE_OPEN;
476 int create_options = CREATE_NOT_DIR;
480 mutex_lock(&pCifsFile->fh_mutex);
481 if (!pCifsFile->invalidHandle) {
482 mutex_unlock(&pCifsFile->fh_mutex);
488 inode = pCifsFile->dentry->d_inode;
489 cifs_sb = CIFS_SB(inode->i_sb);
490 tcon = tlink_tcon(pCifsFile->tlink);
492 /* can not grab rename sem here because various ops, including
493 those that already have the rename sem can end up causing writepage
494 to get called and if the server was down that means we end up here,
495 and we can never tell if the caller already has the rename_sem */
496 full_path = build_path_from_dentry(pCifsFile->dentry);
497 if (full_path == NULL) {
499 mutex_unlock(&pCifsFile->fh_mutex);
504 cFYI(1, "inode = 0x%p file flags 0x%x for %s",
505 inode, pCifsFile->f_flags, full_path);
507 if (tcon->ses->server->oplocks)
512 if (tcon->unix_ext && (tcon->ses->capabilities & CAP_UNIX) &&
513 (CIFS_UNIX_POSIX_PATH_OPS_CAP &
514 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
517 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the
518 * original open. Must mask them off for a reopen.
520 unsigned int oflags = pCifsFile->f_flags &
521 ~(O_CREAT | O_EXCL | O_TRUNC);
523 rc = cifs_posix_open(full_path, NULL, inode->i_sb,
524 cifs_sb->mnt_file_mode /* ignored */,
525 oflags, &oplock, &netfid, xid);
527 cFYI(1, "posix reopen succeeded");
530 /* fallthrough to retry open the old way on errors, especially
531 in the reconnect path it is important to retry hard */
534 desiredAccess = cifs_convert_flags(pCifsFile->f_flags);
536 if (backup_cred(cifs_sb))
537 create_options |= CREATE_OPEN_BACKUP_INTENT;
539 /* Can not refresh inode by passing in file_info buf to be returned
540 by SMBOpen and then calling get_inode_info with returned buf
541 since file might have write behind data that needs to be flushed
542 and server version of file size can be stale. If we knew for sure
543 that inode was not dirty locally we could do this */
545 rc = CIFSSMBOpen(xid, tcon, full_path, disposition, desiredAccess,
546 create_options, &netfid, &oplock, NULL,
547 cifs_sb->local_nls, cifs_sb->mnt_cifs_flags &
548 CIFS_MOUNT_MAP_SPECIAL_CHR);
550 mutex_unlock(&pCifsFile->fh_mutex);
551 cFYI(1, "cifs_open returned 0x%x", rc);
552 cFYI(1, "oplock: %d", oplock);
553 goto reopen_error_exit;
557 pCifsFile->netfid = netfid;
558 pCifsFile->invalidHandle = false;
559 mutex_unlock(&pCifsFile->fh_mutex);
560 pCifsInode = CIFS_I(inode);
563 rc = filemap_write_and_wait(inode->i_mapping);
564 mapping_set_error(inode->i_mapping, rc);
567 rc = cifs_get_inode_info_unix(&inode,
568 full_path, inode->i_sb, xid);
570 rc = cifs_get_inode_info(&inode,
571 full_path, NULL, inode->i_sb,
573 } /* else we are writing out data to server already
574 and could deadlock if we tried to flush data, and
575 since we do not know if we have data that would
576 invalidate the current end of file on the server
577 we can not go to the server to get the new inod
580 cifs_set_oplock_level(pCifsInode, oplock);
582 cifs_relock_file(pCifsFile);
590 int cifs_close(struct inode *inode, struct file *file)
592 if (file->private_data != NULL) {
593 cifsFileInfo_put(file->private_data);
594 file->private_data = NULL;
597 /* return code from the ->release op is always ignored */
601 int cifs_closedir(struct inode *inode, struct file *file)
605 struct cifsFileInfo *pCFileStruct = file->private_data;
608 cFYI(1, "Closedir inode = 0x%p", inode);
613 struct cifs_tcon *pTcon = tlink_tcon(pCFileStruct->tlink);
615 cFYI(1, "Freeing private data in close dir");
616 spin_lock(&cifs_file_list_lock);
617 if (!pCFileStruct->srch_inf.endOfSearch &&
618 !pCFileStruct->invalidHandle) {
619 pCFileStruct->invalidHandle = true;
620 spin_unlock(&cifs_file_list_lock);
621 rc = CIFSFindClose(xid, pTcon, pCFileStruct->netfid);
622 cFYI(1, "Closing uncompleted readdir with rc %d",
624 /* not much we can do if it fails anyway, ignore rc */
627 spin_unlock(&cifs_file_list_lock);
628 ptmp = pCFileStruct->srch_inf.ntwrk_buf_start;
630 cFYI(1, "closedir free smb buf in srch struct");
631 pCFileStruct->srch_inf.ntwrk_buf_start = NULL;
632 if (pCFileStruct->srch_inf.smallBuf)
633 cifs_small_buf_release(ptmp);
635 cifs_buf_release(ptmp);
637 cifs_put_tlink(pCFileStruct->tlink);
638 kfree(file->private_data);
639 file->private_data = NULL;
641 /* BB can we lock the filestruct while this is going on? */
646 static struct cifsLockInfo *
647 cifs_lock_init(__u64 offset, __u64 length, __u8 type)
649 struct cifsLockInfo *lock =
650 kmalloc(sizeof(struct cifsLockInfo), GFP_KERNEL);
653 lock->offset = offset;
654 lock->length = length;
656 lock->pid = current->tgid;
657 INIT_LIST_HEAD(&lock->blist);
658 init_waitqueue_head(&lock->block_q);
663 cifs_del_lock_waiters(struct cifsLockInfo *lock)
665 struct cifsLockInfo *li, *tmp;
666 list_for_each_entry_safe(li, tmp, &lock->blist, blist) {
667 list_del_init(&li->blist);
668 wake_up(&li->block_q);
673 cifs_find_fid_lock_conflict(struct cifsFileInfo *cfile, __u64 offset,
674 __u64 length, __u8 type, __u16 netfid,
675 struct cifsLockInfo **conf_lock)
677 struct cifsLockInfo *li;
678 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
680 list_for_each_entry(li, &cfile->llist, llist) {
681 if (offset + length <= li->offset ||
682 offset >= li->offset + li->length)
684 else if ((type & server->vals->shared_lock_type) &&
685 ((netfid == cfile->netfid && current->tgid == li->pid)
686 || type == li->type))
697 cifs_find_lock_conflict(struct cifsInodeInfo *cinode, __u64 offset,
698 __u64 length, __u8 type, __u16 netfid,
699 struct cifsLockInfo **conf_lock)
702 struct cifsFileInfo *fid, *tmp;
704 spin_lock(&cifs_file_list_lock);
705 list_for_each_entry_safe(fid, tmp, &cinode->openFileList, flist) {
706 rc = cifs_find_fid_lock_conflict(fid, offset, length, type,
711 spin_unlock(&cifs_file_list_lock);
717 * Check if there is another lock that prevents us to set the lock (mandatory
718 * style). If such a lock exists, update the flock structure with its
719 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
720 * or leave it the same if we can't. Returns 0 if we don't need to request to
721 * the server or 1 otherwise.
724 cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
725 __u8 type, struct file_lock *flock)
728 struct cifsLockInfo *conf_lock;
729 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
730 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
733 mutex_lock(&cinode->lock_mutex);
735 exist = cifs_find_lock_conflict(cinode, offset, length, type,
736 cfile->netfid, &conf_lock);
738 flock->fl_start = conf_lock->offset;
739 flock->fl_end = conf_lock->offset + conf_lock->length - 1;
740 flock->fl_pid = conf_lock->pid;
741 if (conf_lock->type & server->vals->shared_lock_type)
742 flock->fl_type = F_RDLCK;
744 flock->fl_type = F_WRLCK;
745 } else if (!cinode->can_cache_brlcks)
748 flock->fl_type = F_UNLCK;
750 mutex_unlock(&cinode->lock_mutex);
755 cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock)
757 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
758 mutex_lock(&cinode->lock_mutex);
759 list_add_tail(&lock->llist, &cfile->llist);
760 mutex_unlock(&cinode->lock_mutex);
764 * Set the byte-range lock (mandatory style). Returns:
765 * 1) 0, if we set the lock and don't need to request to the server;
766 * 2) 1, if no locks prevent us but we need to request to the server;
767 * 3) -EACCESS, if there is a lock that prevents us and wait is false.
770 cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock,
773 struct cifsLockInfo *conf_lock;
774 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
780 mutex_lock(&cinode->lock_mutex);
782 exist = cifs_find_lock_conflict(cinode, lock->offset, lock->length,
783 lock->type, cfile->netfid, &conf_lock);
784 if (!exist && cinode->can_cache_brlcks) {
785 list_add_tail(&lock->llist, &cfile->llist);
786 mutex_unlock(&cinode->lock_mutex);
795 list_add_tail(&lock->blist, &conf_lock->blist);
796 mutex_unlock(&cinode->lock_mutex);
797 rc = wait_event_interruptible(lock->block_q,
798 (lock->blist.prev == &lock->blist) &&
799 (lock->blist.next == &lock->blist));
802 mutex_lock(&cinode->lock_mutex);
803 list_del_init(&lock->blist);
806 mutex_unlock(&cinode->lock_mutex);
811 * Check if there is another lock that prevents us to set the lock (posix
812 * style). If such a lock exists, update the flock structure with its
813 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
814 * or leave it the same if we can't. Returns 0 if we don't need to request to
815 * the server or 1 otherwise.
818 cifs_posix_lock_test(struct file *file, struct file_lock *flock)
821 struct cifsInodeInfo *cinode = CIFS_I(file->f_path.dentry->d_inode);
822 unsigned char saved_type = flock->fl_type;
824 if ((flock->fl_flags & FL_POSIX) == 0)
827 mutex_lock(&cinode->lock_mutex);
828 posix_test_lock(file, flock);
830 if (flock->fl_type == F_UNLCK && !cinode->can_cache_brlcks) {
831 flock->fl_type = saved_type;
835 mutex_unlock(&cinode->lock_mutex);
840 * Set the byte-range lock (posix style). Returns:
841 * 1) 0, if we set the lock and don't need to request to the server;
842 * 2) 1, if we need to request to the server;
843 * 3) <0, if the error occurs while setting the lock.
846 cifs_posix_lock_set(struct file *file, struct file_lock *flock)
848 struct cifsInodeInfo *cinode = CIFS_I(file->f_path.dentry->d_inode);
851 if ((flock->fl_flags & FL_POSIX) == 0)
855 mutex_lock(&cinode->lock_mutex);
856 if (!cinode->can_cache_brlcks) {
857 mutex_unlock(&cinode->lock_mutex);
861 rc = posix_lock_file(file, flock, NULL);
862 mutex_unlock(&cinode->lock_mutex);
863 if (rc == FILE_LOCK_DEFERRED) {
864 rc = wait_event_interruptible(flock->fl_wait, !flock->fl_next);
867 locks_delete_block(flock);
873 cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
875 int xid, rc = 0, stored_rc;
876 struct cifsLockInfo *li, *tmp;
877 struct cifs_tcon *tcon;
878 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
879 unsigned int num, max_num;
880 LOCKING_ANDX_RANGE *buf, *cur;
881 int types[] = {LOCKING_ANDX_LARGE_FILES,
882 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES};
886 tcon = tlink_tcon(cfile->tlink);
888 mutex_lock(&cinode->lock_mutex);
889 if (!cinode->can_cache_brlcks) {
890 mutex_unlock(&cinode->lock_mutex);
895 max_num = (tcon->ses->server->maxBuf - sizeof(struct smb_hdr)) /
896 sizeof(LOCKING_ANDX_RANGE);
897 buf = kzalloc(max_num * sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
899 mutex_unlock(&cinode->lock_mutex);
904 for (i = 0; i < 2; i++) {
907 list_for_each_entry_safe(li, tmp, &cfile->llist, llist) {
908 if (li->type != types[i])
910 cur->Pid = cpu_to_le16(li->pid);
911 cur->LengthLow = cpu_to_le32((u32)li->length);
912 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
913 cur->OffsetLow = cpu_to_le32((u32)li->offset);
914 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
915 if (++num == max_num) {
916 stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
917 (__u8)li->type, 0, num,
928 stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
929 (__u8)types[i], 0, num, buf);
935 cinode->can_cache_brlcks = false;
936 mutex_unlock(&cinode->lock_mutex);
943 /* copied from fs/locks.c with a name change */
944 #define cifs_for_each_lock(inode, lockp) \
945 for (lockp = &inode->i_flock; *lockp != NULL; \
946 lockp = &(*lockp)->fl_next)
948 struct lock_to_push {
949 struct list_head llist;
958 cifs_push_posix_locks(struct cifsFileInfo *cfile)
960 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
961 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
962 struct file_lock *flock, **before;
963 unsigned int count = 0, i = 0;
964 int rc = 0, xid, type;
965 struct list_head locks_to_send, *el;
966 struct lock_to_push *lck, *tmp;
971 mutex_lock(&cinode->lock_mutex);
972 if (!cinode->can_cache_brlcks) {
973 mutex_unlock(&cinode->lock_mutex);
979 cifs_for_each_lock(cfile->dentry->d_inode, before) {
980 if ((*before)->fl_flags & FL_POSIX)
985 INIT_LIST_HEAD(&locks_to_send);
988 * Allocating count locks is enough because no FL_POSIX locks can be
989 * added to the list while we are holding cinode->lock_mutex that
990 * protects locking operations of this inode.
992 for (; i < count; i++) {
993 lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL);
998 list_add_tail(&lck->llist, &locks_to_send);
1001 el = locks_to_send.next;
1003 cifs_for_each_lock(cfile->dentry->d_inode, before) {
1005 if ((flock->fl_flags & FL_POSIX) == 0)
1007 if (el == &locks_to_send) {
1009 * The list ended. We don't have enough allocated
1010 * structures - something is really wrong.
1012 cERROR(1, "Can't push all brlocks!");
1015 length = 1 + flock->fl_end - flock->fl_start;
1016 if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK)
1020 lck = list_entry(el, struct lock_to_push, llist);
1021 lck->pid = flock->fl_pid;
1022 lck->netfid = cfile->netfid;
1023 lck->length = length;
1025 lck->offset = flock->fl_start;
1030 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1031 struct file_lock tmp_lock;
1034 tmp_lock.fl_start = lck->offset;
1035 stored_rc = CIFSSMBPosixLock(xid, tcon, lck->netfid, lck->pid,
1036 0, lck->length, &tmp_lock,
1040 list_del(&lck->llist);
1045 cinode->can_cache_brlcks = false;
1046 mutex_unlock(&cinode->lock_mutex);
1051 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1052 list_del(&lck->llist);
1059 cifs_push_locks(struct cifsFileInfo *cfile)
1061 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1062 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1064 if ((tcon->ses->capabilities & CAP_UNIX) &&
1065 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1066 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1067 return cifs_push_posix_locks(cfile);
1069 return cifs_push_mandatory_locks(cfile);
1073 cifs_read_flock(struct file_lock *flock, __u32 *type, int *lock, int *unlock,
1074 bool *wait_flag, struct TCP_Server_Info *server)
1076 if (flock->fl_flags & FL_POSIX)
1078 if (flock->fl_flags & FL_FLOCK)
1080 if (flock->fl_flags & FL_SLEEP) {
1081 cFYI(1, "Blocking lock");
1084 if (flock->fl_flags & FL_ACCESS)
1085 cFYI(1, "Process suspended by mandatory locking - "
1086 "not implemented yet");
1087 if (flock->fl_flags & FL_LEASE)
1088 cFYI(1, "Lease on file - not implemented yet");
1089 if (flock->fl_flags &
1090 (~(FL_POSIX | FL_FLOCK | FL_SLEEP | FL_ACCESS | FL_LEASE)))
1091 cFYI(1, "Unknown lock flags 0x%x", flock->fl_flags);
1093 *type = server->vals->large_lock_type;
1094 if (flock->fl_type == F_WRLCK) {
1095 cFYI(1, "F_WRLCK ");
1096 *type |= server->vals->exclusive_lock_type;
1098 } else if (flock->fl_type == F_UNLCK) {
1100 *type |= server->vals->unlock_lock_type;
1102 /* Check if unlock includes more than one lock range */
1103 } else if (flock->fl_type == F_RDLCK) {
1105 *type |= server->vals->shared_lock_type;
1107 } else if (flock->fl_type == F_EXLCK) {
1109 *type |= server->vals->exclusive_lock_type;
1111 } else if (flock->fl_type == F_SHLCK) {
1113 *type |= server->vals->shared_lock_type;
1116 cFYI(1, "Unknown type of lock");
1120 cifs_getlk(struct file *file, struct file_lock *flock, __u32 type,
1121 bool wait_flag, bool posix_lck, int xid)
1124 __u64 length = 1 + flock->fl_end - flock->fl_start;
1125 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1126 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1127 struct TCP_Server_Info *server = tcon->ses->server;
1128 __u16 netfid = cfile->netfid;
1131 int posix_lock_type;
1133 rc = cifs_posix_lock_test(file, flock);
1137 if (type & server->vals->shared_lock_type)
1138 posix_lock_type = CIFS_RDLCK;
1140 posix_lock_type = CIFS_WRLCK;
1141 rc = CIFSSMBPosixLock(xid, tcon, netfid, current->tgid,
1142 1 /* get */, length, flock,
1143 posix_lock_type, wait_flag);
1147 rc = cifs_lock_test(cfile, flock->fl_start, length, type, flock);
1151 /* BB we could chain these into one lock request BB */
1152 rc = CIFSSMBLock(xid, tcon, netfid, current->tgid, length,
1153 flock->fl_start, 0, 1, type, 0, 0);
1155 rc = CIFSSMBLock(xid, tcon, netfid, current->tgid,
1156 length, flock->fl_start, 1, 0,
1158 flock->fl_type = F_UNLCK;
1160 cERROR(1, "Error unlocking previously locked "
1161 "range %d during test of lock", rc);
1165 if (type & server->vals->shared_lock_type) {
1166 flock->fl_type = F_WRLCK;
1170 rc = CIFSSMBLock(xid, tcon, netfid, current->tgid, length,
1171 flock->fl_start, 0, 1,
1172 type | server->vals->shared_lock_type, 0, 0);
1174 rc = CIFSSMBLock(xid, tcon, netfid, current->tgid,
1175 length, flock->fl_start, 1, 0,
1176 type | server->vals->shared_lock_type, 0, 0);
1177 flock->fl_type = F_RDLCK;
1179 cERROR(1, "Error unlocking previously locked "
1180 "range %d during test of lock", rc);
1182 flock->fl_type = F_WRLCK;
1188 cifs_move_llist(struct list_head *source, struct list_head *dest)
1190 struct list_head *li, *tmp;
1191 list_for_each_safe(li, tmp, source)
1192 list_move(li, dest);
1196 cifs_free_llist(struct list_head *llist)
1198 struct cifsLockInfo *li, *tmp;
1199 list_for_each_entry_safe(li, tmp, llist, llist) {
1200 cifs_del_lock_waiters(li);
1201 list_del(&li->llist);
1207 cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, int xid)
1209 int rc = 0, stored_rc;
1210 int types[] = {LOCKING_ANDX_LARGE_FILES,
1211 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES};
1213 unsigned int max_num, num;
1214 LOCKING_ANDX_RANGE *buf, *cur;
1215 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1216 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
1217 struct cifsLockInfo *li, *tmp;
1218 __u64 length = 1 + flock->fl_end - flock->fl_start;
1219 struct list_head tmp_llist;
1221 INIT_LIST_HEAD(&tmp_llist);
1223 max_num = (tcon->ses->server->maxBuf - sizeof(struct smb_hdr)) /
1224 sizeof(LOCKING_ANDX_RANGE);
1225 buf = kzalloc(max_num * sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1229 mutex_lock(&cinode->lock_mutex);
1230 for (i = 0; i < 2; i++) {
1233 list_for_each_entry_safe(li, tmp, &cfile->llist, llist) {
1234 if (flock->fl_start > li->offset ||
1235 (flock->fl_start + length) <
1236 (li->offset + li->length))
1238 if (current->tgid != li->pid)
1240 if (types[i] != li->type)
1242 if (!cinode->can_cache_brlcks) {
1243 cur->Pid = cpu_to_le16(li->pid);
1244 cur->LengthLow = cpu_to_le32((u32)li->length);
1246 cpu_to_le32((u32)(li->length>>32));
1247 cur->OffsetLow = cpu_to_le32((u32)li->offset);
1249 cpu_to_le32((u32)(li->offset>>32));
1251 * We need to save a lock here to let us add
1252 * it again to the file's list if the unlock
1253 * range request fails on the server.
1255 list_move(&li->llist, &tmp_llist);
1256 if (++num == max_num) {
1257 stored_rc = cifs_lockv(xid, tcon,
1263 * We failed on the unlock range
1264 * request - add all locks from
1265 * the tmp list to the head of
1268 cifs_move_llist(&tmp_llist,
1273 * The unlock range request
1274 * succeed - free the tmp list.
1276 cifs_free_llist(&tmp_llist);
1283 * We can cache brlock requests - simply remove
1284 * a lock from the file's list.
1286 list_del(&li->llist);
1287 cifs_del_lock_waiters(li);
1292 stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
1293 types[i], num, 0, buf);
1295 cifs_move_llist(&tmp_llist, &cfile->llist);
1298 cifs_free_llist(&tmp_llist);
1302 mutex_unlock(&cinode->lock_mutex);
1308 cifs_setlk(struct file *file, struct file_lock *flock, __u32 type,
1309 bool wait_flag, bool posix_lck, int lock, int unlock, int xid)
1312 __u64 length = 1 + flock->fl_end - flock->fl_start;
1313 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1314 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1315 struct TCP_Server_Info *server = tcon->ses->server;
1316 __u16 netfid = cfile->netfid;
1319 int posix_lock_type;
1321 rc = cifs_posix_lock_set(file, flock);
1325 if (type & server->vals->shared_lock_type)
1326 posix_lock_type = CIFS_RDLCK;
1328 posix_lock_type = CIFS_WRLCK;
1331 posix_lock_type = CIFS_UNLCK;
1333 rc = CIFSSMBPosixLock(xid, tcon, netfid, current->tgid,
1334 0 /* set */, length, flock,
1335 posix_lock_type, wait_flag);
1340 struct cifsLockInfo *lock;
1342 lock = cifs_lock_init(flock->fl_start, length, type);
1346 rc = cifs_lock_add_if(cfile, lock, wait_flag);
1352 rc = CIFSSMBLock(xid, tcon, netfid, current->tgid, length,
1353 flock->fl_start, 0, 1, type, wait_flag, 0);
1359 cifs_lock_add(cfile, lock);
1361 rc = cifs_unlock_range(cfile, flock, xid);
1364 if (flock->fl_flags & FL_POSIX)
1365 posix_lock_file_wait(file, flock);
1369 int cifs_lock(struct file *file, int cmd, struct file_lock *flock)
1372 int lock = 0, unlock = 0;
1373 bool wait_flag = false;
1374 bool posix_lck = false;
1375 struct cifs_sb_info *cifs_sb;
1376 struct cifs_tcon *tcon;
1377 struct cifsInodeInfo *cinode;
1378 struct cifsFileInfo *cfile;
1385 cFYI(1, "Lock parm: 0x%x flockflags: 0x%x flocktype: 0x%x start: %lld "
1386 "end: %lld", cmd, flock->fl_flags, flock->fl_type,
1387 flock->fl_start, flock->fl_end);
1389 cfile = (struct cifsFileInfo *)file->private_data;
1390 tcon = tlink_tcon(cfile->tlink);
1392 cifs_read_flock(flock, &type, &lock, &unlock, &wait_flag,
1395 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
1396 netfid = cfile->netfid;
1397 cinode = CIFS_I(file->f_path.dentry->d_inode);
1399 if ((tcon->ses->capabilities & CAP_UNIX) &&
1400 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1401 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1404 * BB add code here to normalize offset and length to account for
1405 * negative length which we can not accept over the wire.
1407 if (IS_GETLK(cmd)) {
1408 rc = cifs_getlk(file, flock, type, wait_flag, posix_lck, xid);
1413 if (!lock && !unlock) {
1415 * if no lock or unlock then nothing to do since we do not
1422 rc = cifs_setlk(file, flock, type, wait_flag, posix_lck, lock, unlock,
1429 * update the file size (if needed) after a write. Should be called with
1430 * the inode->i_lock held
1433 cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
1434 unsigned int bytes_written)
1436 loff_t end_of_write = offset + bytes_written;
1438 if (end_of_write > cifsi->server_eof)
1439 cifsi->server_eof = end_of_write;
1442 static ssize_t cifs_write(struct cifsFileInfo *open_file, __u32 pid,
1443 const char *write_data, size_t write_size,
1447 unsigned int bytes_written = 0;
1448 unsigned int total_written;
1449 struct cifs_sb_info *cifs_sb;
1450 struct cifs_tcon *pTcon;
1452 struct dentry *dentry = open_file->dentry;
1453 struct cifsInodeInfo *cifsi = CIFS_I(dentry->d_inode);
1454 struct cifs_io_parms io_parms;
1456 cifs_sb = CIFS_SB(dentry->d_sb);
1458 cFYI(1, "write %zd bytes to offset %lld of %s", write_size,
1459 *poffset, dentry->d_name.name);
1461 pTcon = tlink_tcon(open_file->tlink);
1465 for (total_written = 0; write_size > total_written;
1466 total_written += bytes_written) {
1468 while (rc == -EAGAIN) {
1472 if (open_file->invalidHandle) {
1473 /* we could deadlock if we called
1474 filemap_fdatawait from here so tell
1475 reopen_file not to flush data to
1477 rc = cifs_reopen_file(open_file, false);
1482 len = min((size_t)cifs_sb->wsize,
1483 write_size - total_written);
1484 /* iov[0] is reserved for smb header */
1485 iov[1].iov_base = (char *)write_data + total_written;
1486 iov[1].iov_len = len;
1487 io_parms.netfid = open_file->netfid;
1489 io_parms.tcon = pTcon;
1490 io_parms.offset = *poffset;
1491 io_parms.length = len;
1492 rc = CIFSSMBWrite2(xid, &io_parms, &bytes_written, iov,
1495 if (rc || (bytes_written == 0)) {
1503 spin_lock(&dentry->d_inode->i_lock);
1504 cifs_update_eof(cifsi, *poffset, bytes_written);
1505 spin_unlock(&dentry->d_inode->i_lock);
1506 *poffset += bytes_written;
1510 cifs_stats_bytes_written(pTcon, total_written);
1512 if (total_written > 0) {
1513 spin_lock(&dentry->d_inode->i_lock);
1514 if (*poffset > dentry->d_inode->i_size)
1515 i_size_write(dentry->d_inode, *poffset);
1516 spin_unlock(&dentry->d_inode->i_lock);
1518 mark_inode_dirty_sync(dentry->d_inode);
1520 return total_written;
1523 struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
1526 struct cifsFileInfo *open_file = NULL;
1527 struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1529 /* only filter by fsuid on multiuser mounts */
1530 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1533 spin_lock(&cifs_file_list_lock);
1534 /* we could simply get the first_list_entry since write-only entries
1535 are always at the end of the list but since the first entry might
1536 have a close pending, we go through the whole list */
1537 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1538 if (fsuid_only && open_file->uid != current_fsuid())
1540 if (OPEN_FMODE(open_file->f_flags) & FMODE_READ) {
1541 if (!open_file->invalidHandle) {
1542 /* found a good file */
1543 /* lock it so it will not be closed on us */
1544 cifsFileInfo_get(open_file);
1545 spin_unlock(&cifs_file_list_lock);
1547 } /* else might as well continue, and look for
1548 another, or simply have the caller reopen it
1549 again rather than trying to fix this handle */
1550 } else /* write only file */
1551 break; /* write only files are last so must be done */
1553 spin_unlock(&cifs_file_list_lock);
1557 struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode,
1560 struct cifsFileInfo *open_file;
1561 struct cifs_sb_info *cifs_sb;
1562 bool any_available = false;
1565 /* Having a null inode here (because mapping->host was set to zero by
1566 the VFS or MM) should not happen but we had reports of on oops (due to
1567 it being zero) during stress testcases so we need to check for it */
1569 if (cifs_inode == NULL) {
1570 cERROR(1, "Null inode passed to cifs_writeable_file");
1575 cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1577 /* only filter by fsuid on multiuser mounts */
1578 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1581 spin_lock(&cifs_file_list_lock);
1583 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1584 if (!any_available && open_file->pid != current->tgid)
1586 if (fsuid_only && open_file->uid != current_fsuid())
1588 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
1589 cifsFileInfo_get(open_file);
1591 if (!open_file->invalidHandle) {
1592 /* found a good writable file */
1593 spin_unlock(&cifs_file_list_lock);
1597 spin_unlock(&cifs_file_list_lock);
1599 /* Had to unlock since following call can block */
1600 rc = cifs_reopen_file(open_file, false);
1604 /* if it fails, try another handle if possible */
1605 cFYI(1, "wp failed on reopen file");
1606 cifsFileInfo_put(open_file);
1608 spin_lock(&cifs_file_list_lock);
1610 /* else we simply continue to the next entry. Thus
1611 we do not loop on reopen errors. If we
1612 can not reopen the file, for example if we
1613 reconnected to a server with another client
1614 racing to delete or lock the file we would not
1615 make progress if we restarted before the beginning
1616 of the loop here. */
1619 /* couldn't find useable FH with same pid, try any available */
1620 if (!any_available) {
1621 any_available = true;
1622 goto refind_writable;
1624 spin_unlock(&cifs_file_list_lock);
1628 static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to)
1630 struct address_space *mapping = page->mapping;
1631 loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
1634 int bytes_written = 0;
1635 struct inode *inode;
1636 struct cifsFileInfo *open_file;
1638 if (!mapping || !mapping->host)
1641 inode = page->mapping->host;
1643 offset += (loff_t)from;
1644 write_data = kmap(page);
1647 if ((to > PAGE_CACHE_SIZE) || (from > to)) {
1652 /* racing with truncate? */
1653 if (offset > mapping->host->i_size) {
1655 return 0; /* don't care */
1658 /* check to make sure that we are not extending the file */
1659 if (mapping->host->i_size - offset < (loff_t)to)
1660 to = (unsigned)(mapping->host->i_size - offset);
1662 open_file = find_writable_file(CIFS_I(mapping->host), false);
1664 bytes_written = cifs_write(open_file, open_file->pid,
1665 write_data, to - from, &offset);
1666 cifsFileInfo_put(open_file);
1667 /* Does mm or vfs already set times? */
1668 inode->i_atime = inode->i_mtime = current_fs_time(inode->i_sb);
1669 if ((bytes_written > 0) && (offset))
1671 else if (bytes_written < 0)
1674 cFYI(1, "No writeable filehandles for inode");
1683 * Marshal up the iov array, reserving the first one for the header. Also,
1687 cifs_writepages_marshal_iov(struct kvec *iov, struct cifs_writedata *wdata)
1690 struct inode *inode = wdata->cfile->dentry->d_inode;
1691 loff_t size = i_size_read(inode);
1693 /* marshal up the pages into iov array */
1695 for (i = 0; i < wdata->nr_pages; i++) {
1696 iov[i + 1].iov_len = min(size - page_offset(wdata->pages[i]),
1697 (loff_t)PAGE_CACHE_SIZE);
1698 iov[i + 1].iov_base = kmap(wdata->pages[i]);
1699 wdata->bytes += iov[i + 1].iov_len;
1703 static int cifs_writepages(struct address_space *mapping,
1704 struct writeback_control *wbc)
1706 struct cifs_sb_info *cifs_sb = CIFS_SB(mapping->host->i_sb);
1707 bool done = false, scanned = false, range_whole = false;
1709 struct cifs_writedata *wdata;
1714 * If wsize is smaller than the page cache size, default to writing
1715 * one page at a time via cifs_writepage
1717 if (cifs_sb->wsize < PAGE_CACHE_SIZE)
1718 return generic_writepages(mapping, wbc);
1720 if (wbc->range_cyclic) {
1721 index = mapping->writeback_index; /* Start from prev offset */
1724 index = wbc->range_start >> PAGE_CACHE_SHIFT;
1725 end = wbc->range_end >> PAGE_CACHE_SHIFT;
1726 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
1731 while (!done && index <= end) {
1732 unsigned int i, nr_pages, found_pages;
1733 pgoff_t next = 0, tofind;
1734 struct page **pages;
1736 tofind = min((cifs_sb->wsize / PAGE_CACHE_SIZE) - 1,
1739 wdata = cifs_writedata_alloc((unsigned int)tofind,
1740 cifs_writev_complete);
1747 * find_get_pages_tag seems to return a max of 256 on each
1748 * iteration, so we must call it several times in order to
1749 * fill the array or the wsize is effectively limited to
1750 * 256 * PAGE_CACHE_SIZE.
1753 pages = wdata->pages;
1755 nr_pages = find_get_pages_tag(mapping, &index,
1756 PAGECACHE_TAG_DIRTY,
1758 found_pages += nr_pages;
1761 } while (nr_pages && tofind && index <= end);
1763 if (found_pages == 0) {
1764 kref_put(&wdata->refcount, cifs_writedata_release);
1769 for (i = 0; i < found_pages; i++) {
1770 page = wdata->pages[i];
1772 * At this point we hold neither mapping->tree_lock nor
1773 * lock on the page itself: the page may be truncated or
1774 * invalidated (changing page->mapping to NULL), or even
1775 * swizzled back from swapper_space to tmpfs file
1781 else if (!trylock_page(page))
1784 if (unlikely(page->mapping != mapping)) {
1789 if (!wbc->range_cyclic && page->index > end) {
1795 if (next && (page->index != next)) {
1796 /* Not next consecutive page */
1801 if (wbc->sync_mode != WB_SYNC_NONE)
1802 wait_on_page_writeback(page);
1804 if (PageWriteback(page) ||
1805 !clear_page_dirty_for_io(page)) {
1811 * This actually clears the dirty bit in the radix tree.
1812 * See cifs_writepage() for more commentary.
1814 set_page_writeback(page);
1816 if (page_offset(page) >= mapping->host->i_size) {
1819 end_page_writeback(page);
1823 wdata->pages[i] = page;
1824 next = page->index + 1;
1828 /* reset index to refind any pages skipped */
1830 index = wdata->pages[0]->index + 1;
1832 /* put any pages we aren't going to use */
1833 for (i = nr_pages; i < found_pages; i++) {
1834 page_cache_release(wdata->pages[i]);
1835 wdata->pages[i] = NULL;
1838 /* nothing to write? */
1839 if (nr_pages == 0) {
1840 kref_put(&wdata->refcount, cifs_writedata_release);
1844 wdata->sync_mode = wbc->sync_mode;
1845 wdata->nr_pages = nr_pages;
1846 wdata->offset = page_offset(wdata->pages[0]);
1847 wdata->marshal_iov = cifs_writepages_marshal_iov;
1850 if (wdata->cfile != NULL)
1851 cifsFileInfo_put(wdata->cfile);
1852 wdata->cfile = find_writable_file(CIFS_I(mapping->host),
1854 if (!wdata->cfile) {
1855 cERROR(1, "No writable handles for inode");
1859 wdata->pid = wdata->cfile->pid;
1860 rc = cifs_async_writev(wdata);
1861 } while (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN);
1863 for (i = 0; i < nr_pages; ++i)
1864 unlock_page(wdata->pages[i]);
1866 /* send failure -- clean up the mess */
1868 for (i = 0; i < nr_pages; ++i) {
1870 redirty_page_for_writepage(wbc,
1873 SetPageError(wdata->pages[i]);
1874 end_page_writeback(wdata->pages[i]);
1875 page_cache_release(wdata->pages[i]);
1878 mapping_set_error(mapping, rc);
1880 kref_put(&wdata->refcount, cifs_writedata_release);
1882 wbc->nr_to_write -= nr_pages;
1883 if (wbc->nr_to_write <= 0)
1889 if (!scanned && !done) {
1891 * We hit the last page and there is more work to be done: wrap
1892 * back to the start of the file
1899 if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
1900 mapping->writeback_index = index;
1906 cifs_writepage_locked(struct page *page, struct writeback_control *wbc)
1912 /* BB add check for wbc flags */
1913 page_cache_get(page);
1914 if (!PageUptodate(page))
1915 cFYI(1, "ppw - page not up to date");
1918 * Set the "writeback" flag, and clear "dirty" in the radix tree.
1920 * A writepage() implementation always needs to do either this,
1921 * or re-dirty the page with "redirty_page_for_writepage()" in
1922 * the case of a failure.
1924 * Just unlocking the page will cause the radix tree tag-bits
1925 * to fail to update with the state of the page correctly.
1927 set_page_writeback(page);
1929 rc = cifs_partialpagewrite(page, 0, PAGE_CACHE_SIZE);
1930 if (rc == -EAGAIN && wbc->sync_mode == WB_SYNC_ALL)
1932 else if (rc == -EAGAIN)
1933 redirty_page_for_writepage(wbc, page);
1937 SetPageUptodate(page);
1938 end_page_writeback(page);
1939 page_cache_release(page);
1944 static int cifs_writepage(struct page *page, struct writeback_control *wbc)
1946 int rc = cifs_writepage_locked(page, wbc);
1951 static int cifs_write_end(struct file *file, struct address_space *mapping,
1952 loff_t pos, unsigned len, unsigned copied,
1953 struct page *page, void *fsdata)
1956 struct inode *inode = mapping->host;
1957 struct cifsFileInfo *cfile = file->private_data;
1958 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1961 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
1964 pid = current->tgid;
1966 cFYI(1, "write_end for page %p from pos %lld with %d bytes",
1969 if (PageChecked(page)) {
1971 SetPageUptodate(page);
1972 ClearPageChecked(page);
1973 } else if (!PageUptodate(page) && copied == PAGE_CACHE_SIZE)
1974 SetPageUptodate(page);
1976 if (!PageUptodate(page)) {
1978 unsigned offset = pos & (PAGE_CACHE_SIZE - 1);
1982 /* this is probably better than directly calling
1983 partialpage_write since in this function the file handle is
1984 known which we might as well leverage */
1985 /* BB check if anything else missing out of ppw
1986 such as updating last write time */
1987 page_data = kmap(page);
1988 rc = cifs_write(cfile, pid, page_data + offset, copied, &pos);
1989 /* if (rc < 0) should we set writebehind rc? */
1996 set_page_dirty(page);
2000 spin_lock(&inode->i_lock);
2001 if (pos > inode->i_size)
2002 i_size_write(inode, pos);
2003 spin_unlock(&inode->i_lock);
2007 page_cache_release(page);
2012 int cifs_strict_fsync(struct file *file, loff_t start, loff_t end,
2017 struct cifs_tcon *tcon;
2018 struct cifsFileInfo *smbfile = file->private_data;
2019 struct inode *inode = file->f_path.dentry->d_inode;
2020 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2022 rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
2025 mutex_lock(&inode->i_mutex);
2029 cFYI(1, "Sync file - name: %s datasync: 0x%x",
2030 file->f_path.dentry->d_name.name, datasync);
2032 if (!CIFS_I(inode)->clientCanCacheRead) {
2033 rc = cifs_invalidate_mapping(inode);
2035 cFYI(1, "rc: %d during invalidate phase", rc);
2036 rc = 0; /* don't care about it in fsync */
2040 tcon = tlink_tcon(smbfile->tlink);
2041 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC))
2042 rc = CIFSSMBFlush(xid, tcon, smbfile->netfid);
2045 mutex_unlock(&inode->i_mutex);
2049 int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
2053 struct cifs_tcon *tcon;
2054 struct cifsFileInfo *smbfile = file->private_data;
2055 struct cifs_sb_info *cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2056 struct inode *inode = file->f_mapping->host;
2058 rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
2061 mutex_lock(&inode->i_mutex);
2065 cFYI(1, "Sync file - name: %s datasync: 0x%x",
2066 file->f_path.dentry->d_name.name, datasync);
2068 tcon = tlink_tcon(smbfile->tlink);
2069 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC))
2070 rc = CIFSSMBFlush(xid, tcon, smbfile->netfid);
2073 mutex_unlock(&inode->i_mutex);
2078 * As file closes, flush all cached write data for this inode checking
2079 * for write behind errors.
2081 int cifs_flush(struct file *file, fl_owner_t id)
2083 struct inode *inode = file->f_path.dentry->d_inode;
2086 if (file->f_mode & FMODE_WRITE)
2087 rc = filemap_write_and_wait(inode->i_mapping);
2089 cFYI(1, "Flush inode %p file %p rc %d", inode, file, rc);
2095 cifs_write_allocate_pages(struct page **pages, unsigned long num_pages)
2100 for (i = 0; i < num_pages; i++) {
2101 pages[i] = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
2104 * save number of pages we have already allocated and
2105 * return with ENOMEM error
2114 for (i = 0; i < num_pages; i++)
2121 size_t get_numpages(const size_t wsize, const size_t len, size_t *cur_len)
2126 clen = min_t(const size_t, len, wsize);
2127 num_pages = DIV_ROUND_UP(clen, PAGE_SIZE);
2136 cifs_uncached_marshal_iov(struct kvec *iov, struct cifs_writedata *wdata)
2139 size_t bytes = wdata->bytes;
2141 /* marshal up the pages into iov array */
2142 for (i = 0; i < wdata->nr_pages; i++) {
2143 iov[i + 1].iov_len = min_t(size_t, bytes, PAGE_SIZE);
2144 iov[i + 1].iov_base = kmap(wdata->pages[i]);
2145 bytes -= iov[i + 1].iov_len;
2150 cifs_uncached_writev_complete(struct work_struct *work)
2153 struct cifs_writedata *wdata = container_of(work,
2154 struct cifs_writedata, work);
2155 struct inode *inode = wdata->cfile->dentry->d_inode;
2156 struct cifsInodeInfo *cifsi = CIFS_I(inode);
2158 spin_lock(&inode->i_lock);
2159 cifs_update_eof(cifsi, wdata->offset, wdata->bytes);
2160 if (cifsi->server_eof > inode->i_size)
2161 i_size_write(inode, cifsi->server_eof);
2162 spin_unlock(&inode->i_lock);
2164 complete(&wdata->done);
2166 if (wdata->result != -EAGAIN) {
2167 for (i = 0; i < wdata->nr_pages; i++)
2168 put_page(wdata->pages[i]);
2171 kref_put(&wdata->refcount, cifs_writedata_release);
2174 /* attempt to send write to server, retry on any -EAGAIN errors */
2176 cifs_uncached_retry_writev(struct cifs_writedata *wdata)
2181 if (wdata->cfile->invalidHandle) {
2182 rc = cifs_reopen_file(wdata->cfile, false);
2186 rc = cifs_async_writev(wdata);
2187 } while (rc == -EAGAIN);
2193 cifs_iovec_write(struct file *file, const struct iovec *iov,
2194 unsigned long nr_segs, loff_t *poffset)
2196 unsigned long nr_pages, i;
2197 size_t copied, len, cur_len;
2198 ssize_t total_written = 0;
2201 struct cifsFileInfo *open_file;
2202 struct cifs_tcon *tcon;
2203 struct cifs_sb_info *cifs_sb;
2204 struct cifs_writedata *wdata, *tmp;
2205 struct list_head wdata_list;
2209 len = iov_length(iov, nr_segs);
2213 rc = generic_write_checks(file, poffset, &len, 0);
2217 INIT_LIST_HEAD(&wdata_list);
2218 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2219 open_file = file->private_data;
2220 tcon = tlink_tcon(open_file->tlink);
2223 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2224 pid = open_file->pid;
2226 pid = current->tgid;
2228 iov_iter_init(&it, iov, nr_segs, len, 0);
2232 nr_pages = get_numpages(cifs_sb->wsize, len, &cur_len);
2233 wdata = cifs_writedata_alloc(nr_pages,
2234 cifs_uncached_writev_complete);
2240 rc = cifs_write_allocate_pages(wdata->pages, nr_pages);
2247 for (i = 0; i < nr_pages; i++) {
2248 copied = min_t(const size_t, cur_len, PAGE_SIZE);
2249 copied = iov_iter_copy_from_user(wdata->pages[i], &it,
2252 iov_iter_advance(&it, copied);
2254 cur_len = save_len - cur_len;
2256 wdata->sync_mode = WB_SYNC_ALL;
2257 wdata->nr_pages = nr_pages;
2258 wdata->offset = (__u64)offset;
2259 wdata->cfile = cifsFileInfo_get(open_file);
2261 wdata->bytes = cur_len;
2262 wdata->marshal_iov = cifs_uncached_marshal_iov;
2263 rc = cifs_uncached_retry_writev(wdata);
2265 kref_put(&wdata->refcount, cifs_writedata_release);
2269 list_add_tail(&wdata->list, &wdata_list);
2275 * If at least one write was successfully sent, then discard any rc
2276 * value from the later writes. If the other write succeeds, then
2277 * we'll end up returning whatever was written. If it fails, then
2278 * we'll get a new rc value from that.
2280 if (!list_empty(&wdata_list))
2284 * Wait for and collect replies for any successful sends in order of
2285 * increasing offset. Once an error is hit or we get a fatal signal
2286 * while waiting, then return without waiting for any more replies.
2289 list_for_each_entry_safe(wdata, tmp, &wdata_list, list) {
2291 /* FIXME: freezable too? */
2292 rc = wait_for_completion_killable(&wdata->done);
2295 else if (wdata->result)
2298 total_written += wdata->bytes;
2300 /* resend call if it's a retryable error */
2301 if (rc == -EAGAIN) {
2302 rc = cifs_uncached_retry_writev(wdata);
2306 list_del_init(&wdata->list);
2307 kref_put(&wdata->refcount, cifs_writedata_release);
2310 if (total_written > 0)
2311 *poffset += total_written;
2313 cifs_stats_bytes_written(tcon, total_written);
2314 return total_written ? total_written : (ssize_t)rc;
2317 ssize_t cifs_user_writev(struct kiocb *iocb, const struct iovec *iov,
2318 unsigned long nr_segs, loff_t pos)
2321 struct inode *inode;
2323 inode = iocb->ki_filp->f_path.dentry->d_inode;
2326 * BB - optimize the way when signing is disabled. We can drop this
2327 * extra memory-to-memory copying and use iovec buffers for constructing
2331 written = cifs_iovec_write(iocb->ki_filp, iov, nr_segs, &pos);
2333 CIFS_I(inode)->invalid_mapping = true;
2340 ssize_t cifs_strict_writev(struct kiocb *iocb, const struct iovec *iov,
2341 unsigned long nr_segs, loff_t pos)
2343 struct inode *inode;
2345 inode = iocb->ki_filp->f_path.dentry->d_inode;
2347 if (CIFS_I(inode)->clientCanCacheAll)
2348 return generic_file_aio_write(iocb, iov, nr_segs, pos);
2351 * In strict cache mode we need to write the data to the server exactly
2352 * from the pos to pos+len-1 rather than flush all affected pages
2353 * because it may cause a error with mandatory locks on these pages but
2354 * not on the region from pos to ppos+len-1.
2357 return cifs_user_writev(iocb, iov, nr_segs, pos);
2360 static struct cifs_readdata *
2361 cifs_readdata_alloc(unsigned int nr_vecs, work_func_t complete)
2363 struct cifs_readdata *rdata;
2365 rdata = kzalloc(sizeof(*rdata) +
2366 sizeof(struct kvec) * nr_vecs, GFP_KERNEL);
2367 if (rdata != NULL) {
2368 kref_init(&rdata->refcount);
2369 INIT_LIST_HEAD(&rdata->list);
2370 init_completion(&rdata->done);
2371 INIT_WORK(&rdata->work, complete);
2372 INIT_LIST_HEAD(&rdata->pages);
2378 cifs_readdata_release(struct kref *refcount)
2380 struct cifs_readdata *rdata = container_of(refcount,
2381 struct cifs_readdata, refcount);
2384 cifsFileInfo_put(rdata->cfile);
2390 cifs_read_allocate_pages(struct list_head *list, unsigned int npages)
2393 struct page *page, *tpage;
2396 for (i = 0; i < npages; i++) {
2397 page = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
2402 list_add(&page->lru, list);
2406 list_for_each_entry_safe(page, tpage, list, lru) {
2407 list_del(&page->lru);
2415 cifs_uncached_readdata_release(struct kref *refcount)
2417 struct page *page, *tpage;
2418 struct cifs_readdata *rdata = container_of(refcount,
2419 struct cifs_readdata, refcount);
2421 list_for_each_entry_safe(page, tpage, &rdata->pages, lru) {
2422 list_del(&page->lru);
2425 cifs_readdata_release(refcount);
2429 cifs_retry_async_readv(struct cifs_readdata *rdata)
2434 if (rdata->cfile->invalidHandle) {
2435 rc = cifs_reopen_file(rdata->cfile, true);
2439 rc = cifs_async_readv(rdata);
2440 } while (rc == -EAGAIN);
2446 * cifs_readdata_to_iov - copy data from pages in response to an iovec
2447 * @rdata: the readdata response with list of pages holding data
2448 * @iov: vector in which we should copy the data
2449 * @nr_segs: number of segments in vector
2450 * @offset: offset into file of the first iovec
2451 * @copied: used to return the amount of data copied to the iov
2453 * This function copies data from a list of pages in a readdata response into
2454 * an array of iovecs. It will first calculate where the data should go
2455 * based on the info in the readdata and then copy the data into that spot.
2458 cifs_readdata_to_iov(struct cifs_readdata *rdata, const struct iovec *iov,
2459 unsigned long nr_segs, loff_t offset, ssize_t *copied)
2463 size_t pos = rdata->offset - offset;
2464 struct page *page, *tpage;
2465 ssize_t remaining = rdata->bytes;
2466 unsigned char *pdata;
2468 /* set up iov_iter and advance to the correct offset */
2469 iov_iter_init(&ii, iov, nr_segs, iov_length(iov, nr_segs), 0);
2470 iov_iter_advance(&ii, pos);
2473 list_for_each_entry_safe(page, tpage, &rdata->pages, lru) {
2476 /* copy a whole page or whatever's left */
2477 copy = min_t(ssize_t, remaining, PAGE_SIZE);
2479 /* ...but limit it to whatever space is left in the iov */
2480 copy = min_t(ssize_t, copy, iov_iter_count(&ii));
2482 /* go while there's data to be copied and no errors */
2485 rc = memcpy_toiovecend(ii.iov, pdata, ii.iov_offset,
2491 iov_iter_advance(&ii, copy);
2495 list_del(&page->lru);
2503 cifs_uncached_readv_complete(struct work_struct *work)
2505 struct cifs_readdata *rdata = container_of(work,
2506 struct cifs_readdata, work);
2508 /* if the result is non-zero then the pages weren't kmapped */
2509 if (rdata->result == 0) {
2512 list_for_each_entry(page, &rdata->pages, lru)
2516 complete(&rdata->done);
2517 kref_put(&rdata->refcount, cifs_uncached_readdata_release);
2521 cifs_uncached_read_marshal_iov(struct cifs_readdata *rdata,
2522 unsigned int remaining)
2525 struct page *page, *tpage;
2528 list_for_each_entry_safe(page, tpage, &rdata->pages, lru) {
2529 if (remaining >= PAGE_SIZE) {
2530 /* enough data to fill the page */
2531 rdata->iov[rdata->nr_iov].iov_base = kmap(page);
2532 rdata->iov[rdata->nr_iov].iov_len = PAGE_SIZE;
2533 cFYI(1, "%u: idx=%lu iov_base=%p iov_len=%zu",
2534 rdata->nr_iov, page->index,
2535 rdata->iov[rdata->nr_iov].iov_base,
2536 rdata->iov[rdata->nr_iov].iov_len);
2539 remaining -= PAGE_SIZE;
2540 } else if (remaining > 0) {
2541 /* enough for partial page, fill and zero the rest */
2542 rdata->iov[rdata->nr_iov].iov_base = kmap(page);
2543 rdata->iov[rdata->nr_iov].iov_len = remaining;
2544 cFYI(1, "%u: idx=%lu iov_base=%p iov_len=%zu",
2545 rdata->nr_iov, page->index,
2546 rdata->iov[rdata->nr_iov].iov_base,
2547 rdata->iov[rdata->nr_iov].iov_len);
2548 memset(rdata->iov[rdata->nr_iov].iov_base + remaining,
2549 '\0', PAGE_SIZE - remaining);
2554 /* no need to hold page hostage */
2555 list_del(&page->lru);
2564 cifs_iovec_read(struct file *file, const struct iovec *iov,
2565 unsigned long nr_segs, loff_t *poffset)
2568 size_t len, cur_len;
2569 ssize_t total_read = 0;
2570 loff_t offset = *poffset;
2571 unsigned int npages;
2572 struct cifs_sb_info *cifs_sb;
2573 struct cifs_tcon *tcon;
2574 struct cifsFileInfo *open_file;
2575 struct cifs_readdata *rdata, *tmp;
2576 struct list_head rdata_list;
2582 len = iov_length(iov, nr_segs);
2586 INIT_LIST_HEAD(&rdata_list);
2587 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2588 open_file = file->private_data;
2589 tcon = tlink_tcon(open_file->tlink);
2591 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2592 pid = open_file->pid;
2594 pid = current->tgid;
2596 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
2597 cFYI(1, "attempting read on write only file instance");
2600 cur_len = min_t(const size_t, len - total_read, cifs_sb->rsize);
2601 npages = DIV_ROUND_UP(cur_len, PAGE_SIZE);
2603 /* allocate a readdata struct */
2604 rdata = cifs_readdata_alloc(npages,
2605 cifs_uncached_readv_complete);
2611 rc = cifs_read_allocate_pages(&rdata->pages, npages);
2615 rdata->cfile = cifsFileInfo_get(open_file);
2616 rdata->offset = offset;
2617 rdata->bytes = cur_len;
2619 rdata->marshal_iov = cifs_uncached_read_marshal_iov;
2621 rc = cifs_retry_async_readv(rdata);
2624 kref_put(&rdata->refcount,
2625 cifs_uncached_readdata_release);
2629 list_add_tail(&rdata->list, &rdata_list);
2634 /* if at least one read request send succeeded, then reset rc */
2635 if (!list_empty(&rdata_list))
2638 /* the loop below should proceed in the order of increasing offsets */
2640 list_for_each_entry_safe(rdata, tmp, &rdata_list, list) {
2644 /* FIXME: freezable sleep too? */
2645 rc = wait_for_completion_killable(&rdata->done);
2648 else if (rdata->result)
2651 rc = cifs_readdata_to_iov(rdata, iov,
2654 total_read += copied;
2657 /* resend call if it's a retryable error */
2658 if (rc == -EAGAIN) {
2659 rc = cifs_retry_async_readv(rdata);
2663 list_del_init(&rdata->list);
2664 kref_put(&rdata->refcount, cifs_uncached_readdata_release);
2667 cifs_stats_bytes_read(tcon, total_read);
2668 *poffset += total_read;
2670 return total_read ? total_read : rc;
2673 ssize_t cifs_user_readv(struct kiocb *iocb, const struct iovec *iov,
2674 unsigned long nr_segs, loff_t pos)
2678 read = cifs_iovec_read(iocb->ki_filp, iov, nr_segs, &pos);
2685 ssize_t cifs_strict_readv(struct kiocb *iocb, const struct iovec *iov,
2686 unsigned long nr_segs, loff_t pos)
2688 struct inode *inode;
2690 inode = iocb->ki_filp->f_path.dentry->d_inode;
2692 if (CIFS_I(inode)->clientCanCacheRead)
2693 return generic_file_aio_read(iocb, iov, nr_segs, pos);
2696 * In strict cache mode we need to read from the server all the time
2697 * if we don't have level II oplock because the server can delay mtime
2698 * change - so we can't make a decision about inode invalidating.
2699 * And we can also fail with pagereading if there are mandatory locks
2700 * on pages affected by this read but not on the region from pos to
2704 return cifs_user_readv(iocb, iov, nr_segs, pos);
2707 static ssize_t cifs_read(struct file *file, char *read_data, size_t read_size,
2711 unsigned int bytes_read = 0;
2712 unsigned int total_read;
2713 unsigned int current_read_size;
2715 struct cifs_sb_info *cifs_sb;
2716 struct cifs_tcon *pTcon;
2718 char *current_offset;
2719 struct cifsFileInfo *open_file;
2720 struct cifs_io_parms io_parms;
2721 int buf_type = CIFS_NO_BUFFER;
2725 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2727 /* FIXME: set up handlers for larger reads and/or convert to async */
2728 rsize = min_t(unsigned int, cifs_sb->rsize, CIFSMaxBufSize);
2730 if (file->private_data == NULL) {
2735 open_file = file->private_data;
2736 pTcon = tlink_tcon(open_file->tlink);
2738 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2739 pid = open_file->pid;
2741 pid = current->tgid;
2743 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
2744 cFYI(1, "attempting read on write only file instance");
2746 for (total_read = 0, current_offset = read_data;
2747 read_size > total_read;
2748 total_read += bytes_read, current_offset += bytes_read) {
2749 current_read_size = min_t(uint, read_size - total_read, rsize);
2751 /* For windows me and 9x we do not want to request more
2752 than it negotiated since it will refuse the read then */
2754 !(pTcon->ses->capabilities & CAP_LARGE_FILES)) {
2755 current_read_size = min_t(uint, current_read_size,
2759 while (rc == -EAGAIN) {
2760 if (open_file->invalidHandle) {
2761 rc = cifs_reopen_file(open_file, true);
2765 io_parms.netfid = open_file->netfid;
2767 io_parms.tcon = pTcon;
2768 io_parms.offset = *poffset;
2769 io_parms.length = current_read_size;
2770 rc = CIFSSMBRead(xid, &io_parms, &bytes_read,
2771 ¤t_offset, &buf_type);
2773 if (rc || (bytes_read == 0)) {
2781 cifs_stats_bytes_read(pTcon, total_read);
2782 *poffset += bytes_read;
2790 * If the page is mmap'ed into a process' page tables, then we need to make
2791 * sure that it doesn't change while being written back.
2794 cifs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
2796 struct page *page = vmf->page;
2799 return VM_FAULT_LOCKED;
2802 static struct vm_operations_struct cifs_file_vm_ops = {
2803 .fault = filemap_fault,
2804 .page_mkwrite = cifs_page_mkwrite,
2807 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
2810 struct inode *inode = file->f_path.dentry->d_inode;
2814 if (!CIFS_I(inode)->clientCanCacheRead) {
2815 rc = cifs_invalidate_mapping(inode);
2820 rc = generic_file_mmap(file, vma);
2822 vma->vm_ops = &cifs_file_vm_ops;
2827 int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
2832 rc = cifs_revalidate_file(file);
2834 cFYI(1, "Validation prior to mmap failed, error=%d", rc);
2838 rc = generic_file_mmap(file, vma);
2840 vma->vm_ops = &cifs_file_vm_ops;
2846 cifs_readv_complete(struct work_struct *work)
2848 struct cifs_readdata *rdata = container_of(work,
2849 struct cifs_readdata, work);
2850 struct page *page, *tpage;
2852 list_for_each_entry_safe(page, tpage, &rdata->pages, lru) {
2853 list_del(&page->lru);
2854 lru_cache_add_file(page);
2856 if (rdata->result == 0) {
2858 flush_dcache_page(page);
2859 SetPageUptodate(page);
2864 if (rdata->result == 0)
2865 cifs_readpage_to_fscache(rdata->mapping->host, page);
2867 page_cache_release(page);
2869 kref_put(&rdata->refcount, cifs_readdata_release);
2873 cifs_readpages_marshal_iov(struct cifs_readdata *rdata, unsigned int remaining)
2876 struct page *page, *tpage;
2880 /* determine the eof that the server (probably) has */
2881 eof = CIFS_I(rdata->mapping->host)->server_eof;
2882 eof_index = eof ? (eof - 1) >> PAGE_CACHE_SHIFT : 0;
2883 cFYI(1, "eof=%llu eof_index=%lu", eof, eof_index);
2886 list_for_each_entry_safe(page, tpage, &rdata->pages, lru) {
2887 if (remaining >= PAGE_CACHE_SIZE) {
2888 /* enough data to fill the page */
2889 rdata->iov[rdata->nr_iov].iov_base = kmap(page);
2890 rdata->iov[rdata->nr_iov].iov_len = PAGE_CACHE_SIZE;
2891 cFYI(1, "%u: idx=%lu iov_base=%p iov_len=%zu",
2892 rdata->nr_iov, page->index,
2893 rdata->iov[rdata->nr_iov].iov_base,
2894 rdata->iov[rdata->nr_iov].iov_len);
2896 len += PAGE_CACHE_SIZE;
2897 remaining -= PAGE_CACHE_SIZE;
2898 } else if (remaining > 0) {
2899 /* enough for partial page, fill and zero the rest */
2900 rdata->iov[rdata->nr_iov].iov_base = kmap(page);
2901 rdata->iov[rdata->nr_iov].iov_len = remaining;
2902 cFYI(1, "%u: idx=%lu iov_base=%p iov_len=%zu",
2903 rdata->nr_iov, page->index,
2904 rdata->iov[rdata->nr_iov].iov_base,
2905 rdata->iov[rdata->nr_iov].iov_len);
2906 memset(rdata->iov[rdata->nr_iov].iov_base + remaining,
2907 '\0', PAGE_CACHE_SIZE - remaining);
2911 } else if (page->index > eof_index) {
2913 * The VFS will not try to do readahead past the
2914 * i_size, but it's possible that we have outstanding
2915 * writes with gaps in the middle and the i_size hasn't
2916 * caught up yet. Populate those with zeroed out pages
2917 * to prevent the VFS from repeatedly attempting to
2918 * fill them until the writes are flushed.
2920 zero_user(page, 0, PAGE_CACHE_SIZE);
2921 list_del(&page->lru);
2922 lru_cache_add_file(page);
2923 flush_dcache_page(page);
2924 SetPageUptodate(page);
2926 page_cache_release(page);
2928 /* no need to hold page hostage */
2929 list_del(&page->lru);
2930 lru_cache_add_file(page);
2932 page_cache_release(page);
2939 static int cifs_readpages(struct file *file, struct address_space *mapping,
2940 struct list_head *page_list, unsigned num_pages)
2943 struct list_head tmplist;
2944 struct cifsFileInfo *open_file = file->private_data;
2945 struct cifs_sb_info *cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2946 unsigned int rsize = cifs_sb->rsize;
2950 * Give up immediately if rsize is too small to read an entire page.
2951 * The VFS will fall back to readpage. We should never reach this
2952 * point however since we set ra_pages to 0 when the rsize is smaller
2953 * than a cache page.
2955 if (unlikely(rsize < PAGE_CACHE_SIZE))
2959 * Reads as many pages as possible from fscache. Returns -ENOBUFS
2960 * immediately if the cookie is negative
2962 rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,
2967 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2968 pid = open_file->pid;
2970 pid = current->tgid;
2973 INIT_LIST_HEAD(&tmplist);
2975 cFYI(1, "%s: file=%p mapping=%p num_pages=%u", __func__, file,
2976 mapping, num_pages);
2979 * Start with the page at end of list and move it to private
2980 * list. Do the same with any following pages until we hit
2981 * the rsize limit, hit an index discontinuity, or run out of
2982 * pages. Issue the async read and then start the loop again
2983 * until the list is empty.
2985 * Note that list order is important. The page_list is in
2986 * the order of declining indexes. When we put the pages in
2987 * the rdata->pages, then we want them in increasing order.
2989 while (!list_empty(page_list)) {
2990 unsigned int bytes = PAGE_CACHE_SIZE;
2991 unsigned int expected_index;
2992 unsigned int nr_pages = 1;
2994 struct page *page, *tpage;
2995 struct cifs_readdata *rdata;
2997 page = list_entry(page_list->prev, struct page, lru);
3000 * Lock the page and put it in the cache. Since no one else
3001 * should have access to this page, we're safe to simply set
3002 * PG_locked without checking it first.
3004 __set_page_locked(page);
3005 rc = add_to_page_cache_locked(page, mapping,
3006 page->index, GFP_KERNEL);
3008 /* give up if we can't stick it in the cache */
3010 __clear_page_locked(page);
3014 /* move first page to the tmplist */
3015 offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
3016 list_move_tail(&page->lru, &tmplist);
3018 /* now try and add more pages onto the request */
3019 expected_index = page->index + 1;
3020 list_for_each_entry_safe_reverse(page, tpage, page_list, lru) {
3021 /* discontinuity ? */
3022 if (page->index != expected_index)
3025 /* would this page push the read over the rsize? */
3026 if (bytes + PAGE_CACHE_SIZE > rsize)
3029 __set_page_locked(page);
3030 if (add_to_page_cache_locked(page, mapping,
3031 page->index, GFP_KERNEL)) {
3032 __clear_page_locked(page);
3035 list_move_tail(&page->lru, &tmplist);
3036 bytes += PAGE_CACHE_SIZE;
3041 rdata = cifs_readdata_alloc(nr_pages, cifs_readv_complete);
3043 /* best to give up if we're out of mem */
3044 list_for_each_entry_safe(page, tpage, &tmplist, lru) {
3045 list_del(&page->lru);
3046 lru_cache_add_file(page);
3048 page_cache_release(page);
3054 spin_lock(&cifs_file_list_lock);
3055 spin_unlock(&cifs_file_list_lock);
3056 rdata->cfile = cifsFileInfo_get(open_file);
3057 rdata->mapping = mapping;
3058 rdata->offset = offset;
3059 rdata->bytes = bytes;
3061 rdata->marshal_iov = cifs_readpages_marshal_iov;
3062 list_splice_init(&tmplist, &rdata->pages);
3064 rc = cifs_retry_async_readv(rdata);
3066 list_for_each_entry_safe(page, tpage, &rdata->pages,
3068 list_del(&page->lru);
3069 lru_cache_add_file(page);
3071 page_cache_release(page);
3073 kref_put(&rdata->refcount, cifs_readdata_release);
3077 kref_put(&rdata->refcount, cifs_readdata_release);
3083 static int cifs_readpage_worker(struct file *file, struct page *page,
3089 /* Is the page cached? */
3090 rc = cifs_readpage_from_fscache(file->f_path.dentry->d_inode, page);
3094 page_cache_get(page);
3095 read_data = kmap(page);
3096 /* for reads over a certain size could initiate async read ahead */
3098 rc = cifs_read(file, read_data, PAGE_CACHE_SIZE, poffset);
3103 cFYI(1, "Bytes read %d", rc);
3105 file->f_path.dentry->d_inode->i_atime =
3106 current_fs_time(file->f_path.dentry->d_inode->i_sb);
3108 if (PAGE_CACHE_SIZE > rc)
3109 memset(read_data + rc, 0, PAGE_CACHE_SIZE - rc);
3111 flush_dcache_page(page);
3112 SetPageUptodate(page);
3114 /* send this page to the cache */
3115 cifs_readpage_to_fscache(file->f_path.dentry->d_inode, page);
3121 page_cache_release(page);
3127 static int cifs_readpage(struct file *file, struct page *page)
3129 loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
3135 if (file->private_data == NULL) {
3141 cFYI(1, "readpage %p at offset %d 0x%x\n",
3142 page, (int)offset, (int)offset);
3144 rc = cifs_readpage_worker(file, page, &offset);
3152 static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
3154 struct cifsFileInfo *open_file;
3156 spin_lock(&cifs_file_list_lock);
3157 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
3158 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
3159 spin_unlock(&cifs_file_list_lock);
3163 spin_unlock(&cifs_file_list_lock);
3167 /* We do not want to update the file size from server for inodes
3168 open for write - to avoid races with writepage extending
3169 the file - in the future we could consider allowing
3170 refreshing the inode only on increases in the file size
3171 but this is tricky to do without racing with writebehind
3172 page caching in the current Linux kernel design */
3173 bool is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file)
3178 if (is_inode_writable(cifsInode)) {
3179 /* This inode is open for write at least once */
3180 struct cifs_sb_info *cifs_sb;
3182 cifs_sb = CIFS_SB(cifsInode->vfs_inode.i_sb);
3183 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO) {
3184 /* since no page cache to corrupt on directio
3185 we can change size safely */
3189 if (i_size_read(&cifsInode->vfs_inode) < end_of_file)
3197 static int cifs_write_begin(struct file *file, struct address_space *mapping,
3198 loff_t pos, unsigned len, unsigned flags,
3199 struct page **pagep, void **fsdata)
3201 pgoff_t index = pos >> PAGE_CACHE_SHIFT;
3202 loff_t offset = pos & (PAGE_CACHE_SIZE - 1);
3203 loff_t page_start = pos & PAGE_MASK;
3208 cFYI(1, "write_begin from %lld len %d", (long long)pos, len);
3210 page = grab_cache_page_write_begin(mapping, index, flags);
3216 if (PageUptodate(page))
3220 * If we write a full page it will be up to date, no need to read from
3221 * the server. If the write is short, we'll end up doing a sync write
3224 if (len == PAGE_CACHE_SIZE)
3228 * optimize away the read when we have an oplock, and we're not
3229 * expecting to use any of the data we'd be reading in. That
3230 * is, when the page lies beyond the EOF, or straddles the EOF
3231 * and the write will cover all of the existing data.
3233 if (CIFS_I(mapping->host)->clientCanCacheRead) {
3234 i_size = i_size_read(mapping->host);
3235 if (page_start >= i_size ||
3236 (offset == 0 && (pos + len) >= i_size)) {
3237 zero_user_segments(page, 0, offset,
3241 * PageChecked means that the parts of the page
3242 * to which we're not writing are considered up
3243 * to date. Once the data is copied to the
3244 * page, it can be set uptodate.
3246 SetPageChecked(page);
3251 if ((file->f_flags & O_ACCMODE) != O_WRONLY) {
3253 * might as well read a page, it is fast enough. If we get
3254 * an error, we don't need to return it. cifs_write_end will
3255 * do a sync write instead since PG_uptodate isn't set.
3257 cifs_readpage_worker(file, page, &page_start);
3259 /* we could try using another file handle if there is one -
3260 but how would we lock it to prevent close of that handle
3261 racing with this read? In any case
3262 this will be written out by write_end so is fine */
3269 static int cifs_release_page(struct page *page, gfp_t gfp)
3271 if (PagePrivate(page))
3274 return cifs_fscache_release_page(page, gfp);
3277 static void cifs_invalidate_page(struct page *page, unsigned long offset)
3279 struct cifsInodeInfo *cifsi = CIFS_I(page->mapping->host);
3282 cifs_fscache_invalidate_page(page, &cifsi->vfs_inode);
3285 static int cifs_launder_page(struct page *page)
3288 loff_t range_start = page_offset(page);
3289 loff_t range_end = range_start + (loff_t)(PAGE_CACHE_SIZE - 1);
3290 struct writeback_control wbc = {
3291 .sync_mode = WB_SYNC_ALL,
3293 .range_start = range_start,
3294 .range_end = range_end,
3297 cFYI(1, "Launder page: %p", page);
3299 if (clear_page_dirty_for_io(page))
3300 rc = cifs_writepage_locked(page, &wbc);
3302 cifs_fscache_invalidate_page(page, page->mapping->host);
3306 void cifs_oplock_break(struct work_struct *work)
3308 struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
3310 struct inode *inode = cfile->dentry->d_inode;
3311 struct cifsInodeInfo *cinode = CIFS_I(inode);
3314 if (inode && S_ISREG(inode->i_mode)) {
3315 if (cinode->clientCanCacheRead)
3316 break_lease(inode, O_RDONLY);
3318 break_lease(inode, O_WRONLY);
3319 rc = filemap_fdatawrite(inode->i_mapping);
3320 if (cinode->clientCanCacheRead == 0) {
3321 rc = filemap_fdatawait(inode->i_mapping);
3322 mapping_set_error(inode->i_mapping, rc);
3323 invalidate_remote_inode(inode);
3325 cFYI(1, "Oplock flush inode %p rc %d", inode, rc);
3328 rc = cifs_push_locks(cfile);
3330 cERROR(1, "Push locks rc = %d", rc);
3333 * releasing stale oplock after recent reconnect of smb session using
3334 * a now incorrect file handle is not a data integrity issue but do
3335 * not bother sending an oplock release if session to server still is
3336 * disconnected since oplock already released by the server
3338 if (!cfile->oplock_break_cancelled) {
3339 rc = CIFSSMBLock(0, tlink_tcon(cfile->tlink), cfile->netfid,
3340 current->tgid, 0, 0, 0, 0,
3341 LOCKING_ANDX_OPLOCK_RELEASE, false,
3342 cinode->clientCanCacheRead ? 1 : 0);
3343 cFYI(1, "Oplock release rc = %d", rc);
3347 const struct address_space_operations cifs_addr_ops = {
3348 .readpage = cifs_readpage,
3349 .readpages = cifs_readpages,
3350 .writepage = cifs_writepage,
3351 .writepages = cifs_writepages,
3352 .write_begin = cifs_write_begin,
3353 .write_end = cifs_write_end,
3354 .set_page_dirty = __set_page_dirty_nobuffers,
3355 .releasepage = cifs_release_page,
3356 .invalidatepage = cifs_invalidate_page,
3357 .launder_page = cifs_launder_page,
3361 * cifs_readpages requires the server to support a buffer large enough to
3362 * contain the header plus one complete page of data. Otherwise, we need
3363 * to leave cifs_readpages out of the address space operations.
3365 const struct address_space_operations cifs_addr_ops_smallbuf = {
3366 .readpage = cifs_readpage,
3367 .writepage = cifs_writepage,
3368 .writepages = cifs_writepages,
3369 .write_begin = cifs_write_begin,
3370 .write_end = cifs_write_end,
3371 .set_page_dirty = __set_page_dirty_nobuffers,
3372 .releasepage = cifs_release_page,
3373 .invalidatepage = cifs_invalidate_page,
3374 .launder_page = cifs_launder_page,