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
, unsigned 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
*oplock
,
173 struct cifs_fid
*fid
, unsigned int xid
)
178 int create_options
= CREATE_NOT_DIR
;
180 struct TCP_Server_Info
*server
= tcon
->ses
->server
;
182 if (!server
->ops
->open
)
185 desired_access
= cifs_convert_flags(f_flags
);
187 /*********************************************************************
188 * open flag mapping table:
190 * POSIX Flag CIFS Disposition
191 * ---------- ----------------
192 * O_CREAT FILE_OPEN_IF
193 * O_CREAT | O_EXCL FILE_CREATE
194 * O_CREAT | O_TRUNC FILE_OVERWRITE_IF
195 * O_TRUNC FILE_OVERWRITE
196 * none of the above FILE_OPEN
198 * Note that there is not a direct match between disposition
199 * FILE_SUPERSEDE (ie create whether or not file exists although
200 * O_CREAT | O_TRUNC is similar but truncates the existing
201 * file rather than creating a new file as FILE_SUPERSEDE does
202 * (which uses the attributes / metadata passed in on open call)
204 *? O_SYNC is a reasonable match to CIFS writethrough flag
205 *? and the read write flags match reasonably. O_LARGEFILE
206 *? is irrelevant because largefile support is always used
207 *? by this client. Flags O_APPEND, O_DIRECT, O_DIRECTORY,
208 * O_FASYNC, O_NOFOLLOW, O_NONBLOCK need further investigation
209 *********************************************************************/
211 disposition
= cifs_get_disposition(f_flags
);
213 /* BB pass O_SYNC flag through on file attributes .. BB */
215 buf
= kmalloc(sizeof(FILE_ALL_INFO
), GFP_KERNEL
);
219 if (backup_cred(cifs_sb
))
220 create_options
|= CREATE_OPEN_BACKUP_INTENT
;
222 rc
= server
->ops
->open(xid
, tcon
, full_path
, disposition
,
223 desired_access
, create_options
, fid
, oplock
, buf
,
230 rc
= cifs_get_inode_info_unix(&inode
, full_path
, inode
->i_sb
,
233 rc
= cifs_get_inode_info(&inode
, full_path
, buf
, inode
->i_sb
,
241 struct cifsFileInfo
*
242 cifs_new_fileinfo(struct cifs_fid
*fid
, struct file
*file
,
243 struct tcon_link
*tlink
, __u32 oplock
)
245 struct dentry
*dentry
= file
->f_path
.dentry
;
246 struct inode
*inode
= dentry
->d_inode
;
247 struct cifsInodeInfo
*cinode
= CIFS_I(inode
);
248 struct cifsFileInfo
*cfile
;
249 struct cifs_fid_locks
*fdlocks
;
251 cfile
= kzalloc(sizeof(struct cifsFileInfo
), GFP_KERNEL
);
255 fdlocks
= kzalloc(sizeof(struct cifs_fid_locks
), GFP_KERNEL
);
261 INIT_LIST_HEAD(&fdlocks
->locks
);
262 fdlocks
->cfile
= cfile
;
263 cfile
->llist
= fdlocks
;
264 down_write(&cinode
->lock_sem
);
265 list_add(&fdlocks
->llist
, &cinode
->llist
);
266 up_write(&cinode
->lock_sem
);
269 cfile
->pid
= current
->tgid
;
270 cfile
->uid
= current_fsuid();
271 cfile
->dentry
= dget(dentry
);
272 cfile
->f_flags
= file
->f_flags
;
273 cfile
->invalidHandle
= false;
274 cfile
->tlink
= cifs_get_tlink(tlink
);
275 INIT_WORK(&cfile
->oplock_break
, cifs_oplock_break
);
276 mutex_init(&cfile
->fh_mutex
);
277 tlink_tcon(tlink
)->ses
->server
->ops
->set_fid(cfile
, fid
, oplock
);
279 spin_lock(&cifs_file_list_lock
);
280 list_add(&cfile
->tlist
, &(tlink_tcon(tlink
)->openFileList
));
281 /* if readable file instance put first in list*/
282 if (file
->f_mode
& FMODE_READ
)
283 list_add(&cfile
->flist
, &cinode
->openFileList
);
285 list_add_tail(&cfile
->flist
, &cinode
->openFileList
);
286 spin_unlock(&cifs_file_list_lock
);
288 file
->private_data
= cfile
;
292 struct cifsFileInfo
*
293 cifsFileInfo_get(struct cifsFileInfo
*cifs_file
)
295 spin_lock(&cifs_file_list_lock
);
296 cifsFileInfo_get_locked(cifs_file
);
297 spin_unlock(&cifs_file_list_lock
);
302 * Release a reference on the file private data. This may involve closing
303 * the filehandle out on the server. Must be called without holding
304 * cifs_file_list_lock.
306 void cifsFileInfo_put(struct cifsFileInfo
*cifs_file
)
308 struct inode
*inode
= cifs_file
->dentry
->d_inode
;
309 struct cifs_tcon
*tcon
= tlink_tcon(cifs_file
->tlink
);
310 struct cifsInodeInfo
*cifsi
= CIFS_I(inode
);
311 struct cifs_sb_info
*cifs_sb
= CIFS_SB(inode
->i_sb
);
312 struct cifsLockInfo
*li
, *tmp
;
314 spin_lock(&cifs_file_list_lock
);
315 if (--cifs_file
->count
> 0) {
316 spin_unlock(&cifs_file_list_lock
);
320 /* remove it from the lists */
321 list_del(&cifs_file
->flist
);
322 list_del(&cifs_file
->tlist
);
324 if (list_empty(&cifsi
->openFileList
)) {
325 cFYI(1, "closing last open instance for inode %p",
326 cifs_file
->dentry
->d_inode
);
328 * In strict cache mode we need invalidate mapping on the last
329 * close because it may cause a error when we open this file
330 * again and get at least level II oplock.
332 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_STRICT_IO
)
333 CIFS_I(inode
)->invalid_mapping
= true;
334 cifs_set_oplock_level(cifsi
, 0);
336 spin_unlock(&cifs_file_list_lock
);
338 cancel_work_sync(&cifs_file
->oplock_break
);
340 if (!tcon
->need_reconnect
&& !cifs_file
->invalidHandle
) {
341 struct TCP_Server_Info
*server
= tcon
->ses
->server
;
346 if (server
->ops
->close
)
347 rc
= server
->ops
->close(xid
, tcon
, &cifs_file
->fid
);
352 * Delete any outstanding lock records. We'll lose them when the file
355 down_write(&cifsi
->lock_sem
);
356 list_for_each_entry_safe(li
, tmp
, &cifs_file
->llist
->locks
, llist
) {
357 list_del(&li
->llist
);
358 cifs_del_lock_waiters(li
);
361 list_del(&cifs_file
->llist
->llist
);
362 kfree(cifs_file
->llist
);
363 up_write(&cifsi
->lock_sem
);
365 cifs_put_tlink(cifs_file
->tlink
);
366 dput(cifs_file
->dentry
);
370 int cifs_open(struct inode
*inode
, struct file
*file
)
375 struct cifs_sb_info
*cifs_sb
;
376 struct TCP_Server_Info
*server
;
377 struct cifs_tcon
*tcon
;
378 struct tcon_link
*tlink
;
379 struct cifsFileInfo
*cfile
= NULL
;
380 char *full_path
= NULL
;
381 bool posix_open_ok
= false;
386 cifs_sb
= CIFS_SB(inode
->i_sb
);
387 tlink
= cifs_sb_tlink(cifs_sb
);
390 return PTR_ERR(tlink
);
392 tcon
= tlink_tcon(tlink
);
393 server
= tcon
->ses
->server
;
395 full_path
= build_path_from_dentry(file
->f_path
.dentry
);
396 if (full_path
== NULL
) {
401 cFYI(1, "inode = 0x%p file flags are 0x%x for %s",
402 inode
, file
->f_flags
, full_path
);
404 if (tcon
->ses
->server
->oplocks
)
409 if (!tcon
->broken_posix_open
&& tcon
->unix_ext
&&
410 cap_unix(tcon
->ses
) && (CIFS_UNIX_POSIX_PATH_OPS_CAP
&
411 le64_to_cpu(tcon
->fsUnixInfo
.Capability
))) {
412 /* can not refresh inode info since size could be stale */
413 rc
= cifs_posix_open(full_path
, &inode
, inode
->i_sb
,
414 cifs_sb
->mnt_file_mode
/* ignored */,
415 file
->f_flags
, &oplock
, &fid
.netfid
, xid
);
417 cFYI(1, "posix open succeeded");
418 posix_open_ok
= true;
419 } else if ((rc
== -EINVAL
) || (rc
== -EOPNOTSUPP
)) {
420 if (tcon
->ses
->serverNOS
)
421 cERROR(1, "server %s of type %s returned"
422 " unexpected error on SMB posix open"
423 ", disabling posix open support."
424 " Check if server update available.",
425 tcon
->ses
->serverName
,
426 tcon
->ses
->serverNOS
);
427 tcon
->broken_posix_open
= true;
428 } else if ((rc
!= -EIO
) && (rc
!= -EREMOTE
) &&
429 (rc
!= -EOPNOTSUPP
)) /* path not found or net err */
432 * Else fallthrough to retry open the old way on network i/o
437 if (!posix_open_ok
) {
438 if (server
->ops
->get_lease_key
)
439 server
->ops
->get_lease_key(inode
, &fid
);
441 rc
= cifs_nt_open(full_path
, inode
, cifs_sb
, tcon
,
442 file
->f_flags
, &oplock
, &fid
, xid
);
447 cfile
= cifs_new_fileinfo(&fid
, file
, tlink
, oplock
);
449 if (server
->ops
->close
)
450 server
->ops
->close(xid
, tcon
, &fid
);
455 cifs_fscache_set_inode_cookie(inode
, file
);
457 if ((oplock
& CIFS_CREATE_ACTION
) && !posix_open_ok
&& tcon
->unix_ext
) {
459 * Time to set mode which we can not set earlier due to
460 * problems creating new read-only files.
462 struct cifs_unix_set_info_args args
= {
463 .mode
= inode
->i_mode
,
466 .ctime
= NO_CHANGE_64
,
467 .atime
= NO_CHANGE_64
,
468 .mtime
= NO_CHANGE_64
,
471 CIFSSMBUnixSetFileInfo(xid
, tcon
, &args
, fid
.netfid
,
478 cifs_put_tlink(tlink
);
483 * Try to reacquire byte range locks that were released when session
486 static int cifs_relock_file(struct cifsFileInfo
*cifsFile
)
490 /* BB list all locks open on this file and relock */
496 cifs_reopen_file(struct cifsFileInfo
*cfile
, bool can_flush
)
501 struct cifs_sb_info
*cifs_sb
;
502 struct cifs_tcon
*tcon
;
503 struct TCP_Server_Info
*server
;
504 struct cifsInodeInfo
*cinode
;
506 char *full_path
= NULL
;
508 int disposition
= FILE_OPEN
;
509 int create_options
= CREATE_NOT_DIR
;
513 mutex_lock(&cfile
->fh_mutex
);
514 if (!cfile
->invalidHandle
) {
515 mutex_unlock(&cfile
->fh_mutex
);
521 inode
= cfile
->dentry
->d_inode
;
522 cifs_sb
= CIFS_SB(inode
->i_sb
);
523 tcon
= tlink_tcon(cfile
->tlink
);
524 server
= tcon
->ses
->server
;
527 * Can not grab rename sem here because various ops, including those
528 * that already have the rename sem can end up causing writepage to get
529 * called and if the server was down that means we end up here, and we
530 * can never tell if the caller already has the rename_sem.
532 full_path
= build_path_from_dentry(cfile
->dentry
);
533 if (full_path
== NULL
) {
535 mutex_unlock(&cfile
->fh_mutex
);
540 cFYI(1, "inode = 0x%p file flags 0x%x for %s", inode
, cfile
->f_flags
,
543 if (tcon
->ses
->server
->oplocks
)
548 if (tcon
->unix_ext
&& cap_unix(tcon
->ses
) &&
549 (CIFS_UNIX_POSIX_PATH_OPS_CAP
&
550 le64_to_cpu(tcon
->fsUnixInfo
.Capability
))) {
552 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the
553 * original open. Must mask them off for a reopen.
555 unsigned int oflags
= cfile
->f_flags
&
556 ~(O_CREAT
| O_EXCL
| O_TRUNC
);
558 rc
= cifs_posix_open(full_path
, NULL
, inode
->i_sb
,
559 cifs_sb
->mnt_file_mode
/* ignored */,
560 oflags
, &oplock
, &fid
.netfid
, xid
);
562 cFYI(1, "posix reopen succeeded");
566 * fallthrough to retry open the old way on errors, especially
567 * in the reconnect path it is important to retry hard
571 desired_access
= cifs_convert_flags(cfile
->f_flags
);
573 if (backup_cred(cifs_sb
))
574 create_options
|= CREATE_OPEN_BACKUP_INTENT
;
576 if (server
->ops
->get_lease_key
)
577 server
->ops
->get_lease_key(inode
, &fid
);
580 * Can not refresh inode by passing in file_info buf to be returned by
581 * CIFSSMBOpen and then calling get_inode_info with returned buf since
582 * file might have write behind data that needs to be flushed and server
583 * version of file size can be stale. If we knew for sure that inode was
584 * not dirty locally we could do this.
586 rc
= server
->ops
->open(xid
, tcon
, full_path
, disposition
,
587 desired_access
, create_options
, &fid
, &oplock
,
590 mutex_unlock(&cfile
->fh_mutex
);
591 cFYI(1, "cifs_reopen returned 0x%x", rc
);
592 cFYI(1, "oplock: %d", oplock
);
593 goto reopen_error_exit
;
597 cfile
->invalidHandle
= false;
598 mutex_unlock(&cfile
->fh_mutex
);
599 cinode
= CIFS_I(inode
);
602 rc
= filemap_write_and_wait(inode
->i_mapping
);
603 mapping_set_error(inode
->i_mapping
, rc
);
606 rc
= cifs_get_inode_info_unix(&inode
, full_path
,
609 rc
= cifs_get_inode_info(&inode
, full_path
, NULL
,
610 inode
->i_sb
, xid
, NULL
);
613 * Else we are writing out data to server already and could deadlock if
614 * we tried to flush data, and since we do not know if we have data that
615 * would invalidate the current end of file on the server we can not go
616 * to the server to get the new inode info.
619 server
->ops
->set_fid(cfile
, &fid
, oplock
);
620 cifs_relock_file(cfile
);
628 int cifs_close(struct inode
*inode
, struct file
*file
)
630 if (file
->private_data
!= NULL
) {
631 cifsFileInfo_put(file
->private_data
);
632 file
->private_data
= NULL
;
635 /* return code from the ->release op is always ignored */
639 int cifs_closedir(struct inode
*inode
, struct file
*file
)
643 struct cifsFileInfo
*cfile
= file
->private_data
;
644 struct cifs_tcon
*tcon
;
645 struct TCP_Server_Info
*server
;
648 cFYI(1, "Closedir inode = 0x%p", inode
);
654 tcon
= tlink_tcon(cfile
->tlink
);
655 server
= tcon
->ses
->server
;
657 cFYI(1, "Freeing private data in close dir");
658 spin_lock(&cifs_file_list_lock
);
659 if (!cfile
->srch_inf
.endOfSearch
&& !cfile
->invalidHandle
) {
660 cfile
->invalidHandle
= true;
661 spin_unlock(&cifs_file_list_lock
);
662 if (server
->ops
->close_dir
)
663 rc
= server
->ops
->close_dir(xid
, tcon
, &cfile
->fid
);
666 cFYI(1, "Closing uncompleted readdir with rc %d", rc
);
667 /* not much we can do if it fails anyway, ignore rc */
670 spin_unlock(&cifs_file_list_lock
);
672 buf
= cfile
->srch_inf
.ntwrk_buf_start
;
674 cFYI(1, "closedir free smb buf in srch struct");
675 cfile
->srch_inf
.ntwrk_buf_start
= NULL
;
676 if (cfile
->srch_inf
.smallBuf
)
677 cifs_small_buf_release(buf
);
679 cifs_buf_release(buf
);
682 cifs_put_tlink(cfile
->tlink
);
683 kfree(file
->private_data
);
684 file
->private_data
= NULL
;
685 /* BB can we lock the filestruct while this is going on? */
690 static struct cifsLockInfo
*
691 cifs_lock_init(__u64 offset
, __u64 length
, __u8 type
)
693 struct cifsLockInfo
*lock
=
694 kmalloc(sizeof(struct cifsLockInfo
), GFP_KERNEL
);
697 lock
->offset
= offset
;
698 lock
->length
= length
;
700 lock
->pid
= current
->tgid
;
701 INIT_LIST_HEAD(&lock
->blist
);
702 init_waitqueue_head(&lock
->block_q
);
707 cifs_del_lock_waiters(struct cifsLockInfo
*lock
)
709 struct cifsLockInfo
*li
, *tmp
;
710 list_for_each_entry_safe(li
, tmp
, &lock
->blist
, blist
) {
711 list_del_init(&li
->blist
);
712 wake_up(&li
->block_q
);
717 cifs_find_fid_lock_conflict(struct cifs_fid_locks
*fdlocks
, __u64 offset
,
718 __u64 length
, __u8 type
, struct cifsFileInfo
*cfile
,
719 struct cifsLockInfo
**conf_lock
, bool rw_check
)
721 struct cifsLockInfo
*li
;
722 struct cifsFileInfo
*cur_cfile
= fdlocks
->cfile
;
723 struct TCP_Server_Info
*server
= tlink_tcon(cfile
->tlink
)->ses
->server
;
725 list_for_each_entry(li
, &fdlocks
->locks
, llist
) {
726 if (offset
+ length
<= li
->offset
||
727 offset
>= li
->offset
+ li
->length
)
729 if (rw_check
&& server
->ops
->compare_fids(cfile
, cur_cfile
) &&
730 current
->tgid
== li
->pid
)
732 if ((type
& server
->vals
->shared_lock_type
) &&
733 ((server
->ops
->compare_fids(cfile
, cur_cfile
) &&
734 current
->tgid
== li
->pid
) || type
== li
->type
))
744 cifs_find_lock_conflict(struct cifsFileInfo
*cfile
, __u64 offset
, __u64 length
,
745 __u8 type
, struct cifsLockInfo
**conf_lock
,
749 struct cifs_fid_locks
*cur
;
750 struct cifsInodeInfo
*cinode
= CIFS_I(cfile
->dentry
->d_inode
);
752 list_for_each_entry(cur
, &cinode
->llist
, llist
) {
753 rc
= cifs_find_fid_lock_conflict(cur
, offset
, length
, type
,
754 cfile
, conf_lock
, rw_check
);
763 * Check if there is another lock that prevents us to set the lock (mandatory
764 * style). If such a lock exists, update the flock structure with its
765 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
766 * or leave it the same if we can't. Returns 0 if we don't need to request to
767 * the server or 1 otherwise.
770 cifs_lock_test(struct cifsFileInfo
*cfile
, __u64 offset
, __u64 length
,
771 __u8 type
, struct file_lock
*flock
)
774 struct cifsLockInfo
*conf_lock
;
775 struct cifsInodeInfo
*cinode
= CIFS_I(cfile
->dentry
->d_inode
);
776 struct TCP_Server_Info
*server
= tlink_tcon(cfile
->tlink
)->ses
->server
;
779 down_read(&cinode
->lock_sem
);
781 exist
= cifs_find_lock_conflict(cfile
, offset
, length
, type
,
784 flock
->fl_start
= conf_lock
->offset
;
785 flock
->fl_end
= conf_lock
->offset
+ conf_lock
->length
- 1;
786 flock
->fl_pid
= conf_lock
->pid
;
787 if (conf_lock
->type
& server
->vals
->shared_lock_type
)
788 flock
->fl_type
= F_RDLCK
;
790 flock
->fl_type
= F_WRLCK
;
791 } else if (!cinode
->can_cache_brlcks
)
794 flock
->fl_type
= F_UNLCK
;
796 up_read(&cinode
->lock_sem
);
801 cifs_lock_add(struct cifsFileInfo
*cfile
, struct cifsLockInfo
*lock
)
803 struct cifsInodeInfo
*cinode
= CIFS_I(cfile
->dentry
->d_inode
);
804 down_write(&cinode
->lock_sem
);
805 list_add_tail(&lock
->llist
, &cfile
->llist
->locks
);
806 up_write(&cinode
->lock_sem
);
810 * Set the byte-range lock (mandatory style). Returns:
811 * 1) 0, if we set the lock and don't need to request to the server;
812 * 2) 1, if no locks prevent us but we need to request to the server;
813 * 3) -EACCESS, if there is a lock that prevents us and wait is false.
816 cifs_lock_add_if(struct cifsFileInfo
*cfile
, struct cifsLockInfo
*lock
,
819 struct cifsLockInfo
*conf_lock
;
820 struct cifsInodeInfo
*cinode
= CIFS_I(cfile
->dentry
->d_inode
);
826 down_write(&cinode
->lock_sem
);
828 exist
= cifs_find_lock_conflict(cfile
, lock
->offset
, lock
->length
,
829 lock
->type
, &conf_lock
, false);
830 if (!exist
&& cinode
->can_cache_brlcks
) {
831 list_add_tail(&lock
->llist
, &cfile
->llist
->locks
);
832 up_write(&cinode
->lock_sem
);
841 list_add_tail(&lock
->blist
, &conf_lock
->blist
);
842 up_write(&cinode
->lock_sem
);
843 rc
= wait_event_interruptible(lock
->block_q
,
844 (lock
->blist
.prev
== &lock
->blist
) &&
845 (lock
->blist
.next
== &lock
->blist
));
848 down_write(&cinode
->lock_sem
);
849 list_del_init(&lock
->blist
);
852 up_write(&cinode
->lock_sem
);
857 * Check if there is another lock that prevents us to set the lock (posix
858 * style). If such a lock exists, update the flock structure with its
859 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
860 * or leave it the same if we can't. Returns 0 if we don't need to request to
861 * the server or 1 otherwise.
864 cifs_posix_lock_test(struct file
*file
, struct file_lock
*flock
)
867 struct cifsInodeInfo
*cinode
= CIFS_I(file
->f_path
.dentry
->d_inode
);
868 unsigned char saved_type
= flock
->fl_type
;
870 if ((flock
->fl_flags
& FL_POSIX
) == 0)
873 down_read(&cinode
->lock_sem
);
874 posix_test_lock(file
, flock
);
876 if (flock
->fl_type
== F_UNLCK
&& !cinode
->can_cache_brlcks
) {
877 flock
->fl_type
= saved_type
;
881 up_read(&cinode
->lock_sem
);
886 * Set the byte-range lock (posix style). Returns:
887 * 1) 0, if we set the lock and don't need to request to the server;
888 * 2) 1, if we need to request to the server;
889 * 3) <0, if the error occurs while setting the lock.
892 cifs_posix_lock_set(struct file
*file
, struct file_lock
*flock
)
894 struct cifsInodeInfo
*cinode
= CIFS_I(file
->f_path
.dentry
->d_inode
);
897 if ((flock
->fl_flags
& FL_POSIX
) == 0)
901 down_write(&cinode
->lock_sem
);
902 if (!cinode
->can_cache_brlcks
) {
903 up_write(&cinode
->lock_sem
);
907 rc
= posix_lock_file(file
, flock
, NULL
);
908 up_write(&cinode
->lock_sem
);
909 if (rc
== FILE_LOCK_DEFERRED
) {
910 rc
= wait_event_interruptible(flock
->fl_wait
, !flock
->fl_next
);
913 locks_delete_block(flock
);
919 cifs_push_mandatory_locks(struct cifsFileInfo
*cfile
)
922 int rc
= 0, stored_rc
;
923 struct cifsLockInfo
*li
, *tmp
;
924 struct cifs_tcon
*tcon
;
925 struct cifsInodeInfo
*cinode
= CIFS_I(cfile
->dentry
->d_inode
);
926 unsigned int num
, max_num
, max_buf
;
927 LOCKING_ANDX_RANGE
*buf
, *cur
;
928 int types
[] = {LOCKING_ANDX_LARGE_FILES
,
929 LOCKING_ANDX_SHARED_LOCK
| LOCKING_ANDX_LARGE_FILES
};
933 tcon
= tlink_tcon(cfile
->tlink
);
935 /* we are going to update can_cache_brlcks here - need a write access */
936 down_write(&cinode
->lock_sem
);
937 if (!cinode
->can_cache_brlcks
) {
938 up_write(&cinode
->lock_sem
);
944 * Accessing maxBuf is racy with cifs_reconnect - need to store value
945 * and check it for zero before using.
947 max_buf
= tcon
->ses
->server
->maxBuf
;
949 up_write(&cinode
->lock_sem
);
954 max_num
= (max_buf
- sizeof(struct smb_hdr
)) /
955 sizeof(LOCKING_ANDX_RANGE
);
956 buf
= kzalloc(max_num
* sizeof(LOCKING_ANDX_RANGE
), GFP_KERNEL
);
958 up_write(&cinode
->lock_sem
);
963 for (i
= 0; i
< 2; i
++) {
966 list_for_each_entry_safe(li
, tmp
, &cfile
->llist
->locks
, llist
) {
967 if (li
->type
!= types
[i
])
969 cur
->Pid
= cpu_to_le16(li
->pid
);
970 cur
->LengthLow
= cpu_to_le32((u32
)li
->length
);
971 cur
->LengthHigh
= cpu_to_le32((u32
)(li
->length
>>32));
972 cur
->OffsetLow
= cpu_to_le32((u32
)li
->offset
);
973 cur
->OffsetHigh
= cpu_to_le32((u32
)(li
->offset
>>32));
974 if (++num
== max_num
) {
975 stored_rc
= cifs_lockv(xid
, tcon
,
977 (__u8
)li
->type
, 0, num
,
988 stored_rc
= cifs_lockv(xid
, tcon
, cfile
->fid
.netfid
,
989 (__u8
)types
[i
], 0, num
, buf
);
995 cinode
->can_cache_brlcks
= false;
996 up_write(&cinode
->lock_sem
);
1003 /* copied from fs/locks.c with a name change */
1004 #define cifs_for_each_lock(inode, lockp) \
1005 for (lockp = &inode->i_flock; *lockp != NULL; \
1006 lockp = &(*lockp)->fl_next)
1008 struct lock_to_push
{
1009 struct list_head llist
;
1018 cifs_push_posix_locks(struct cifsFileInfo
*cfile
)
1020 struct cifsInodeInfo
*cinode
= CIFS_I(cfile
->dentry
->d_inode
);
1021 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
1022 struct file_lock
*flock
, **before
;
1023 unsigned int count
= 0, i
= 0;
1024 int rc
= 0, xid
, type
;
1025 struct list_head locks_to_send
, *el
;
1026 struct lock_to_push
*lck
, *tmp
;
1031 /* we are going to update can_cache_brlcks here - need a write access */
1032 down_write(&cinode
->lock_sem
);
1033 if (!cinode
->can_cache_brlcks
) {
1034 up_write(&cinode
->lock_sem
);
1040 cifs_for_each_lock(cfile
->dentry
->d_inode
, before
) {
1041 if ((*before
)->fl_flags
& FL_POSIX
)
1046 INIT_LIST_HEAD(&locks_to_send
);
1049 * Allocating count locks is enough because no FL_POSIX locks can be
1050 * added to the list while we are holding cinode->lock_sem that
1051 * protects locking operations of this inode.
1053 for (; i
< count
; i
++) {
1054 lck
= kmalloc(sizeof(struct lock_to_push
), GFP_KERNEL
);
1059 list_add_tail(&lck
->llist
, &locks_to_send
);
1062 el
= locks_to_send
.next
;
1064 cifs_for_each_lock(cfile
->dentry
->d_inode
, before
) {
1066 if ((flock
->fl_flags
& FL_POSIX
) == 0)
1068 if (el
== &locks_to_send
) {
1070 * The list ended. We don't have enough allocated
1071 * structures - something is really wrong.
1073 cERROR(1, "Can't push all brlocks!");
1076 length
= 1 + flock
->fl_end
- flock
->fl_start
;
1077 if (flock
->fl_type
== F_RDLCK
|| flock
->fl_type
== F_SHLCK
)
1081 lck
= list_entry(el
, struct lock_to_push
, llist
);
1082 lck
->pid
= flock
->fl_pid
;
1083 lck
->netfid
= cfile
->fid
.netfid
;
1084 lck
->length
= length
;
1086 lck
->offset
= flock
->fl_start
;
1091 list_for_each_entry_safe(lck
, tmp
, &locks_to_send
, llist
) {
1094 stored_rc
= CIFSSMBPosixLock(xid
, tcon
, lck
->netfid
, lck
->pid
,
1095 lck
->offset
, lck
->length
, NULL
,
1099 list_del(&lck
->llist
);
1104 cinode
->can_cache_brlcks
= false;
1105 up_write(&cinode
->lock_sem
);
1110 list_for_each_entry_safe(lck
, tmp
, &locks_to_send
, llist
) {
1111 list_del(&lck
->llist
);
1118 cifs_push_locks(struct cifsFileInfo
*cfile
)
1120 struct cifs_sb_info
*cifs_sb
= CIFS_SB(cfile
->dentry
->d_sb
);
1121 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
1123 if (cap_unix(tcon
->ses
) &&
1124 (CIFS_UNIX_FCNTL_CAP
& le64_to_cpu(tcon
->fsUnixInfo
.Capability
)) &&
1125 ((cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOPOSIXBRL
) == 0))
1126 return cifs_push_posix_locks(cfile
);
1128 return tcon
->ses
->server
->ops
->push_mand_locks(cfile
);
1132 cifs_read_flock(struct file_lock
*flock
, __u32
*type
, int *lock
, int *unlock
,
1133 bool *wait_flag
, struct TCP_Server_Info
*server
)
1135 if (flock
->fl_flags
& FL_POSIX
)
1137 if (flock
->fl_flags
& FL_FLOCK
)
1139 if (flock
->fl_flags
& FL_SLEEP
) {
1140 cFYI(1, "Blocking lock");
1143 if (flock
->fl_flags
& FL_ACCESS
)
1144 cFYI(1, "Process suspended by mandatory locking - "
1145 "not implemented yet");
1146 if (flock
->fl_flags
& FL_LEASE
)
1147 cFYI(1, "Lease on file - not implemented yet");
1148 if (flock
->fl_flags
&
1149 (~(FL_POSIX
| FL_FLOCK
| FL_SLEEP
| FL_ACCESS
| FL_LEASE
)))
1150 cFYI(1, "Unknown lock flags 0x%x", flock
->fl_flags
);
1152 *type
= server
->vals
->large_lock_type
;
1153 if (flock
->fl_type
== F_WRLCK
) {
1154 cFYI(1, "F_WRLCK ");
1155 *type
|= server
->vals
->exclusive_lock_type
;
1157 } else if (flock
->fl_type
== F_UNLCK
) {
1159 *type
|= server
->vals
->unlock_lock_type
;
1161 /* Check if unlock includes more than one lock range */
1162 } else if (flock
->fl_type
== F_RDLCK
) {
1164 *type
|= server
->vals
->shared_lock_type
;
1166 } else if (flock
->fl_type
== F_EXLCK
) {
1168 *type
|= server
->vals
->exclusive_lock_type
;
1170 } else if (flock
->fl_type
== F_SHLCK
) {
1172 *type
|= server
->vals
->shared_lock_type
;
1175 cFYI(1, "Unknown type of lock");
1179 cifs_getlk(struct file
*file
, struct file_lock
*flock
, __u32 type
,
1180 bool wait_flag
, bool posix_lck
, unsigned int xid
)
1183 __u64 length
= 1 + flock
->fl_end
- flock
->fl_start
;
1184 struct cifsFileInfo
*cfile
= (struct cifsFileInfo
*)file
->private_data
;
1185 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
1186 struct TCP_Server_Info
*server
= tcon
->ses
->server
;
1187 __u16 netfid
= cfile
->fid
.netfid
;
1190 int posix_lock_type
;
1192 rc
= cifs_posix_lock_test(file
, flock
);
1196 if (type
& server
->vals
->shared_lock_type
)
1197 posix_lock_type
= CIFS_RDLCK
;
1199 posix_lock_type
= CIFS_WRLCK
;
1200 rc
= CIFSSMBPosixLock(xid
, tcon
, netfid
, current
->tgid
,
1201 flock
->fl_start
, length
, flock
,
1202 posix_lock_type
, wait_flag
);
1206 rc
= cifs_lock_test(cfile
, flock
->fl_start
, length
, type
, flock
);
1210 /* BB we could chain these into one lock request BB */
1211 rc
= server
->ops
->mand_lock(xid
, cfile
, flock
->fl_start
, length
, type
,
1214 rc
= server
->ops
->mand_lock(xid
, cfile
, flock
->fl_start
, length
,
1216 flock
->fl_type
= F_UNLCK
;
1218 cERROR(1, "Error unlocking previously locked "
1219 "range %d during test of lock", rc
);
1223 if (type
& server
->vals
->shared_lock_type
) {
1224 flock
->fl_type
= F_WRLCK
;
1228 type
&= ~server
->vals
->exclusive_lock_type
;
1230 rc
= server
->ops
->mand_lock(xid
, cfile
, flock
->fl_start
, length
,
1231 type
| server
->vals
->shared_lock_type
,
1234 rc
= server
->ops
->mand_lock(xid
, cfile
, flock
->fl_start
, length
,
1235 type
| server
->vals
->shared_lock_type
, 0, 1, false);
1236 flock
->fl_type
= F_RDLCK
;
1238 cERROR(1, "Error unlocking previously locked "
1239 "range %d during test of lock", rc
);
1241 flock
->fl_type
= F_WRLCK
;
1247 cifs_move_llist(struct list_head
*source
, struct list_head
*dest
)
1249 struct list_head
*li
, *tmp
;
1250 list_for_each_safe(li
, tmp
, source
)
1251 list_move(li
, dest
);
1255 cifs_free_llist(struct list_head
*llist
)
1257 struct cifsLockInfo
*li
, *tmp
;
1258 list_for_each_entry_safe(li
, tmp
, llist
, llist
) {
1259 cifs_del_lock_waiters(li
);
1260 list_del(&li
->llist
);
1266 cifs_unlock_range(struct cifsFileInfo
*cfile
, struct file_lock
*flock
,
1269 int rc
= 0, stored_rc
;
1270 int types
[] = {LOCKING_ANDX_LARGE_FILES
,
1271 LOCKING_ANDX_SHARED_LOCK
| LOCKING_ANDX_LARGE_FILES
};
1273 unsigned int max_num
, num
, max_buf
;
1274 LOCKING_ANDX_RANGE
*buf
, *cur
;
1275 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
1276 struct cifsInodeInfo
*cinode
= CIFS_I(cfile
->dentry
->d_inode
);
1277 struct cifsLockInfo
*li
, *tmp
;
1278 __u64 length
= 1 + flock
->fl_end
- flock
->fl_start
;
1279 struct list_head tmp_llist
;
1281 INIT_LIST_HEAD(&tmp_llist
);
1284 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1285 * and check it for zero before using.
1287 max_buf
= tcon
->ses
->server
->maxBuf
;
1291 max_num
= (max_buf
- sizeof(struct smb_hdr
)) /
1292 sizeof(LOCKING_ANDX_RANGE
);
1293 buf
= kzalloc(max_num
* sizeof(LOCKING_ANDX_RANGE
), GFP_KERNEL
);
1297 down_write(&cinode
->lock_sem
);
1298 for (i
= 0; i
< 2; i
++) {
1301 list_for_each_entry_safe(li
, tmp
, &cfile
->llist
->locks
, llist
) {
1302 if (flock
->fl_start
> li
->offset
||
1303 (flock
->fl_start
+ length
) <
1304 (li
->offset
+ li
->length
))
1306 if (current
->tgid
!= li
->pid
)
1308 if (types
[i
] != li
->type
)
1310 if (cinode
->can_cache_brlcks
) {
1312 * We can cache brlock requests - simply remove
1313 * a lock from the file's list.
1315 list_del(&li
->llist
);
1316 cifs_del_lock_waiters(li
);
1320 cur
->Pid
= cpu_to_le16(li
->pid
);
1321 cur
->LengthLow
= cpu_to_le32((u32
)li
->length
);
1322 cur
->LengthHigh
= cpu_to_le32((u32
)(li
->length
>>32));
1323 cur
->OffsetLow
= cpu_to_le32((u32
)li
->offset
);
1324 cur
->OffsetHigh
= cpu_to_le32((u32
)(li
->offset
>>32));
1326 * We need to save a lock here to let us add it again to
1327 * the file's list if the unlock range request fails on
1330 list_move(&li
->llist
, &tmp_llist
);
1331 if (++num
== max_num
) {
1332 stored_rc
= cifs_lockv(xid
, tcon
,
1334 li
->type
, num
, 0, buf
);
1337 * We failed on the unlock range
1338 * request - add all locks from the tmp
1339 * list to the head of the file's list.
1341 cifs_move_llist(&tmp_llist
,
1342 &cfile
->llist
->locks
);
1346 * The unlock range request succeed -
1347 * free the tmp list.
1349 cifs_free_llist(&tmp_llist
);
1356 stored_rc
= cifs_lockv(xid
, tcon
, cfile
->fid
.netfid
,
1357 types
[i
], num
, 0, buf
);
1359 cifs_move_llist(&tmp_llist
,
1360 &cfile
->llist
->locks
);
1363 cifs_free_llist(&tmp_llist
);
1367 up_write(&cinode
->lock_sem
);
1373 cifs_setlk(struct file
*file
, struct file_lock
*flock
, __u32 type
,
1374 bool wait_flag
, bool posix_lck
, int lock
, int unlock
,
1378 __u64 length
= 1 + flock
->fl_end
- flock
->fl_start
;
1379 struct cifsFileInfo
*cfile
= (struct cifsFileInfo
*)file
->private_data
;
1380 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
1381 struct TCP_Server_Info
*server
= tcon
->ses
->server
;
1384 int posix_lock_type
;
1386 rc
= cifs_posix_lock_set(file
, flock
);
1390 if (type
& server
->vals
->shared_lock_type
)
1391 posix_lock_type
= CIFS_RDLCK
;
1393 posix_lock_type
= CIFS_WRLCK
;
1396 posix_lock_type
= CIFS_UNLCK
;
1398 rc
= CIFSSMBPosixLock(xid
, tcon
, cfile
->fid
.netfid
,
1399 current
->tgid
, flock
->fl_start
, length
,
1400 NULL
, posix_lock_type
, wait_flag
);
1405 struct cifsLockInfo
*lock
;
1407 lock
= cifs_lock_init(flock
->fl_start
, length
, type
);
1411 rc
= cifs_lock_add_if(cfile
, lock
, wait_flag
);
1417 rc
= server
->ops
->mand_lock(xid
, cfile
, flock
->fl_start
, length
,
1418 type
, 1, 0, wait_flag
);
1424 cifs_lock_add(cfile
, lock
);
1426 rc
= server
->ops
->mand_unlock_range(cfile
, flock
, xid
);
1429 if (flock
->fl_flags
& FL_POSIX
)
1430 posix_lock_file_wait(file
, flock
);
1434 int cifs_lock(struct file
*file
, int cmd
, struct file_lock
*flock
)
1437 int lock
= 0, unlock
= 0;
1438 bool wait_flag
= false;
1439 bool posix_lck
= false;
1440 struct cifs_sb_info
*cifs_sb
;
1441 struct cifs_tcon
*tcon
;
1442 struct cifsInodeInfo
*cinode
;
1443 struct cifsFileInfo
*cfile
;
1450 cFYI(1, "Lock parm: 0x%x flockflags: 0x%x flocktype: 0x%x start: %lld "
1451 "end: %lld", cmd
, flock
->fl_flags
, flock
->fl_type
,
1452 flock
->fl_start
, flock
->fl_end
);
1454 cfile
= (struct cifsFileInfo
*)file
->private_data
;
1455 tcon
= tlink_tcon(cfile
->tlink
);
1457 cifs_read_flock(flock
, &type
, &lock
, &unlock
, &wait_flag
,
1460 cifs_sb
= CIFS_SB(file
->f_path
.dentry
->d_sb
);
1461 netfid
= cfile
->fid
.netfid
;
1462 cinode
= CIFS_I(file
->f_path
.dentry
->d_inode
);
1464 if (cap_unix(tcon
->ses
) &&
1465 (CIFS_UNIX_FCNTL_CAP
& le64_to_cpu(tcon
->fsUnixInfo
.Capability
)) &&
1466 ((cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOPOSIXBRL
) == 0))
1469 * BB add code here to normalize offset and length to account for
1470 * negative length which we can not accept over the wire.
1472 if (IS_GETLK(cmd
)) {
1473 rc
= cifs_getlk(file
, flock
, type
, wait_flag
, posix_lck
, xid
);
1478 if (!lock
&& !unlock
) {
1480 * if no lock or unlock then nothing to do since we do not
1487 rc
= cifs_setlk(file
, flock
, type
, wait_flag
, posix_lck
, lock
, unlock
,
1494 * update the file size (if needed) after a write. Should be called with
1495 * the inode->i_lock held
1498 cifs_update_eof(struct cifsInodeInfo
*cifsi
, loff_t offset
,
1499 unsigned int bytes_written
)
1501 loff_t end_of_write
= offset
+ bytes_written
;
1503 if (end_of_write
> cifsi
->server_eof
)
1504 cifsi
->server_eof
= end_of_write
;
1508 cifs_write(struct cifsFileInfo
*open_file
, __u32 pid
, const char *write_data
,
1509 size_t write_size
, loff_t
*offset
)
1512 unsigned int bytes_written
= 0;
1513 unsigned int total_written
;
1514 struct cifs_sb_info
*cifs_sb
;
1515 struct cifs_tcon
*tcon
;
1516 struct TCP_Server_Info
*server
;
1518 struct dentry
*dentry
= open_file
->dentry
;
1519 struct cifsInodeInfo
*cifsi
= CIFS_I(dentry
->d_inode
);
1520 struct cifs_io_parms io_parms
;
1522 cifs_sb
= CIFS_SB(dentry
->d_sb
);
1524 cFYI(1, "write %zd bytes to offset %lld of %s", write_size
,
1525 *offset
, dentry
->d_name
.name
);
1527 tcon
= tlink_tcon(open_file
->tlink
);
1528 server
= tcon
->ses
->server
;
1530 if (!server
->ops
->sync_write
)
1535 for (total_written
= 0; write_size
> total_written
;
1536 total_written
+= bytes_written
) {
1538 while (rc
== -EAGAIN
) {
1542 if (open_file
->invalidHandle
) {
1543 /* we could deadlock if we called
1544 filemap_fdatawait from here so tell
1545 reopen_file not to flush data to
1547 rc
= cifs_reopen_file(open_file
, false);
1552 len
= min((size_t)cifs_sb
->wsize
,
1553 write_size
- total_written
);
1554 /* iov[0] is reserved for smb header */
1555 iov
[1].iov_base
= (char *)write_data
+ total_written
;
1556 iov
[1].iov_len
= len
;
1558 io_parms
.tcon
= tcon
;
1559 io_parms
.offset
= *offset
;
1560 io_parms
.length
= len
;
1561 rc
= server
->ops
->sync_write(xid
, open_file
, &io_parms
,
1562 &bytes_written
, iov
, 1);
1564 if (rc
|| (bytes_written
== 0)) {
1572 spin_lock(&dentry
->d_inode
->i_lock
);
1573 cifs_update_eof(cifsi
, *offset
, bytes_written
);
1574 spin_unlock(&dentry
->d_inode
->i_lock
);
1575 *offset
+= bytes_written
;
1579 cifs_stats_bytes_written(tcon
, total_written
);
1581 if (total_written
> 0) {
1582 spin_lock(&dentry
->d_inode
->i_lock
);
1583 if (*offset
> dentry
->d_inode
->i_size
)
1584 i_size_write(dentry
->d_inode
, *offset
);
1585 spin_unlock(&dentry
->d_inode
->i_lock
);
1587 mark_inode_dirty_sync(dentry
->d_inode
);
1589 return total_written
;
1592 struct cifsFileInfo
*find_readable_file(struct cifsInodeInfo
*cifs_inode
,
1595 struct cifsFileInfo
*open_file
= NULL
;
1596 struct cifs_sb_info
*cifs_sb
= CIFS_SB(cifs_inode
->vfs_inode
.i_sb
);
1598 /* only filter by fsuid on multiuser mounts */
1599 if (!(cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_MULTIUSER
))
1602 spin_lock(&cifs_file_list_lock
);
1603 /* we could simply get the first_list_entry since write-only entries
1604 are always at the end of the list but since the first entry might
1605 have a close pending, we go through the whole list */
1606 list_for_each_entry(open_file
, &cifs_inode
->openFileList
, flist
) {
1607 if (fsuid_only
&& open_file
->uid
!= current_fsuid())
1609 if (OPEN_FMODE(open_file
->f_flags
) & FMODE_READ
) {
1610 if (!open_file
->invalidHandle
) {
1611 /* found a good file */
1612 /* lock it so it will not be closed on us */
1613 cifsFileInfo_get_locked(open_file
);
1614 spin_unlock(&cifs_file_list_lock
);
1616 } /* else might as well continue, and look for
1617 another, or simply have the caller reopen it
1618 again rather than trying to fix this handle */
1619 } else /* write only file */
1620 break; /* write only files are last so must be done */
1622 spin_unlock(&cifs_file_list_lock
);
1626 struct cifsFileInfo
*find_writable_file(struct cifsInodeInfo
*cifs_inode
,
1629 struct cifsFileInfo
*open_file
, *inv_file
= NULL
;
1630 struct cifs_sb_info
*cifs_sb
;
1631 bool any_available
= false;
1633 unsigned int refind
= 0;
1635 /* Having a null inode here (because mapping->host was set to zero by
1636 the VFS or MM) should not happen but we had reports of on oops (due to
1637 it being zero) during stress testcases so we need to check for it */
1639 if (cifs_inode
== NULL
) {
1640 cERROR(1, "Null inode passed to cifs_writeable_file");
1645 cifs_sb
= CIFS_SB(cifs_inode
->vfs_inode
.i_sb
);
1647 /* only filter by fsuid on multiuser mounts */
1648 if (!(cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_MULTIUSER
))
1651 spin_lock(&cifs_file_list_lock
);
1653 if (refind
> MAX_REOPEN_ATT
) {
1654 spin_unlock(&cifs_file_list_lock
);
1657 list_for_each_entry(open_file
, &cifs_inode
->openFileList
, flist
) {
1658 if (!any_available
&& open_file
->pid
!= current
->tgid
)
1660 if (fsuid_only
&& open_file
->uid
!= current_fsuid())
1662 if (OPEN_FMODE(open_file
->f_flags
) & FMODE_WRITE
) {
1663 if (!open_file
->invalidHandle
) {
1664 /* found a good writable file */
1665 cifsFileInfo_get_locked(open_file
);
1666 spin_unlock(&cifs_file_list_lock
);
1670 inv_file
= open_file
;
1674 /* couldn't find useable FH with same pid, try any available */
1675 if (!any_available
) {
1676 any_available
= true;
1677 goto refind_writable
;
1681 any_available
= false;
1682 cifsFileInfo_get_locked(inv_file
);
1685 spin_unlock(&cifs_file_list_lock
);
1688 rc
= cifs_reopen_file(inv_file
, false);
1692 spin_lock(&cifs_file_list_lock
);
1693 list_move_tail(&inv_file
->flist
,
1694 &cifs_inode
->openFileList
);
1695 spin_unlock(&cifs_file_list_lock
);
1696 cifsFileInfo_put(inv_file
);
1697 spin_lock(&cifs_file_list_lock
);
1699 goto refind_writable
;
1706 static int cifs_partialpagewrite(struct page
*page
, unsigned from
, unsigned to
)
1708 struct address_space
*mapping
= page
->mapping
;
1709 loff_t offset
= (loff_t
)page
->index
<< PAGE_CACHE_SHIFT
;
1712 int bytes_written
= 0;
1713 struct inode
*inode
;
1714 struct cifsFileInfo
*open_file
;
1716 if (!mapping
|| !mapping
->host
)
1719 inode
= page
->mapping
->host
;
1721 offset
+= (loff_t
)from
;
1722 write_data
= kmap(page
);
1725 if ((to
> PAGE_CACHE_SIZE
) || (from
> to
)) {
1730 /* racing with truncate? */
1731 if (offset
> mapping
->host
->i_size
) {
1733 return 0; /* don't care */
1736 /* check to make sure that we are not extending the file */
1737 if (mapping
->host
->i_size
- offset
< (loff_t
)to
)
1738 to
= (unsigned)(mapping
->host
->i_size
- offset
);
1740 open_file
= find_writable_file(CIFS_I(mapping
->host
), false);
1742 bytes_written
= cifs_write(open_file
, open_file
->pid
,
1743 write_data
, to
- from
, &offset
);
1744 cifsFileInfo_put(open_file
);
1745 /* Does mm or vfs already set times? */
1746 inode
->i_atime
= inode
->i_mtime
= current_fs_time(inode
->i_sb
);
1747 if ((bytes_written
> 0) && (offset
))
1749 else if (bytes_written
< 0)
1752 cFYI(1, "No writeable filehandles for inode");
1760 static int cifs_writepages(struct address_space
*mapping
,
1761 struct writeback_control
*wbc
)
1763 struct cifs_sb_info
*cifs_sb
= CIFS_SB(mapping
->host
->i_sb
);
1764 bool done
= false, scanned
= false, range_whole
= false;
1766 struct cifs_writedata
*wdata
;
1767 struct TCP_Server_Info
*server
;
1770 loff_t isize
= i_size_read(mapping
->host
);
1773 * If wsize is smaller than the page cache size, default to writing
1774 * one page at a time via cifs_writepage
1776 if (cifs_sb
->wsize
< PAGE_CACHE_SIZE
)
1777 return generic_writepages(mapping
, wbc
);
1779 if (wbc
->range_cyclic
) {
1780 index
= mapping
->writeback_index
; /* Start from prev offset */
1783 index
= wbc
->range_start
>> PAGE_CACHE_SHIFT
;
1784 end
= wbc
->range_end
>> PAGE_CACHE_SHIFT
;
1785 if (wbc
->range_start
== 0 && wbc
->range_end
== LLONG_MAX
)
1790 while (!done
&& index
<= end
) {
1791 unsigned int i
, nr_pages
, found_pages
;
1792 pgoff_t next
= 0, tofind
;
1793 struct page
**pages
;
1795 tofind
= min((cifs_sb
->wsize
/ PAGE_CACHE_SIZE
) - 1,
1798 wdata
= cifs_writedata_alloc((unsigned int)tofind
,
1799 cifs_writev_complete
);
1806 * find_get_pages_tag seems to return a max of 256 on each
1807 * iteration, so we must call it several times in order to
1808 * fill the array or the wsize is effectively limited to
1809 * 256 * PAGE_CACHE_SIZE.
1812 pages
= wdata
->pages
;
1814 nr_pages
= find_get_pages_tag(mapping
, &index
,
1815 PAGECACHE_TAG_DIRTY
,
1817 found_pages
+= nr_pages
;
1820 } while (nr_pages
&& tofind
&& index
<= end
);
1822 if (found_pages
== 0) {
1823 kref_put(&wdata
->refcount
, cifs_writedata_release
);
1828 for (i
= 0; i
< found_pages
; i
++) {
1829 page
= wdata
->pages
[i
];
1831 * At this point we hold neither mapping->tree_lock nor
1832 * lock on the page itself: the page may be truncated or
1833 * invalidated (changing page->mapping to NULL), or even
1834 * swizzled back from swapper_space to tmpfs file
1840 else if (!trylock_page(page
))
1843 if (unlikely(page
->mapping
!= mapping
)) {
1848 if (!wbc
->range_cyclic
&& page
->index
> end
) {
1854 if (next
&& (page
->index
!= next
)) {
1855 /* Not next consecutive page */
1860 if (wbc
->sync_mode
!= WB_SYNC_NONE
)
1861 wait_on_page_writeback(page
);
1863 if (PageWriteback(page
) ||
1864 !clear_page_dirty_for_io(page
)) {
1870 * This actually clears the dirty bit in the radix tree.
1871 * See cifs_writepage() for more commentary.
1873 set_page_writeback(page
);
1875 if (page_offset(page
) >= isize
) {
1878 end_page_writeback(page
);
1882 wdata
->pages
[i
] = page
;
1883 next
= page
->index
+ 1;
1887 /* reset index to refind any pages skipped */
1889 index
= wdata
->pages
[0]->index
+ 1;
1891 /* put any pages we aren't going to use */
1892 for (i
= nr_pages
; i
< found_pages
; i
++) {
1893 page_cache_release(wdata
->pages
[i
]);
1894 wdata
->pages
[i
] = NULL
;
1897 /* nothing to write? */
1898 if (nr_pages
== 0) {
1899 kref_put(&wdata
->refcount
, cifs_writedata_release
);
1903 wdata
->sync_mode
= wbc
->sync_mode
;
1904 wdata
->nr_pages
= nr_pages
;
1905 wdata
->offset
= page_offset(wdata
->pages
[0]);
1906 wdata
->pagesz
= PAGE_CACHE_SIZE
;
1908 min(isize
- page_offset(wdata
->pages
[nr_pages
- 1]),
1909 (loff_t
)PAGE_CACHE_SIZE
);
1910 wdata
->bytes
= ((nr_pages
- 1) * PAGE_CACHE_SIZE
) +
1914 if (wdata
->cfile
!= NULL
)
1915 cifsFileInfo_put(wdata
->cfile
);
1916 wdata
->cfile
= find_writable_file(CIFS_I(mapping
->host
),
1918 if (!wdata
->cfile
) {
1919 cERROR(1, "No writable handles for inode");
1923 wdata
->pid
= wdata
->cfile
->pid
;
1924 server
= tlink_tcon(wdata
->cfile
->tlink
)->ses
->server
;
1925 rc
= server
->ops
->async_writev(wdata
);
1926 } while (wbc
->sync_mode
== WB_SYNC_ALL
&& rc
== -EAGAIN
);
1928 for (i
= 0; i
< nr_pages
; ++i
)
1929 unlock_page(wdata
->pages
[i
]);
1931 /* send failure -- clean up the mess */
1933 for (i
= 0; i
< nr_pages
; ++i
) {
1935 redirty_page_for_writepage(wbc
,
1938 SetPageError(wdata
->pages
[i
]);
1939 end_page_writeback(wdata
->pages
[i
]);
1940 page_cache_release(wdata
->pages
[i
]);
1943 mapping_set_error(mapping
, rc
);
1945 kref_put(&wdata
->refcount
, cifs_writedata_release
);
1947 wbc
->nr_to_write
-= nr_pages
;
1948 if (wbc
->nr_to_write
<= 0)
1954 if (!scanned
&& !done
) {
1956 * We hit the last page and there is more work to be done: wrap
1957 * back to the start of the file
1964 if (wbc
->range_cyclic
|| (range_whole
&& wbc
->nr_to_write
> 0))
1965 mapping
->writeback_index
= index
;
1971 cifs_writepage_locked(struct page
*page
, struct writeback_control
*wbc
)
1977 /* BB add check for wbc flags */
1978 page_cache_get(page
);
1979 if (!PageUptodate(page
))
1980 cFYI(1, "ppw - page not up to date");
1983 * Set the "writeback" flag, and clear "dirty" in the radix tree.
1985 * A writepage() implementation always needs to do either this,
1986 * or re-dirty the page with "redirty_page_for_writepage()" in
1987 * the case of a failure.
1989 * Just unlocking the page will cause the radix tree tag-bits
1990 * to fail to update with the state of the page correctly.
1992 set_page_writeback(page
);
1994 rc
= cifs_partialpagewrite(page
, 0, PAGE_CACHE_SIZE
);
1995 if (rc
== -EAGAIN
&& wbc
->sync_mode
== WB_SYNC_ALL
)
1997 else if (rc
== -EAGAIN
)
1998 redirty_page_for_writepage(wbc
, page
);
2002 SetPageUptodate(page
);
2003 end_page_writeback(page
);
2004 page_cache_release(page
);
2009 static int cifs_writepage(struct page
*page
, struct writeback_control
*wbc
)
2011 int rc
= cifs_writepage_locked(page
, wbc
);
2016 static int cifs_write_end(struct file
*file
, struct address_space
*mapping
,
2017 loff_t pos
, unsigned len
, unsigned copied
,
2018 struct page
*page
, void *fsdata
)
2021 struct inode
*inode
= mapping
->host
;
2022 struct cifsFileInfo
*cfile
= file
->private_data
;
2023 struct cifs_sb_info
*cifs_sb
= CIFS_SB(cfile
->dentry
->d_sb
);
2026 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_RWPIDFORWARD
)
2029 pid
= current
->tgid
;
2031 cFYI(1, "write_end for page %p from pos %lld with %d bytes",
2034 if (PageChecked(page
)) {
2036 SetPageUptodate(page
);
2037 ClearPageChecked(page
);
2038 } else if (!PageUptodate(page
) && copied
== PAGE_CACHE_SIZE
)
2039 SetPageUptodate(page
);
2041 if (!PageUptodate(page
)) {
2043 unsigned offset
= pos
& (PAGE_CACHE_SIZE
- 1);
2047 /* this is probably better than directly calling
2048 partialpage_write since in this function the file handle is
2049 known which we might as well leverage */
2050 /* BB check if anything else missing out of ppw
2051 such as updating last write time */
2052 page_data
= kmap(page
);
2053 rc
= cifs_write(cfile
, pid
, page_data
+ offset
, copied
, &pos
);
2054 /* if (rc < 0) should we set writebehind rc? */
2061 set_page_dirty(page
);
2065 spin_lock(&inode
->i_lock
);
2066 if (pos
> inode
->i_size
)
2067 i_size_write(inode
, pos
);
2068 spin_unlock(&inode
->i_lock
);
2072 page_cache_release(page
);
2077 int cifs_strict_fsync(struct file
*file
, loff_t start
, loff_t end
,
2082 struct cifs_tcon
*tcon
;
2083 struct TCP_Server_Info
*server
;
2084 struct cifsFileInfo
*smbfile
= file
->private_data
;
2085 struct inode
*inode
= file
->f_path
.dentry
->d_inode
;
2086 struct cifs_sb_info
*cifs_sb
= CIFS_SB(inode
->i_sb
);
2088 rc
= filemap_write_and_wait_range(inode
->i_mapping
, start
, end
);
2091 mutex_lock(&inode
->i_mutex
);
2095 cFYI(1, "Sync file - name: %s datasync: 0x%x",
2096 file
->f_path
.dentry
->d_name
.name
, datasync
);
2098 if (!CIFS_I(inode
)->clientCanCacheRead
) {
2099 rc
= cifs_invalidate_mapping(inode
);
2101 cFYI(1, "rc: %d during invalidate phase", rc
);
2102 rc
= 0; /* don't care about it in fsync */
2106 tcon
= tlink_tcon(smbfile
->tlink
);
2107 if (!(cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOSSYNC
)) {
2108 server
= tcon
->ses
->server
;
2109 if (server
->ops
->flush
)
2110 rc
= server
->ops
->flush(xid
, tcon
, &smbfile
->fid
);
2116 mutex_unlock(&inode
->i_mutex
);
2120 int cifs_fsync(struct file
*file
, loff_t start
, loff_t end
, int datasync
)
2124 struct cifs_tcon
*tcon
;
2125 struct TCP_Server_Info
*server
;
2126 struct cifsFileInfo
*smbfile
= file
->private_data
;
2127 struct cifs_sb_info
*cifs_sb
= CIFS_SB(file
->f_path
.dentry
->d_sb
);
2128 struct inode
*inode
= file
->f_mapping
->host
;
2130 rc
= filemap_write_and_wait_range(inode
->i_mapping
, start
, end
);
2133 mutex_lock(&inode
->i_mutex
);
2137 cFYI(1, "Sync file - name: %s datasync: 0x%x",
2138 file
->f_path
.dentry
->d_name
.name
, datasync
);
2140 tcon
= tlink_tcon(smbfile
->tlink
);
2141 if (!(cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOSSYNC
)) {
2142 server
= tcon
->ses
->server
;
2143 if (server
->ops
->flush
)
2144 rc
= server
->ops
->flush(xid
, tcon
, &smbfile
->fid
);
2150 mutex_unlock(&inode
->i_mutex
);
2155 * As file closes, flush all cached write data for this inode checking
2156 * for write behind errors.
2158 int cifs_flush(struct file
*file
, fl_owner_t id
)
2160 struct inode
*inode
= file
->f_path
.dentry
->d_inode
;
2163 if (file
->f_mode
& FMODE_WRITE
)
2164 rc
= filemap_write_and_wait(inode
->i_mapping
);
2166 cFYI(1, "Flush inode %p file %p rc %d", inode
, file
, rc
);
2172 cifs_write_allocate_pages(struct page
**pages
, unsigned long num_pages
)
2177 for (i
= 0; i
< num_pages
; i
++) {
2178 pages
[i
] = alloc_page(GFP_KERNEL
|__GFP_HIGHMEM
);
2181 * save number of pages we have already allocated and
2182 * return with ENOMEM error
2191 for (i
= 0; i
< num_pages
; i
++)
2198 size_t get_numpages(const size_t wsize
, const size_t len
, size_t *cur_len
)
2203 clen
= min_t(const size_t, len
, wsize
);
2204 num_pages
= DIV_ROUND_UP(clen
, PAGE_SIZE
);
2213 cifs_uncached_writev_complete(struct work_struct
*work
)
2216 struct cifs_writedata
*wdata
= container_of(work
,
2217 struct cifs_writedata
, work
);
2218 struct inode
*inode
= wdata
->cfile
->dentry
->d_inode
;
2219 struct cifsInodeInfo
*cifsi
= CIFS_I(inode
);
2221 spin_lock(&inode
->i_lock
);
2222 cifs_update_eof(cifsi
, wdata
->offset
, wdata
->bytes
);
2223 if (cifsi
->server_eof
> inode
->i_size
)
2224 i_size_write(inode
, cifsi
->server_eof
);
2225 spin_unlock(&inode
->i_lock
);
2227 complete(&wdata
->done
);
2229 if (wdata
->result
!= -EAGAIN
) {
2230 for (i
= 0; i
< wdata
->nr_pages
; i
++)
2231 put_page(wdata
->pages
[i
]);
2234 kref_put(&wdata
->refcount
, cifs_writedata_release
);
2237 /* attempt to send write to server, retry on any -EAGAIN errors */
2239 cifs_uncached_retry_writev(struct cifs_writedata
*wdata
)
2242 struct TCP_Server_Info
*server
;
2244 server
= tlink_tcon(wdata
->cfile
->tlink
)->ses
->server
;
2247 if (wdata
->cfile
->invalidHandle
) {
2248 rc
= cifs_reopen_file(wdata
->cfile
, false);
2252 rc
= server
->ops
->async_writev(wdata
);
2253 } while (rc
== -EAGAIN
);
2259 cifs_iovec_write(struct file
*file
, const struct iovec
*iov
,
2260 unsigned long nr_segs
, loff_t
*poffset
)
2262 unsigned long nr_pages
, i
;
2263 size_t copied
, len
, cur_len
;
2264 ssize_t total_written
= 0;
2267 struct cifsFileInfo
*open_file
;
2268 struct cifs_tcon
*tcon
;
2269 struct cifs_sb_info
*cifs_sb
;
2270 struct cifs_writedata
*wdata
, *tmp
;
2271 struct list_head wdata_list
;
2275 len
= iov_length(iov
, nr_segs
);
2279 rc
= generic_write_checks(file
, poffset
, &len
, 0);
2283 INIT_LIST_HEAD(&wdata_list
);
2284 cifs_sb
= CIFS_SB(file
->f_path
.dentry
->d_sb
);
2285 open_file
= file
->private_data
;
2286 tcon
= tlink_tcon(open_file
->tlink
);
2288 if (!tcon
->ses
->server
->ops
->async_writev
)
2293 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_RWPIDFORWARD
)
2294 pid
= open_file
->pid
;
2296 pid
= current
->tgid
;
2298 iov_iter_init(&it
, iov
, nr_segs
, len
, 0);
2302 nr_pages
= get_numpages(cifs_sb
->wsize
, len
, &cur_len
);
2303 wdata
= cifs_writedata_alloc(nr_pages
,
2304 cifs_uncached_writev_complete
);
2310 rc
= cifs_write_allocate_pages(wdata
->pages
, nr_pages
);
2317 for (i
= 0; i
< nr_pages
; i
++) {
2318 copied
= min_t(const size_t, cur_len
, PAGE_SIZE
);
2319 copied
= iov_iter_copy_from_user(wdata
->pages
[i
], &it
,
2322 iov_iter_advance(&it
, copied
);
2324 cur_len
= save_len
- cur_len
;
2326 wdata
->sync_mode
= WB_SYNC_ALL
;
2327 wdata
->nr_pages
= nr_pages
;
2328 wdata
->offset
= (__u64
)offset
;
2329 wdata
->cfile
= cifsFileInfo_get(open_file
);
2331 wdata
->bytes
= cur_len
;
2332 wdata
->pagesz
= PAGE_SIZE
;
2333 wdata
->tailsz
= cur_len
- ((nr_pages
- 1) * PAGE_SIZE
);
2334 rc
= cifs_uncached_retry_writev(wdata
);
2336 kref_put(&wdata
->refcount
, cifs_writedata_release
);
2340 list_add_tail(&wdata
->list
, &wdata_list
);
2346 * If at least one write was successfully sent, then discard any rc
2347 * value from the later writes. If the other write succeeds, then
2348 * we'll end up returning whatever was written. If it fails, then
2349 * we'll get a new rc value from that.
2351 if (!list_empty(&wdata_list
))
2355 * Wait for and collect replies for any successful sends in order of
2356 * increasing offset. Once an error is hit or we get a fatal signal
2357 * while waiting, then return without waiting for any more replies.
2360 list_for_each_entry_safe(wdata
, tmp
, &wdata_list
, list
) {
2362 /* FIXME: freezable too? */
2363 rc
= wait_for_completion_killable(&wdata
->done
);
2366 else if (wdata
->result
)
2369 total_written
+= wdata
->bytes
;
2371 /* resend call if it's a retryable error */
2372 if (rc
== -EAGAIN
) {
2373 rc
= cifs_uncached_retry_writev(wdata
);
2377 list_del_init(&wdata
->list
);
2378 kref_put(&wdata
->refcount
, cifs_writedata_release
);
2381 if (total_written
> 0)
2382 *poffset
+= total_written
;
2384 cifs_stats_bytes_written(tcon
, total_written
);
2385 return total_written
? total_written
: (ssize_t
)rc
;
2388 ssize_t
cifs_user_writev(struct kiocb
*iocb
, const struct iovec
*iov
,
2389 unsigned long nr_segs
, loff_t pos
)
2392 struct inode
*inode
;
2394 inode
= iocb
->ki_filp
->f_path
.dentry
->d_inode
;
2397 * BB - optimize the way when signing is disabled. We can drop this
2398 * extra memory-to-memory copying and use iovec buffers for constructing
2402 written
= cifs_iovec_write(iocb
->ki_filp
, iov
, nr_segs
, &pos
);
2404 CIFS_I(inode
)->invalid_mapping
= true;
2412 cifs_writev(struct kiocb
*iocb
, const struct iovec
*iov
,
2413 unsigned long nr_segs
, loff_t pos
)
2415 struct file
*file
= iocb
->ki_filp
;
2416 struct cifsFileInfo
*cfile
= (struct cifsFileInfo
*)file
->private_data
;
2417 struct inode
*inode
= file
->f_mapping
->host
;
2418 struct cifsInodeInfo
*cinode
= CIFS_I(inode
);
2419 struct TCP_Server_Info
*server
= tlink_tcon(cfile
->tlink
)->ses
->server
;
2420 ssize_t rc
= -EACCES
;
2422 BUG_ON(iocb
->ki_pos
!= pos
);
2424 sb_start_write(inode
->i_sb
);
2427 * We need to hold the sem to be sure nobody modifies lock list
2428 * with a brlock that prevents writing.
2430 down_read(&cinode
->lock_sem
);
2431 if (!cifs_find_lock_conflict(cfile
, pos
, iov_length(iov
, nr_segs
),
2432 server
->vals
->exclusive_lock_type
, NULL
,
2434 mutex_lock(&inode
->i_mutex
);
2435 rc
= __generic_file_aio_write(iocb
, iov
, nr_segs
,
2437 mutex_unlock(&inode
->i_mutex
);
2440 if (rc
> 0 || rc
== -EIOCBQUEUED
) {
2443 err
= generic_write_sync(file
, pos
, rc
);
2444 if (err
< 0 && rc
> 0)
2448 up_read(&cinode
->lock_sem
);
2449 sb_end_write(inode
->i_sb
);
2454 cifs_strict_writev(struct kiocb
*iocb
, const struct iovec
*iov
,
2455 unsigned long nr_segs
, loff_t pos
)
2457 struct inode
*inode
= iocb
->ki_filp
->f_path
.dentry
->d_inode
;
2458 struct cifsInodeInfo
*cinode
= CIFS_I(inode
);
2459 struct cifs_sb_info
*cifs_sb
= CIFS_SB(inode
->i_sb
);
2460 struct cifsFileInfo
*cfile
= (struct cifsFileInfo
*)
2461 iocb
->ki_filp
->private_data
;
2462 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
2465 * In strict cache mode we need to write the data to the server exactly
2466 * from the pos to pos+len-1 rather than flush all affected pages
2467 * because it may cause a error with mandatory locks on these pages but
2468 * not on the region from pos to ppos+len-1.
2471 if (!cinode
->clientCanCacheAll
)
2472 return cifs_user_writev(iocb
, iov
, nr_segs
, pos
);
2474 if (cap_unix(tcon
->ses
) &&
2475 (CIFS_UNIX_FCNTL_CAP
& le64_to_cpu(tcon
->fsUnixInfo
.Capability
)) &&
2476 ((cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOPOSIXBRL
) == 0))
2477 return generic_file_aio_write(iocb
, iov
, nr_segs
, pos
);
2479 return cifs_writev(iocb
, iov
, nr_segs
, pos
);
2482 static struct cifs_readdata
*
2483 cifs_readdata_alloc(unsigned int nr_pages
, work_func_t complete
)
2485 struct cifs_readdata
*rdata
;
2487 rdata
= kzalloc(sizeof(*rdata
) + (sizeof(struct page
*) * nr_pages
),
2489 if (rdata
!= NULL
) {
2490 kref_init(&rdata
->refcount
);
2491 INIT_LIST_HEAD(&rdata
->list
);
2492 init_completion(&rdata
->done
);
2493 INIT_WORK(&rdata
->work
, complete
);
2500 cifs_readdata_release(struct kref
*refcount
)
2502 struct cifs_readdata
*rdata
= container_of(refcount
,
2503 struct cifs_readdata
, refcount
);
2506 cifsFileInfo_put(rdata
->cfile
);
2512 cifs_read_allocate_pages(struct cifs_readdata
*rdata
, unsigned int nr_pages
)
2518 for (i
= 0; i
< nr_pages
; i
++) {
2519 page
= alloc_page(GFP_KERNEL
|__GFP_HIGHMEM
);
2524 rdata
->pages
[i
] = page
;
2528 for (i
= 0; i
< nr_pages
; i
++) {
2529 put_page(rdata
->pages
[i
]);
2530 rdata
->pages
[i
] = NULL
;
2537 cifs_uncached_readdata_release(struct kref
*refcount
)
2539 struct cifs_readdata
*rdata
= container_of(refcount
,
2540 struct cifs_readdata
, refcount
);
2543 for (i
= 0; i
< rdata
->nr_pages
; i
++) {
2544 put_page(rdata
->pages
[i
]);
2545 rdata
->pages
[i
] = NULL
;
2547 cifs_readdata_release(refcount
);
2551 cifs_retry_async_readv(struct cifs_readdata
*rdata
)
2554 struct TCP_Server_Info
*server
;
2556 server
= tlink_tcon(rdata
->cfile
->tlink
)->ses
->server
;
2559 if (rdata
->cfile
->invalidHandle
) {
2560 rc
= cifs_reopen_file(rdata
->cfile
, true);
2564 rc
= server
->ops
->async_readv(rdata
);
2565 } while (rc
== -EAGAIN
);
2571 * cifs_readdata_to_iov - copy data from pages in response to an iovec
2572 * @rdata: the readdata response with list of pages holding data
2573 * @iov: vector in which we should copy the data
2574 * @nr_segs: number of segments in vector
2575 * @offset: offset into file of the first iovec
2576 * @copied: used to return the amount of data copied to the iov
2578 * This function copies data from a list of pages in a readdata response into
2579 * an array of iovecs. It will first calculate where the data should go
2580 * based on the info in the readdata and then copy the data into that spot.
2583 cifs_readdata_to_iov(struct cifs_readdata
*rdata
, const struct iovec
*iov
,
2584 unsigned long nr_segs
, loff_t offset
, ssize_t
*copied
)
2588 size_t pos
= rdata
->offset
- offset
;
2589 ssize_t remaining
= rdata
->bytes
;
2590 unsigned char *pdata
;
2593 /* set up iov_iter and advance to the correct offset */
2594 iov_iter_init(&ii
, iov
, nr_segs
, iov_length(iov
, nr_segs
), 0);
2595 iov_iter_advance(&ii
, pos
);
2598 for (i
= 0; i
< rdata
->nr_pages
; i
++) {
2600 struct page
*page
= rdata
->pages
[i
];
2602 /* copy a whole page or whatever's left */
2603 copy
= min_t(ssize_t
, remaining
, PAGE_SIZE
);
2605 /* ...but limit it to whatever space is left in the iov */
2606 copy
= min_t(ssize_t
, copy
, iov_iter_count(&ii
));
2608 /* go while there's data to be copied and no errors */
2611 rc
= memcpy_toiovecend(ii
.iov
, pdata
, ii
.iov_offset
,
2617 iov_iter_advance(&ii
, copy
);
2626 cifs_uncached_readv_complete(struct work_struct
*work
)
2628 struct cifs_readdata
*rdata
= container_of(work
,
2629 struct cifs_readdata
, work
);
2631 complete(&rdata
->done
);
2632 kref_put(&rdata
->refcount
, cifs_uncached_readdata_release
);
2636 cifs_uncached_read_into_pages(struct TCP_Server_Info
*server
,
2637 struct cifs_readdata
*rdata
, unsigned int len
)
2639 int total_read
= 0, result
= 0;
2641 unsigned int nr_pages
= rdata
->nr_pages
;
2644 rdata
->tailsz
= PAGE_SIZE
;
2645 for (i
= 0; i
< nr_pages
; i
++) {
2646 struct page
*page
= rdata
->pages
[i
];
2648 if (len
>= PAGE_SIZE
) {
2649 /* enough data to fill the page */
2650 iov
.iov_base
= kmap(page
);
2651 iov
.iov_len
= PAGE_SIZE
;
2652 cFYI(1, "%u: iov_base=%p iov_len=%zu",
2653 i
, iov
.iov_base
, iov
.iov_len
);
2655 } else if (len
> 0) {
2656 /* enough for partial page, fill and zero the rest */
2657 iov
.iov_base
= kmap(page
);
2659 cFYI(1, "%u: iov_base=%p iov_len=%zu",
2660 i
, iov
.iov_base
, iov
.iov_len
);
2661 memset(iov
.iov_base
+ len
, '\0', PAGE_SIZE
- len
);
2662 rdata
->tailsz
= len
;
2665 /* no need to hold page hostage */
2666 rdata
->pages
[i
] = NULL
;
2672 result
= cifs_readv_from_socket(server
, &iov
, 1, iov
.iov_len
);
2677 total_read
+= result
;
2680 return total_read
> 0 ? total_read
: result
;
2684 cifs_iovec_read(struct file
*file
, const struct iovec
*iov
,
2685 unsigned long nr_segs
, loff_t
*poffset
)
2688 size_t len
, cur_len
;
2689 ssize_t total_read
= 0;
2690 loff_t offset
= *poffset
;
2691 unsigned int npages
;
2692 struct cifs_sb_info
*cifs_sb
;
2693 struct cifs_tcon
*tcon
;
2694 struct cifsFileInfo
*open_file
;
2695 struct cifs_readdata
*rdata
, *tmp
;
2696 struct list_head rdata_list
;
2702 len
= iov_length(iov
, nr_segs
);
2706 INIT_LIST_HEAD(&rdata_list
);
2707 cifs_sb
= CIFS_SB(file
->f_path
.dentry
->d_sb
);
2708 open_file
= file
->private_data
;
2709 tcon
= tlink_tcon(open_file
->tlink
);
2711 if (!tcon
->ses
->server
->ops
->async_readv
)
2714 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_RWPIDFORWARD
)
2715 pid
= open_file
->pid
;
2717 pid
= current
->tgid
;
2719 if ((file
->f_flags
& O_ACCMODE
) == O_WRONLY
)
2720 cFYI(1, "attempting read on write only file instance");
2723 cur_len
= min_t(const size_t, len
- total_read
, cifs_sb
->rsize
);
2724 npages
= DIV_ROUND_UP(cur_len
, PAGE_SIZE
);
2726 /* allocate a readdata struct */
2727 rdata
= cifs_readdata_alloc(npages
,
2728 cifs_uncached_readv_complete
);
2734 rc
= cifs_read_allocate_pages(rdata
, npages
);
2738 rdata
->cfile
= cifsFileInfo_get(open_file
);
2739 rdata
->nr_pages
= npages
;
2740 rdata
->offset
= offset
;
2741 rdata
->bytes
= cur_len
;
2743 rdata
->pagesz
= PAGE_SIZE
;
2744 rdata
->read_into_pages
= cifs_uncached_read_into_pages
;
2746 rc
= cifs_retry_async_readv(rdata
);
2749 kref_put(&rdata
->refcount
,
2750 cifs_uncached_readdata_release
);
2754 list_add_tail(&rdata
->list
, &rdata_list
);
2759 /* if at least one read request send succeeded, then reset rc */
2760 if (!list_empty(&rdata_list
))
2763 /* the loop below should proceed in the order of increasing offsets */
2765 list_for_each_entry_safe(rdata
, tmp
, &rdata_list
, list
) {
2769 /* FIXME: freezable sleep too? */
2770 rc
= wait_for_completion_killable(&rdata
->done
);
2773 else if (rdata
->result
)
2776 rc
= cifs_readdata_to_iov(rdata
, iov
,
2779 total_read
+= copied
;
2782 /* resend call if it's a retryable error */
2783 if (rc
== -EAGAIN
) {
2784 rc
= cifs_retry_async_readv(rdata
);
2788 list_del_init(&rdata
->list
);
2789 kref_put(&rdata
->refcount
, cifs_uncached_readdata_release
);
2792 cifs_stats_bytes_read(tcon
, total_read
);
2793 *poffset
+= total_read
;
2795 /* mask nodata case */
2799 return total_read
? total_read
: rc
;
2802 ssize_t
cifs_user_readv(struct kiocb
*iocb
, const struct iovec
*iov
,
2803 unsigned long nr_segs
, loff_t pos
)
2807 read
= cifs_iovec_read(iocb
->ki_filp
, iov
, nr_segs
, &pos
);
2815 cifs_strict_readv(struct kiocb
*iocb
, const struct iovec
*iov
,
2816 unsigned long nr_segs
, loff_t pos
)
2818 struct inode
*inode
= iocb
->ki_filp
->f_path
.dentry
->d_inode
;
2819 struct cifsInodeInfo
*cinode
= CIFS_I(inode
);
2820 struct cifs_sb_info
*cifs_sb
= CIFS_SB(inode
->i_sb
);
2821 struct cifsFileInfo
*cfile
= (struct cifsFileInfo
*)
2822 iocb
->ki_filp
->private_data
;
2823 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
2827 * In strict cache mode we need to read from the server all the time
2828 * if we don't have level II oplock because the server can delay mtime
2829 * change - so we can't make a decision about inode invalidating.
2830 * And we can also fail with pagereading if there are mandatory locks
2831 * on pages affected by this read but not on the region from pos to
2834 if (!cinode
->clientCanCacheRead
)
2835 return cifs_user_readv(iocb
, iov
, nr_segs
, pos
);
2837 if (cap_unix(tcon
->ses
) &&
2838 (CIFS_UNIX_FCNTL_CAP
& le64_to_cpu(tcon
->fsUnixInfo
.Capability
)) &&
2839 ((cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOPOSIXBRL
) == 0))
2840 return generic_file_aio_read(iocb
, iov
, nr_segs
, pos
);
2843 * We need to hold the sem to be sure nobody modifies lock list
2844 * with a brlock that prevents reading.
2846 down_read(&cinode
->lock_sem
);
2847 if (!cifs_find_lock_conflict(cfile
, pos
, iov_length(iov
, nr_segs
),
2848 tcon
->ses
->server
->vals
->shared_lock_type
,
2850 rc
= generic_file_aio_read(iocb
, iov
, nr_segs
, pos
);
2851 up_read(&cinode
->lock_sem
);
2856 cifs_read(struct file
*file
, char *read_data
, size_t read_size
, loff_t
*offset
)
2859 unsigned int bytes_read
= 0;
2860 unsigned int total_read
;
2861 unsigned int current_read_size
;
2863 struct cifs_sb_info
*cifs_sb
;
2864 struct cifs_tcon
*tcon
;
2865 struct TCP_Server_Info
*server
;
2868 struct cifsFileInfo
*open_file
;
2869 struct cifs_io_parms io_parms
;
2870 int buf_type
= CIFS_NO_BUFFER
;
2874 cifs_sb
= CIFS_SB(file
->f_path
.dentry
->d_sb
);
2876 /* FIXME: set up handlers for larger reads and/or convert to async */
2877 rsize
= min_t(unsigned int, cifs_sb
->rsize
, CIFSMaxBufSize
);
2879 if (file
->private_data
== NULL
) {
2884 open_file
= file
->private_data
;
2885 tcon
= tlink_tcon(open_file
->tlink
);
2886 server
= tcon
->ses
->server
;
2888 if (!server
->ops
->sync_read
) {
2893 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_RWPIDFORWARD
)
2894 pid
= open_file
->pid
;
2896 pid
= current
->tgid
;
2898 if ((file
->f_flags
& O_ACCMODE
) == O_WRONLY
)
2899 cFYI(1, "attempting read on write only file instance");
2901 for (total_read
= 0, cur_offset
= read_data
; read_size
> total_read
;
2902 total_read
+= bytes_read
, cur_offset
+= bytes_read
) {
2903 current_read_size
= min_t(uint
, read_size
- total_read
, rsize
);
2905 * For windows me and 9x we do not want to request more than it
2906 * negotiated since it will refuse the read then.
2908 if ((tcon
->ses
) && !(tcon
->ses
->capabilities
&
2909 tcon
->ses
->server
->vals
->cap_large_files
)) {
2910 current_read_size
= min_t(uint
, current_read_size
,
2914 while (rc
== -EAGAIN
) {
2915 if (open_file
->invalidHandle
) {
2916 rc
= cifs_reopen_file(open_file
, true);
2921 io_parms
.tcon
= tcon
;
2922 io_parms
.offset
= *offset
;
2923 io_parms
.length
= current_read_size
;
2924 rc
= server
->ops
->sync_read(xid
, open_file
, &io_parms
,
2925 &bytes_read
, &cur_offset
,
2928 if (rc
|| (bytes_read
== 0)) {
2936 cifs_stats_bytes_read(tcon
, total_read
);
2937 *offset
+= bytes_read
;
2945 * If the page is mmap'ed into a process' page tables, then we need to make
2946 * sure that it doesn't change while being written back.
2949 cifs_page_mkwrite(struct vm_area_struct
*vma
, struct vm_fault
*vmf
)
2951 struct page
*page
= vmf
->page
;
2954 return VM_FAULT_LOCKED
;
2957 static struct vm_operations_struct cifs_file_vm_ops
= {
2958 .fault
= filemap_fault
,
2959 .page_mkwrite
= cifs_page_mkwrite
,
2962 int cifs_file_strict_mmap(struct file
*file
, struct vm_area_struct
*vma
)
2965 struct inode
*inode
= file
->f_path
.dentry
->d_inode
;
2969 if (!CIFS_I(inode
)->clientCanCacheRead
) {
2970 rc
= cifs_invalidate_mapping(inode
);
2975 rc
= generic_file_mmap(file
, vma
);
2977 vma
->vm_ops
= &cifs_file_vm_ops
;
2982 int cifs_file_mmap(struct file
*file
, struct vm_area_struct
*vma
)
2987 rc
= cifs_revalidate_file(file
);
2989 cFYI(1, "Validation prior to mmap failed, error=%d", rc
);
2993 rc
= generic_file_mmap(file
, vma
);
2995 vma
->vm_ops
= &cifs_file_vm_ops
;
3001 cifs_readv_complete(struct work_struct
*work
)
3004 struct cifs_readdata
*rdata
= container_of(work
,
3005 struct cifs_readdata
, work
);
3007 for (i
= 0; i
< rdata
->nr_pages
; i
++) {
3008 struct page
*page
= rdata
->pages
[i
];
3010 lru_cache_add_file(page
);
3012 if (rdata
->result
== 0) {
3013 flush_dcache_page(page
);
3014 SetPageUptodate(page
);
3019 if (rdata
->result
== 0)
3020 cifs_readpage_to_fscache(rdata
->mapping
->host
, page
);
3022 page_cache_release(page
);
3023 rdata
->pages
[i
] = NULL
;
3025 kref_put(&rdata
->refcount
, cifs_readdata_release
);
3029 cifs_readpages_read_into_pages(struct TCP_Server_Info
*server
,
3030 struct cifs_readdata
*rdata
, unsigned int len
)
3032 int total_read
= 0, result
= 0;
3036 unsigned int nr_pages
= rdata
->nr_pages
;
3039 /* determine the eof that the server (probably) has */
3040 eof
= CIFS_I(rdata
->mapping
->host
)->server_eof
;
3041 eof_index
= eof
? (eof
- 1) >> PAGE_CACHE_SHIFT
: 0;
3042 cFYI(1, "eof=%llu eof_index=%lu", eof
, eof_index
);
3044 rdata
->tailsz
= PAGE_CACHE_SIZE
;
3045 for (i
= 0; i
< nr_pages
; i
++) {
3046 struct page
*page
= rdata
->pages
[i
];
3048 if (len
>= PAGE_CACHE_SIZE
) {
3049 /* enough data to fill the page */
3050 iov
.iov_base
= kmap(page
);
3051 iov
.iov_len
= PAGE_CACHE_SIZE
;
3052 cFYI(1, "%u: idx=%lu iov_base=%p iov_len=%zu",
3053 i
, page
->index
, iov
.iov_base
, iov
.iov_len
);
3054 len
-= PAGE_CACHE_SIZE
;
3055 } else if (len
> 0) {
3056 /* enough for partial page, fill and zero the rest */
3057 iov
.iov_base
= kmap(page
);
3059 cFYI(1, "%u: idx=%lu iov_base=%p iov_len=%zu",
3060 i
, page
->index
, iov
.iov_base
, iov
.iov_len
);
3061 memset(iov
.iov_base
+ len
,
3062 '\0', PAGE_CACHE_SIZE
- len
);
3063 rdata
->tailsz
= len
;
3065 } else if (page
->index
> eof_index
) {
3067 * The VFS will not try to do readahead past the
3068 * i_size, but it's possible that we have outstanding
3069 * writes with gaps in the middle and the i_size hasn't
3070 * caught up yet. Populate those with zeroed out pages
3071 * to prevent the VFS from repeatedly attempting to
3072 * fill them until the writes are flushed.
3074 zero_user(page
, 0, PAGE_CACHE_SIZE
);
3075 lru_cache_add_file(page
);
3076 flush_dcache_page(page
);
3077 SetPageUptodate(page
);
3079 page_cache_release(page
);
3080 rdata
->pages
[i
] = NULL
;
3084 /* no need to hold page hostage */
3085 lru_cache_add_file(page
);
3087 page_cache_release(page
);
3088 rdata
->pages
[i
] = NULL
;
3093 result
= cifs_readv_from_socket(server
, &iov
, 1, iov
.iov_len
);
3098 total_read
+= result
;
3101 return total_read
> 0 ? total_read
: result
;
3104 static int cifs_readpages(struct file
*file
, struct address_space
*mapping
,
3105 struct list_head
*page_list
, unsigned num_pages
)
3108 struct list_head tmplist
;
3109 struct cifsFileInfo
*open_file
= file
->private_data
;
3110 struct cifs_sb_info
*cifs_sb
= CIFS_SB(file
->f_path
.dentry
->d_sb
);
3111 unsigned int rsize
= cifs_sb
->rsize
;
3115 * Give up immediately if rsize is too small to read an entire page.
3116 * The VFS will fall back to readpage. We should never reach this
3117 * point however since we set ra_pages to 0 when the rsize is smaller
3118 * than a cache page.
3120 if (unlikely(rsize
< PAGE_CACHE_SIZE
))
3124 * Reads as many pages as possible from fscache. Returns -ENOBUFS
3125 * immediately if the cookie is negative
3127 rc
= cifs_readpages_from_fscache(mapping
->host
, mapping
, page_list
,
3132 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_RWPIDFORWARD
)
3133 pid
= open_file
->pid
;
3135 pid
= current
->tgid
;
3138 INIT_LIST_HEAD(&tmplist
);
3140 cFYI(1, "%s: file=%p mapping=%p num_pages=%u", __func__
, file
,
3141 mapping
, num_pages
);
3144 * Start with the page at end of list and move it to private
3145 * list. Do the same with any following pages until we hit
3146 * the rsize limit, hit an index discontinuity, or run out of
3147 * pages. Issue the async read and then start the loop again
3148 * until the list is empty.
3150 * Note that list order is important. The page_list is in
3151 * the order of declining indexes. When we put the pages in
3152 * the rdata->pages, then we want them in increasing order.
3154 while (!list_empty(page_list
)) {
3156 unsigned int bytes
= PAGE_CACHE_SIZE
;
3157 unsigned int expected_index
;
3158 unsigned int nr_pages
= 1;
3160 struct page
*page
, *tpage
;
3161 struct cifs_readdata
*rdata
;
3163 page
= list_entry(page_list
->prev
, struct page
, lru
);
3166 * Lock the page and put it in the cache. Since no one else
3167 * should have access to this page, we're safe to simply set
3168 * PG_locked without checking it first.
3170 __set_page_locked(page
);
3171 rc
= add_to_page_cache_locked(page
, mapping
,
3172 page
->index
, GFP_KERNEL
);
3174 /* give up if we can't stick it in the cache */
3176 __clear_page_locked(page
);
3180 /* move first page to the tmplist */
3181 offset
= (loff_t
)page
->index
<< PAGE_CACHE_SHIFT
;
3182 list_move_tail(&page
->lru
, &tmplist
);
3184 /* now try and add more pages onto the request */
3185 expected_index
= page
->index
+ 1;
3186 list_for_each_entry_safe_reverse(page
, tpage
, page_list
, lru
) {
3187 /* discontinuity ? */
3188 if (page
->index
!= expected_index
)
3191 /* would this page push the read over the rsize? */
3192 if (bytes
+ PAGE_CACHE_SIZE
> rsize
)
3195 __set_page_locked(page
);
3196 if (add_to_page_cache_locked(page
, mapping
,
3197 page
->index
, GFP_KERNEL
)) {
3198 __clear_page_locked(page
);
3201 list_move_tail(&page
->lru
, &tmplist
);
3202 bytes
+= PAGE_CACHE_SIZE
;
3207 rdata
= cifs_readdata_alloc(nr_pages
, cifs_readv_complete
);
3209 /* best to give up if we're out of mem */
3210 list_for_each_entry_safe(page
, tpage
, &tmplist
, lru
) {
3211 list_del(&page
->lru
);
3212 lru_cache_add_file(page
);
3214 page_cache_release(page
);
3220 rdata
->cfile
= cifsFileInfo_get(open_file
);
3221 rdata
->mapping
= mapping
;
3222 rdata
->offset
= offset
;
3223 rdata
->bytes
= bytes
;
3225 rdata
->pagesz
= PAGE_CACHE_SIZE
;
3226 rdata
->read_into_pages
= cifs_readpages_read_into_pages
;
3228 list_for_each_entry_safe(page
, tpage
, &tmplist
, lru
) {
3229 list_del(&page
->lru
);
3230 rdata
->pages
[rdata
->nr_pages
++] = page
;
3233 rc
= cifs_retry_async_readv(rdata
);
3235 for (i
= 0; i
< rdata
->nr_pages
; i
++) {
3236 page
= rdata
->pages
[i
];
3237 lru_cache_add_file(page
);
3239 page_cache_release(page
);
3241 kref_put(&rdata
->refcount
, cifs_readdata_release
);
3245 kref_put(&rdata
->refcount
, cifs_readdata_release
);
3251 static int cifs_readpage_worker(struct file
*file
, struct page
*page
,
3257 /* Is the page cached? */
3258 rc
= cifs_readpage_from_fscache(file
->f_path
.dentry
->d_inode
, page
);
3262 page_cache_get(page
);
3263 read_data
= kmap(page
);
3264 /* for reads over a certain size could initiate async read ahead */
3266 rc
= cifs_read(file
, read_data
, PAGE_CACHE_SIZE
, poffset
);
3271 cFYI(1, "Bytes read %d", rc
);
3273 file
->f_path
.dentry
->d_inode
->i_atime
=
3274 current_fs_time(file
->f_path
.dentry
->d_inode
->i_sb
);
3276 if (PAGE_CACHE_SIZE
> rc
)
3277 memset(read_data
+ rc
, 0, PAGE_CACHE_SIZE
- rc
);
3279 flush_dcache_page(page
);
3280 SetPageUptodate(page
);
3282 /* send this page to the cache */
3283 cifs_readpage_to_fscache(file
->f_path
.dentry
->d_inode
, page
);
3289 page_cache_release(page
);
3295 static int cifs_readpage(struct file
*file
, struct page
*page
)
3297 loff_t offset
= (loff_t
)page
->index
<< PAGE_CACHE_SHIFT
;
3303 if (file
->private_data
== NULL
) {
3309 cFYI(1, "readpage %p at offset %d 0x%x",
3310 page
, (int)offset
, (int)offset
);
3312 rc
= cifs_readpage_worker(file
, page
, &offset
);
3320 static int is_inode_writable(struct cifsInodeInfo
*cifs_inode
)
3322 struct cifsFileInfo
*open_file
;
3324 spin_lock(&cifs_file_list_lock
);
3325 list_for_each_entry(open_file
, &cifs_inode
->openFileList
, flist
) {
3326 if (OPEN_FMODE(open_file
->f_flags
) & FMODE_WRITE
) {
3327 spin_unlock(&cifs_file_list_lock
);
3331 spin_unlock(&cifs_file_list_lock
);
3335 /* We do not want to update the file size from server for inodes
3336 open for write - to avoid races with writepage extending
3337 the file - in the future we could consider allowing
3338 refreshing the inode only on increases in the file size
3339 but this is tricky to do without racing with writebehind
3340 page caching in the current Linux kernel design */
3341 bool is_size_safe_to_change(struct cifsInodeInfo
*cifsInode
, __u64 end_of_file
)
3346 if (is_inode_writable(cifsInode
)) {
3347 /* This inode is open for write at least once */
3348 struct cifs_sb_info
*cifs_sb
;
3350 cifs_sb
= CIFS_SB(cifsInode
->vfs_inode
.i_sb
);
3351 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_DIRECT_IO
) {
3352 /* since no page cache to corrupt on directio
3353 we can change size safely */
3357 if (i_size_read(&cifsInode
->vfs_inode
) < end_of_file
)
3365 static int cifs_write_begin(struct file
*file
, struct address_space
*mapping
,
3366 loff_t pos
, unsigned len
, unsigned flags
,
3367 struct page
**pagep
, void **fsdata
)
3369 pgoff_t index
= pos
>> PAGE_CACHE_SHIFT
;
3370 loff_t offset
= pos
& (PAGE_CACHE_SIZE
- 1);
3371 loff_t page_start
= pos
& PAGE_MASK
;
3376 cFYI(1, "write_begin from %lld len %d", (long long)pos
, len
);
3378 page
= grab_cache_page_write_begin(mapping
, index
, flags
);
3384 if (PageUptodate(page
))
3388 * If we write a full page it will be up to date, no need to read from
3389 * the server. If the write is short, we'll end up doing a sync write
3392 if (len
== PAGE_CACHE_SIZE
)
3396 * optimize away the read when we have an oplock, and we're not
3397 * expecting to use any of the data we'd be reading in. That
3398 * is, when the page lies beyond the EOF, or straddles the EOF
3399 * and the write will cover all of the existing data.
3401 if (CIFS_I(mapping
->host
)->clientCanCacheRead
) {
3402 i_size
= i_size_read(mapping
->host
);
3403 if (page_start
>= i_size
||
3404 (offset
== 0 && (pos
+ len
) >= i_size
)) {
3405 zero_user_segments(page
, 0, offset
,
3409 * PageChecked means that the parts of the page
3410 * to which we're not writing are considered up
3411 * to date. Once the data is copied to the
3412 * page, it can be set uptodate.
3414 SetPageChecked(page
);
3419 if ((file
->f_flags
& O_ACCMODE
) != O_WRONLY
) {
3421 * might as well read a page, it is fast enough. If we get
3422 * an error, we don't need to return it. cifs_write_end will
3423 * do a sync write instead since PG_uptodate isn't set.
3425 cifs_readpage_worker(file
, page
, &page_start
);
3427 /* we could try using another file handle if there is one -
3428 but how would we lock it to prevent close of that handle
3429 racing with this read? In any case
3430 this will be written out by write_end so is fine */
3437 static int cifs_release_page(struct page
*page
, gfp_t gfp
)
3439 if (PagePrivate(page
))
3442 return cifs_fscache_release_page(page
, gfp
);
3445 static void cifs_invalidate_page(struct page
*page
, unsigned long offset
)
3447 struct cifsInodeInfo
*cifsi
= CIFS_I(page
->mapping
->host
);
3450 cifs_fscache_invalidate_page(page
, &cifsi
->vfs_inode
);
3453 static int cifs_launder_page(struct page
*page
)
3456 loff_t range_start
= page_offset(page
);
3457 loff_t range_end
= range_start
+ (loff_t
)(PAGE_CACHE_SIZE
- 1);
3458 struct writeback_control wbc
= {
3459 .sync_mode
= WB_SYNC_ALL
,
3461 .range_start
= range_start
,
3462 .range_end
= range_end
,
3465 cFYI(1, "Launder page: %p", page
);
3467 if (clear_page_dirty_for_io(page
))
3468 rc
= cifs_writepage_locked(page
, &wbc
);
3470 cifs_fscache_invalidate_page(page
, page
->mapping
->host
);
3474 void cifs_oplock_break(struct work_struct
*work
)
3476 struct cifsFileInfo
*cfile
= container_of(work
, struct cifsFileInfo
,
3478 struct inode
*inode
= cfile
->dentry
->d_inode
;
3479 struct cifsInodeInfo
*cinode
= CIFS_I(inode
);
3480 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
3483 if (inode
&& S_ISREG(inode
->i_mode
)) {
3484 if (cinode
->clientCanCacheRead
)
3485 break_lease(inode
, O_RDONLY
);
3487 break_lease(inode
, O_WRONLY
);
3488 rc
= filemap_fdatawrite(inode
->i_mapping
);
3489 if (cinode
->clientCanCacheRead
== 0) {
3490 rc
= filemap_fdatawait(inode
->i_mapping
);
3491 mapping_set_error(inode
->i_mapping
, rc
);
3492 invalidate_remote_inode(inode
);
3494 cFYI(1, "Oplock flush inode %p rc %d", inode
, rc
);
3497 rc
= cifs_push_locks(cfile
);
3499 cERROR(1, "Push locks rc = %d", rc
);
3502 * releasing stale oplock after recent reconnect of smb session using
3503 * a now incorrect file handle is not a data integrity issue but do
3504 * not bother sending an oplock release if session to server still is
3505 * disconnected since oplock already released by the server
3507 if (!cfile
->oplock_break_cancelled
) {
3508 rc
= tcon
->ses
->server
->ops
->oplock_response(tcon
, &cfile
->fid
,
3510 cFYI(1, "Oplock release rc = %d", rc
);
3514 const struct address_space_operations cifs_addr_ops
= {
3515 .readpage
= cifs_readpage
,
3516 .readpages
= cifs_readpages
,
3517 .writepage
= cifs_writepage
,
3518 .writepages
= cifs_writepages
,
3519 .write_begin
= cifs_write_begin
,
3520 .write_end
= cifs_write_end
,
3521 .set_page_dirty
= __set_page_dirty_nobuffers
,
3522 .releasepage
= cifs_release_page
,
3523 .invalidatepage
= cifs_invalidate_page
,
3524 .launder_page
= cifs_launder_page
,
3528 * cifs_readpages requires the server to support a buffer large enough to
3529 * contain the header plus one complete page of data. Otherwise, we need
3530 * to leave cifs_readpages out of the address space operations.
3532 const struct address_space_operations cifs_addr_ops_smallbuf
= {
3533 .readpage
= cifs_readpage
,
3534 .writepage
= cifs_writepage
,
3535 .writepages
= cifs_writepages
,
3536 .write_begin
= cifs_write_begin
,
3537 .write_end
= cifs_write_end
,
3538 .set_page_dirty
= __set_page_dirty_nobuffers
,
3539 .releasepage
= cifs_release_page
,
3540 .invalidatepage
= cifs_invalidate_page
,
3541 .launder_page
= cifs_launder_page
,