4 * vfs operations that deal with files
6 * Copyright (C) International Business Machines Corp., 2002,2010
10 * This library is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU Lesser General Public License as published
12 * by the Free Software Foundation; either version 2.1 of the License, or
13 * (at your option) any later version.
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
18 * the GNU Lesser General Public License for more details.
20 * You should have received a copy of the GNU Lesser General Public License
21 * along with this library; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include <linux/backing-dev.h>
26 #include <linux/stat.h>
27 #include <linux/fcntl.h>
28 #include <linux/pagemap.h>
29 #include <linux/pagevec.h>
30 #include <linux/writeback.h>
31 #include <linux/task_io_accounting_ops.h>
32 #include <linux/delay.h>
33 #include <linux/mount.h>
34 #include <linux/slab.h>
35 #include <linux/swap.h>
36 #include <asm/div64.h>
40 #include "cifsproto.h"
41 #include "cifs_unicode.h"
42 #include "cifs_debug.h"
43 #include "cifs_fs_sb.h"
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);
268 spin_lock(&cifs_file_list_lock);
269 list_add(&pCifsFile->tlist, &(tlink_tcon(tlink)->openFileList));
270 /* if readable file instance put first in list*/
271 if (file->f_mode & FMODE_READ)
272 list_add(&pCifsFile->flist, &pCifsInode->openFileList);
274 list_add_tail(&pCifsFile->flist, &pCifsInode->openFileList);
275 spin_unlock(&cifs_file_list_lock);
277 cifs_set_oplock_level(pCifsInode, oplock);
278 pCifsInode->can_cache_brlcks = pCifsInode->clientCanCacheAll;
280 file->private_data = pCifsFile;
284 static void cifs_del_lock_waiters(struct cifsLockInfo *lock);
287 * Release a reference on the file private data. This may involve closing
288 * the filehandle out on the server. Must be called without holding
289 * cifs_file_list_lock.
291 void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
293 struct inode *inode = cifs_file->dentry->d_inode;
294 struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
295 struct cifsInodeInfo *cifsi = CIFS_I(inode);
296 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
297 struct cifsLockInfo *li, *tmp;
299 spin_lock(&cifs_file_list_lock);
300 if (--cifs_file->count > 0) {
301 spin_unlock(&cifs_file_list_lock);
305 /* remove it from the lists */
306 list_del(&cifs_file->flist);
307 list_del(&cifs_file->tlist);
309 if (list_empty(&cifsi->openFileList)) {
310 cFYI(1, "closing last open instance for inode %p",
311 cifs_file->dentry->d_inode);
313 /* in strict cache mode we need invalidate mapping on the last
314 close because it may cause a error when we open this file
315 again and get at least level II oplock */
316 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO)
317 CIFS_I(inode)->invalid_mapping = true;
319 cifs_set_oplock_level(cifsi, 0);
321 spin_unlock(&cifs_file_list_lock);
323 cancel_work_sync(&cifs_file->oplock_break);
325 if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
329 rc = CIFSSMBClose(xid, tcon, cifs_file->netfid);
333 /* Delete any outstanding lock records. We'll lose them when the file
336 mutex_lock(&cifsi->lock_mutex);
337 list_for_each_entry_safe(li, tmp, &cifsi->llist, llist) {
338 if (li->netfid != cifs_file->netfid)
340 list_del(&li->llist);
341 cifs_del_lock_waiters(li);
344 mutex_unlock(&cifsi->lock_mutex);
346 cifs_put_tlink(cifs_file->tlink);
347 dput(cifs_file->dentry);
351 int cifs_open(struct inode *inode, struct file *file)
356 struct cifs_sb_info *cifs_sb;
357 struct cifs_tcon *tcon;
358 struct tcon_link *tlink;
359 struct cifsFileInfo *pCifsFile = NULL;
360 char *full_path = NULL;
361 bool posix_open_ok = false;
366 cifs_sb = CIFS_SB(inode->i_sb);
367 tlink = cifs_sb_tlink(cifs_sb);
370 return PTR_ERR(tlink);
372 tcon = tlink_tcon(tlink);
374 full_path = build_path_from_dentry(file->f_path.dentry);
375 if (full_path == NULL) {
380 cFYI(1, "inode = 0x%p file flags are 0x%x for %s",
381 inode, file->f_flags, full_path);
383 if (tcon->ses->server->oplocks)
388 if (!tcon->broken_posix_open && tcon->unix_ext &&
389 (tcon->ses->capabilities & CAP_UNIX) &&
390 (CIFS_UNIX_POSIX_PATH_OPS_CAP &
391 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
392 /* can not refresh inode info since size could be stale */
393 rc = cifs_posix_open(full_path, &inode, inode->i_sb,
394 cifs_sb->mnt_file_mode /* ignored */,
395 file->f_flags, &oplock, &netfid, xid);
397 cFYI(1, "posix open succeeded");
398 posix_open_ok = true;
399 } else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) {
400 if (tcon->ses->serverNOS)
401 cERROR(1, "server %s of type %s returned"
402 " unexpected error on SMB posix open"
403 ", disabling posix open support."
404 " Check if server update available.",
405 tcon->ses->serverName,
406 tcon->ses->serverNOS);
407 tcon->broken_posix_open = true;
408 } else if ((rc != -EIO) && (rc != -EREMOTE) &&
409 (rc != -EOPNOTSUPP)) /* path not found or net err */
411 /* else fallthrough to retry open the old way on network i/o
415 if (!posix_open_ok) {
416 rc = cifs_nt_open(full_path, inode, cifs_sb, tcon,
417 file->f_flags, &oplock, &netfid, xid);
422 pCifsFile = cifs_new_fileinfo(netfid, file, tlink, oplock);
423 if (pCifsFile == NULL) {
424 CIFSSMBClose(xid, tcon, netfid);
429 cifs_fscache_set_inode_cookie(inode, file);
431 if ((oplock & CIFS_CREATE_ACTION) && !posix_open_ok && tcon->unix_ext) {
432 /* time to set mode which we can not set earlier due to
433 problems creating new read-only files */
434 struct cifs_unix_set_info_args args = {
435 .mode = inode->i_mode,
438 .ctime = NO_CHANGE_64,
439 .atime = NO_CHANGE_64,
440 .mtime = NO_CHANGE_64,
443 CIFSSMBUnixSetFileInfo(xid, tcon, &args, netfid,
450 cifs_put_tlink(tlink);
454 /* Try to reacquire byte range locks that were released when session */
455 /* to server was lost */
456 static int cifs_relock_file(struct cifsFileInfo *cifsFile)
460 /* BB list all locks open on this file and relock */
465 static int cifs_reopen_file(struct cifsFileInfo *pCifsFile, bool can_flush)
470 struct cifs_sb_info *cifs_sb;
471 struct cifs_tcon *tcon;
472 struct cifsInodeInfo *pCifsInode;
474 char *full_path = NULL;
476 int disposition = FILE_OPEN;
477 int create_options = CREATE_NOT_DIR;
481 mutex_lock(&pCifsFile->fh_mutex);
482 if (!pCifsFile->invalidHandle) {
483 mutex_unlock(&pCifsFile->fh_mutex);
489 inode = pCifsFile->dentry->d_inode;
490 cifs_sb = CIFS_SB(inode->i_sb);
491 tcon = tlink_tcon(pCifsFile->tlink);
493 /* can not grab rename sem here because various ops, including
494 those that already have the rename sem can end up causing writepage
495 to get called and if the server was down that means we end up here,
496 and we can never tell if the caller already has the rename_sem */
497 full_path = build_path_from_dentry(pCifsFile->dentry);
498 if (full_path == NULL) {
500 mutex_unlock(&pCifsFile->fh_mutex);
505 cFYI(1, "inode = 0x%p file flags 0x%x for %s",
506 inode, pCifsFile->f_flags, full_path);
508 if (tcon->ses->server->oplocks)
513 if (tcon->unix_ext && (tcon->ses->capabilities & CAP_UNIX) &&
514 (CIFS_UNIX_POSIX_PATH_OPS_CAP &
515 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
518 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the
519 * original open. Must mask them off for a reopen.
521 unsigned int oflags = pCifsFile->f_flags &
522 ~(O_CREAT | O_EXCL | O_TRUNC);
524 rc = cifs_posix_open(full_path, NULL, inode->i_sb,
525 cifs_sb->mnt_file_mode /* ignored */,
526 oflags, &oplock, &netfid, xid);
528 cFYI(1, "posix reopen succeeded");
531 /* fallthrough to retry open the old way on errors, especially
532 in the reconnect path it is important to retry hard */
535 desiredAccess = cifs_convert_flags(pCifsFile->f_flags);
537 if (backup_cred(cifs_sb))
538 create_options |= CREATE_OPEN_BACKUP_INTENT;
540 /* Can not refresh inode by passing in file_info buf to be returned
541 by SMBOpen and then calling get_inode_info with returned buf
542 since file might have write behind data that needs to be flushed
543 and server version of file size can be stale. If we knew for sure
544 that inode was not dirty locally we could do this */
546 rc = CIFSSMBOpen(xid, tcon, full_path, disposition, desiredAccess,
547 create_options, &netfid, &oplock, NULL,
548 cifs_sb->local_nls, cifs_sb->mnt_cifs_flags &
549 CIFS_MOUNT_MAP_SPECIAL_CHR);
551 mutex_unlock(&pCifsFile->fh_mutex);
552 cFYI(1, "cifs_open returned 0x%x", rc);
553 cFYI(1, "oplock: %d", oplock);
554 goto reopen_error_exit;
558 pCifsFile->netfid = netfid;
559 pCifsFile->invalidHandle = false;
560 mutex_unlock(&pCifsFile->fh_mutex);
561 pCifsInode = CIFS_I(inode);
564 rc = filemap_write_and_wait(inode->i_mapping);
565 mapping_set_error(inode->i_mapping, rc);
568 rc = cifs_get_inode_info_unix(&inode,
569 full_path, inode->i_sb, xid);
571 rc = cifs_get_inode_info(&inode,
572 full_path, NULL, inode->i_sb,
574 } /* else we are writing out data to server already
575 and could deadlock if we tried to flush data, and
576 since we do not know if we have data that would
577 invalidate the current end of file on the server
578 we can not go to the server to get the new inod
581 cifs_set_oplock_level(pCifsInode, oplock);
583 cifs_relock_file(pCifsFile);
591 int cifs_close(struct inode *inode, struct file *file)
593 if (file->private_data != NULL) {
594 cifsFileInfo_put(file->private_data);
595 file->private_data = NULL;
598 /* return code from the ->release op is always ignored */
602 int cifs_closedir(struct inode *inode, struct file *file)
606 struct cifsFileInfo *pCFileStruct = file->private_data;
609 cFYI(1, "Closedir inode = 0x%p", inode);
614 struct cifs_tcon *pTcon = tlink_tcon(pCFileStruct->tlink);
616 cFYI(1, "Freeing private data in close dir");
617 spin_lock(&cifs_file_list_lock);
618 if (!pCFileStruct->srch_inf.endOfSearch &&
619 !pCFileStruct->invalidHandle) {
620 pCFileStruct->invalidHandle = true;
621 spin_unlock(&cifs_file_list_lock);
622 rc = CIFSFindClose(xid, pTcon, pCFileStruct->netfid);
623 cFYI(1, "Closing uncompleted readdir with rc %d",
625 /* not much we can do if it fails anyway, ignore rc */
628 spin_unlock(&cifs_file_list_lock);
629 ptmp = pCFileStruct->srch_inf.ntwrk_buf_start;
631 cFYI(1, "closedir free smb buf in srch struct");
632 pCFileStruct->srch_inf.ntwrk_buf_start = NULL;
633 if (pCFileStruct->srch_inf.smallBuf)
634 cifs_small_buf_release(ptmp);
636 cifs_buf_release(ptmp);
638 cifs_put_tlink(pCFileStruct->tlink);
639 kfree(file->private_data);
640 file->private_data = NULL;
642 /* BB can we lock the filestruct while this is going on? */
647 static struct cifsLockInfo *
648 cifs_lock_init(__u64 offset, __u64 length, __u8 type, __u16 netfid)
650 struct cifsLockInfo *lock =
651 kmalloc(sizeof(struct cifsLockInfo), GFP_KERNEL);
654 lock->offset = offset;
655 lock->length = length;
657 lock->netfid = netfid;
658 lock->pid = current->tgid;
659 INIT_LIST_HEAD(&lock->blist);
660 init_waitqueue_head(&lock->block_q);
665 cifs_del_lock_waiters(struct cifsLockInfo *lock)
667 struct cifsLockInfo *li, *tmp;
668 list_for_each_entry_safe(li, tmp, &lock->blist, blist) {
669 list_del_init(&li->blist);
670 wake_up(&li->block_q);
675 __cifs_find_lock_conflict(struct cifsInodeInfo *cinode, __u64 offset,
676 __u64 length, __u8 type, __u16 netfid,
677 struct cifsLockInfo **conf_lock)
679 struct cifsLockInfo *li, *tmp;
681 list_for_each_entry_safe(li, tmp, &cinode->llist, llist) {
682 if (offset + length <= li->offset ||
683 offset >= li->offset + li->length)
685 else if ((type & LOCKING_ANDX_SHARED_LOCK) &&
686 ((netfid == li->netfid && current->tgid == li->pid) ||
698 cifs_find_lock_conflict(struct cifsInodeInfo *cinode, struct cifsLockInfo *lock,
699 struct cifsLockInfo **conf_lock)
701 return __cifs_find_lock_conflict(cinode, lock->offset, lock->length,
702 lock->type, lock->netfid, conf_lock);
706 * Check if there is another lock that prevents us to set the lock (mandatory
707 * style). If such a lock exists, update the flock structure with its
708 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
709 * or leave it the same if we can't. Returns 0 if we don't need to request to
710 * the server or 1 otherwise.
713 cifs_lock_test(struct cifsInodeInfo *cinode, __u64 offset, __u64 length,
714 __u8 type, __u16 netfid, struct file_lock *flock)
717 struct cifsLockInfo *conf_lock;
720 mutex_lock(&cinode->lock_mutex);
722 exist = __cifs_find_lock_conflict(cinode, offset, length, type, netfid,
725 flock->fl_start = conf_lock->offset;
726 flock->fl_end = conf_lock->offset + conf_lock->length - 1;
727 flock->fl_pid = conf_lock->pid;
728 if (conf_lock->type & LOCKING_ANDX_SHARED_LOCK)
729 flock->fl_type = F_RDLCK;
731 flock->fl_type = F_WRLCK;
732 } else if (!cinode->can_cache_brlcks)
735 flock->fl_type = F_UNLCK;
737 mutex_unlock(&cinode->lock_mutex);
742 cifs_lock_add(struct cifsInodeInfo *cinode, struct cifsLockInfo *lock)
744 mutex_lock(&cinode->lock_mutex);
745 list_add_tail(&lock->llist, &cinode->llist);
746 mutex_unlock(&cinode->lock_mutex);
750 * Set the byte-range lock (mandatory style). Returns:
751 * 1) 0, if we set the lock and don't need to request to the server;
752 * 2) 1, if no locks prevent us but we need to request to the server;
753 * 3) -EACCESS, if there is a lock that prevents us and wait is false.
756 cifs_lock_add_if(struct cifsInodeInfo *cinode, struct cifsLockInfo *lock,
759 struct cifsLockInfo *conf_lock;
765 mutex_lock(&cinode->lock_mutex);
767 exist = cifs_find_lock_conflict(cinode, lock, &conf_lock);
768 if (!exist && cinode->can_cache_brlcks) {
769 list_add_tail(&lock->llist, &cinode->llist);
770 mutex_unlock(&cinode->lock_mutex);
779 list_add_tail(&lock->blist, &conf_lock->blist);
780 mutex_unlock(&cinode->lock_mutex);
781 rc = wait_event_interruptible(lock->block_q,
782 (lock->blist.prev == &lock->blist) &&
783 (lock->blist.next == &lock->blist));
786 mutex_lock(&cinode->lock_mutex);
787 list_del_init(&lock->blist);
790 mutex_unlock(&cinode->lock_mutex);
795 * Check if there is another lock that prevents us to set the lock (posix
796 * style). If such a lock exists, update the flock structure with its
797 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
798 * or leave it the same if we can't. Returns 0 if we don't need to request to
799 * the server or 1 otherwise.
802 cifs_posix_lock_test(struct file *file, struct file_lock *flock)
805 struct cifsInodeInfo *cinode = CIFS_I(file->f_path.dentry->d_inode);
806 unsigned char saved_type = flock->fl_type;
808 if ((flock->fl_flags & FL_POSIX) == 0)
811 mutex_lock(&cinode->lock_mutex);
812 posix_test_lock(file, flock);
814 if (flock->fl_type == F_UNLCK && !cinode->can_cache_brlcks) {
815 flock->fl_type = saved_type;
819 mutex_unlock(&cinode->lock_mutex);
824 * Set the byte-range lock (posix style). Returns:
825 * 1) 0, if we set the lock and don't need to request to the server;
826 * 2) 1, if we need to request to the server;
827 * 3) <0, if the error occurs while setting the lock.
830 cifs_posix_lock_set(struct file *file, struct file_lock *flock)
832 struct cifsInodeInfo *cinode = CIFS_I(file->f_path.dentry->d_inode);
835 if ((flock->fl_flags & FL_POSIX) == 0)
839 mutex_lock(&cinode->lock_mutex);
840 if (!cinode->can_cache_brlcks) {
841 mutex_unlock(&cinode->lock_mutex);
845 rc = posix_lock_file(file, flock, NULL);
846 mutex_unlock(&cinode->lock_mutex);
847 if (rc == FILE_LOCK_DEFERRED) {
848 rc = wait_event_interruptible(flock->fl_wait, !flock->fl_next);
851 locks_delete_block(flock);
857 cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
859 int xid, rc = 0, stored_rc;
860 struct cifsLockInfo *li, *tmp;
861 struct cifs_tcon *tcon;
862 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
863 unsigned int num, max_num;
864 LOCKING_ANDX_RANGE *buf, *cur;
865 int types[] = {LOCKING_ANDX_LARGE_FILES,
866 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES};
870 tcon = tlink_tcon(cfile->tlink);
872 mutex_lock(&cinode->lock_mutex);
873 if (!cinode->can_cache_brlcks) {
874 mutex_unlock(&cinode->lock_mutex);
879 max_num = (tcon->ses->server->maxBuf - sizeof(struct smb_hdr)) /
880 sizeof(LOCKING_ANDX_RANGE);
881 buf = kzalloc(max_num * sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
883 mutex_unlock(&cinode->lock_mutex);
888 for (i = 0; i < 2; i++) {
891 list_for_each_entry_safe(li, tmp, &cinode->llist, llist) {
892 if (li->type != types[i])
894 cur->Pid = cpu_to_le16(li->pid);
895 cur->LengthLow = cpu_to_le32((u32)li->length);
896 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
897 cur->OffsetLow = cpu_to_le32((u32)li->offset);
898 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
899 if (++num == max_num) {
900 stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
901 li->type, 0, num, buf);
911 stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
912 types[i], 0, num, buf);
918 cinode->can_cache_brlcks = false;
919 mutex_unlock(&cinode->lock_mutex);
926 /* copied from fs/locks.c with a name change */
927 #define cifs_for_each_lock(inode, lockp) \
928 for (lockp = &inode->i_flock; *lockp != NULL; \
929 lockp = &(*lockp)->fl_next)
931 struct lock_to_push {
932 struct list_head llist;
941 cifs_push_posix_locks(struct cifsFileInfo *cfile)
943 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
944 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
945 struct file_lock *flock, **before;
946 unsigned int count = 0, i = 0;
947 int rc = 0, xid, type;
948 struct list_head locks_to_send, *el;
949 struct lock_to_push *lck, *tmp;
954 mutex_lock(&cinode->lock_mutex);
955 if (!cinode->can_cache_brlcks) {
956 mutex_unlock(&cinode->lock_mutex);
962 cifs_for_each_lock(cfile->dentry->d_inode, before) {
963 if ((*before)->fl_flags & FL_POSIX)
968 INIT_LIST_HEAD(&locks_to_send);
971 * Allocating count locks is enough because no FL_POSIX locks can be
972 * added to the list while we are holding cinode->lock_mutex that
973 * protects locking operations of this inode.
975 for (; i < count; i++) {
976 lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL);
981 list_add_tail(&lck->llist, &locks_to_send);
984 el = locks_to_send.next;
986 cifs_for_each_lock(cfile->dentry->d_inode, before) {
988 if ((flock->fl_flags & FL_POSIX) == 0)
990 if (el == &locks_to_send) {
992 * The list ended. We don't have enough allocated
993 * structures - something is really wrong.
995 cERROR(1, "Can't push all brlocks!");
998 length = 1 + flock->fl_end - flock->fl_start;
999 if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK)
1003 lck = list_entry(el, struct lock_to_push, llist);
1004 lck->pid = flock->fl_pid;
1005 lck->netfid = cfile->netfid;
1006 lck->length = length;
1008 lck->offset = flock->fl_start;
1013 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1014 struct file_lock tmp_lock;
1017 tmp_lock.fl_start = lck->offset;
1018 stored_rc = CIFSSMBPosixLock(xid, tcon, lck->netfid, lck->pid,
1019 0, lck->length, &tmp_lock,
1023 list_del(&lck->llist);
1028 cinode->can_cache_brlcks = false;
1029 mutex_unlock(&cinode->lock_mutex);
1034 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1035 list_del(&lck->llist);
1042 cifs_push_locks(struct cifsFileInfo *cfile)
1044 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1045 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1047 if ((tcon->ses->capabilities & CAP_UNIX) &&
1048 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1049 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1050 return cifs_push_posix_locks(cfile);
1052 return cifs_push_mandatory_locks(cfile);
1056 cifs_read_flock(struct file_lock *flock, __u8 *type, int *lock, int *unlock,
1059 if (flock->fl_flags & FL_POSIX)
1061 if (flock->fl_flags & FL_FLOCK)
1063 if (flock->fl_flags & FL_SLEEP) {
1064 cFYI(1, "Blocking lock");
1067 if (flock->fl_flags & FL_ACCESS)
1068 cFYI(1, "Process suspended by mandatory locking - "
1069 "not implemented yet");
1070 if (flock->fl_flags & FL_LEASE)
1071 cFYI(1, "Lease on file - not implemented yet");
1072 if (flock->fl_flags &
1073 (~(FL_POSIX | FL_FLOCK | FL_SLEEP | FL_ACCESS | FL_LEASE)))
1074 cFYI(1, "Unknown lock flags 0x%x", flock->fl_flags);
1076 *type = LOCKING_ANDX_LARGE_FILES;
1077 if (flock->fl_type == F_WRLCK) {
1078 cFYI(1, "F_WRLCK ");
1080 } else if (flock->fl_type == F_UNLCK) {
1083 /* Check if unlock includes more than one lock range */
1084 } else if (flock->fl_type == F_RDLCK) {
1086 *type |= LOCKING_ANDX_SHARED_LOCK;
1088 } else if (flock->fl_type == F_EXLCK) {
1091 } else if (flock->fl_type == F_SHLCK) {
1093 *type |= LOCKING_ANDX_SHARED_LOCK;
1096 cFYI(1, "Unknown type of lock");
1100 cifs_getlk(struct file *file, struct file_lock *flock, __u8 type,
1101 bool wait_flag, bool posix_lck, int xid)
1104 __u64 length = 1 + flock->fl_end - flock->fl_start;
1105 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1106 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1107 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
1108 __u16 netfid = cfile->netfid;
1111 int posix_lock_type;
1113 rc = cifs_posix_lock_test(file, flock);
1117 if (type & LOCKING_ANDX_SHARED_LOCK)
1118 posix_lock_type = CIFS_RDLCK;
1120 posix_lock_type = CIFS_WRLCK;
1121 rc = CIFSSMBPosixLock(xid, tcon, netfid, current->tgid,
1122 1 /* get */, length, flock,
1123 posix_lock_type, wait_flag);
1127 rc = cifs_lock_test(cinode, flock->fl_start, length, type, netfid,
1132 /* BB we could chain these into one lock request BB */
1133 rc = CIFSSMBLock(xid, tcon, netfid, current->tgid, length,
1134 flock->fl_start, 0, 1, type, 0, 0);
1136 rc = CIFSSMBLock(xid, tcon, netfid, current->tgid,
1137 length, flock->fl_start, 1, 0,
1139 flock->fl_type = F_UNLCK;
1141 cERROR(1, "Error unlocking previously locked "
1142 "range %d during test of lock", rc);
1146 if (type & LOCKING_ANDX_SHARED_LOCK) {
1147 flock->fl_type = F_WRLCK;
1151 rc = CIFSSMBLock(xid, tcon, netfid, current->tgid, length,
1152 flock->fl_start, 0, 1,
1153 type | LOCKING_ANDX_SHARED_LOCK, 0, 0);
1155 rc = CIFSSMBLock(xid, tcon, netfid, current->tgid,
1156 length, flock->fl_start, 1, 0,
1157 type | LOCKING_ANDX_SHARED_LOCK,
1159 flock->fl_type = F_RDLCK;
1161 cERROR(1, "Error unlocking previously locked "
1162 "range %d during test of lock", rc);
1164 flock->fl_type = F_WRLCK;
1170 cifs_move_llist(struct list_head *source, struct list_head *dest)
1172 struct list_head *li, *tmp;
1173 list_for_each_safe(li, tmp, source)
1174 list_move(li, dest);
1178 cifs_free_llist(struct list_head *llist)
1180 struct cifsLockInfo *li, *tmp;
1181 list_for_each_entry_safe(li, tmp, llist, llist) {
1182 cifs_del_lock_waiters(li);
1183 list_del(&li->llist);
1189 cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, int xid)
1191 int rc = 0, stored_rc;
1192 int types[] = {LOCKING_ANDX_LARGE_FILES,
1193 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES};
1195 unsigned int max_num, num;
1196 LOCKING_ANDX_RANGE *buf, *cur;
1197 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1198 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
1199 struct cifsLockInfo *li, *tmp;
1200 __u64 length = 1 + flock->fl_end - flock->fl_start;
1201 struct list_head tmp_llist;
1203 INIT_LIST_HEAD(&tmp_llist);
1205 max_num = (tcon->ses->server->maxBuf - sizeof(struct smb_hdr)) /
1206 sizeof(LOCKING_ANDX_RANGE);
1207 buf = kzalloc(max_num * sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1211 mutex_lock(&cinode->lock_mutex);
1212 for (i = 0; i < 2; i++) {
1215 list_for_each_entry_safe(li, tmp, &cinode->llist, llist) {
1216 if (flock->fl_start > li->offset ||
1217 (flock->fl_start + length) <
1218 (li->offset + li->length))
1220 if (current->tgid != li->pid)
1222 if (cfile->netfid != li->netfid)
1224 if (types[i] != li->type)
1226 if (!cinode->can_cache_brlcks) {
1227 cur->Pid = cpu_to_le16(li->pid);
1228 cur->LengthLow = cpu_to_le32((u32)li->length);
1230 cpu_to_le32((u32)(li->length>>32));
1231 cur->OffsetLow = cpu_to_le32((u32)li->offset);
1233 cpu_to_le32((u32)(li->offset>>32));
1235 * We need to save a lock here to let us add
1236 * it again to the inode list if the unlock
1237 * range request fails on the server.
1239 list_move(&li->llist, &tmp_llist);
1240 if (++num == max_num) {
1241 stored_rc = cifs_lockv(xid, tcon,
1247 * We failed on the unlock range
1248 * request - add all locks from
1249 * the tmp list to the head of
1252 cifs_move_llist(&tmp_llist,
1257 * The unlock range request
1258 * succeed - free the tmp list.
1260 cifs_free_llist(&tmp_llist);
1267 * We can cache brlock requests - simply remove
1268 * a lock from the inode list.
1270 list_del(&li->llist);
1271 cifs_del_lock_waiters(li);
1276 stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
1277 types[i], num, 0, buf);
1279 cifs_move_llist(&tmp_llist, &cinode->llist);
1282 cifs_free_llist(&tmp_llist);
1286 mutex_unlock(&cinode->lock_mutex);
1292 cifs_setlk(struct file *file, struct file_lock *flock, __u8 type,
1293 bool wait_flag, bool posix_lck, int lock, int unlock, int xid)
1296 __u64 length = 1 + flock->fl_end - flock->fl_start;
1297 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1298 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1299 struct cifsInodeInfo *cinode = CIFS_I(file->f_path.dentry->d_inode);
1300 __u16 netfid = cfile->netfid;
1303 int posix_lock_type;
1305 rc = cifs_posix_lock_set(file, flock);
1309 if (type & LOCKING_ANDX_SHARED_LOCK)
1310 posix_lock_type = CIFS_RDLCK;
1312 posix_lock_type = CIFS_WRLCK;
1315 posix_lock_type = CIFS_UNLCK;
1317 rc = CIFSSMBPosixLock(xid, tcon, netfid, current->tgid,
1318 0 /* set */, length, flock,
1319 posix_lock_type, wait_flag);
1324 struct cifsLockInfo *lock;
1326 lock = cifs_lock_init(flock->fl_start, length, type, netfid);
1330 rc = cifs_lock_add_if(cinode, lock, wait_flag);
1336 rc = CIFSSMBLock(xid, tcon, netfid, current->tgid, length,
1337 flock->fl_start, 0, 1, type, wait_flag, 0);
1343 cifs_lock_add(cinode, lock);
1345 rc = cifs_unlock_range(cfile, flock, xid);
1348 if (flock->fl_flags & FL_POSIX)
1349 posix_lock_file_wait(file, flock);
1353 int cifs_lock(struct file *file, int cmd, struct file_lock *flock)
1356 int lock = 0, unlock = 0;
1357 bool wait_flag = false;
1358 bool posix_lck = false;
1359 struct cifs_sb_info *cifs_sb;
1360 struct cifs_tcon *tcon;
1361 struct cifsInodeInfo *cinode;
1362 struct cifsFileInfo *cfile;
1369 cFYI(1, "Lock parm: 0x%x flockflags: 0x%x flocktype: 0x%x start: %lld "
1370 "end: %lld", cmd, flock->fl_flags, flock->fl_type,
1371 flock->fl_start, flock->fl_end);
1373 cifs_read_flock(flock, &type, &lock, &unlock, &wait_flag);
1375 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
1376 cfile = (struct cifsFileInfo *)file->private_data;
1377 tcon = tlink_tcon(cfile->tlink);
1378 netfid = cfile->netfid;
1379 cinode = CIFS_I(file->f_path.dentry->d_inode);
1381 if ((tcon->ses->capabilities & CAP_UNIX) &&
1382 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1383 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1386 * BB add code here to normalize offset and length to account for
1387 * negative length which we can not accept over the wire.
1389 if (IS_GETLK(cmd)) {
1390 rc = cifs_getlk(file, flock, type, wait_flag, posix_lck, xid);
1395 if (!lock && !unlock) {
1397 * if no lock or unlock then nothing to do since we do not
1404 rc = cifs_setlk(file, flock, type, wait_flag, posix_lck, lock, unlock,
1411 * update the file size (if needed) after a write. Should be called with
1412 * the inode->i_lock held
1415 cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
1416 unsigned int bytes_written)
1418 loff_t end_of_write = offset + bytes_written;
1420 if (end_of_write > cifsi->server_eof)
1421 cifsi->server_eof = end_of_write;
1424 static ssize_t cifs_write(struct cifsFileInfo *open_file, __u32 pid,
1425 const char *write_data, size_t write_size,
1429 unsigned int bytes_written = 0;
1430 unsigned int total_written;
1431 struct cifs_sb_info *cifs_sb;
1432 struct cifs_tcon *pTcon;
1434 struct dentry *dentry = open_file->dentry;
1435 struct cifsInodeInfo *cifsi = CIFS_I(dentry->d_inode);
1436 struct cifs_io_parms io_parms;
1438 cifs_sb = CIFS_SB(dentry->d_sb);
1440 cFYI(1, "write %zd bytes to offset %lld of %s", write_size,
1441 *poffset, dentry->d_name.name);
1443 pTcon = tlink_tcon(open_file->tlink);
1447 for (total_written = 0; write_size > total_written;
1448 total_written += bytes_written) {
1450 while (rc == -EAGAIN) {
1454 if (open_file->invalidHandle) {
1455 /* we could deadlock if we called
1456 filemap_fdatawait from here so tell
1457 reopen_file not to flush data to
1459 rc = cifs_reopen_file(open_file, false);
1464 len = min((size_t)cifs_sb->wsize,
1465 write_size - total_written);
1466 /* iov[0] is reserved for smb header */
1467 iov[1].iov_base = (char *)write_data + total_written;
1468 iov[1].iov_len = len;
1469 io_parms.netfid = open_file->netfid;
1471 io_parms.tcon = pTcon;
1472 io_parms.offset = *poffset;
1473 io_parms.length = len;
1474 rc = CIFSSMBWrite2(xid, &io_parms, &bytes_written, iov,
1477 if (rc || (bytes_written == 0)) {
1485 spin_lock(&dentry->d_inode->i_lock);
1486 cifs_update_eof(cifsi, *poffset, bytes_written);
1487 spin_unlock(&dentry->d_inode->i_lock);
1488 *poffset += bytes_written;
1492 cifs_stats_bytes_written(pTcon, total_written);
1494 if (total_written > 0) {
1495 spin_lock(&dentry->d_inode->i_lock);
1496 if (*poffset > dentry->d_inode->i_size)
1497 i_size_write(dentry->d_inode, *poffset);
1498 spin_unlock(&dentry->d_inode->i_lock);
1500 mark_inode_dirty_sync(dentry->d_inode);
1502 return total_written;
1505 struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
1508 struct cifsFileInfo *open_file = NULL;
1509 struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1511 /* only filter by fsuid on multiuser mounts */
1512 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1515 spin_lock(&cifs_file_list_lock);
1516 /* we could simply get the first_list_entry since write-only entries
1517 are always at the end of the list but since the first entry might
1518 have a close pending, we go through the whole list */
1519 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1520 if (fsuid_only && open_file->uid != current_fsuid())
1522 if (OPEN_FMODE(open_file->f_flags) & FMODE_READ) {
1523 if (!open_file->invalidHandle) {
1524 /* found a good file */
1525 /* lock it so it will not be closed on us */
1526 cifsFileInfo_get(open_file);
1527 spin_unlock(&cifs_file_list_lock);
1529 } /* else might as well continue, and look for
1530 another, or simply have the caller reopen it
1531 again rather than trying to fix this handle */
1532 } else /* write only file */
1533 break; /* write only files are last so must be done */
1535 spin_unlock(&cifs_file_list_lock);
1539 struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode,
1542 struct cifsFileInfo *open_file;
1543 struct cifs_sb_info *cifs_sb;
1544 bool any_available = false;
1547 /* Having a null inode here (because mapping->host was set to zero by
1548 the VFS or MM) should not happen but we had reports of on oops (due to
1549 it being zero) during stress testcases so we need to check for it */
1551 if (cifs_inode == NULL) {
1552 cERROR(1, "Null inode passed to cifs_writeable_file");
1557 cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1559 /* only filter by fsuid on multiuser mounts */
1560 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1563 spin_lock(&cifs_file_list_lock);
1565 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1566 if (!any_available && open_file->pid != current->tgid)
1568 if (fsuid_only && open_file->uid != current_fsuid())
1570 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
1571 cifsFileInfo_get(open_file);
1573 if (!open_file->invalidHandle) {
1574 /* found a good writable file */
1575 spin_unlock(&cifs_file_list_lock);
1579 spin_unlock(&cifs_file_list_lock);
1581 /* Had to unlock since following call can block */
1582 rc = cifs_reopen_file(open_file, false);
1586 /* if it fails, try another handle if possible */
1587 cFYI(1, "wp failed on reopen file");
1588 cifsFileInfo_put(open_file);
1590 spin_lock(&cifs_file_list_lock);
1592 /* else we simply continue to the next entry. Thus
1593 we do not loop on reopen errors. If we
1594 can not reopen the file, for example if we
1595 reconnected to a server with another client
1596 racing to delete or lock the file we would not
1597 make progress if we restarted before the beginning
1598 of the loop here. */
1601 /* couldn't find useable FH with same pid, try any available */
1602 if (!any_available) {
1603 any_available = true;
1604 goto refind_writable;
1606 spin_unlock(&cifs_file_list_lock);
1610 static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to)
1612 struct address_space *mapping = page->mapping;
1613 loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
1616 int bytes_written = 0;
1617 struct inode *inode;
1618 struct cifsFileInfo *open_file;
1620 if (!mapping || !mapping->host)
1623 inode = page->mapping->host;
1625 offset += (loff_t)from;
1626 write_data = kmap(page);
1629 if ((to > PAGE_CACHE_SIZE) || (from > to)) {
1634 /* racing with truncate? */
1635 if (offset > mapping->host->i_size) {
1637 return 0; /* don't care */
1640 /* check to make sure that we are not extending the file */
1641 if (mapping->host->i_size - offset < (loff_t)to)
1642 to = (unsigned)(mapping->host->i_size - offset);
1644 open_file = find_writable_file(CIFS_I(mapping->host), false);
1646 bytes_written = cifs_write(open_file, open_file->pid,
1647 write_data, to - from, &offset);
1648 cifsFileInfo_put(open_file);
1649 /* Does mm or vfs already set times? */
1650 inode->i_atime = inode->i_mtime = current_fs_time(inode->i_sb);
1651 if ((bytes_written > 0) && (offset))
1653 else if (bytes_written < 0)
1656 cFYI(1, "No writeable filehandles for inode");
1665 * Marshal up the iov array, reserving the first one for the header. Also,
1669 cifs_writepages_marshal_iov(struct kvec *iov, struct cifs_writedata *wdata)
1672 struct inode *inode = wdata->cfile->dentry->d_inode;
1673 loff_t size = i_size_read(inode);
1675 /* marshal up the pages into iov array */
1677 for (i = 0; i < wdata->nr_pages; i++) {
1678 iov[i + 1].iov_len = min(size - page_offset(wdata->pages[i]),
1679 (loff_t)PAGE_CACHE_SIZE);
1680 iov[i + 1].iov_base = kmap(wdata->pages[i]);
1681 wdata->bytes += iov[i + 1].iov_len;
1685 static int cifs_writepages(struct address_space *mapping,
1686 struct writeback_control *wbc)
1688 struct cifs_sb_info *cifs_sb = CIFS_SB(mapping->host->i_sb);
1689 bool done = false, scanned = false, range_whole = false;
1691 struct cifs_writedata *wdata;
1696 * If wsize is smaller than the page cache size, default to writing
1697 * one page at a time via cifs_writepage
1699 if (cifs_sb->wsize < PAGE_CACHE_SIZE)
1700 return generic_writepages(mapping, wbc);
1702 if (wbc->range_cyclic) {
1703 index = mapping->writeback_index; /* Start from prev offset */
1706 index = wbc->range_start >> PAGE_CACHE_SHIFT;
1707 end = wbc->range_end >> PAGE_CACHE_SHIFT;
1708 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
1713 while (!done && index <= end) {
1714 unsigned int i, nr_pages, found_pages;
1715 pgoff_t next = 0, tofind;
1716 struct page **pages;
1718 tofind = min((cifs_sb->wsize / PAGE_CACHE_SIZE) - 1,
1721 wdata = cifs_writedata_alloc((unsigned int)tofind,
1722 cifs_writev_complete);
1729 * find_get_pages_tag seems to return a max of 256 on each
1730 * iteration, so we must call it several times in order to
1731 * fill the array or the wsize is effectively limited to
1732 * 256 * PAGE_CACHE_SIZE.
1735 pages = wdata->pages;
1737 nr_pages = find_get_pages_tag(mapping, &index,
1738 PAGECACHE_TAG_DIRTY,
1740 found_pages += nr_pages;
1743 } while (nr_pages && tofind && index <= end);
1745 if (found_pages == 0) {
1746 kref_put(&wdata->refcount, cifs_writedata_release);
1751 for (i = 0; i < found_pages; i++) {
1752 page = wdata->pages[i];
1754 * At this point we hold neither mapping->tree_lock nor
1755 * lock on the page itself: the page may be truncated or
1756 * invalidated (changing page->mapping to NULL), or even
1757 * swizzled back from swapper_space to tmpfs file
1763 else if (!trylock_page(page))
1766 if (unlikely(page->mapping != mapping)) {
1771 if (!wbc->range_cyclic && page->index > end) {
1777 if (next && (page->index != next)) {
1778 /* Not next consecutive page */
1783 if (wbc->sync_mode != WB_SYNC_NONE)
1784 wait_on_page_writeback(page);
1786 if (PageWriteback(page) ||
1787 !clear_page_dirty_for_io(page)) {
1793 * This actually clears the dirty bit in the radix tree.
1794 * See cifs_writepage() for more commentary.
1796 set_page_writeback(page);
1798 if (page_offset(page) >= mapping->host->i_size) {
1801 end_page_writeback(page);
1805 wdata->pages[i] = page;
1806 next = page->index + 1;
1810 /* reset index to refind any pages skipped */
1812 index = wdata->pages[0]->index + 1;
1814 /* put any pages we aren't going to use */
1815 for (i = nr_pages; i < found_pages; i++) {
1816 page_cache_release(wdata->pages[i]);
1817 wdata->pages[i] = NULL;
1820 /* nothing to write? */
1821 if (nr_pages == 0) {
1822 kref_put(&wdata->refcount, cifs_writedata_release);
1826 wdata->sync_mode = wbc->sync_mode;
1827 wdata->nr_pages = nr_pages;
1828 wdata->offset = page_offset(wdata->pages[0]);
1829 wdata->marshal_iov = cifs_writepages_marshal_iov;
1832 if (wdata->cfile != NULL)
1833 cifsFileInfo_put(wdata->cfile);
1834 wdata->cfile = find_writable_file(CIFS_I(mapping->host),
1836 if (!wdata->cfile) {
1837 cERROR(1, "No writable handles for inode");
1841 wdata->pid = wdata->cfile->pid;
1842 rc = cifs_async_writev(wdata);
1843 } while (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN);
1845 for (i = 0; i < nr_pages; ++i)
1846 unlock_page(wdata->pages[i]);
1848 /* send failure -- clean up the mess */
1850 for (i = 0; i < nr_pages; ++i) {
1852 redirty_page_for_writepage(wbc,
1855 SetPageError(wdata->pages[i]);
1856 end_page_writeback(wdata->pages[i]);
1857 page_cache_release(wdata->pages[i]);
1860 mapping_set_error(mapping, rc);
1862 kref_put(&wdata->refcount, cifs_writedata_release);
1864 wbc->nr_to_write -= nr_pages;
1865 if (wbc->nr_to_write <= 0)
1871 if (!scanned && !done) {
1873 * We hit the last page and there is more work to be done: wrap
1874 * back to the start of the file
1881 if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
1882 mapping->writeback_index = index;
1888 cifs_writepage_locked(struct page *page, struct writeback_control *wbc)
1894 /* BB add check for wbc flags */
1895 page_cache_get(page);
1896 if (!PageUptodate(page))
1897 cFYI(1, "ppw - page not up to date");
1900 * Set the "writeback" flag, and clear "dirty" in the radix tree.
1902 * A writepage() implementation always needs to do either this,
1903 * or re-dirty the page with "redirty_page_for_writepage()" in
1904 * the case of a failure.
1906 * Just unlocking the page will cause the radix tree tag-bits
1907 * to fail to update with the state of the page correctly.
1909 set_page_writeback(page);
1911 rc = cifs_partialpagewrite(page, 0, PAGE_CACHE_SIZE);
1912 if (rc == -EAGAIN && wbc->sync_mode == WB_SYNC_ALL)
1914 else if (rc == -EAGAIN)
1915 redirty_page_for_writepage(wbc, page);
1919 SetPageUptodate(page);
1920 end_page_writeback(page);
1921 page_cache_release(page);
1926 static int cifs_writepage(struct page *page, struct writeback_control *wbc)
1928 int rc = cifs_writepage_locked(page, wbc);
1933 static int cifs_write_end(struct file *file, struct address_space *mapping,
1934 loff_t pos, unsigned len, unsigned copied,
1935 struct page *page, void *fsdata)
1938 struct inode *inode = mapping->host;
1939 struct cifsFileInfo *cfile = file->private_data;
1940 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1943 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
1946 pid = current->tgid;
1948 cFYI(1, "write_end for page %p from pos %lld with %d bytes",
1951 if (PageChecked(page)) {
1953 SetPageUptodate(page);
1954 ClearPageChecked(page);
1955 } else if (!PageUptodate(page) && copied == PAGE_CACHE_SIZE)
1956 SetPageUptodate(page);
1958 if (!PageUptodate(page)) {
1960 unsigned offset = pos & (PAGE_CACHE_SIZE - 1);
1964 /* this is probably better than directly calling
1965 partialpage_write since in this function the file handle is
1966 known which we might as well leverage */
1967 /* BB check if anything else missing out of ppw
1968 such as updating last write time */
1969 page_data = kmap(page);
1970 rc = cifs_write(cfile, pid, page_data + offset, copied, &pos);
1971 /* if (rc < 0) should we set writebehind rc? */
1978 set_page_dirty(page);
1982 spin_lock(&inode->i_lock);
1983 if (pos > inode->i_size)
1984 i_size_write(inode, pos);
1985 spin_unlock(&inode->i_lock);
1989 page_cache_release(page);
1994 int cifs_strict_fsync(struct file *file, loff_t start, loff_t end,
1999 struct cifs_tcon *tcon;
2000 struct cifsFileInfo *smbfile = file->private_data;
2001 struct inode *inode = file->f_path.dentry->d_inode;
2002 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2004 rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
2007 mutex_lock(&inode->i_mutex);
2011 cFYI(1, "Sync file - name: %s datasync: 0x%x",
2012 file->f_path.dentry->d_name.name, datasync);
2014 if (!CIFS_I(inode)->clientCanCacheRead) {
2015 rc = cifs_invalidate_mapping(inode);
2017 cFYI(1, "rc: %d during invalidate phase", rc);
2018 rc = 0; /* don't care about it in fsync */
2022 tcon = tlink_tcon(smbfile->tlink);
2023 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC))
2024 rc = CIFSSMBFlush(xid, tcon, smbfile->netfid);
2027 mutex_unlock(&inode->i_mutex);
2031 int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
2035 struct cifs_tcon *tcon;
2036 struct cifsFileInfo *smbfile = file->private_data;
2037 struct cifs_sb_info *cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2038 struct inode *inode = file->f_mapping->host;
2040 rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
2043 mutex_lock(&inode->i_mutex);
2047 cFYI(1, "Sync file - name: %s datasync: 0x%x",
2048 file->f_path.dentry->d_name.name, datasync);
2050 tcon = tlink_tcon(smbfile->tlink);
2051 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC))
2052 rc = CIFSSMBFlush(xid, tcon, smbfile->netfid);
2055 mutex_unlock(&inode->i_mutex);
2060 * As file closes, flush all cached write data for this inode checking
2061 * for write behind errors.
2063 int cifs_flush(struct file *file, fl_owner_t id)
2065 struct inode *inode = file->f_path.dentry->d_inode;
2068 if (file->f_mode & FMODE_WRITE)
2069 rc = filemap_write_and_wait(inode->i_mapping);
2071 cFYI(1, "Flush inode %p file %p rc %d", inode, file, rc);
2077 cifs_write_allocate_pages(struct page **pages, unsigned long num_pages)
2082 for (i = 0; i < num_pages; i++) {
2083 pages[i] = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
2086 * save number of pages we have already allocated and
2087 * return with ENOMEM error
2096 for (i = 0; i < num_pages; i++)
2103 size_t get_numpages(const size_t wsize, const size_t len, size_t *cur_len)
2108 clen = min_t(const size_t, len, wsize);
2109 num_pages = DIV_ROUND_UP(clen, PAGE_SIZE);
2118 cifs_uncached_marshal_iov(struct kvec *iov, struct cifs_writedata *wdata)
2121 size_t bytes = wdata->bytes;
2123 /* marshal up the pages into iov array */
2124 for (i = 0; i < wdata->nr_pages; i++) {
2125 iov[i + 1].iov_len = min_t(size_t, bytes, PAGE_SIZE);
2126 iov[i + 1].iov_base = kmap(wdata->pages[i]);
2127 bytes -= iov[i + 1].iov_len;
2132 cifs_uncached_writev_complete(struct work_struct *work)
2135 struct cifs_writedata *wdata = container_of(work,
2136 struct cifs_writedata, work);
2137 struct inode *inode = wdata->cfile->dentry->d_inode;
2138 struct cifsInodeInfo *cifsi = CIFS_I(inode);
2140 spin_lock(&inode->i_lock);
2141 cifs_update_eof(cifsi, wdata->offset, wdata->bytes);
2142 if (cifsi->server_eof > inode->i_size)
2143 i_size_write(inode, cifsi->server_eof);
2144 spin_unlock(&inode->i_lock);
2146 complete(&wdata->done);
2148 if (wdata->result != -EAGAIN) {
2149 for (i = 0; i < wdata->nr_pages; i++)
2150 put_page(wdata->pages[i]);
2153 kref_put(&wdata->refcount, cifs_writedata_release);
2156 /* attempt to send write to server, retry on any -EAGAIN errors */
2158 cifs_uncached_retry_writev(struct cifs_writedata *wdata)
2163 if (wdata->cfile->invalidHandle) {
2164 rc = cifs_reopen_file(wdata->cfile, false);
2168 rc = cifs_async_writev(wdata);
2169 } while (rc == -EAGAIN);
2175 cifs_iovec_write(struct file *file, const struct iovec *iov,
2176 unsigned long nr_segs, loff_t *poffset)
2178 unsigned long nr_pages, i;
2179 size_t copied, len, cur_len;
2180 ssize_t total_written = 0;
2183 struct cifsFileInfo *open_file;
2184 struct cifs_tcon *tcon;
2185 struct cifs_sb_info *cifs_sb;
2186 struct cifs_writedata *wdata, *tmp;
2187 struct list_head wdata_list;
2191 len = iov_length(iov, nr_segs);
2195 rc = generic_write_checks(file, poffset, &len, 0);
2199 INIT_LIST_HEAD(&wdata_list);
2200 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2201 open_file = file->private_data;
2202 tcon = tlink_tcon(open_file->tlink);
2205 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2206 pid = open_file->pid;
2208 pid = current->tgid;
2210 iov_iter_init(&it, iov, nr_segs, len, 0);
2214 nr_pages = get_numpages(cifs_sb->wsize, len, &cur_len);
2215 wdata = cifs_writedata_alloc(nr_pages,
2216 cifs_uncached_writev_complete);
2222 rc = cifs_write_allocate_pages(wdata->pages, nr_pages);
2229 for (i = 0; i < nr_pages; i++) {
2230 copied = min_t(const size_t, cur_len, PAGE_SIZE);
2231 copied = iov_iter_copy_from_user(wdata->pages[i], &it,
2234 iov_iter_advance(&it, copied);
2236 cur_len = save_len - cur_len;
2238 wdata->sync_mode = WB_SYNC_ALL;
2239 wdata->nr_pages = nr_pages;
2240 wdata->offset = (__u64)offset;
2241 wdata->cfile = cifsFileInfo_get(open_file);
2243 wdata->bytes = cur_len;
2244 wdata->marshal_iov = cifs_uncached_marshal_iov;
2245 rc = cifs_uncached_retry_writev(wdata);
2247 kref_put(&wdata->refcount, cifs_writedata_release);
2251 list_add_tail(&wdata->list, &wdata_list);
2257 * If at least one write was successfully sent, then discard any rc
2258 * value from the later writes. If the other write succeeds, then
2259 * we'll end up returning whatever was written. If it fails, then
2260 * we'll get a new rc value from that.
2262 if (!list_empty(&wdata_list))
2266 * Wait for and collect replies for any successful sends in order of
2267 * increasing offset. Once an error is hit or we get a fatal signal
2268 * while waiting, then return without waiting for any more replies.
2271 list_for_each_entry_safe(wdata, tmp, &wdata_list, list) {
2273 /* FIXME: freezable too? */
2274 rc = wait_for_completion_killable(&wdata->done);
2277 else if (wdata->result)
2280 total_written += wdata->bytes;
2282 /* resend call if it's a retryable error */
2283 if (rc == -EAGAIN) {
2284 rc = cifs_uncached_retry_writev(wdata);
2288 list_del_init(&wdata->list);
2289 kref_put(&wdata->refcount, cifs_writedata_release);
2292 if (total_written > 0)
2293 *poffset += total_written;
2295 cifs_stats_bytes_written(tcon, total_written);
2296 return total_written ? total_written : (ssize_t)rc;
2299 ssize_t cifs_user_writev(struct kiocb *iocb, const struct iovec *iov,
2300 unsigned long nr_segs, loff_t pos)
2303 struct inode *inode;
2305 inode = iocb->ki_filp->f_path.dentry->d_inode;
2308 * BB - optimize the way when signing is disabled. We can drop this
2309 * extra memory-to-memory copying and use iovec buffers for constructing
2313 written = cifs_iovec_write(iocb->ki_filp, iov, nr_segs, &pos);
2315 CIFS_I(inode)->invalid_mapping = true;
2322 ssize_t cifs_strict_writev(struct kiocb *iocb, const struct iovec *iov,
2323 unsigned long nr_segs, loff_t pos)
2325 struct inode *inode;
2327 inode = iocb->ki_filp->f_path.dentry->d_inode;
2329 if (CIFS_I(inode)->clientCanCacheAll)
2330 return generic_file_aio_write(iocb, iov, nr_segs, pos);
2333 * In strict cache mode we need to write the data to the server exactly
2334 * from the pos to pos+len-1 rather than flush all affected pages
2335 * because it may cause a error with mandatory locks on these pages but
2336 * not on the region from pos to ppos+len-1.
2339 return cifs_user_writev(iocb, iov, nr_segs, pos);
2343 cifs_iovec_read(struct file *file, const struct iovec *iov,
2344 unsigned long nr_segs, loff_t *poffset)
2349 unsigned int bytes_read = 0;
2350 size_t len, cur_len;
2352 struct cifs_sb_info *cifs_sb;
2353 struct cifs_tcon *pTcon;
2354 struct cifsFileInfo *open_file;
2355 struct smb_com_read_rsp *pSMBr;
2356 struct cifs_io_parms io_parms;
2364 len = iov_length(iov, nr_segs);
2369 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2371 /* FIXME: set up handlers for larger reads and/or convert to async */
2372 rsize = min_t(unsigned int, cifs_sb->rsize, CIFSMaxBufSize);
2374 open_file = file->private_data;
2375 pTcon = tlink_tcon(open_file->tlink);
2377 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2378 pid = open_file->pid;
2380 pid = current->tgid;
2382 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
2383 cFYI(1, "attempting read on write only file instance");
2385 for (total_read = 0; total_read < len; total_read += bytes_read) {
2386 cur_len = min_t(const size_t, len - total_read, rsize);
2390 while (rc == -EAGAIN) {
2391 int buf_type = CIFS_NO_BUFFER;
2392 if (open_file->invalidHandle) {
2393 rc = cifs_reopen_file(open_file, true);
2397 io_parms.netfid = open_file->netfid;
2399 io_parms.tcon = pTcon;
2400 io_parms.offset = *poffset;
2401 io_parms.length = cur_len;
2402 rc = CIFSSMBRead(xid, &io_parms, &bytes_read,
2403 &read_data, &buf_type);
2404 pSMBr = (struct smb_com_read_rsp *)read_data;
2406 char *data_offset = read_data + 4 +
2407 le16_to_cpu(pSMBr->DataOffset);
2408 if (memcpy_toiovecend(iov, data_offset,
2409 iov_offset, bytes_read))
2411 if (buf_type == CIFS_SMALL_BUFFER)
2412 cifs_small_buf_release(read_data);
2413 else if (buf_type == CIFS_LARGE_BUFFER)
2414 cifs_buf_release(read_data);
2416 iov_offset += bytes_read;
2420 if (rc || (bytes_read == 0)) {
2428 cifs_stats_bytes_read(pTcon, bytes_read);
2429 *poffset += bytes_read;
2437 ssize_t cifs_user_readv(struct kiocb *iocb, const struct iovec *iov,
2438 unsigned long nr_segs, loff_t pos)
2442 read = cifs_iovec_read(iocb->ki_filp, iov, nr_segs, &pos);
2449 ssize_t cifs_strict_readv(struct kiocb *iocb, const struct iovec *iov,
2450 unsigned long nr_segs, loff_t pos)
2452 struct inode *inode;
2454 inode = iocb->ki_filp->f_path.dentry->d_inode;
2456 if (CIFS_I(inode)->clientCanCacheRead)
2457 return generic_file_aio_read(iocb, iov, nr_segs, pos);
2460 * In strict cache mode we need to read from the server all the time
2461 * if we don't have level II oplock because the server can delay mtime
2462 * change - so we can't make a decision about inode invalidating.
2463 * And we can also fail with pagereading if there are mandatory locks
2464 * on pages affected by this read but not on the region from pos to
2468 return cifs_user_readv(iocb, iov, nr_segs, pos);
2471 static ssize_t cifs_read(struct file *file, char *read_data, size_t read_size,
2475 unsigned int bytes_read = 0;
2476 unsigned int total_read;
2477 unsigned int current_read_size;
2479 struct cifs_sb_info *cifs_sb;
2480 struct cifs_tcon *pTcon;
2482 char *current_offset;
2483 struct cifsFileInfo *open_file;
2484 struct cifs_io_parms io_parms;
2485 int buf_type = CIFS_NO_BUFFER;
2489 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2491 /* FIXME: set up handlers for larger reads and/or convert to async */
2492 rsize = min_t(unsigned int, cifs_sb->rsize, CIFSMaxBufSize);
2494 if (file->private_data == NULL) {
2499 open_file = file->private_data;
2500 pTcon = tlink_tcon(open_file->tlink);
2502 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2503 pid = open_file->pid;
2505 pid = current->tgid;
2507 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
2508 cFYI(1, "attempting read on write only file instance");
2510 for (total_read = 0, current_offset = read_data;
2511 read_size > total_read;
2512 total_read += bytes_read, current_offset += bytes_read) {
2513 current_read_size = min_t(uint, read_size - total_read, rsize);
2515 /* For windows me and 9x we do not want to request more
2516 than it negotiated since it will refuse the read then */
2518 !(pTcon->ses->capabilities & CAP_LARGE_FILES)) {
2519 current_read_size = min_t(uint, current_read_size,
2523 while (rc == -EAGAIN) {
2524 if (open_file->invalidHandle) {
2525 rc = cifs_reopen_file(open_file, true);
2529 io_parms.netfid = open_file->netfid;
2531 io_parms.tcon = pTcon;
2532 io_parms.offset = *poffset;
2533 io_parms.length = current_read_size;
2534 rc = CIFSSMBRead(xid, &io_parms, &bytes_read,
2535 ¤t_offset, &buf_type);
2537 if (rc || (bytes_read == 0)) {
2545 cifs_stats_bytes_read(pTcon, total_read);
2546 *poffset += bytes_read;
2554 * If the page is mmap'ed into a process' page tables, then we need to make
2555 * sure that it doesn't change while being written back.
2558 cifs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
2560 struct page *page = vmf->page;
2563 return VM_FAULT_LOCKED;
2566 static struct vm_operations_struct cifs_file_vm_ops = {
2567 .fault = filemap_fault,
2568 .page_mkwrite = cifs_page_mkwrite,
2571 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
2574 struct inode *inode = file->f_path.dentry->d_inode;
2578 if (!CIFS_I(inode)->clientCanCacheRead) {
2579 rc = cifs_invalidate_mapping(inode);
2584 rc = generic_file_mmap(file, vma);
2586 vma->vm_ops = &cifs_file_vm_ops;
2591 int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
2596 rc = cifs_revalidate_file(file);
2598 cFYI(1, "Validation prior to mmap failed, error=%d", rc);
2602 rc = generic_file_mmap(file, vma);
2604 vma->vm_ops = &cifs_file_vm_ops;
2609 static int cifs_readpages(struct file *file, struct address_space *mapping,
2610 struct list_head *page_list, unsigned num_pages)
2613 struct list_head tmplist;
2614 struct cifsFileInfo *open_file = file->private_data;
2615 struct cifs_sb_info *cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2616 unsigned int rsize = cifs_sb->rsize;
2620 * Give up immediately if rsize is too small to read an entire page.
2621 * The VFS will fall back to readpage. We should never reach this
2622 * point however since we set ra_pages to 0 when the rsize is smaller
2623 * than a cache page.
2625 if (unlikely(rsize < PAGE_CACHE_SIZE))
2629 * Reads as many pages as possible from fscache. Returns -ENOBUFS
2630 * immediately if the cookie is negative
2632 rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,
2637 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2638 pid = open_file->pid;
2640 pid = current->tgid;
2643 INIT_LIST_HEAD(&tmplist);
2645 cFYI(1, "%s: file=%p mapping=%p num_pages=%u", __func__, file,
2646 mapping, num_pages);
2649 * Start with the page at end of list and move it to private
2650 * list. Do the same with any following pages until we hit
2651 * the rsize limit, hit an index discontinuity, or run out of
2652 * pages. Issue the async read and then start the loop again
2653 * until the list is empty.
2655 * Note that list order is important. The page_list is in
2656 * the order of declining indexes. When we put the pages in
2657 * the rdata->pages, then we want them in increasing order.
2659 while (!list_empty(page_list)) {
2660 unsigned int bytes = PAGE_CACHE_SIZE;
2661 unsigned int expected_index;
2662 unsigned int nr_pages = 1;
2664 struct page *page, *tpage;
2665 struct cifs_readdata *rdata;
2667 page = list_entry(page_list->prev, struct page, lru);
2670 * Lock the page and put it in the cache. Since no one else
2671 * should have access to this page, we're safe to simply set
2672 * PG_locked without checking it first.
2674 __set_page_locked(page);
2675 rc = add_to_page_cache_locked(page, mapping,
2676 page->index, GFP_KERNEL);
2678 /* give up if we can't stick it in the cache */
2680 __clear_page_locked(page);
2684 /* move first page to the tmplist */
2685 offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
2686 list_move_tail(&page->lru, &tmplist);
2688 /* now try and add more pages onto the request */
2689 expected_index = page->index + 1;
2690 list_for_each_entry_safe_reverse(page, tpage, page_list, lru) {
2691 /* discontinuity ? */
2692 if (page->index != expected_index)
2695 /* would this page push the read over the rsize? */
2696 if (bytes + PAGE_CACHE_SIZE > rsize)
2699 __set_page_locked(page);
2700 if (add_to_page_cache_locked(page, mapping,
2701 page->index, GFP_KERNEL)) {
2702 __clear_page_locked(page);
2705 list_move_tail(&page->lru, &tmplist);
2706 bytes += PAGE_CACHE_SIZE;
2711 rdata = cifs_readdata_alloc(nr_pages);
2713 /* best to give up if we're out of mem */
2714 list_for_each_entry_safe(page, tpage, &tmplist, lru) {
2715 list_del(&page->lru);
2716 lru_cache_add_file(page);
2718 page_cache_release(page);
2724 spin_lock(&cifs_file_list_lock);
2725 cifsFileInfo_get(open_file);
2726 spin_unlock(&cifs_file_list_lock);
2727 rdata->cfile = open_file;
2728 rdata->mapping = mapping;
2729 rdata->offset = offset;
2730 rdata->bytes = bytes;
2732 list_splice_init(&tmplist, &rdata->pages);
2735 if (open_file->invalidHandle) {
2736 rc = cifs_reopen_file(open_file, true);
2740 rc = cifs_async_readv(rdata);
2741 } while (rc == -EAGAIN);
2744 list_for_each_entry_safe(page, tpage, &rdata->pages,
2746 list_del(&page->lru);
2747 lru_cache_add_file(page);
2749 page_cache_release(page);
2751 cifs_readdata_free(rdata);
2759 static int cifs_readpage_worker(struct file *file, struct page *page,
2765 /* Is the page cached? */
2766 rc = cifs_readpage_from_fscache(file->f_path.dentry->d_inode, page);
2770 page_cache_get(page);
2771 read_data = kmap(page);
2772 /* for reads over a certain size could initiate async read ahead */
2774 rc = cifs_read(file, read_data, PAGE_CACHE_SIZE, poffset);
2779 cFYI(1, "Bytes read %d", rc);
2781 file->f_path.dentry->d_inode->i_atime =
2782 current_fs_time(file->f_path.dentry->d_inode->i_sb);
2784 if (PAGE_CACHE_SIZE > rc)
2785 memset(read_data + rc, 0, PAGE_CACHE_SIZE - rc);
2787 flush_dcache_page(page);
2788 SetPageUptodate(page);
2790 /* send this page to the cache */
2791 cifs_readpage_to_fscache(file->f_path.dentry->d_inode, page);
2797 page_cache_release(page);
2803 static int cifs_readpage(struct file *file, struct page *page)
2805 loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
2811 if (file->private_data == NULL) {
2817 cFYI(1, "readpage %p at offset %d 0x%x\n",
2818 page, (int)offset, (int)offset);
2820 rc = cifs_readpage_worker(file, page, &offset);
2828 static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
2830 struct cifsFileInfo *open_file;
2832 spin_lock(&cifs_file_list_lock);
2833 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
2834 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
2835 spin_unlock(&cifs_file_list_lock);
2839 spin_unlock(&cifs_file_list_lock);
2843 /* We do not want to update the file size from server for inodes
2844 open for write - to avoid races with writepage extending
2845 the file - in the future we could consider allowing
2846 refreshing the inode only on increases in the file size
2847 but this is tricky to do without racing with writebehind
2848 page caching in the current Linux kernel design */
2849 bool is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file)
2854 if (is_inode_writable(cifsInode)) {
2855 /* This inode is open for write at least once */
2856 struct cifs_sb_info *cifs_sb;
2858 cifs_sb = CIFS_SB(cifsInode->vfs_inode.i_sb);
2859 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO) {
2860 /* since no page cache to corrupt on directio
2861 we can change size safely */
2865 if (i_size_read(&cifsInode->vfs_inode) < end_of_file)
2873 static int cifs_write_begin(struct file *file, struct address_space *mapping,
2874 loff_t pos, unsigned len, unsigned flags,
2875 struct page **pagep, void **fsdata)
2877 pgoff_t index = pos >> PAGE_CACHE_SHIFT;
2878 loff_t offset = pos & (PAGE_CACHE_SIZE - 1);
2879 loff_t page_start = pos & PAGE_MASK;
2884 cFYI(1, "write_begin from %lld len %d", (long long)pos, len);
2886 page = grab_cache_page_write_begin(mapping, index, flags);
2892 if (PageUptodate(page))
2896 * If we write a full page it will be up to date, no need to read from
2897 * the server. If the write is short, we'll end up doing a sync write
2900 if (len == PAGE_CACHE_SIZE)
2904 * optimize away the read when we have an oplock, and we're not
2905 * expecting to use any of the data we'd be reading in. That
2906 * is, when the page lies beyond the EOF, or straddles the EOF
2907 * and the write will cover all of the existing data.
2909 if (CIFS_I(mapping->host)->clientCanCacheRead) {
2910 i_size = i_size_read(mapping->host);
2911 if (page_start >= i_size ||
2912 (offset == 0 && (pos + len) >= i_size)) {
2913 zero_user_segments(page, 0, offset,
2917 * PageChecked means that the parts of the page
2918 * to which we're not writing are considered up
2919 * to date. Once the data is copied to the
2920 * page, it can be set uptodate.
2922 SetPageChecked(page);
2927 if ((file->f_flags & O_ACCMODE) != O_WRONLY) {
2929 * might as well read a page, it is fast enough. If we get
2930 * an error, we don't need to return it. cifs_write_end will
2931 * do a sync write instead since PG_uptodate isn't set.
2933 cifs_readpage_worker(file, page, &page_start);
2935 /* we could try using another file handle if there is one -
2936 but how would we lock it to prevent close of that handle
2937 racing with this read? In any case
2938 this will be written out by write_end so is fine */
2945 static int cifs_release_page(struct page *page, gfp_t gfp)
2947 if (PagePrivate(page))
2950 return cifs_fscache_release_page(page, gfp);
2953 static void cifs_invalidate_page(struct page *page, unsigned long offset)
2955 struct cifsInodeInfo *cifsi = CIFS_I(page->mapping->host);
2958 cifs_fscache_invalidate_page(page, &cifsi->vfs_inode);
2961 static int cifs_launder_page(struct page *page)
2964 loff_t range_start = page_offset(page);
2965 loff_t range_end = range_start + (loff_t)(PAGE_CACHE_SIZE - 1);
2966 struct writeback_control wbc = {
2967 .sync_mode = WB_SYNC_ALL,
2969 .range_start = range_start,
2970 .range_end = range_end,
2973 cFYI(1, "Launder page: %p", page);
2975 if (clear_page_dirty_for_io(page))
2976 rc = cifs_writepage_locked(page, &wbc);
2978 cifs_fscache_invalidate_page(page, page->mapping->host);
2982 void cifs_oplock_break(struct work_struct *work)
2984 struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
2986 struct inode *inode = cfile->dentry->d_inode;
2987 struct cifsInodeInfo *cinode = CIFS_I(inode);
2990 if (inode && S_ISREG(inode->i_mode)) {
2991 if (cinode->clientCanCacheRead)
2992 break_lease(inode, O_RDONLY);
2994 break_lease(inode, O_WRONLY);
2995 rc = filemap_fdatawrite(inode->i_mapping);
2996 if (cinode->clientCanCacheRead == 0) {
2997 rc = filemap_fdatawait(inode->i_mapping);
2998 mapping_set_error(inode->i_mapping, rc);
2999 invalidate_remote_inode(inode);
3001 cFYI(1, "Oplock flush inode %p rc %d", inode, rc);
3004 rc = cifs_push_locks(cfile);
3006 cERROR(1, "Push locks rc = %d", rc);
3009 * releasing stale oplock after recent reconnect of smb session using
3010 * a now incorrect file handle is not a data integrity issue but do
3011 * not bother sending an oplock release if session to server still is
3012 * disconnected since oplock already released by the server
3014 if (!cfile->oplock_break_cancelled) {
3015 rc = CIFSSMBLock(0, tlink_tcon(cfile->tlink), cfile->netfid,
3016 current->tgid, 0, 0, 0, 0,
3017 LOCKING_ANDX_OPLOCK_RELEASE, false,
3018 cinode->clientCanCacheRead ? 1 : 0);
3019 cFYI(1, "Oplock release rc = %d", rc);
3023 const struct address_space_operations cifs_addr_ops = {
3024 .readpage = cifs_readpage,
3025 .readpages = cifs_readpages,
3026 .writepage = cifs_writepage,
3027 .writepages = cifs_writepages,
3028 .write_begin = cifs_write_begin,
3029 .write_end = cifs_write_end,
3030 .set_page_dirty = __set_page_dirty_nobuffers,
3031 .releasepage = cifs_release_page,
3032 .invalidatepage = cifs_invalidate_page,
3033 .launder_page = cifs_launder_page,
3037 * cifs_readpages requires the server to support a buffer large enough to
3038 * contain the header plus one complete page of data. Otherwise, we need
3039 * to leave cifs_readpages out of the address space operations.
3041 const struct address_space_operations cifs_addr_ops_smallbuf = {
3042 .readpage = cifs_readpage,
3043 .writepage = cifs_writepage,
3044 .writepages = cifs_writepages,
3045 .write_begin = cifs_write_begin,
3046 .write_end = cifs_write_end,
3047 .set_page_dirty = __set_page_dirty_nobuffers,
3048 .releasepage = cifs_release_page,
3049 .invalidatepage = cifs_invalidate_page,
3050 .launder_page = cifs_launder_page,