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"
47 static inline int cifs_convert_flags(unsigned int flags
)
49 if ((flags
& O_ACCMODE
) == O_RDONLY
)
51 else if ((flags
& O_ACCMODE
) == O_WRONLY
)
53 else if ((flags
& O_ACCMODE
) == O_RDWR
) {
54 /* GENERIC_ALL is too much permission to request
55 can cause unnecessary access denied on create */
56 /* return GENERIC_ALL; */
57 return (GENERIC_READ
| GENERIC_WRITE
);
60 return (READ_CONTROL
| FILE_WRITE_ATTRIBUTES
| FILE_READ_ATTRIBUTES
|
61 FILE_WRITE_EA
| FILE_APPEND_DATA
| FILE_WRITE_DATA
|
65 static u32
cifs_posix_convert_flags(unsigned int flags
)
69 if ((flags
& O_ACCMODE
) == O_RDONLY
)
70 posix_flags
= SMB_O_RDONLY
;
71 else if ((flags
& O_ACCMODE
) == O_WRONLY
)
72 posix_flags
= SMB_O_WRONLY
;
73 else if ((flags
& O_ACCMODE
) == O_RDWR
)
74 posix_flags
= SMB_O_RDWR
;
76 if (flags
& O_CREAT
) {
77 posix_flags
|= SMB_O_CREAT
;
79 posix_flags
|= SMB_O_EXCL
;
80 } else if (flags
& O_EXCL
)
81 cifs_dbg(FYI
, "Application %s pid %d has incorrectly set O_EXCL flag but not O_CREAT on file open. Ignoring O_EXCL\n",
82 current
->comm
, current
->tgid
);
85 posix_flags
|= SMB_O_TRUNC
;
86 /* be safe and imply O_SYNC for O_DSYNC */
88 posix_flags
|= SMB_O_SYNC
;
89 if (flags
& O_DIRECTORY
)
90 posix_flags
|= SMB_O_DIRECTORY
;
91 if (flags
& O_NOFOLLOW
)
92 posix_flags
|= SMB_O_NOFOLLOW
;
94 posix_flags
|= SMB_O_DIRECT
;
99 static inline int cifs_get_disposition(unsigned int flags
)
101 if ((flags
& (O_CREAT
| O_EXCL
)) == (O_CREAT
| O_EXCL
))
103 else if ((flags
& (O_CREAT
| O_TRUNC
)) == (O_CREAT
| O_TRUNC
))
104 return FILE_OVERWRITE_IF
;
105 else if ((flags
& O_CREAT
) == O_CREAT
)
107 else if ((flags
& O_TRUNC
) == O_TRUNC
)
108 return FILE_OVERWRITE
;
113 int cifs_posix_open(char *full_path
, struct inode
**pinode
,
114 struct super_block
*sb
, int mode
, unsigned int f_flags
,
115 __u32
*poplock
, __u16
*pnetfid
, unsigned int xid
)
118 FILE_UNIX_BASIC_INFO
*presp_data
;
119 __u32 posix_flags
= 0;
120 struct cifs_sb_info
*cifs_sb
= CIFS_SB(sb
);
121 struct cifs_fattr fattr
;
122 struct tcon_link
*tlink
;
123 struct cifs_tcon
*tcon
;
125 cifs_dbg(FYI
, "posix open %s\n", full_path
);
127 presp_data
= kzalloc(sizeof(FILE_UNIX_BASIC_INFO
), GFP_KERNEL
);
128 if (presp_data
== NULL
)
131 tlink
= cifs_sb_tlink(cifs_sb
);
137 tcon
= tlink_tcon(tlink
);
138 mode
&= ~current_umask();
140 posix_flags
= cifs_posix_convert_flags(f_flags
);
141 rc
= CIFSPOSIXCreate(xid
, tcon
, posix_flags
, mode
, pnetfid
, presp_data
,
142 poplock
, full_path
, cifs_sb
->local_nls
,
143 cifs_remap(cifs_sb
));
144 cifs_put_tlink(tlink
);
149 if (presp_data
->Type
== cpu_to_le32(-1))
150 goto posix_open_ret
; /* open ok, caller does qpathinfo */
153 goto posix_open_ret
; /* caller does not need info */
155 cifs_unix_basic_to_fattr(&fattr
, presp_data
, cifs_sb
);
157 /* get new inode and set it up */
158 if (*pinode
== NULL
) {
159 cifs_fill_uniqueid(sb
, &fattr
);
160 *pinode
= cifs_iget(sb
, &fattr
);
166 cifs_fattr_to_inode(*pinode
, &fattr
);
175 cifs_nt_open(char *full_path
, struct inode
*inode
, struct cifs_sb_info
*cifs_sb
,
176 struct cifs_tcon
*tcon
, unsigned int f_flags
, __u32
*oplock
,
177 struct cifs_fid
*fid
, unsigned int xid
)
182 int create_options
= CREATE_NOT_DIR
;
184 struct TCP_Server_Info
*server
= tcon
->ses
->server
;
185 struct cifs_open_parms oparms
;
187 if (!server
->ops
->open
)
190 desired_access
= cifs_convert_flags(f_flags
);
192 /*********************************************************************
193 * open flag mapping table:
195 * POSIX Flag CIFS Disposition
196 * ---------- ----------------
197 * O_CREAT FILE_OPEN_IF
198 * O_CREAT | O_EXCL FILE_CREATE
199 * O_CREAT | O_TRUNC FILE_OVERWRITE_IF
200 * O_TRUNC FILE_OVERWRITE
201 * none of the above FILE_OPEN
203 * Note that there is not a direct match between disposition
204 * FILE_SUPERSEDE (ie create whether or not file exists although
205 * O_CREAT | O_TRUNC is similar but truncates the existing
206 * file rather than creating a new file as FILE_SUPERSEDE does
207 * (which uses the attributes / metadata passed in on open call)
209 *? O_SYNC is a reasonable match to CIFS writethrough flag
210 *? and the read write flags match reasonably. O_LARGEFILE
211 *? is irrelevant because largefile support is always used
212 *? by this client. Flags O_APPEND, O_DIRECT, O_DIRECTORY,
213 * O_FASYNC, O_NOFOLLOW, O_NONBLOCK need further investigation
214 *********************************************************************/
216 disposition
= cifs_get_disposition(f_flags
);
218 /* BB pass O_SYNC flag through on file attributes .. BB */
220 buf
= kmalloc(sizeof(FILE_ALL_INFO
), GFP_KERNEL
);
224 if (backup_cred(cifs_sb
))
225 create_options
|= CREATE_OPEN_BACKUP_INTENT
;
228 oparms
.cifs_sb
= cifs_sb
;
229 oparms
.desired_access
= desired_access
;
230 oparms
.create_options
= create_options
;
231 oparms
.disposition
= disposition
;
232 oparms
.path
= full_path
;
234 oparms
.reconnect
= false;
236 rc
= server
->ops
->open(xid
, &oparms
, oplock
, buf
);
242 rc
= cifs_get_inode_info_unix(&inode
, full_path
, inode
->i_sb
,
245 rc
= cifs_get_inode_info(&inode
, full_path
, buf
, inode
->i_sb
,
254 cifs_has_mand_locks(struct cifsInodeInfo
*cinode
)
256 struct cifs_fid_locks
*cur
;
257 bool has_locks
= false;
259 down_read(&cinode
->lock_sem
);
260 list_for_each_entry(cur
, &cinode
->llist
, llist
) {
261 if (!list_empty(&cur
->locks
)) {
266 up_read(&cinode
->lock_sem
);
270 struct cifsFileInfo
*
271 cifs_new_fileinfo(struct cifs_fid
*fid
, struct file
*file
,
272 struct tcon_link
*tlink
, __u32 oplock
)
274 struct dentry
*dentry
= file_dentry(file
);
275 struct inode
*inode
= d_inode(dentry
);
276 struct cifsInodeInfo
*cinode
= CIFS_I(inode
);
277 struct cifsFileInfo
*cfile
;
278 struct cifs_fid_locks
*fdlocks
;
279 struct cifs_tcon
*tcon
= tlink_tcon(tlink
);
280 struct TCP_Server_Info
*server
= tcon
->ses
->server
;
282 cfile
= kzalloc(sizeof(struct cifsFileInfo
), GFP_KERNEL
);
286 fdlocks
= kzalloc(sizeof(struct cifs_fid_locks
), GFP_KERNEL
);
292 INIT_LIST_HEAD(&fdlocks
->locks
);
293 fdlocks
->cfile
= cfile
;
294 cfile
->llist
= fdlocks
;
295 down_write(&cinode
->lock_sem
);
296 list_add(&fdlocks
->llist
, &cinode
->llist
);
297 up_write(&cinode
->lock_sem
);
300 cfile
->pid
= current
->tgid
;
301 cfile
->uid
= current_fsuid();
302 cfile
->dentry
= dget(dentry
);
303 cfile
->f_flags
= file
->f_flags
;
304 cfile
->invalidHandle
= false;
305 cfile
->tlink
= cifs_get_tlink(tlink
);
306 INIT_WORK(&cfile
->oplock_break
, cifs_oplock_break
);
307 mutex_init(&cfile
->fh_mutex
);
308 spin_lock_init(&cfile
->file_info_lock
);
310 cifs_sb_active(inode
->i_sb
);
313 * If the server returned a read oplock and we have mandatory brlocks,
314 * set oplock level to None.
316 if (server
->ops
->is_read_op(oplock
) && cifs_has_mand_locks(cinode
)) {
317 cifs_dbg(FYI
, "Reset oplock val from read to None due to mand locks\n");
321 spin_lock(&tcon
->open_file_lock
);
322 if (fid
->pending_open
->oplock
!= CIFS_OPLOCK_NO_CHANGE
&& oplock
)
323 oplock
= fid
->pending_open
->oplock
;
324 list_del(&fid
->pending_open
->olist
);
326 fid
->purge_cache
= false;
327 server
->ops
->set_fid(cfile
, fid
, oplock
);
329 list_add(&cfile
->tlist
, &tcon
->openFileList
);
331 /* if readable file instance put first in list*/
332 if (file
->f_mode
& FMODE_READ
)
333 list_add(&cfile
->flist
, &cinode
->openFileList
);
335 list_add_tail(&cfile
->flist
, &cinode
->openFileList
);
336 spin_unlock(&tcon
->open_file_lock
);
338 if (fid
->purge_cache
)
339 cifs_zap_mapping(inode
);
341 file
->private_data
= cfile
;
345 struct cifsFileInfo
*
346 cifsFileInfo_get(struct cifsFileInfo
*cifs_file
)
348 spin_lock(&cifs_file
->file_info_lock
);
349 cifsFileInfo_get_locked(cifs_file
);
350 spin_unlock(&cifs_file
->file_info_lock
);
355 * Release a reference on the file private data. This may involve closing
356 * the filehandle out on the server. Must be called without holding
357 * tcon->open_file_lock and cifs_file->file_info_lock.
359 void cifsFileInfo_put(struct cifsFileInfo
*cifs_file
)
361 struct inode
*inode
= d_inode(cifs_file
->dentry
);
362 struct cifs_tcon
*tcon
= tlink_tcon(cifs_file
->tlink
);
363 struct TCP_Server_Info
*server
= tcon
->ses
->server
;
364 struct cifsInodeInfo
*cifsi
= CIFS_I(inode
);
365 struct super_block
*sb
= inode
->i_sb
;
366 struct cifs_sb_info
*cifs_sb
= CIFS_SB(sb
);
367 struct cifsLockInfo
*li
, *tmp
;
369 struct cifs_pending_open open
;
370 bool oplock_break_cancelled
;
372 spin_lock(&tcon
->open_file_lock
);
374 spin_lock(&cifs_file
->file_info_lock
);
375 if (--cifs_file
->count
> 0) {
376 spin_unlock(&cifs_file
->file_info_lock
);
377 spin_unlock(&tcon
->open_file_lock
);
380 spin_unlock(&cifs_file
->file_info_lock
);
382 if (server
->ops
->get_lease_key
)
383 server
->ops
->get_lease_key(inode
, &fid
);
385 /* store open in pending opens to make sure we don't miss lease break */
386 cifs_add_pending_open_locked(&fid
, cifs_file
->tlink
, &open
);
388 /* remove it from the lists */
389 list_del(&cifs_file
->flist
);
390 list_del(&cifs_file
->tlist
);
392 if (list_empty(&cifsi
->openFileList
)) {
393 cifs_dbg(FYI
, "closing last open instance for inode %p\n",
394 d_inode(cifs_file
->dentry
));
396 * In strict cache mode we need invalidate mapping on the last
397 * close because it may cause a error when we open this file
398 * again and get at least level II oplock.
400 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_STRICT_IO
)
401 set_bit(CIFS_INO_INVALID_MAPPING
, &cifsi
->flags
);
402 cifs_set_oplock_level(cifsi
, 0);
405 spin_unlock(&tcon
->open_file_lock
);
407 oplock_break_cancelled
= cancel_work_sync(&cifs_file
->oplock_break
);
409 if (!tcon
->need_reconnect
&& !cifs_file
->invalidHandle
) {
410 struct TCP_Server_Info
*server
= tcon
->ses
->server
;
414 if (server
->ops
->close
)
415 server
->ops
->close(xid
, tcon
, &cifs_file
->fid
);
419 if (oplock_break_cancelled
)
420 cifs_done_oplock_break(cifsi
);
422 cifs_del_pending_open(&open
);
425 * Delete any outstanding lock records. We'll lose them when the file
428 down_write(&cifsi
->lock_sem
);
429 list_for_each_entry_safe(li
, tmp
, &cifs_file
->llist
->locks
, llist
) {
430 list_del(&li
->llist
);
431 cifs_del_lock_waiters(li
);
434 list_del(&cifs_file
->llist
->llist
);
435 kfree(cifs_file
->llist
);
436 up_write(&cifsi
->lock_sem
);
438 cifs_put_tlink(cifs_file
->tlink
);
439 dput(cifs_file
->dentry
);
440 cifs_sb_deactive(sb
);
444 int cifs_open(struct inode
*inode
, struct file
*file
)
450 struct cifs_sb_info
*cifs_sb
;
451 struct TCP_Server_Info
*server
;
452 struct cifs_tcon
*tcon
;
453 struct tcon_link
*tlink
;
454 struct cifsFileInfo
*cfile
= NULL
;
455 char *full_path
= NULL
;
456 bool posix_open_ok
= false;
458 struct cifs_pending_open open
;
462 cifs_sb
= CIFS_SB(inode
->i_sb
);
463 tlink
= cifs_sb_tlink(cifs_sb
);
466 return PTR_ERR(tlink
);
468 tcon
= tlink_tcon(tlink
);
469 server
= tcon
->ses
->server
;
471 full_path
= build_path_from_dentry(file_dentry(file
));
472 if (full_path
== NULL
) {
477 cifs_dbg(FYI
, "inode = 0x%p file flags are 0x%x for %s\n",
478 inode
, file
->f_flags
, full_path
);
480 if (file
->f_flags
& O_DIRECT
&&
481 cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_STRICT_IO
) {
482 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NO_BRL
)
483 file
->f_op
= &cifs_file_direct_nobrl_ops
;
485 file
->f_op
= &cifs_file_direct_ops
;
493 if (!tcon
->broken_posix_open
&& tcon
->unix_ext
&&
494 cap_unix(tcon
->ses
) && (CIFS_UNIX_POSIX_PATH_OPS_CAP
&
495 le64_to_cpu(tcon
->fsUnixInfo
.Capability
))) {
496 /* can not refresh inode info since size could be stale */
497 rc
= cifs_posix_open(full_path
, &inode
, inode
->i_sb
,
498 cifs_sb
->mnt_file_mode
/* ignored */,
499 file
->f_flags
, &oplock
, &fid
.netfid
, xid
);
501 cifs_dbg(FYI
, "posix open succeeded\n");
502 posix_open_ok
= true;
503 } else if ((rc
== -EINVAL
) || (rc
== -EOPNOTSUPP
)) {
504 if (tcon
->ses
->serverNOS
)
505 cifs_dbg(VFS
, "server %s of type %s returned unexpected error on SMB posix open, disabling posix open support. Check if server update available.\n",
506 tcon
->ses
->serverName
,
507 tcon
->ses
->serverNOS
);
508 tcon
->broken_posix_open
= true;
509 } else if ((rc
!= -EIO
) && (rc
!= -EREMOTE
) &&
510 (rc
!= -EOPNOTSUPP
)) /* path not found or net err */
513 * Else fallthrough to retry open the old way on network i/o
518 if (server
->ops
->get_lease_key
)
519 server
->ops
->get_lease_key(inode
, &fid
);
521 cifs_add_pending_open(&fid
, tlink
, &open
);
523 if (!posix_open_ok
) {
524 if (server
->ops
->get_lease_key
)
525 server
->ops
->get_lease_key(inode
, &fid
);
527 rc
= cifs_nt_open(full_path
, inode
, cifs_sb
, tcon
,
528 file
->f_flags
, &oplock
, &fid
, xid
);
530 cifs_del_pending_open(&open
);
535 cfile
= cifs_new_fileinfo(&fid
, file
, tlink
, oplock
);
537 if (server
->ops
->close
)
538 server
->ops
->close(xid
, tcon
, &fid
);
539 cifs_del_pending_open(&open
);
544 cifs_fscache_set_inode_cookie(inode
, file
);
546 if ((oplock
& CIFS_CREATE_ACTION
) && !posix_open_ok
&& tcon
->unix_ext
) {
548 * Time to set mode which we can not set earlier due to
549 * problems creating new read-only files.
551 struct cifs_unix_set_info_args args
= {
552 .mode
= inode
->i_mode
,
553 .uid
= INVALID_UID
, /* no change */
554 .gid
= INVALID_GID
, /* no change */
555 .ctime
= NO_CHANGE_64
,
556 .atime
= NO_CHANGE_64
,
557 .mtime
= NO_CHANGE_64
,
560 CIFSSMBUnixSetFileInfo(xid
, tcon
, &args
, fid
.netfid
,
567 cifs_put_tlink(tlink
);
571 static int cifs_push_posix_locks(struct cifsFileInfo
*cfile
);
574 * Try to reacquire byte range locks that were released when session
575 * to server was lost.
578 cifs_relock_file(struct cifsFileInfo
*cfile
)
580 struct cifs_sb_info
*cifs_sb
= CIFS_SB(cfile
->dentry
->d_sb
);
581 struct cifsInodeInfo
*cinode
= CIFS_I(d_inode(cfile
->dentry
));
582 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
585 down_read(&cinode
->lock_sem
);
586 if (cinode
->can_cache_brlcks
) {
587 /* can cache locks - no need to relock */
588 up_read(&cinode
->lock_sem
);
592 if (cap_unix(tcon
->ses
) &&
593 (CIFS_UNIX_FCNTL_CAP
& le64_to_cpu(tcon
->fsUnixInfo
.Capability
)) &&
594 ((cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOPOSIXBRL
) == 0))
595 rc
= cifs_push_posix_locks(cfile
);
597 rc
= tcon
->ses
->server
->ops
->push_mand_locks(cfile
);
599 up_read(&cinode
->lock_sem
);
604 cifs_reopen_file(struct cifsFileInfo
*cfile
, bool can_flush
)
609 struct cifs_sb_info
*cifs_sb
;
610 struct cifs_tcon
*tcon
;
611 struct TCP_Server_Info
*server
;
612 struct cifsInodeInfo
*cinode
;
614 char *full_path
= NULL
;
616 int disposition
= FILE_OPEN
;
617 int create_options
= CREATE_NOT_DIR
;
618 struct cifs_open_parms oparms
;
621 mutex_lock(&cfile
->fh_mutex
);
622 if (!cfile
->invalidHandle
) {
623 mutex_unlock(&cfile
->fh_mutex
);
629 inode
= d_inode(cfile
->dentry
);
630 cifs_sb
= CIFS_SB(inode
->i_sb
);
631 tcon
= tlink_tcon(cfile
->tlink
);
632 server
= tcon
->ses
->server
;
635 * Can not grab rename sem here because various ops, including those
636 * that already have the rename sem can end up causing writepage to get
637 * called and if the server was down that means we end up here, and we
638 * can never tell if the caller already has the rename_sem.
640 full_path
= build_path_from_dentry(cfile
->dentry
);
641 if (full_path
== NULL
) {
643 mutex_unlock(&cfile
->fh_mutex
);
648 cifs_dbg(FYI
, "inode = 0x%p file flags 0x%x for %s\n",
649 inode
, cfile
->f_flags
, full_path
);
651 if (tcon
->ses
->server
->oplocks
)
656 if (tcon
->unix_ext
&& cap_unix(tcon
->ses
) &&
657 (CIFS_UNIX_POSIX_PATH_OPS_CAP
&
658 le64_to_cpu(tcon
->fsUnixInfo
.Capability
))) {
660 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the
661 * original open. Must mask them off for a reopen.
663 unsigned int oflags
= cfile
->f_flags
&
664 ~(O_CREAT
| O_EXCL
| O_TRUNC
);
666 rc
= cifs_posix_open(full_path
, NULL
, inode
->i_sb
,
667 cifs_sb
->mnt_file_mode
/* ignored */,
668 oflags
, &oplock
, &cfile
->fid
.netfid
, xid
);
670 cifs_dbg(FYI
, "posix reopen succeeded\n");
671 oparms
.reconnect
= true;
675 * fallthrough to retry open the old way on errors, especially
676 * in the reconnect path it is important to retry hard
680 desired_access
= cifs_convert_flags(cfile
->f_flags
);
682 if (backup_cred(cifs_sb
))
683 create_options
|= CREATE_OPEN_BACKUP_INTENT
;
685 if (server
->ops
->get_lease_key
)
686 server
->ops
->get_lease_key(inode
, &cfile
->fid
);
689 oparms
.cifs_sb
= cifs_sb
;
690 oparms
.desired_access
= desired_access
;
691 oparms
.create_options
= create_options
;
692 oparms
.disposition
= disposition
;
693 oparms
.path
= full_path
;
694 oparms
.fid
= &cfile
->fid
;
695 oparms
.reconnect
= true;
698 * Can not refresh inode by passing in file_info buf to be returned by
699 * ops->open and then calling get_inode_info with returned buf since
700 * file might have write behind data that needs to be flushed and server
701 * version of file size can be stale. If we knew for sure that inode was
702 * not dirty locally we could do this.
704 rc
= server
->ops
->open(xid
, &oparms
, &oplock
, NULL
);
705 if (rc
== -ENOENT
&& oparms
.reconnect
== false) {
706 /* durable handle timeout is expired - open the file again */
707 rc
= server
->ops
->open(xid
, &oparms
, &oplock
, NULL
);
708 /* indicate that we need to relock the file */
709 oparms
.reconnect
= true;
713 mutex_unlock(&cfile
->fh_mutex
);
714 cifs_dbg(FYI
, "cifs_reopen returned 0x%x\n", rc
);
715 cifs_dbg(FYI
, "oplock: %d\n", oplock
);
716 goto reopen_error_exit
;
720 cfile
->invalidHandle
= false;
721 mutex_unlock(&cfile
->fh_mutex
);
722 cinode
= CIFS_I(inode
);
725 rc
= filemap_write_and_wait(inode
->i_mapping
);
726 mapping_set_error(inode
->i_mapping
, rc
);
729 rc
= cifs_get_inode_info_unix(&inode
, full_path
,
732 rc
= cifs_get_inode_info(&inode
, full_path
, NULL
,
733 inode
->i_sb
, xid
, NULL
);
736 * Else we are writing out data to server already and could deadlock if
737 * we tried to flush data, and since we do not know if we have data that
738 * would invalidate the current end of file on the server we can not go
739 * to the server to get the new inode info.
742 server
->ops
->set_fid(cfile
, &cfile
->fid
, oplock
);
743 if (oparms
.reconnect
)
744 cifs_relock_file(cfile
);
752 int cifs_close(struct inode
*inode
, struct file
*file
)
754 if (file
->private_data
!= NULL
) {
755 cifsFileInfo_put(file
->private_data
);
756 file
->private_data
= NULL
;
759 /* return code from the ->release op is always ignored */
763 int cifs_closedir(struct inode
*inode
, struct file
*file
)
767 struct cifsFileInfo
*cfile
= file
->private_data
;
768 struct cifs_tcon
*tcon
;
769 struct TCP_Server_Info
*server
;
772 cifs_dbg(FYI
, "Closedir inode = 0x%p\n", inode
);
778 tcon
= tlink_tcon(cfile
->tlink
);
779 server
= tcon
->ses
->server
;
781 cifs_dbg(FYI
, "Freeing private data in close dir\n");
782 spin_lock(&cfile
->file_info_lock
);
783 if (server
->ops
->dir_needs_close(cfile
)) {
784 cfile
->invalidHandle
= true;
785 spin_unlock(&cfile
->file_info_lock
);
786 if (server
->ops
->close_dir
)
787 rc
= server
->ops
->close_dir(xid
, tcon
, &cfile
->fid
);
790 cifs_dbg(FYI
, "Closing uncompleted readdir with rc %d\n", rc
);
791 /* not much we can do if it fails anyway, ignore rc */
794 spin_unlock(&cfile
->file_info_lock
);
796 buf
= cfile
->srch_inf
.ntwrk_buf_start
;
798 cifs_dbg(FYI
, "closedir free smb buf in srch struct\n");
799 cfile
->srch_inf
.ntwrk_buf_start
= NULL
;
800 if (cfile
->srch_inf
.smallBuf
)
801 cifs_small_buf_release(buf
);
803 cifs_buf_release(buf
);
806 cifs_put_tlink(cfile
->tlink
);
807 kfree(file
->private_data
);
808 file
->private_data
= NULL
;
809 /* BB can we lock the filestruct while this is going on? */
814 static struct cifsLockInfo
*
815 cifs_lock_init(__u64 offset
, __u64 length
, __u8 type
)
817 struct cifsLockInfo
*lock
=
818 kmalloc(sizeof(struct cifsLockInfo
), GFP_KERNEL
);
821 lock
->offset
= offset
;
822 lock
->length
= length
;
824 lock
->pid
= current
->tgid
;
825 INIT_LIST_HEAD(&lock
->blist
);
826 init_waitqueue_head(&lock
->block_q
);
831 cifs_del_lock_waiters(struct cifsLockInfo
*lock
)
833 struct cifsLockInfo
*li
, *tmp
;
834 list_for_each_entry_safe(li
, tmp
, &lock
->blist
, blist
) {
835 list_del_init(&li
->blist
);
836 wake_up(&li
->block_q
);
840 #define CIFS_LOCK_OP 0
841 #define CIFS_READ_OP 1
842 #define CIFS_WRITE_OP 2
844 /* @rw_check : 0 - no op, 1 - read, 2 - write */
846 cifs_find_fid_lock_conflict(struct cifs_fid_locks
*fdlocks
, __u64 offset
,
847 __u64 length
, __u8 type
, struct cifsFileInfo
*cfile
,
848 struct cifsLockInfo
**conf_lock
, int rw_check
)
850 struct cifsLockInfo
*li
;
851 struct cifsFileInfo
*cur_cfile
= fdlocks
->cfile
;
852 struct TCP_Server_Info
*server
= tlink_tcon(cfile
->tlink
)->ses
->server
;
854 list_for_each_entry(li
, &fdlocks
->locks
, llist
) {
855 if (offset
+ length
<= li
->offset
||
856 offset
>= li
->offset
+ li
->length
)
858 if (rw_check
!= CIFS_LOCK_OP
&& current
->tgid
== li
->pid
&&
859 server
->ops
->compare_fids(cfile
, cur_cfile
)) {
860 /* shared lock prevents write op through the same fid */
861 if (!(li
->type
& server
->vals
->shared_lock_type
) ||
862 rw_check
!= CIFS_WRITE_OP
)
865 if ((type
& server
->vals
->shared_lock_type
) &&
866 ((server
->ops
->compare_fids(cfile
, cur_cfile
) &&
867 current
->tgid
== li
->pid
) || type
== li
->type
))
877 cifs_find_lock_conflict(struct cifsFileInfo
*cfile
, __u64 offset
, __u64 length
,
878 __u8 type
, struct cifsLockInfo
**conf_lock
,
882 struct cifs_fid_locks
*cur
;
883 struct cifsInodeInfo
*cinode
= CIFS_I(d_inode(cfile
->dentry
));
885 list_for_each_entry(cur
, &cinode
->llist
, llist
) {
886 rc
= cifs_find_fid_lock_conflict(cur
, offset
, length
, type
,
887 cfile
, conf_lock
, rw_check
);
896 * Check if there is another lock that prevents us to set the lock (mandatory
897 * style). If such a lock exists, update the flock structure with its
898 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
899 * or leave it the same if we can't. Returns 0 if we don't need to request to
900 * the server or 1 otherwise.
903 cifs_lock_test(struct cifsFileInfo
*cfile
, __u64 offset
, __u64 length
,
904 __u8 type
, struct file_lock
*flock
)
907 struct cifsLockInfo
*conf_lock
;
908 struct cifsInodeInfo
*cinode
= CIFS_I(d_inode(cfile
->dentry
));
909 struct TCP_Server_Info
*server
= tlink_tcon(cfile
->tlink
)->ses
->server
;
912 down_read(&cinode
->lock_sem
);
914 exist
= cifs_find_lock_conflict(cfile
, offset
, length
, type
,
915 &conf_lock
, CIFS_LOCK_OP
);
917 flock
->fl_start
= conf_lock
->offset
;
918 flock
->fl_end
= conf_lock
->offset
+ conf_lock
->length
- 1;
919 flock
->fl_pid
= conf_lock
->pid
;
920 if (conf_lock
->type
& server
->vals
->shared_lock_type
)
921 flock
->fl_type
= F_RDLCK
;
923 flock
->fl_type
= F_WRLCK
;
924 } else if (!cinode
->can_cache_brlcks
)
927 flock
->fl_type
= F_UNLCK
;
929 up_read(&cinode
->lock_sem
);
934 cifs_lock_add(struct cifsFileInfo
*cfile
, struct cifsLockInfo
*lock
)
936 struct cifsInodeInfo
*cinode
= CIFS_I(d_inode(cfile
->dentry
));
937 down_write(&cinode
->lock_sem
);
938 list_add_tail(&lock
->llist
, &cfile
->llist
->locks
);
939 up_write(&cinode
->lock_sem
);
943 * Set the byte-range lock (mandatory style). Returns:
944 * 1) 0, if we set the lock and don't need to request to the server;
945 * 2) 1, if no locks prevent us but we need to request to the server;
946 * 3) -EACCESS, if there is a lock that prevents us and wait is false.
949 cifs_lock_add_if(struct cifsFileInfo
*cfile
, struct cifsLockInfo
*lock
,
952 struct cifsLockInfo
*conf_lock
;
953 struct cifsInodeInfo
*cinode
= CIFS_I(d_inode(cfile
->dentry
));
959 down_write(&cinode
->lock_sem
);
961 exist
= cifs_find_lock_conflict(cfile
, lock
->offset
, lock
->length
,
962 lock
->type
, &conf_lock
, CIFS_LOCK_OP
);
963 if (!exist
&& cinode
->can_cache_brlcks
) {
964 list_add_tail(&lock
->llist
, &cfile
->llist
->locks
);
965 up_write(&cinode
->lock_sem
);
974 list_add_tail(&lock
->blist
, &conf_lock
->blist
);
975 up_write(&cinode
->lock_sem
);
976 rc
= wait_event_interruptible(lock
->block_q
,
977 (lock
->blist
.prev
== &lock
->blist
) &&
978 (lock
->blist
.next
== &lock
->blist
));
981 down_write(&cinode
->lock_sem
);
982 list_del_init(&lock
->blist
);
985 up_write(&cinode
->lock_sem
);
990 * Check if there is another lock that prevents us to set the lock (posix
991 * style). If such a lock exists, update the flock structure with its
992 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
993 * or leave it the same if we can't. Returns 0 if we don't need to request to
994 * the server or 1 otherwise.
997 cifs_posix_lock_test(struct file
*file
, struct file_lock
*flock
)
1000 struct cifsInodeInfo
*cinode
= CIFS_I(file_inode(file
));
1001 unsigned char saved_type
= flock
->fl_type
;
1003 if ((flock
->fl_flags
& FL_POSIX
) == 0)
1006 down_read(&cinode
->lock_sem
);
1007 posix_test_lock(file
, flock
);
1009 if (flock
->fl_type
== F_UNLCK
&& !cinode
->can_cache_brlcks
) {
1010 flock
->fl_type
= saved_type
;
1014 up_read(&cinode
->lock_sem
);
1019 * Set the byte-range lock (posix style). Returns:
1020 * 1) 0, if we set the lock and don't need to request to the server;
1021 * 2) 1, if we need to request to the server;
1022 * 3) <0, if the error occurs while setting the lock.
1025 cifs_posix_lock_set(struct file
*file
, struct file_lock
*flock
)
1027 struct cifsInodeInfo
*cinode
= CIFS_I(file_inode(file
));
1030 if ((flock
->fl_flags
& FL_POSIX
) == 0)
1034 down_write(&cinode
->lock_sem
);
1035 if (!cinode
->can_cache_brlcks
) {
1036 up_write(&cinode
->lock_sem
);
1040 rc
= posix_lock_file(file
, flock
, NULL
);
1041 up_write(&cinode
->lock_sem
);
1042 if (rc
== FILE_LOCK_DEFERRED
) {
1043 rc
= wait_event_interruptible(flock
->fl_wait
, !flock
->fl_next
);
1046 posix_unblock_lock(flock
);
1052 cifs_push_mandatory_locks(struct cifsFileInfo
*cfile
)
1055 int rc
= 0, stored_rc
;
1056 struct cifsLockInfo
*li
, *tmp
;
1057 struct cifs_tcon
*tcon
;
1058 unsigned int num
, max_num
, max_buf
;
1059 LOCKING_ANDX_RANGE
*buf
, *cur
;
1060 int types
[] = {LOCKING_ANDX_LARGE_FILES
,
1061 LOCKING_ANDX_SHARED_LOCK
| LOCKING_ANDX_LARGE_FILES
};
1065 tcon
= tlink_tcon(cfile
->tlink
);
1068 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1069 * and check it for zero before using.
1071 max_buf
= tcon
->ses
->server
->maxBuf
;
1077 max_num
= (max_buf
- sizeof(struct smb_hdr
)) /
1078 sizeof(LOCKING_ANDX_RANGE
);
1079 buf
= kcalloc(max_num
, sizeof(LOCKING_ANDX_RANGE
), GFP_KERNEL
);
1085 for (i
= 0; i
< 2; i
++) {
1088 list_for_each_entry_safe(li
, tmp
, &cfile
->llist
->locks
, llist
) {
1089 if (li
->type
!= types
[i
])
1091 cur
->Pid
= cpu_to_le16(li
->pid
);
1092 cur
->LengthLow
= cpu_to_le32((u32
)li
->length
);
1093 cur
->LengthHigh
= cpu_to_le32((u32
)(li
->length
>>32));
1094 cur
->OffsetLow
= cpu_to_le32((u32
)li
->offset
);
1095 cur
->OffsetHigh
= cpu_to_le32((u32
)(li
->offset
>>32));
1096 if (++num
== max_num
) {
1097 stored_rc
= cifs_lockv(xid
, tcon
,
1099 (__u8
)li
->type
, 0, num
,
1110 stored_rc
= cifs_lockv(xid
, tcon
, cfile
->fid
.netfid
,
1111 (__u8
)types
[i
], 0, num
, buf
);
1123 hash_lockowner(fl_owner_t owner
)
1125 return cifs_lock_secret
^ hash32_ptr((const void *)owner
);
1128 struct lock_to_push
{
1129 struct list_head llist
;
1138 cifs_push_posix_locks(struct cifsFileInfo
*cfile
)
1140 struct inode
*inode
= d_inode(cfile
->dentry
);
1141 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
1142 struct file_lock
*flock
;
1143 struct file_lock_context
*flctx
= inode
->i_flctx
;
1144 unsigned int count
= 0, i
;
1145 int rc
= 0, xid
, type
;
1146 struct list_head locks_to_send
, *el
;
1147 struct lock_to_push
*lck
, *tmp
;
1155 spin_lock(&flctx
->flc_lock
);
1156 list_for_each(el
, &flctx
->flc_posix
) {
1159 spin_unlock(&flctx
->flc_lock
);
1161 INIT_LIST_HEAD(&locks_to_send
);
1164 * Allocating count locks is enough because no FL_POSIX locks can be
1165 * added to the list while we are holding cinode->lock_sem that
1166 * protects locking operations of this inode.
1168 for (i
= 0; i
< count
; i
++) {
1169 lck
= kmalloc(sizeof(struct lock_to_push
), GFP_KERNEL
);
1174 list_add_tail(&lck
->llist
, &locks_to_send
);
1177 el
= locks_to_send
.next
;
1178 spin_lock(&flctx
->flc_lock
);
1179 list_for_each_entry(flock
, &flctx
->flc_posix
, fl_list
) {
1180 if (el
== &locks_to_send
) {
1182 * The list ended. We don't have enough allocated
1183 * structures - something is really wrong.
1185 cifs_dbg(VFS
, "Can't push all brlocks!\n");
1188 length
= 1 + flock
->fl_end
- flock
->fl_start
;
1189 if (flock
->fl_type
== F_RDLCK
|| flock
->fl_type
== F_SHLCK
)
1193 lck
= list_entry(el
, struct lock_to_push
, llist
);
1194 lck
->pid
= hash_lockowner(flock
->fl_owner
);
1195 lck
->netfid
= cfile
->fid
.netfid
;
1196 lck
->length
= length
;
1198 lck
->offset
= flock
->fl_start
;
1200 spin_unlock(&flctx
->flc_lock
);
1202 list_for_each_entry_safe(lck
, tmp
, &locks_to_send
, llist
) {
1205 stored_rc
= CIFSSMBPosixLock(xid
, tcon
, lck
->netfid
, lck
->pid
,
1206 lck
->offset
, lck
->length
, NULL
,
1210 list_del(&lck
->llist
);
1218 list_for_each_entry_safe(lck
, tmp
, &locks_to_send
, llist
) {
1219 list_del(&lck
->llist
);
1226 cifs_push_locks(struct cifsFileInfo
*cfile
)
1228 struct cifs_sb_info
*cifs_sb
= CIFS_SB(cfile
->dentry
->d_sb
);
1229 struct cifsInodeInfo
*cinode
= CIFS_I(d_inode(cfile
->dentry
));
1230 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
1233 /* we are going to update can_cache_brlcks here - need a write access */
1234 down_write(&cinode
->lock_sem
);
1235 if (!cinode
->can_cache_brlcks
) {
1236 up_write(&cinode
->lock_sem
);
1240 if (cap_unix(tcon
->ses
) &&
1241 (CIFS_UNIX_FCNTL_CAP
& le64_to_cpu(tcon
->fsUnixInfo
.Capability
)) &&
1242 ((cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOPOSIXBRL
) == 0))
1243 rc
= cifs_push_posix_locks(cfile
);
1245 rc
= tcon
->ses
->server
->ops
->push_mand_locks(cfile
);
1247 cinode
->can_cache_brlcks
= false;
1248 up_write(&cinode
->lock_sem
);
1253 cifs_read_flock(struct file_lock
*flock
, __u32
*type
, int *lock
, int *unlock
,
1254 bool *wait_flag
, struct TCP_Server_Info
*server
)
1256 if (flock
->fl_flags
& FL_POSIX
)
1257 cifs_dbg(FYI
, "Posix\n");
1258 if (flock
->fl_flags
& FL_FLOCK
)
1259 cifs_dbg(FYI
, "Flock\n");
1260 if (flock
->fl_flags
& FL_SLEEP
) {
1261 cifs_dbg(FYI
, "Blocking lock\n");
1264 if (flock
->fl_flags
& FL_ACCESS
)
1265 cifs_dbg(FYI
, "Process suspended by mandatory locking - not implemented yet\n");
1266 if (flock
->fl_flags
& FL_LEASE
)
1267 cifs_dbg(FYI
, "Lease on file - not implemented yet\n");
1268 if (flock
->fl_flags
&
1269 (~(FL_POSIX
| FL_FLOCK
| FL_SLEEP
|
1270 FL_ACCESS
| FL_LEASE
| FL_CLOSE
)))
1271 cifs_dbg(FYI
, "Unknown lock flags 0x%x\n", flock
->fl_flags
);
1273 *type
= server
->vals
->large_lock_type
;
1274 if (flock
->fl_type
== F_WRLCK
) {
1275 cifs_dbg(FYI
, "F_WRLCK\n");
1276 *type
|= server
->vals
->exclusive_lock_type
;
1278 } else if (flock
->fl_type
== F_UNLCK
) {
1279 cifs_dbg(FYI
, "F_UNLCK\n");
1280 *type
|= server
->vals
->unlock_lock_type
;
1282 /* Check if unlock includes more than one lock range */
1283 } else if (flock
->fl_type
== F_RDLCK
) {
1284 cifs_dbg(FYI
, "F_RDLCK\n");
1285 *type
|= server
->vals
->shared_lock_type
;
1287 } else if (flock
->fl_type
== F_EXLCK
) {
1288 cifs_dbg(FYI
, "F_EXLCK\n");
1289 *type
|= server
->vals
->exclusive_lock_type
;
1291 } else if (flock
->fl_type
== F_SHLCK
) {
1292 cifs_dbg(FYI
, "F_SHLCK\n");
1293 *type
|= server
->vals
->shared_lock_type
;
1296 cifs_dbg(FYI
, "Unknown type of lock\n");
1300 cifs_getlk(struct file
*file
, struct file_lock
*flock
, __u32 type
,
1301 bool wait_flag
, bool posix_lck
, unsigned int xid
)
1304 __u64 length
= 1 + flock
->fl_end
- flock
->fl_start
;
1305 struct cifsFileInfo
*cfile
= (struct cifsFileInfo
*)file
->private_data
;
1306 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
1307 struct TCP_Server_Info
*server
= tcon
->ses
->server
;
1308 __u16 netfid
= cfile
->fid
.netfid
;
1311 int posix_lock_type
;
1313 rc
= cifs_posix_lock_test(file
, flock
);
1317 if (type
& server
->vals
->shared_lock_type
)
1318 posix_lock_type
= CIFS_RDLCK
;
1320 posix_lock_type
= CIFS_WRLCK
;
1321 rc
= CIFSSMBPosixLock(xid
, tcon
, netfid
,
1322 hash_lockowner(flock
->fl_owner
),
1323 flock
->fl_start
, length
, flock
,
1324 posix_lock_type
, wait_flag
);
1328 rc
= cifs_lock_test(cfile
, flock
->fl_start
, length
, type
, flock
);
1332 /* BB we could chain these into one lock request BB */
1333 rc
= server
->ops
->mand_lock(xid
, cfile
, flock
->fl_start
, length
, type
,
1336 rc
= server
->ops
->mand_lock(xid
, cfile
, flock
->fl_start
, length
,
1338 flock
->fl_type
= F_UNLCK
;
1340 cifs_dbg(VFS
, "Error unlocking previously locked range %d during test of lock\n",
1345 if (type
& server
->vals
->shared_lock_type
) {
1346 flock
->fl_type
= F_WRLCK
;
1350 type
&= ~server
->vals
->exclusive_lock_type
;
1352 rc
= server
->ops
->mand_lock(xid
, cfile
, flock
->fl_start
, length
,
1353 type
| server
->vals
->shared_lock_type
,
1356 rc
= server
->ops
->mand_lock(xid
, cfile
, flock
->fl_start
, length
,
1357 type
| server
->vals
->shared_lock_type
, 0, 1, false);
1358 flock
->fl_type
= F_RDLCK
;
1360 cifs_dbg(VFS
, "Error unlocking previously locked range %d during test of lock\n",
1363 flock
->fl_type
= F_WRLCK
;
1369 cifs_move_llist(struct list_head
*source
, struct list_head
*dest
)
1371 struct list_head
*li
, *tmp
;
1372 list_for_each_safe(li
, tmp
, source
)
1373 list_move(li
, dest
);
1377 cifs_free_llist(struct list_head
*llist
)
1379 struct cifsLockInfo
*li
, *tmp
;
1380 list_for_each_entry_safe(li
, tmp
, llist
, llist
) {
1381 cifs_del_lock_waiters(li
);
1382 list_del(&li
->llist
);
1388 cifs_unlock_range(struct cifsFileInfo
*cfile
, struct file_lock
*flock
,
1391 int rc
= 0, stored_rc
;
1392 int types
[] = {LOCKING_ANDX_LARGE_FILES
,
1393 LOCKING_ANDX_SHARED_LOCK
| LOCKING_ANDX_LARGE_FILES
};
1395 unsigned int max_num
, num
, max_buf
;
1396 LOCKING_ANDX_RANGE
*buf
, *cur
;
1397 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
1398 struct cifsInodeInfo
*cinode
= CIFS_I(d_inode(cfile
->dentry
));
1399 struct cifsLockInfo
*li
, *tmp
;
1400 __u64 length
= 1 + flock
->fl_end
- flock
->fl_start
;
1401 struct list_head tmp_llist
;
1403 INIT_LIST_HEAD(&tmp_llist
);
1406 * Accessing maxBuf is racy with cifs_reconnect - need to store value
1407 * and check it for zero before using.
1409 max_buf
= tcon
->ses
->server
->maxBuf
;
1413 max_num
= (max_buf
- sizeof(struct smb_hdr
)) /
1414 sizeof(LOCKING_ANDX_RANGE
);
1415 buf
= kcalloc(max_num
, sizeof(LOCKING_ANDX_RANGE
), GFP_KERNEL
);
1419 down_write(&cinode
->lock_sem
);
1420 for (i
= 0; i
< 2; i
++) {
1423 list_for_each_entry_safe(li
, tmp
, &cfile
->llist
->locks
, llist
) {
1424 if (flock
->fl_start
> li
->offset
||
1425 (flock
->fl_start
+ length
) <
1426 (li
->offset
+ li
->length
))
1428 if (current
->tgid
!= li
->pid
)
1430 if (types
[i
] != li
->type
)
1432 if (cinode
->can_cache_brlcks
) {
1434 * We can cache brlock requests - simply remove
1435 * a lock from the file's list.
1437 list_del(&li
->llist
);
1438 cifs_del_lock_waiters(li
);
1442 cur
->Pid
= cpu_to_le16(li
->pid
);
1443 cur
->LengthLow
= cpu_to_le32((u32
)li
->length
);
1444 cur
->LengthHigh
= cpu_to_le32((u32
)(li
->length
>>32));
1445 cur
->OffsetLow
= cpu_to_le32((u32
)li
->offset
);
1446 cur
->OffsetHigh
= cpu_to_le32((u32
)(li
->offset
>>32));
1448 * We need to save a lock here to let us add it again to
1449 * the file's list if the unlock range request fails on
1452 list_move(&li
->llist
, &tmp_llist
);
1453 if (++num
== max_num
) {
1454 stored_rc
= cifs_lockv(xid
, tcon
,
1456 li
->type
, num
, 0, buf
);
1459 * We failed on the unlock range
1460 * request - add all locks from the tmp
1461 * list to the head of the file's list.
1463 cifs_move_llist(&tmp_llist
,
1464 &cfile
->llist
->locks
);
1468 * The unlock range request succeed -
1469 * free the tmp list.
1471 cifs_free_llist(&tmp_llist
);
1478 stored_rc
= cifs_lockv(xid
, tcon
, cfile
->fid
.netfid
,
1479 types
[i
], num
, 0, buf
);
1481 cifs_move_llist(&tmp_llist
,
1482 &cfile
->llist
->locks
);
1485 cifs_free_llist(&tmp_llist
);
1489 up_write(&cinode
->lock_sem
);
1495 cifs_setlk(struct file
*file
, struct file_lock
*flock
, __u32 type
,
1496 bool wait_flag
, bool posix_lck
, int lock
, int unlock
,
1500 __u64 length
= 1 + flock
->fl_end
- flock
->fl_start
;
1501 struct cifsFileInfo
*cfile
= (struct cifsFileInfo
*)file
->private_data
;
1502 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
1503 struct TCP_Server_Info
*server
= tcon
->ses
->server
;
1504 struct inode
*inode
= d_inode(cfile
->dentry
);
1507 int posix_lock_type
;
1509 rc
= cifs_posix_lock_set(file
, flock
);
1513 if (type
& server
->vals
->shared_lock_type
)
1514 posix_lock_type
= CIFS_RDLCK
;
1516 posix_lock_type
= CIFS_WRLCK
;
1519 posix_lock_type
= CIFS_UNLCK
;
1521 rc
= CIFSSMBPosixLock(xid
, tcon
, cfile
->fid
.netfid
,
1522 hash_lockowner(flock
->fl_owner
),
1523 flock
->fl_start
, length
,
1524 NULL
, posix_lock_type
, wait_flag
);
1529 struct cifsLockInfo
*lock
;
1531 lock
= cifs_lock_init(flock
->fl_start
, length
, type
);
1535 rc
= cifs_lock_add_if(cfile
, lock
, wait_flag
);
1544 * Windows 7 server can delay breaking lease from read to None
1545 * if we set a byte-range lock on a file - break it explicitly
1546 * before sending the lock to the server to be sure the next
1547 * read won't conflict with non-overlapted locks due to
1550 if (!CIFS_CACHE_WRITE(CIFS_I(inode
)) &&
1551 CIFS_CACHE_READ(CIFS_I(inode
))) {
1552 cifs_zap_mapping(inode
);
1553 cifs_dbg(FYI
, "Set no oplock for inode=%p due to mand locks\n",
1555 CIFS_I(inode
)->oplock
= 0;
1558 rc
= server
->ops
->mand_lock(xid
, cfile
, flock
->fl_start
, length
,
1559 type
, 1, 0, wait_flag
);
1565 cifs_lock_add(cfile
, lock
);
1567 rc
= server
->ops
->mand_unlock_range(cfile
, flock
, xid
);
1570 if (flock
->fl_flags
& FL_POSIX
&& !rc
)
1571 rc
= locks_lock_file_wait(file
, flock
);
1575 int cifs_lock(struct file
*file
, int cmd
, struct file_lock
*flock
)
1578 int lock
= 0, unlock
= 0;
1579 bool wait_flag
= false;
1580 bool posix_lck
= false;
1581 struct cifs_sb_info
*cifs_sb
;
1582 struct cifs_tcon
*tcon
;
1583 struct cifsInodeInfo
*cinode
;
1584 struct cifsFileInfo
*cfile
;
1591 cifs_dbg(FYI
, "Lock parm: 0x%x flockflags: 0x%x flocktype: 0x%x start: %lld end: %lld\n",
1592 cmd
, flock
->fl_flags
, flock
->fl_type
,
1593 flock
->fl_start
, flock
->fl_end
);
1595 cfile
= (struct cifsFileInfo
*)file
->private_data
;
1596 tcon
= tlink_tcon(cfile
->tlink
);
1598 cifs_read_flock(flock
, &type
, &lock
, &unlock
, &wait_flag
,
1601 cifs_sb
= CIFS_FILE_SB(file
);
1602 netfid
= cfile
->fid
.netfid
;
1603 cinode
= CIFS_I(file_inode(file
));
1605 if (cap_unix(tcon
->ses
) &&
1606 (CIFS_UNIX_FCNTL_CAP
& le64_to_cpu(tcon
->fsUnixInfo
.Capability
)) &&
1607 ((cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOPOSIXBRL
) == 0))
1610 * BB add code here to normalize offset and length to account for
1611 * negative length which we can not accept over the wire.
1613 if (IS_GETLK(cmd
)) {
1614 rc
= cifs_getlk(file
, flock
, type
, wait_flag
, posix_lck
, xid
);
1619 if (!lock
&& !unlock
) {
1621 * if no lock or unlock then nothing to do since we do not
1628 rc
= cifs_setlk(file
, flock
, type
, wait_flag
, posix_lck
, lock
, unlock
,
1635 * update the file size (if needed) after a write. Should be called with
1636 * the inode->i_lock held
1639 cifs_update_eof(struct cifsInodeInfo
*cifsi
, loff_t offset
,
1640 unsigned int bytes_written
)
1642 loff_t end_of_write
= offset
+ bytes_written
;
1644 if (end_of_write
> cifsi
->server_eof
)
1645 cifsi
->server_eof
= end_of_write
;
1649 cifs_write(struct cifsFileInfo
*open_file
, __u32 pid
, const char *write_data
,
1650 size_t write_size
, loff_t
*offset
)
1653 unsigned int bytes_written
= 0;
1654 unsigned int total_written
;
1655 struct cifs_sb_info
*cifs_sb
;
1656 struct cifs_tcon
*tcon
;
1657 struct TCP_Server_Info
*server
;
1659 struct dentry
*dentry
= open_file
->dentry
;
1660 struct cifsInodeInfo
*cifsi
= CIFS_I(d_inode(dentry
));
1661 struct cifs_io_parms io_parms
;
1663 cifs_sb
= CIFS_SB(dentry
->d_sb
);
1665 cifs_dbg(FYI
, "write %zd bytes to offset %lld of %pd\n",
1666 write_size
, *offset
, dentry
);
1668 tcon
= tlink_tcon(open_file
->tlink
);
1669 server
= tcon
->ses
->server
;
1671 if (!server
->ops
->sync_write
)
1676 for (total_written
= 0; write_size
> total_written
;
1677 total_written
+= bytes_written
) {
1679 while (rc
== -EAGAIN
) {
1683 if (open_file
->invalidHandle
) {
1684 /* we could deadlock if we called
1685 filemap_fdatawait from here so tell
1686 reopen_file not to flush data to
1688 rc
= cifs_reopen_file(open_file
, false);
1693 len
= min(server
->ops
->wp_retry_size(d_inode(dentry
)),
1694 (unsigned int)write_size
- total_written
);
1695 /* iov[0] is reserved for smb header */
1696 iov
[1].iov_base
= (char *)write_data
+ total_written
;
1697 iov
[1].iov_len
= len
;
1699 io_parms
.tcon
= tcon
;
1700 io_parms
.offset
= *offset
;
1701 io_parms
.length
= len
;
1702 rc
= server
->ops
->sync_write(xid
, &open_file
->fid
,
1703 &io_parms
, &bytes_written
, iov
, 1);
1705 if (rc
|| (bytes_written
== 0)) {
1713 spin_lock(&d_inode(dentry
)->i_lock
);
1714 cifs_update_eof(cifsi
, *offset
, bytes_written
);
1715 spin_unlock(&d_inode(dentry
)->i_lock
);
1716 *offset
+= bytes_written
;
1720 cifs_stats_bytes_written(tcon
, total_written
);
1722 if (total_written
> 0) {
1723 spin_lock(&d_inode(dentry
)->i_lock
);
1724 if (*offset
> d_inode(dentry
)->i_size
)
1725 i_size_write(d_inode(dentry
), *offset
);
1726 spin_unlock(&d_inode(dentry
)->i_lock
);
1728 mark_inode_dirty_sync(d_inode(dentry
));
1730 return total_written
;
1733 struct cifsFileInfo
*find_readable_file(struct cifsInodeInfo
*cifs_inode
,
1736 struct cifsFileInfo
*open_file
= NULL
;
1737 struct cifs_sb_info
*cifs_sb
= CIFS_SB(cifs_inode
->vfs_inode
.i_sb
);
1738 struct cifs_tcon
*tcon
= cifs_sb_master_tcon(cifs_sb
);
1740 /* only filter by fsuid on multiuser mounts */
1741 if (!(cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_MULTIUSER
))
1744 spin_lock(&tcon
->open_file_lock
);
1745 /* we could simply get the first_list_entry since write-only entries
1746 are always at the end of the list but since the first entry might
1747 have a close pending, we go through the whole list */
1748 list_for_each_entry(open_file
, &cifs_inode
->openFileList
, flist
) {
1749 if (fsuid_only
&& !uid_eq(open_file
->uid
, current_fsuid()))
1751 if (OPEN_FMODE(open_file
->f_flags
) & FMODE_READ
) {
1752 if (!open_file
->invalidHandle
) {
1753 /* found a good file */
1754 /* lock it so it will not be closed on us */
1755 cifsFileInfo_get(open_file
);
1756 spin_unlock(&tcon
->open_file_lock
);
1758 } /* else might as well continue, and look for
1759 another, or simply have the caller reopen it
1760 again rather than trying to fix this handle */
1761 } else /* write only file */
1762 break; /* write only files are last so must be done */
1764 spin_unlock(&tcon
->open_file_lock
);
1768 struct cifsFileInfo
*find_writable_file(struct cifsInodeInfo
*cifs_inode
,
1771 struct cifsFileInfo
*open_file
, *inv_file
= NULL
;
1772 struct cifs_sb_info
*cifs_sb
;
1773 struct cifs_tcon
*tcon
;
1774 bool any_available
= false;
1776 unsigned int refind
= 0;
1778 /* Having a null inode here (because mapping->host was set to zero by
1779 the VFS or MM) should not happen but we had reports of on oops (due to
1780 it being zero) during stress testcases so we need to check for it */
1782 if (cifs_inode
== NULL
) {
1783 cifs_dbg(VFS
, "Null inode passed to cifs_writeable_file\n");
1788 cifs_sb
= CIFS_SB(cifs_inode
->vfs_inode
.i_sb
);
1789 tcon
= cifs_sb_master_tcon(cifs_sb
);
1791 /* only filter by fsuid on multiuser mounts */
1792 if (!(cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_MULTIUSER
))
1795 spin_lock(&tcon
->open_file_lock
);
1797 if (refind
> MAX_REOPEN_ATT
) {
1798 spin_unlock(&tcon
->open_file_lock
);
1801 list_for_each_entry(open_file
, &cifs_inode
->openFileList
, flist
) {
1802 if (!any_available
&& open_file
->pid
!= current
->tgid
)
1804 if (fsuid_only
&& !uid_eq(open_file
->uid
, current_fsuid()))
1806 if (OPEN_FMODE(open_file
->f_flags
) & FMODE_WRITE
) {
1807 if (!open_file
->invalidHandle
) {
1808 /* found a good writable file */
1809 cifsFileInfo_get(open_file
);
1810 spin_unlock(&tcon
->open_file_lock
);
1814 inv_file
= open_file
;
1818 /* couldn't find useable FH with same pid, try any available */
1819 if (!any_available
) {
1820 any_available
= true;
1821 goto refind_writable
;
1825 any_available
= false;
1826 cifsFileInfo_get(inv_file
);
1829 spin_unlock(&tcon
->open_file_lock
);
1832 rc
= cifs_reopen_file(inv_file
, false);
1836 spin_lock(&tcon
->open_file_lock
);
1837 list_move_tail(&inv_file
->flist
,
1838 &cifs_inode
->openFileList
);
1839 spin_unlock(&tcon
->open_file_lock
);
1840 cifsFileInfo_put(inv_file
);
1843 spin_lock(&tcon
->open_file_lock
);
1844 goto refind_writable
;
1851 static int cifs_partialpagewrite(struct page
*page
, unsigned from
, unsigned to
)
1853 struct address_space
*mapping
= page
->mapping
;
1854 loff_t offset
= (loff_t
)page
->index
<< PAGE_SHIFT
;
1857 int bytes_written
= 0;
1858 struct inode
*inode
;
1859 struct cifsFileInfo
*open_file
;
1861 if (!mapping
|| !mapping
->host
)
1864 inode
= page
->mapping
->host
;
1866 offset
+= (loff_t
)from
;
1867 write_data
= kmap(page
);
1870 if ((to
> PAGE_SIZE
) || (from
> to
)) {
1875 /* racing with truncate? */
1876 if (offset
> mapping
->host
->i_size
) {
1878 return 0; /* don't care */
1881 /* check to make sure that we are not extending the file */
1882 if (mapping
->host
->i_size
- offset
< (loff_t
)to
)
1883 to
= (unsigned)(mapping
->host
->i_size
- offset
);
1885 open_file
= find_writable_file(CIFS_I(mapping
->host
), false);
1887 bytes_written
= cifs_write(open_file
, open_file
->pid
,
1888 write_data
, to
- from
, &offset
);
1889 cifsFileInfo_put(open_file
);
1890 /* Does mm or vfs already set times? */
1891 inode
->i_atime
= inode
->i_mtime
= current_time(inode
);
1892 if ((bytes_written
> 0) && (offset
))
1894 else if (bytes_written
< 0)
1897 cifs_dbg(FYI
, "No writeable filehandles for inode\n");
1905 static struct cifs_writedata
*
1906 wdata_alloc_and_fillpages(pgoff_t tofind
, struct address_space
*mapping
,
1907 pgoff_t end
, pgoff_t
*index
,
1908 unsigned int *found_pages
)
1910 unsigned int nr_pages
;
1911 struct page
**pages
;
1912 struct cifs_writedata
*wdata
;
1914 wdata
= cifs_writedata_alloc((unsigned int)tofind
,
1915 cifs_writev_complete
);
1920 * find_get_pages_tag seems to return a max of 256 on each
1921 * iteration, so we must call it several times in order to
1922 * fill the array or the wsize is effectively limited to
1926 pages
= wdata
->pages
;
1928 nr_pages
= find_get_pages_tag(mapping
, index
,
1929 PAGECACHE_TAG_DIRTY
, tofind
,
1931 *found_pages
+= nr_pages
;
1934 } while (nr_pages
&& tofind
&& *index
<= end
);
1940 wdata_prepare_pages(struct cifs_writedata
*wdata
, unsigned int found_pages
,
1941 struct address_space
*mapping
,
1942 struct writeback_control
*wbc
,
1943 pgoff_t end
, pgoff_t
*index
, pgoff_t
*next
, bool *done
)
1945 unsigned int nr_pages
= 0, i
;
1948 for (i
= 0; i
< found_pages
; i
++) {
1949 page
= wdata
->pages
[i
];
1951 * At this point we hold neither mapping->tree_lock nor
1952 * lock on the page itself: the page may be truncated or
1953 * invalidated (changing page->mapping to NULL), or even
1954 * swizzled back from swapper_space to tmpfs file
1960 else if (!trylock_page(page
))
1963 if (unlikely(page
->mapping
!= mapping
)) {
1968 if (!wbc
->range_cyclic
&& page
->index
> end
) {
1974 if (*next
&& (page
->index
!= *next
)) {
1975 /* Not next consecutive page */
1980 if (wbc
->sync_mode
!= WB_SYNC_NONE
)
1981 wait_on_page_writeback(page
);
1983 if (PageWriteback(page
) ||
1984 !clear_page_dirty_for_io(page
)) {
1990 * This actually clears the dirty bit in the radix tree.
1991 * See cifs_writepage() for more commentary.
1993 set_page_writeback(page
);
1994 if (page_offset(page
) >= i_size_read(mapping
->host
)) {
1997 end_page_writeback(page
);
2001 wdata
->pages
[i
] = page
;
2002 *next
= page
->index
+ 1;
2006 /* reset index to refind any pages skipped */
2008 *index
= wdata
->pages
[0]->index
+ 1;
2010 /* put any pages we aren't going to use */
2011 for (i
= nr_pages
; i
< found_pages
; i
++) {
2012 put_page(wdata
->pages
[i
]);
2013 wdata
->pages
[i
] = NULL
;
2020 wdata_send_pages(struct cifs_writedata
*wdata
, unsigned int nr_pages
,
2021 struct address_space
*mapping
, struct writeback_control
*wbc
)
2024 struct TCP_Server_Info
*server
;
2027 wdata
->sync_mode
= wbc
->sync_mode
;
2028 wdata
->nr_pages
= nr_pages
;
2029 wdata
->offset
= page_offset(wdata
->pages
[0]);
2030 wdata
->pagesz
= PAGE_SIZE
;
2031 wdata
->tailsz
= min(i_size_read(mapping
->host
) -
2032 page_offset(wdata
->pages
[nr_pages
- 1]),
2034 wdata
->bytes
= ((nr_pages
- 1) * PAGE_SIZE
) + wdata
->tailsz
;
2036 if (wdata
->cfile
!= NULL
)
2037 cifsFileInfo_put(wdata
->cfile
);
2038 wdata
->cfile
= find_writable_file(CIFS_I(mapping
->host
), false);
2039 if (!wdata
->cfile
) {
2040 cifs_dbg(VFS
, "No writable handles for inode\n");
2043 wdata
->pid
= wdata
->cfile
->pid
;
2044 server
= tlink_tcon(wdata
->cfile
->tlink
)->ses
->server
;
2045 rc
= server
->ops
->async_writev(wdata
, cifs_writedata_release
);
2048 for (i
= 0; i
< nr_pages
; ++i
)
2049 unlock_page(wdata
->pages
[i
]);
2054 static int cifs_writepages(struct address_space
*mapping
,
2055 struct writeback_control
*wbc
)
2057 struct cifs_sb_info
*cifs_sb
= CIFS_SB(mapping
->host
->i_sb
);
2058 struct TCP_Server_Info
*server
;
2059 bool done
= false, scanned
= false, range_whole
= false;
2061 struct cifs_writedata
*wdata
;
2065 * If wsize is smaller than the page cache size, default to writing
2066 * one page at a time via cifs_writepage
2068 if (cifs_sb
->wsize
< PAGE_SIZE
)
2069 return generic_writepages(mapping
, wbc
);
2071 if (wbc
->range_cyclic
) {
2072 index
= mapping
->writeback_index
; /* Start from prev offset */
2075 index
= wbc
->range_start
>> PAGE_SHIFT
;
2076 end
= wbc
->range_end
>> PAGE_SHIFT
;
2077 if (wbc
->range_start
== 0 && wbc
->range_end
== LLONG_MAX
)
2081 server
= cifs_sb_master_tcon(cifs_sb
)->ses
->server
;
2083 while (!done
&& index
<= end
) {
2084 unsigned int i
, nr_pages
, found_pages
, wsize
, credits
;
2085 pgoff_t next
= 0, tofind
, saved_index
= index
;
2087 rc
= server
->ops
->wait_mtu_credits(server
, cifs_sb
->wsize
,
2092 tofind
= min((wsize
/ PAGE_SIZE
) - 1, end
- index
) + 1;
2094 wdata
= wdata_alloc_and_fillpages(tofind
, mapping
, end
, &index
,
2098 add_credits_and_wake_if(server
, credits
, 0);
2102 if (found_pages
== 0) {
2103 kref_put(&wdata
->refcount
, cifs_writedata_release
);
2104 add_credits_and_wake_if(server
, credits
, 0);
2108 nr_pages
= wdata_prepare_pages(wdata
, found_pages
, mapping
, wbc
,
2109 end
, &index
, &next
, &done
);
2111 /* nothing to write? */
2112 if (nr_pages
== 0) {
2113 kref_put(&wdata
->refcount
, cifs_writedata_release
);
2114 add_credits_and_wake_if(server
, credits
, 0);
2118 wdata
->credits
= credits
;
2120 rc
= wdata_send_pages(wdata
, nr_pages
, mapping
, wbc
);
2122 /* send failure -- clean up the mess */
2124 add_credits_and_wake_if(server
, wdata
->credits
, 0);
2125 for (i
= 0; i
< nr_pages
; ++i
) {
2127 redirty_page_for_writepage(wbc
,
2130 SetPageError(wdata
->pages
[i
]);
2131 end_page_writeback(wdata
->pages
[i
]);
2132 put_page(wdata
->pages
[i
]);
2135 mapping_set_error(mapping
, rc
);
2137 kref_put(&wdata
->refcount
, cifs_writedata_release
);
2139 if (wbc
->sync_mode
== WB_SYNC_ALL
&& rc
== -EAGAIN
) {
2140 index
= saved_index
;
2144 wbc
->nr_to_write
-= nr_pages
;
2145 if (wbc
->nr_to_write
<= 0)
2151 if (!scanned
&& !done
) {
2153 * We hit the last page and there is more work to be done: wrap
2154 * back to the start of the file
2161 if (wbc
->range_cyclic
|| (range_whole
&& wbc
->nr_to_write
> 0))
2162 mapping
->writeback_index
= index
;
2168 cifs_writepage_locked(struct page
*page
, struct writeback_control
*wbc
)
2174 /* BB add check for wbc flags */
2176 if (!PageUptodate(page
))
2177 cifs_dbg(FYI
, "ppw - page not up to date\n");
2180 * Set the "writeback" flag, and clear "dirty" in the radix tree.
2182 * A writepage() implementation always needs to do either this,
2183 * or re-dirty the page with "redirty_page_for_writepage()" in
2184 * the case of a failure.
2186 * Just unlocking the page will cause the radix tree tag-bits
2187 * to fail to update with the state of the page correctly.
2189 set_page_writeback(page
);
2191 rc
= cifs_partialpagewrite(page
, 0, PAGE_SIZE
);
2192 if (rc
== -EAGAIN
&& wbc
->sync_mode
== WB_SYNC_ALL
)
2194 else if (rc
== -EAGAIN
)
2195 redirty_page_for_writepage(wbc
, page
);
2199 SetPageUptodate(page
);
2200 end_page_writeback(page
);
2206 static int cifs_writepage(struct page
*page
, struct writeback_control
*wbc
)
2208 int rc
= cifs_writepage_locked(page
, wbc
);
2213 static int cifs_write_end(struct file
*file
, struct address_space
*mapping
,
2214 loff_t pos
, unsigned len
, unsigned copied
,
2215 struct page
*page
, void *fsdata
)
2218 struct inode
*inode
= mapping
->host
;
2219 struct cifsFileInfo
*cfile
= file
->private_data
;
2220 struct cifs_sb_info
*cifs_sb
= CIFS_SB(cfile
->dentry
->d_sb
);
2223 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_RWPIDFORWARD
)
2226 pid
= current
->tgid
;
2228 cifs_dbg(FYI
, "write_end for page %p from pos %lld with %d bytes\n",
2231 if (PageChecked(page
)) {
2233 SetPageUptodate(page
);
2234 ClearPageChecked(page
);
2235 } else if (!PageUptodate(page
) && copied
== PAGE_SIZE
)
2236 SetPageUptodate(page
);
2238 if (!PageUptodate(page
)) {
2240 unsigned offset
= pos
& (PAGE_SIZE
- 1);
2244 /* this is probably better than directly calling
2245 partialpage_write since in this function the file handle is
2246 known which we might as well leverage */
2247 /* BB check if anything else missing out of ppw
2248 such as updating last write time */
2249 page_data
= kmap(page
);
2250 rc
= cifs_write(cfile
, pid
, page_data
+ offset
, copied
, &pos
);
2251 /* if (rc < 0) should we set writebehind rc? */
2258 set_page_dirty(page
);
2262 spin_lock(&inode
->i_lock
);
2263 if (pos
> inode
->i_size
)
2264 i_size_write(inode
, pos
);
2265 spin_unlock(&inode
->i_lock
);
2274 int cifs_strict_fsync(struct file
*file
, loff_t start
, loff_t end
,
2279 struct cifs_tcon
*tcon
;
2280 struct TCP_Server_Info
*server
;
2281 struct cifsFileInfo
*smbfile
= file
->private_data
;
2282 struct inode
*inode
= file_inode(file
);
2283 struct cifs_sb_info
*cifs_sb
= CIFS_SB(inode
->i_sb
);
2285 rc
= filemap_write_and_wait_range(inode
->i_mapping
, start
, end
);
2292 cifs_dbg(FYI
, "Sync file - name: %pD datasync: 0x%x\n",
2295 if (!CIFS_CACHE_READ(CIFS_I(inode
))) {
2296 rc
= cifs_zap_mapping(inode
);
2298 cifs_dbg(FYI
, "rc: %d during invalidate phase\n", rc
);
2299 rc
= 0; /* don't care about it in fsync */
2303 tcon
= tlink_tcon(smbfile
->tlink
);
2304 if (!(cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOSSYNC
)) {
2305 server
= tcon
->ses
->server
;
2306 if (server
->ops
->flush
)
2307 rc
= server
->ops
->flush(xid
, tcon
, &smbfile
->fid
);
2313 inode_unlock(inode
);
2317 int cifs_fsync(struct file
*file
, loff_t start
, loff_t end
, int datasync
)
2321 struct cifs_tcon
*tcon
;
2322 struct TCP_Server_Info
*server
;
2323 struct cifsFileInfo
*smbfile
= file
->private_data
;
2324 struct cifs_sb_info
*cifs_sb
= CIFS_FILE_SB(file
);
2325 struct inode
*inode
= file
->f_mapping
->host
;
2327 rc
= filemap_write_and_wait_range(inode
->i_mapping
, start
, end
);
2334 cifs_dbg(FYI
, "Sync file - name: %pD datasync: 0x%x\n",
2337 tcon
= tlink_tcon(smbfile
->tlink
);
2338 if (!(cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOSSYNC
)) {
2339 server
= tcon
->ses
->server
;
2340 if (server
->ops
->flush
)
2341 rc
= server
->ops
->flush(xid
, tcon
, &smbfile
->fid
);
2347 inode_unlock(inode
);
2352 * As file closes, flush all cached write data for this inode checking
2353 * for write behind errors.
2355 int cifs_flush(struct file
*file
, fl_owner_t id
)
2357 struct inode
*inode
= file_inode(file
);
2360 if (file
->f_mode
& FMODE_WRITE
)
2361 rc
= filemap_write_and_wait(inode
->i_mapping
);
2363 cifs_dbg(FYI
, "Flush inode %p file %p rc %d\n", inode
, file
, rc
);
2369 cifs_write_allocate_pages(struct page
**pages
, unsigned long num_pages
)
2374 for (i
= 0; i
< num_pages
; i
++) {
2375 pages
[i
] = alloc_page(GFP_KERNEL
|__GFP_HIGHMEM
);
2378 * save number of pages we have already allocated and
2379 * return with ENOMEM error
2388 for (i
= 0; i
< num_pages
; i
++)
2395 size_t get_numpages(const size_t wsize
, const size_t len
, size_t *cur_len
)
2400 clen
= min_t(const size_t, len
, wsize
);
2401 num_pages
= DIV_ROUND_UP(clen
, PAGE_SIZE
);
2410 cifs_uncached_writedata_release(struct kref
*refcount
)
2413 struct cifs_writedata
*wdata
= container_of(refcount
,
2414 struct cifs_writedata
, refcount
);
2416 for (i
= 0; i
< wdata
->nr_pages
; i
++)
2417 put_page(wdata
->pages
[i
]);
2418 cifs_writedata_release(refcount
);
2422 cifs_uncached_writev_complete(struct work_struct
*work
)
2424 struct cifs_writedata
*wdata
= container_of(work
,
2425 struct cifs_writedata
, work
);
2426 struct inode
*inode
= d_inode(wdata
->cfile
->dentry
);
2427 struct cifsInodeInfo
*cifsi
= CIFS_I(inode
);
2429 spin_lock(&inode
->i_lock
);
2430 cifs_update_eof(cifsi
, wdata
->offset
, wdata
->bytes
);
2431 if (cifsi
->server_eof
> inode
->i_size
)
2432 i_size_write(inode
, cifsi
->server_eof
);
2433 spin_unlock(&inode
->i_lock
);
2435 complete(&wdata
->done
);
2437 kref_put(&wdata
->refcount
, cifs_uncached_writedata_release
);
2441 wdata_fill_from_iovec(struct cifs_writedata
*wdata
, struct iov_iter
*from
,
2442 size_t *len
, unsigned long *num_pages
)
2444 size_t save_len
, copied
, bytes
, cur_len
= *len
;
2445 unsigned long i
, nr_pages
= *num_pages
;
2448 for (i
= 0; i
< nr_pages
; i
++) {
2449 bytes
= min_t(const size_t, cur_len
, PAGE_SIZE
);
2450 copied
= copy_page_from_iter(wdata
->pages
[i
], 0, bytes
, from
);
2453 * If we didn't copy as much as we expected, then that
2454 * may mean we trod into an unmapped area. Stop copying
2455 * at that point. On the next pass through the big
2456 * loop, we'll likely end up getting a zero-length
2457 * write and bailing out of it.
2462 cur_len
= save_len
- cur_len
;
2466 * If we have no data to send, then that probably means that
2467 * the copy above failed altogether. That's most likely because
2468 * the address in the iovec was bogus. Return -EFAULT and let
2469 * the caller free anything we allocated and bail out.
2475 * i + 1 now represents the number of pages we actually used in
2476 * the copy phase above.
2483 cifs_write_from_iter(loff_t offset
, size_t len
, struct iov_iter
*from
,
2484 struct cifsFileInfo
*open_file
,
2485 struct cifs_sb_info
*cifs_sb
, struct list_head
*wdata_list
)
2489 unsigned long nr_pages
, num_pages
, i
;
2490 struct cifs_writedata
*wdata
;
2491 struct iov_iter saved_from
= *from
;
2492 loff_t saved_offset
= offset
;
2494 struct TCP_Server_Info
*server
;
2496 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_RWPIDFORWARD
)
2497 pid
= open_file
->pid
;
2499 pid
= current
->tgid
;
2501 server
= tlink_tcon(open_file
->tlink
)->ses
->server
;
2504 unsigned int wsize
, credits
;
2506 rc
= server
->ops
->wait_mtu_credits(server
, cifs_sb
->wsize
,
2511 nr_pages
= get_numpages(wsize
, len
, &cur_len
);
2512 wdata
= cifs_writedata_alloc(nr_pages
,
2513 cifs_uncached_writev_complete
);
2516 add_credits_and_wake_if(server
, credits
, 0);
2520 rc
= cifs_write_allocate_pages(wdata
->pages
, nr_pages
);
2523 add_credits_and_wake_if(server
, credits
, 0);
2527 num_pages
= nr_pages
;
2528 rc
= wdata_fill_from_iovec(wdata
, from
, &cur_len
, &num_pages
);
2530 for (i
= 0; i
< nr_pages
; i
++)
2531 put_page(wdata
->pages
[i
]);
2533 add_credits_and_wake_if(server
, credits
, 0);
2538 * Bring nr_pages down to the number of pages we actually used,
2539 * and free any pages that we didn't use.
2541 for ( ; nr_pages
> num_pages
; nr_pages
--)
2542 put_page(wdata
->pages
[nr_pages
- 1]);
2544 wdata
->sync_mode
= WB_SYNC_ALL
;
2545 wdata
->nr_pages
= nr_pages
;
2546 wdata
->offset
= (__u64
)offset
;
2547 wdata
->cfile
= cifsFileInfo_get(open_file
);
2549 wdata
->bytes
= cur_len
;
2550 wdata
->pagesz
= PAGE_SIZE
;
2551 wdata
->tailsz
= cur_len
- ((nr_pages
- 1) * PAGE_SIZE
);
2552 wdata
->credits
= credits
;
2554 if (!wdata
->cfile
->invalidHandle
||
2555 !cifs_reopen_file(wdata
->cfile
, false))
2556 rc
= server
->ops
->async_writev(wdata
,
2557 cifs_uncached_writedata_release
);
2559 add_credits_and_wake_if(server
, wdata
->credits
, 0);
2560 kref_put(&wdata
->refcount
,
2561 cifs_uncached_writedata_release
);
2562 if (rc
== -EAGAIN
) {
2564 iov_iter_advance(from
, offset
- saved_offset
);
2570 list_add_tail(&wdata
->list
, wdata_list
);
2578 ssize_t
cifs_user_writev(struct kiocb
*iocb
, struct iov_iter
*from
)
2580 struct file
*file
= iocb
->ki_filp
;
2581 ssize_t total_written
= 0;
2582 struct cifsFileInfo
*open_file
;
2583 struct cifs_tcon
*tcon
;
2584 struct cifs_sb_info
*cifs_sb
;
2585 struct cifs_writedata
*wdata
, *tmp
;
2586 struct list_head wdata_list
;
2587 struct iov_iter saved_from
= *from
;
2591 * BB - optimize the way when signing is disabled. We can drop this
2592 * extra memory-to-memory copying and use iovec buffers for constructing
2596 rc
= generic_write_checks(iocb
, from
);
2600 INIT_LIST_HEAD(&wdata_list
);
2601 cifs_sb
= CIFS_FILE_SB(file
);
2602 open_file
= file
->private_data
;
2603 tcon
= tlink_tcon(open_file
->tlink
);
2605 if (!tcon
->ses
->server
->ops
->async_writev
)
2608 rc
= cifs_write_from_iter(iocb
->ki_pos
, iov_iter_count(from
), from
,
2609 open_file
, cifs_sb
, &wdata_list
);
2612 * If at least one write was successfully sent, then discard any rc
2613 * value from the later writes. If the other write succeeds, then
2614 * we'll end up returning whatever was written. If it fails, then
2615 * we'll get a new rc value from that.
2617 if (!list_empty(&wdata_list
))
2621 * Wait for and collect replies for any successful sends in order of
2622 * increasing offset. Once an error is hit or we get a fatal signal
2623 * while waiting, then return without waiting for any more replies.
2626 list_for_each_entry_safe(wdata
, tmp
, &wdata_list
, list
) {
2628 /* FIXME: freezable too? */
2629 rc
= wait_for_completion_killable(&wdata
->done
);
2632 else if (wdata
->result
)
2635 total_written
+= wdata
->bytes
;
2637 /* resend call if it's a retryable error */
2638 if (rc
== -EAGAIN
) {
2639 struct list_head tmp_list
;
2640 struct iov_iter tmp_from
= saved_from
;
2642 INIT_LIST_HEAD(&tmp_list
);
2643 list_del_init(&wdata
->list
);
2645 iov_iter_advance(&tmp_from
,
2646 wdata
->offset
- iocb
->ki_pos
);
2648 rc
= cifs_write_from_iter(wdata
->offset
,
2649 wdata
->bytes
, &tmp_from
,
2650 open_file
, cifs_sb
, &tmp_list
);
2652 list_splice(&tmp_list
, &wdata_list
);
2654 kref_put(&wdata
->refcount
,
2655 cifs_uncached_writedata_release
);
2659 list_del_init(&wdata
->list
);
2660 kref_put(&wdata
->refcount
, cifs_uncached_writedata_release
);
2663 if (unlikely(!total_written
))
2666 iocb
->ki_pos
+= total_written
;
2667 set_bit(CIFS_INO_INVALID_MAPPING
, &CIFS_I(file_inode(file
))->flags
);
2668 cifs_stats_bytes_written(tcon
, total_written
);
2669 return total_written
;
2673 cifs_writev(struct kiocb
*iocb
, struct iov_iter
*from
)
2675 struct file
*file
= iocb
->ki_filp
;
2676 struct cifsFileInfo
*cfile
= (struct cifsFileInfo
*)file
->private_data
;
2677 struct inode
*inode
= file
->f_mapping
->host
;
2678 struct cifsInodeInfo
*cinode
= CIFS_I(inode
);
2679 struct TCP_Server_Info
*server
= tlink_tcon(cfile
->tlink
)->ses
->server
;
2683 * We need to hold the sem to be sure nobody modifies lock list
2684 * with a brlock that prevents writing.
2686 down_read(&cinode
->lock_sem
);
2689 rc
= generic_write_checks(iocb
, from
);
2693 if (!cifs_find_lock_conflict(cfile
, iocb
->ki_pos
, iov_iter_count(from
),
2694 server
->vals
->exclusive_lock_type
, NULL
,
2696 rc
= __generic_file_write_iter(iocb
, from
);
2700 inode_unlock(inode
);
2703 rc
= generic_write_sync(iocb
, rc
);
2704 up_read(&cinode
->lock_sem
);
2709 cifs_strict_writev(struct kiocb
*iocb
, struct iov_iter
*from
)
2711 struct inode
*inode
= file_inode(iocb
->ki_filp
);
2712 struct cifsInodeInfo
*cinode
= CIFS_I(inode
);
2713 struct cifs_sb_info
*cifs_sb
= CIFS_SB(inode
->i_sb
);
2714 struct cifsFileInfo
*cfile
= (struct cifsFileInfo
*)
2715 iocb
->ki_filp
->private_data
;
2716 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
2719 written
= cifs_get_writer(cinode
);
2723 if (CIFS_CACHE_WRITE(cinode
)) {
2724 if (cap_unix(tcon
->ses
) &&
2725 (CIFS_UNIX_FCNTL_CAP
& le64_to_cpu(tcon
->fsUnixInfo
.Capability
))
2726 && ((cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOPOSIXBRL
) == 0)) {
2727 written
= generic_file_write_iter(iocb
, from
);
2730 written
= cifs_writev(iocb
, from
);
2734 * For non-oplocked files in strict cache mode we need to write the data
2735 * to the server exactly from the pos to pos+len-1 rather than flush all
2736 * affected pages because it may cause a error with mandatory locks on
2737 * these pages but not on the region from pos to ppos+len-1.
2739 written
= cifs_user_writev(iocb
, from
);
2740 if (written
> 0 && CIFS_CACHE_READ(cinode
)) {
2742 * Windows 7 server can delay breaking level2 oplock if a write
2743 * request comes - break it on the client to prevent reading
2746 cifs_zap_mapping(inode
);
2747 cifs_dbg(FYI
, "Set no oplock for inode=%p after a write operation\n",
2752 cifs_put_writer(cinode
);
2756 static struct cifs_readdata
*
2757 cifs_readdata_alloc(unsigned int nr_pages
, work_func_t complete
)
2759 struct cifs_readdata
*rdata
;
2761 rdata
= kzalloc(sizeof(*rdata
) + (sizeof(struct page
*) * nr_pages
),
2763 if (rdata
!= NULL
) {
2764 kref_init(&rdata
->refcount
);
2765 INIT_LIST_HEAD(&rdata
->list
);
2766 init_completion(&rdata
->done
);
2767 INIT_WORK(&rdata
->work
, complete
);
2774 cifs_readdata_release(struct kref
*refcount
)
2776 struct cifs_readdata
*rdata
= container_of(refcount
,
2777 struct cifs_readdata
, refcount
);
2780 cifsFileInfo_put(rdata
->cfile
);
2786 cifs_read_allocate_pages(struct cifs_readdata
*rdata
, unsigned int nr_pages
)
2792 for (i
= 0; i
< nr_pages
; i
++) {
2793 page
= alloc_page(GFP_KERNEL
|__GFP_HIGHMEM
);
2798 rdata
->pages
[i
] = page
;
2802 for (i
= 0; i
< nr_pages
; i
++) {
2803 put_page(rdata
->pages
[i
]);
2804 rdata
->pages
[i
] = NULL
;
2811 cifs_uncached_readdata_release(struct kref
*refcount
)
2813 struct cifs_readdata
*rdata
= container_of(refcount
,
2814 struct cifs_readdata
, refcount
);
2817 for (i
= 0; i
< rdata
->nr_pages
; i
++) {
2818 put_page(rdata
->pages
[i
]);
2819 rdata
->pages
[i
] = NULL
;
2821 cifs_readdata_release(refcount
);
2825 * cifs_readdata_to_iov - copy data from pages in response to an iovec
2826 * @rdata: the readdata response with list of pages holding data
2827 * @iter: destination for our data
2829 * This function copies data from a list of pages in a readdata response into
2830 * an array of iovecs. It will first calculate where the data should go
2831 * based on the info in the readdata and then copy the data into that spot.
2834 cifs_readdata_to_iov(struct cifs_readdata
*rdata
, struct iov_iter
*iter
)
2836 size_t remaining
= rdata
->got_bytes
;
2839 for (i
= 0; i
< rdata
->nr_pages
; i
++) {
2840 struct page
*page
= rdata
->pages
[i
];
2841 size_t copy
= min_t(size_t, remaining
, PAGE_SIZE
);
2842 size_t written
= copy_page_to_iter(page
, 0, copy
, iter
);
2843 remaining
-= written
;
2844 if (written
< copy
&& iov_iter_count(iter
) > 0)
2847 return remaining
? -EFAULT
: 0;
2851 cifs_uncached_readv_complete(struct work_struct
*work
)
2853 struct cifs_readdata
*rdata
= container_of(work
,
2854 struct cifs_readdata
, work
);
2856 complete(&rdata
->done
);
2857 kref_put(&rdata
->refcount
, cifs_uncached_readdata_release
);
2861 cifs_uncached_read_into_pages(struct TCP_Server_Info
*server
,
2862 struct cifs_readdata
*rdata
, unsigned int len
)
2866 unsigned int nr_pages
= rdata
->nr_pages
;
2868 rdata
->got_bytes
= 0;
2869 rdata
->tailsz
= PAGE_SIZE
;
2870 for (i
= 0; i
< nr_pages
; i
++) {
2871 struct page
*page
= rdata
->pages
[i
];
2875 /* no need to hold page hostage */
2876 rdata
->pages
[i
] = NULL
;
2882 if (len
>= PAGE_SIZE
) {
2883 /* enough data to fill the page */
2887 zero_user(page
, len
, PAGE_SIZE
- len
);
2888 rdata
->tailsz
= len
;
2891 result
= cifs_read_page_from_socket(server
, page
, n
);
2895 rdata
->got_bytes
+= result
;
2898 return rdata
->got_bytes
> 0 && result
!= -ECONNABORTED
?
2899 rdata
->got_bytes
: result
;
2903 cifs_send_async_read(loff_t offset
, size_t len
, struct cifsFileInfo
*open_file
,
2904 struct cifs_sb_info
*cifs_sb
, struct list_head
*rdata_list
)
2906 struct cifs_readdata
*rdata
;
2907 unsigned int npages
, rsize
, credits
;
2911 struct TCP_Server_Info
*server
;
2913 server
= tlink_tcon(open_file
->tlink
)->ses
->server
;
2915 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_RWPIDFORWARD
)
2916 pid
= open_file
->pid
;
2918 pid
= current
->tgid
;
2921 rc
= server
->ops
->wait_mtu_credits(server
, cifs_sb
->rsize
,
2926 cur_len
= min_t(const size_t, len
, rsize
);
2927 npages
= DIV_ROUND_UP(cur_len
, PAGE_SIZE
);
2929 /* allocate a readdata struct */
2930 rdata
= cifs_readdata_alloc(npages
,
2931 cifs_uncached_readv_complete
);
2933 add_credits_and_wake_if(server
, credits
, 0);
2938 rc
= cifs_read_allocate_pages(rdata
, npages
);
2942 rdata
->cfile
= cifsFileInfo_get(open_file
);
2943 rdata
->nr_pages
= npages
;
2944 rdata
->offset
= offset
;
2945 rdata
->bytes
= cur_len
;
2947 rdata
->pagesz
= PAGE_SIZE
;
2948 rdata
->read_into_pages
= cifs_uncached_read_into_pages
;
2949 rdata
->credits
= credits
;
2951 if (!rdata
->cfile
->invalidHandle
||
2952 !cifs_reopen_file(rdata
->cfile
, true))
2953 rc
= server
->ops
->async_readv(rdata
);
2956 add_credits_and_wake_if(server
, rdata
->credits
, 0);
2957 kref_put(&rdata
->refcount
,
2958 cifs_uncached_readdata_release
);
2964 list_add_tail(&rdata
->list
, rdata_list
);
2972 ssize_t
cifs_user_readv(struct kiocb
*iocb
, struct iov_iter
*to
)
2974 struct file
*file
= iocb
->ki_filp
;
2977 ssize_t total_read
= 0;
2978 loff_t offset
= iocb
->ki_pos
;
2979 struct cifs_sb_info
*cifs_sb
;
2980 struct cifs_tcon
*tcon
;
2981 struct cifsFileInfo
*open_file
;
2982 struct cifs_readdata
*rdata
, *tmp
;
2983 struct list_head rdata_list
;
2985 len
= iov_iter_count(to
);
2989 INIT_LIST_HEAD(&rdata_list
);
2990 cifs_sb
= CIFS_FILE_SB(file
);
2991 open_file
= file
->private_data
;
2992 tcon
= tlink_tcon(open_file
->tlink
);
2994 if (!tcon
->ses
->server
->ops
->async_readv
)
2997 if ((file
->f_flags
& O_ACCMODE
) == O_WRONLY
)
2998 cifs_dbg(FYI
, "attempting read on write only file instance\n");
3000 rc
= cifs_send_async_read(offset
, len
, open_file
, cifs_sb
, &rdata_list
);
3002 /* if at least one read request send succeeded, then reset rc */
3003 if (!list_empty(&rdata_list
))
3006 len
= iov_iter_count(to
);
3007 /* the loop below should proceed in the order of increasing offsets */
3009 list_for_each_entry_safe(rdata
, tmp
, &rdata_list
, list
) {
3011 /* FIXME: freezable sleep too? */
3012 rc
= wait_for_completion_killable(&rdata
->done
);
3015 else if (rdata
->result
== -EAGAIN
) {
3016 /* resend call if it's a retryable error */
3017 struct list_head tmp_list
;
3018 unsigned int got_bytes
= rdata
->got_bytes
;
3020 list_del_init(&rdata
->list
);
3021 INIT_LIST_HEAD(&tmp_list
);
3024 * Got a part of data and then reconnect has
3025 * happened -- fill the buffer and continue
3028 if (got_bytes
&& got_bytes
< rdata
->bytes
) {
3029 rc
= cifs_readdata_to_iov(rdata
, to
);
3031 kref_put(&rdata
->refcount
,
3032 cifs_uncached_readdata_release
);
3037 rc
= cifs_send_async_read(
3038 rdata
->offset
+ got_bytes
,
3039 rdata
->bytes
- got_bytes
,
3040 rdata
->cfile
, cifs_sb
,
3043 list_splice(&tmp_list
, &rdata_list
);
3045 kref_put(&rdata
->refcount
,
3046 cifs_uncached_readdata_release
);
3048 } else if (rdata
->result
)
3051 rc
= cifs_readdata_to_iov(rdata
, to
);
3053 /* if there was a short read -- discard anything left */
3054 if (rdata
->got_bytes
&& rdata
->got_bytes
< rdata
->bytes
)
3057 list_del_init(&rdata
->list
);
3058 kref_put(&rdata
->refcount
, cifs_uncached_readdata_release
);
3061 total_read
= len
- iov_iter_count(to
);
3063 cifs_stats_bytes_read(tcon
, total_read
);
3065 /* mask nodata case */
3070 iocb
->ki_pos
+= total_read
;
3077 cifs_strict_readv(struct kiocb
*iocb
, struct iov_iter
*to
)
3079 struct inode
*inode
= file_inode(iocb
->ki_filp
);
3080 struct cifsInodeInfo
*cinode
= CIFS_I(inode
);
3081 struct cifs_sb_info
*cifs_sb
= CIFS_SB(inode
->i_sb
);
3082 struct cifsFileInfo
*cfile
= (struct cifsFileInfo
*)
3083 iocb
->ki_filp
->private_data
;
3084 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
3088 * In strict cache mode we need to read from the server all the time
3089 * if we don't have level II oplock because the server can delay mtime
3090 * change - so we can't make a decision about inode invalidating.
3091 * And we can also fail with pagereading if there are mandatory locks
3092 * on pages affected by this read but not on the region from pos to
3095 if (!CIFS_CACHE_READ(cinode
))
3096 return cifs_user_readv(iocb
, to
);
3098 if (cap_unix(tcon
->ses
) &&
3099 (CIFS_UNIX_FCNTL_CAP
& le64_to_cpu(tcon
->fsUnixInfo
.Capability
)) &&
3100 ((cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_NOPOSIXBRL
) == 0))
3101 return generic_file_read_iter(iocb
, to
);
3104 * We need to hold the sem to be sure nobody modifies lock list
3105 * with a brlock that prevents reading.
3107 down_read(&cinode
->lock_sem
);
3108 if (!cifs_find_lock_conflict(cfile
, iocb
->ki_pos
, iov_iter_count(to
),
3109 tcon
->ses
->server
->vals
->shared_lock_type
,
3110 NULL
, CIFS_READ_OP
))
3111 rc
= generic_file_read_iter(iocb
, to
);
3112 up_read(&cinode
->lock_sem
);
3117 cifs_read(struct file
*file
, char *read_data
, size_t read_size
, loff_t
*offset
)
3120 unsigned int bytes_read
= 0;
3121 unsigned int total_read
;
3122 unsigned int current_read_size
;
3124 struct cifs_sb_info
*cifs_sb
;
3125 struct cifs_tcon
*tcon
;
3126 struct TCP_Server_Info
*server
;
3129 struct cifsFileInfo
*open_file
;
3130 struct cifs_io_parms io_parms
;
3131 int buf_type
= CIFS_NO_BUFFER
;
3135 cifs_sb
= CIFS_FILE_SB(file
);
3137 /* FIXME: set up handlers for larger reads and/or convert to async */
3138 rsize
= min_t(unsigned int, cifs_sb
->rsize
, CIFSMaxBufSize
);
3140 if (file
->private_data
== NULL
) {
3145 open_file
= file
->private_data
;
3146 tcon
= tlink_tcon(open_file
->tlink
);
3147 server
= tcon
->ses
->server
;
3149 if (!server
->ops
->sync_read
) {
3154 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_RWPIDFORWARD
)
3155 pid
= open_file
->pid
;
3157 pid
= current
->tgid
;
3159 if ((file
->f_flags
& O_ACCMODE
) == O_WRONLY
)
3160 cifs_dbg(FYI
, "attempting read on write only file instance\n");
3162 for (total_read
= 0, cur_offset
= read_data
; read_size
> total_read
;
3163 total_read
+= bytes_read
, cur_offset
+= bytes_read
) {
3165 current_read_size
= min_t(uint
, read_size
- total_read
,
3168 * For windows me and 9x we do not want to request more
3169 * than it negotiated since it will refuse the read
3172 if ((tcon
->ses
) && !(tcon
->ses
->capabilities
&
3173 tcon
->ses
->server
->vals
->cap_large_files
)) {
3174 current_read_size
= min_t(uint
,
3175 current_read_size
, CIFSMaxBufSize
);
3177 if (open_file
->invalidHandle
) {
3178 rc
= cifs_reopen_file(open_file
, true);
3183 io_parms
.tcon
= tcon
;
3184 io_parms
.offset
= *offset
;
3185 io_parms
.length
= current_read_size
;
3186 rc
= server
->ops
->sync_read(xid
, &open_file
->fid
, &io_parms
,
3187 &bytes_read
, &cur_offset
,
3189 } while (rc
== -EAGAIN
);
3191 if (rc
|| (bytes_read
== 0)) {
3199 cifs_stats_bytes_read(tcon
, total_read
);
3200 *offset
+= bytes_read
;
3208 * If the page is mmap'ed into a process' page tables, then we need to make
3209 * sure that it doesn't change while being written back.
3212 cifs_page_mkwrite(struct vm_area_struct
*vma
, struct vm_fault
*vmf
)
3214 struct page
*page
= vmf
->page
;
3217 return VM_FAULT_LOCKED
;
3220 static const struct vm_operations_struct cifs_file_vm_ops
= {
3221 .fault
= filemap_fault
,
3222 .map_pages
= filemap_map_pages
,
3223 .page_mkwrite
= cifs_page_mkwrite
,
3226 int cifs_file_strict_mmap(struct file
*file
, struct vm_area_struct
*vma
)
3229 struct inode
*inode
= file_inode(file
);
3233 if (!CIFS_CACHE_READ(CIFS_I(inode
))) {
3234 rc
= cifs_zap_mapping(inode
);
3239 rc
= generic_file_mmap(file
, vma
);
3241 vma
->vm_ops
= &cifs_file_vm_ops
;
3246 int cifs_file_mmap(struct file
*file
, struct vm_area_struct
*vma
)
3251 rc
= cifs_revalidate_file(file
);
3253 cifs_dbg(FYI
, "Validation prior to mmap failed, error=%d\n",
3258 rc
= generic_file_mmap(file
, vma
);
3260 vma
->vm_ops
= &cifs_file_vm_ops
;
3266 cifs_readv_complete(struct work_struct
*work
)
3268 unsigned int i
, got_bytes
;
3269 struct cifs_readdata
*rdata
= container_of(work
,
3270 struct cifs_readdata
, work
);
3272 got_bytes
= rdata
->got_bytes
;
3273 for (i
= 0; i
< rdata
->nr_pages
; i
++) {
3274 struct page
*page
= rdata
->pages
[i
];
3276 lru_cache_add_file(page
);
3278 if (rdata
->result
== 0 ||
3279 (rdata
->result
== -EAGAIN
&& got_bytes
)) {
3280 flush_dcache_page(page
);
3281 SetPageUptodate(page
);
3286 if (rdata
->result
== 0 ||
3287 (rdata
->result
== -EAGAIN
&& got_bytes
))
3288 cifs_readpage_to_fscache(rdata
->mapping
->host
, page
);
3290 got_bytes
-= min_t(unsigned int, PAGE_SIZE
, got_bytes
);
3293 rdata
->pages
[i
] = NULL
;
3295 kref_put(&rdata
->refcount
, cifs_readdata_release
);
3299 cifs_readpages_read_into_pages(struct TCP_Server_Info
*server
,
3300 struct cifs_readdata
*rdata
, unsigned int len
)
3306 unsigned int nr_pages
= rdata
->nr_pages
;
3308 /* determine the eof that the server (probably) has */
3309 eof
= CIFS_I(rdata
->mapping
->host
)->server_eof
;
3310 eof_index
= eof
? (eof
- 1) >> PAGE_SHIFT
: 0;
3311 cifs_dbg(FYI
, "eof=%llu eof_index=%lu\n", eof
, eof_index
);
3313 rdata
->got_bytes
= 0;
3314 rdata
->tailsz
= PAGE_SIZE
;
3315 for (i
= 0; i
< nr_pages
; i
++) {
3316 struct page
*page
= rdata
->pages
[i
];
3317 size_t n
= PAGE_SIZE
;
3319 if (len
>= PAGE_SIZE
) {
3321 } else if (len
> 0) {
3322 /* enough for partial page, fill and zero the rest */
3323 zero_user(page
, len
, PAGE_SIZE
- len
);
3324 n
= rdata
->tailsz
= len
;
3326 } else if (page
->index
> eof_index
) {
3328 * The VFS will not try to do readahead past the
3329 * i_size, but it's possible that we have outstanding
3330 * writes with gaps in the middle and the i_size hasn't
3331 * caught up yet. Populate those with zeroed out pages
3332 * to prevent the VFS from repeatedly attempting to
3333 * fill them until the writes are flushed.
3335 zero_user(page
, 0, PAGE_SIZE
);
3336 lru_cache_add_file(page
);
3337 flush_dcache_page(page
);
3338 SetPageUptodate(page
);
3341 rdata
->pages
[i
] = NULL
;
3345 /* no need to hold page hostage */
3346 lru_cache_add_file(page
);
3349 rdata
->pages
[i
] = NULL
;
3354 result
= cifs_read_page_from_socket(server
, page
, n
);
3358 rdata
->got_bytes
+= result
;
3361 return rdata
->got_bytes
> 0 && result
!= -ECONNABORTED
?
3362 rdata
->got_bytes
: result
;
3366 readpages_get_pages(struct address_space
*mapping
, struct list_head
*page_list
,
3367 unsigned int rsize
, struct list_head
*tmplist
,
3368 unsigned int *nr_pages
, loff_t
*offset
, unsigned int *bytes
)
3370 struct page
*page
, *tpage
;
3371 unsigned int expected_index
;
3373 gfp_t gfp
= readahead_gfp_mask(mapping
);
3375 INIT_LIST_HEAD(tmplist
);
3377 page
= list_entry(page_list
->prev
, struct page
, lru
);
3380 * Lock the page and put it in the cache. Since no one else
3381 * should have access to this page, we're safe to simply set
3382 * PG_locked without checking it first.
3384 __SetPageLocked(page
);
3385 rc
= add_to_page_cache_locked(page
, mapping
,
3388 /* give up if we can't stick it in the cache */
3390 __ClearPageLocked(page
);
3394 /* move first page to the tmplist */
3395 *offset
= (loff_t
)page
->index
<< PAGE_SHIFT
;
3398 list_move_tail(&page
->lru
, tmplist
);
3400 /* now try and add more pages onto the request */
3401 expected_index
= page
->index
+ 1;
3402 list_for_each_entry_safe_reverse(page
, tpage
, page_list
, lru
) {
3403 /* discontinuity ? */
3404 if (page
->index
!= expected_index
)
3407 /* would this page push the read over the rsize? */
3408 if (*bytes
+ PAGE_SIZE
> rsize
)
3411 __SetPageLocked(page
);
3412 if (add_to_page_cache_locked(page
, mapping
, page
->index
, gfp
)) {
3413 __ClearPageLocked(page
);
3416 list_move_tail(&page
->lru
, tmplist
);
3417 (*bytes
) += PAGE_SIZE
;
3424 static int cifs_readpages(struct file
*file
, struct address_space
*mapping
,
3425 struct list_head
*page_list
, unsigned num_pages
)
3428 struct list_head tmplist
;
3429 struct cifsFileInfo
*open_file
= file
->private_data
;
3430 struct cifs_sb_info
*cifs_sb
= CIFS_FILE_SB(file
);
3431 struct TCP_Server_Info
*server
;
3435 * Reads as many pages as possible from fscache. Returns -ENOBUFS
3436 * immediately if the cookie is negative
3438 * After this point, every page in the list might have PG_fscache set,
3439 * so we will need to clean that up off of every page we don't use.
3441 rc
= cifs_readpages_from_fscache(mapping
->host
, mapping
, page_list
,
3446 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_RWPIDFORWARD
)
3447 pid
= open_file
->pid
;
3449 pid
= current
->tgid
;
3452 server
= tlink_tcon(open_file
->tlink
)->ses
->server
;
3454 cifs_dbg(FYI
, "%s: file=%p mapping=%p num_pages=%u\n",
3455 __func__
, file
, mapping
, num_pages
);
3458 * Start with the page at end of list and move it to private
3459 * list. Do the same with any following pages until we hit
3460 * the rsize limit, hit an index discontinuity, or run out of
3461 * pages. Issue the async read and then start the loop again
3462 * until the list is empty.
3464 * Note that list order is important. The page_list is in
3465 * the order of declining indexes. When we put the pages in
3466 * the rdata->pages, then we want them in increasing order.
3468 while (!list_empty(page_list
)) {
3469 unsigned int i
, nr_pages
, bytes
, rsize
;
3471 struct page
*page
, *tpage
;
3472 struct cifs_readdata
*rdata
;
3475 rc
= server
->ops
->wait_mtu_credits(server
, cifs_sb
->rsize
,
3481 * Give up immediately if rsize is too small to read an entire
3482 * page. The VFS will fall back to readpage. We should never
3483 * reach this point however since we set ra_pages to 0 when the
3484 * rsize is smaller than a cache page.
3486 if (unlikely(rsize
< PAGE_SIZE
)) {
3487 add_credits_and_wake_if(server
, credits
, 0);
3491 rc
= readpages_get_pages(mapping
, page_list
, rsize
, &tmplist
,
3492 &nr_pages
, &offset
, &bytes
);
3494 add_credits_and_wake_if(server
, credits
, 0);
3498 rdata
= cifs_readdata_alloc(nr_pages
, cifs_readv_complete
);
3500 /* best to give up if we're out of mem */
3501 list_for_each_entry_safe(page
, tpage
, &tmplist
, lru
) {
3502 list_del(&page
->lru
);
3503 lru_cache_add_file(page
);
3508 add_credits_and_wake_if(server
, credits
, 0);
3512 rdata
->cfile
= cifsFileInfo_get(open_file
);
3513 rdata
->mapping
= mapping
;
3514 rdata
->offset
= offset
;
3515 rdata
->bytes
= bytes
;
3517 rdata
->pagesz
= PAGE_SIZE
;
3518 rdata
->read_into_pages
= cifs_readpages_read_into_pages
;
3519 rdata
->credits
= credits
;
3521 list_for_each_entry_safe(page
, tpage
, &tmplist
, lru
) {
3522 list_del(&page
->lru
);
3523 rdata
->pages
[rdata
->nr_pages
++] = page
;
3526 if (!rdata
->cfile
->invalidHandle
||
3527 !cifs_reopen_file(rdata
->cfile
, true))
3528 rc
= server
->ops
->async_readv(rdata
);
3530 add_credits_and_wake_if(server
, rdata
->credits
, 0);
3531 for (i
= 0; i
< rdata
->nr_pages
; i
++) {
3532 page
= rdata
->pages
[i
];
3533 lru_cache_add_file(page
);
3537 /* Fallback to the readpage in error/reconnect cases */
3538 kref_put(&rdata
->refcount
, cifs_readdata_release
);
3542 kref_put(&rdata
->refcount
, cifs_readdata_release
);
3545 /* Any pages that have been shown to fscache but didn't get added to
3546 * the pagecache must be uncached before they get returned to the
3549 cifs_fscache_readpages_cancel(mapping
->host
, page_list
);
3554 * cifs_readpage_worker must be called with the page pinned
3556 static int cifs_readpage_worker(struct file
*file
, struct page
*page
,
3562 /* Is the page cached? */
3563 rc
= cifs_readpage_from_fscache(file_inode(file
), page
);
3567 read_data
= kmap(page
);
3568 /* for reads over a certain size could initiate async read ahead */
3570 rc
= cifs_read(file
, read_data
, PAGE_SIZE
, poffset
);
3575 cifs_dbg(FYI
, "Bytes read %d\n", rc
);
3577 file_inode(file
)->i_atime
=
3578 current_time(file_inode(file
));
3581 memset(read_data
+ rc
, 0, PAGE_SIZE
- rc
);
3583 flush_dcache_page(page
);
3584 SetPageUptodate(page
);
3586 /* send this page to the cache */
3587 cifs_readpage_to_fscache(file_inode(file
), page
);
3599 static int cifs_readpage(struct file
*file
, struct page
*page
)
3601 loff_t offset
= (loff_t
)page
->index
<< PAGE_SHIFT
;
3607 if (file
->private_data
== NULL
) {
3613 cifs_dbg(FYI
, "readpage %p at offset %d 0x%x\n",
3614 page
, (int)offset
, (int)offset
);
3616 rc
= cifs_readpage_worker(file
, page
, &offset
);
3622 static int is_inode_writable(struct cifsInodeInfo
*cifs_inode
)
3624 struct cifsFileInfo
*open_file
;
3625 struct cifs_tcon
*tcon
=
3626 cifs_sb_master_tcon(CIFS_SB(cifs_inode
->vfs_inode
.i_sb
));
3628 spin_lock(&tcon
->open_file_lock
);
3629 list_for_each_entry(open_file
, &cifs_inode
->openFileList
, flist
) {
3630 if (OPEN_FMODE(open_file
->f_flags
) & FMODE_WRITE
) {
3631 spin_unlock(&tcon
->open_file_lock
);
3635 spin_unlock(&tcon
->open_file_lock
);
3639 /* We do not want to update the file size from server for inodes
3640 open for write - to avoid races with writepage extending
3641 the file - in the future we could consider allowing
3642 refreshing the inode only on increases in the file size
3643 but this is tricky to do without racing with writebehind
3644 page caching in the current Linux kernel design */
3645 bool is_size_safe_to_change(struct cifsInodeInfo
*cifsInode
, __u64 end_of_file
)
3650 if (is_inode_writable(cifsInode
)) {
3651 /* This inode is open for write at least once */
3652 struct cifs_sb_info
*cifs_sb
;
3654 cifs_sb
= CIFS_SB(cifsInode
->vfs_inode
.i_sb
);
3655 if (cifs_sb
->mnt_cifs_flags
& CIFS_MOUNT_DIRECT_IO
) {
3656 /* since no page cache to corrupt on directio
3657 we can change size safely */
3661 if (i_size_read(&cifsInode
->vfs_inode
) < end_of_file
)
3669 static int cifs_write_begin(struct file
*file
, struct address_space
*mapping
,
3670 loff_t pos
, unsigned len
, unsigned flags
,
3671 struct page
**pagep
, void **fsdata
)
3674 pgoff_t index
= pos
>> PAGE_SHIFT
;
3675 loff_t offset
= pos
& (PAGE_SIZE
- 1);
3676 loff_t page_start
= pos
& PAGE_MASK
;
3681 cifs_dbg(FYI
, "write_begin from %lld len %d\n", (long long)pos
, len
);
3684 page
= grab_cache_page_write_begin(mapping
, index
, flags
);
3690 if (PageUptodate(page
))
3694 * If we write a full page it will be up to date, no need to read from
3695 * the server. If the write is short, we'll end up doing a sync write
3698 if (len
== PAGE_SIZE
)
3702 * optimize away the read when we have an oplock, and we're not
3703 * expecting to use any of the data we'd be reading in. That
3704 * is, when the page lies beyond the EOF, or straddles the EOF
3705 * and the write will cover all of the existing data.
3707 if (CIFS_CACHE_READ(CIFS_I(mapping
->host
))) {
3708 i_size
= i_size_read(mapping
->host
);
3709 if (page_start
>= i_size
||
3710 (offset
== 0 && (pos
+ len
) >= i_size
)) {
3711 zero_user_segments(page
, 0, offset
,
3715 * PageChecked means that the parts of the page
3716 * to which we're not writing are considered up
3717 * to date. Once the data is copied to the
3718 * page, it can be set uptodate.
3720 SetPageChecked(page
);
3725 if ((file
->f_flags
& O_ACCMODE
) != O_WRONLY
&& !oncethru
) {
3727 * might as well read a page, it is fast enough. If we get
3728 * an error, we don't need to return it. cifs_write_end will
3729 * do a sync write instead since PG_uptodate isn't set.
3731 cifs_readpage_worker(file
, page
, &page_start
);
3736 /* we could try using another file handle if there is one -
3737 but how would we lock it to prevent close of that handle
3738 racing with this read? In any case
3739 this will be written out by write_end so is fine */
3746 static int cifs_release_page(struct page
*page
, gfp_t gfp
)
3748 if (PagePrivate(page
))
3751 return cifs_fscache_release_page(page
, gfp
);
3754 static void cifs_invalidate_page(struct page
*page
, unsigned int offset
,
3755 unsigned int length
)
3757 struct cifsInodeInfo
*cifsi
= CIFS_I(page
->mapping
->host
);
3759 if (offset
== 0 && length
== PAGE_SIZE
)
3760 cifs_fscache_invalidate_page(page
, &cifsi
->vfs_inode
);
3763 static int cifs_launder_page(struct page
*page
)
3766 loff_t range_start
= page_offset(page
);
3767 loff_t range_end
= range_start
+ (loff_t
)(PAGE_SIZE
- 1);
3768 struct writeback_control wbc
= {
3769 .sync_mode
= WB_SYNC_ALL
,
3771 .range_start
= range_start
,
3772 .range_end
= range_end
,
3775 cifs_dbg(FYI
, "Launder page: %p\n", page
);
3777 if (clear_page_dirty_for_io(page
))
3778 rc
= cifs_writepage_locked(page
, &wbc
);
3780 cifs_fscache_invalidate_page(page
, page
->mapping
->host
);
3784 void cifs_oplock_break(struct work_struct
*work
)
3786 struct cifsFileInfo
*cfile
= container_of(work
, struct cifsFileInfo
,
3788 struct inode
*inode
= d_inode(cfile
->dentry
);
3789 struct cifsInodeInfo
*cinode
= CIFS_I(inode
);
3790 struct cifs_tcon
*tcon
= tlink_tcon(cfile
->tlink
);
3791 struct TCP_Server_Info
*server
= tcon
->ses
->server
;
3794 wait_on_bit(&cinode
->flags
, CIFS_INODE_PENDING_WRITERS
,
3795 TASK_UNINTERRUPTIBLE
);
3797 server
->ops
->downgrade_oplock(server
, cinode
,
3798 test_bit(CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2
, &cinode
->flags
));
3800 if (!CIFS_CACHE_WRITE(cinode
) && CIFS_CACHE_READ(cinode
) &&
3801 cifs_has_mand_locks(cinode
)) {
3802 cifs_dbg(FYI
, "Reset oplock to None for inode=%p due to mand locks\n",
3807 if (inode
&& S_ISREG(inode
->i_mode
)) {
3808 if (CIFS_CACHE_READ(cinode
))
3809 break_lease(inode
, O_RDONLY
);
3811 break_lease(inode
, O_WRONLY
);
3812 rc
= filemap_fdatawrite(inode
->i_mapping
);
3813 if (!CIFS_CACHE_READ(cinode
)) {
3814 rc
= filemap_fdatawait(inode
->i_mapping
);
3815 mapping_set_error(inode
->i_mapping
, rc
);
3816 cifs_zap_mapping(inode
);
3818 cifs_dbg(FYI
, "Oplock flush inode %p rc %d\n", inode
, rc
);
3821 rc
= cifs_push_locks(cfile
);
3823 cifs_dbg(VFS
, "Push locks rc = %d\n", rc
);
3826 * releasing stale oplock after recent reconnect of smb session using
3827 * a now incorrect file handle is not a data integrity issue but do
3828 * not bother sending an oplock release if session to server still is
3829 * disconnected since oplock already released by the server
3831 if (!cfile
->oplock_break_cancelled
) {
3832 rc
= tcon
->ses
->server
->ops
->oplock_response(tcon
, &cfile
->fid
,
3834 cifs_dbg(FYI
, "Oplock release rc = %d\n", rc
);
3836 cifs_done_oplock_break(cinode
);
3840 * The presence of cifs_direct_io() in the address space ops vector
3841 * allowes open() O_DIRECT flags which would have failed otherwise.
3843 * In the non-cached mode (mount with cache=none), we shunt off direct read and write requests
3844 * so this method should never be called.
3846 * Direct IO is not yet supported in the cached mode.
3849 cifs_direct_io(struct kiocb
*iocb
, struct iov_iter
*iter
)
3853 * Eventually need to support direct IO for non forcedirectio mounts
3859 const struct address_space_operations cifs_addr_ops
= {
3860 .readpage
= cifs_readpage
,
3861 .readpages
= cifs_readpages
,
3862 .writepage
= cifs_writepage
,
3863 .writepages
= cifs_writepages
,
3864 .write_begin
= cifs_write_begin
,
3865 .write_end
= cifs_write_end
,
3866 .set_page_dirty
= __set_page_dirty_nobuffers
,
3867 .releasepage
= cifs_release_page
,
3868 .direct_IO
= cifs_direct_io
,
3869 .invalidatepage
= cifs_invalidate_page
,
3870 .launder_page
= cifs_launder_page
,
3874 * cifs_readpages requires the server to support a buffer large enough to
3875 * contain the header plus one complete page of data. Otherwise, we need
3876 * to leave cifs_readpages out of the address space operations.
3878 const struct address_space_operations cifs_addr_ops_smallbuf
= {
3879 .readpage
= cifs_readpage
,
3880 .writepage
= cifs_writepage
,
3881 .writepages
= cifs_writepages
,
3882 .write_begin
= cifs_write_begin
,
3883 .write_end
= cifs_write_end
,
3884 .set_page_dirty
= __set_page_dirty_nobuffers
,
3885 .releasepage
= cifs_release_page
,
3886 .invalidatepage
= cifs_invalidate_page
,
3887 .launder_page
= cifs_launder_page
,