]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - fs/cifs/file.c
Merge branch 'for_3.5/cleanup/am3xxx-cpu-is-leftovers' of git://git.kernel.org/pub...
[mirror_ubuntu-artful-kernel.git] / fs / cifs / file.c
1 /*
2 * fs/cifs/file.c
3 *
4 * vfs operations that deal with files
5 *
6 * Copyright (C) International Business Machines Corp., 2002,2010
7 * Author(s): Steve French (sfrench@us.ibm.com)
8 * Jeremy Allison (jra@samba.org)
9 *
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.
14 *
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.
19 *
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
23 */
24 #include <linux/fs.h>
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>
37 #include "cifsfs.h"
38 #include "cifspdu.h"
39 #include "cifsglob.h"
40 #include "cifsproto.h"
41 #include "cifs_unicode.h"
42 #include "cifs_debug.h"
43 #include "cifs_fs_sb.h"
44 #include "fscache.h"
45
46 static inline int cifs_convert_flags(unsigned int flags)
47 {
48 if ((flags & O_ACCMODE) == O_RDONLY)
49 return GENERIC_READ;
50 else if ((flags & O_ACCMODE) == O_WRONLY)
51 return GENERIC_WRITE;
52 else if ((flags & O_ACCMODE) == O_RDWR) {
53 /* GENERIC_ALL is too much permission to request
54 can cause unnecessary access denied on create */
55 /* return GENERIC_ALL; */
56 return (GENERIC_READ | GENERIC_WRITE);
57 }
58
59 return (READ_CONTROL | FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES |
60 FILE_WRITE_EA | FILE_APPEND_DATA | FILE_WRITE_DATA |
61 FILE_READ_DATA);
62 }
63
64 static u32 cifs_posix_convert_flags(unsigned int flags)
65 {
66 u32 posix_flags = 0;
67
68 if ((flags & O_ACCMODE) == O_RDONLY)
69 posix_flags = SMB_O_RDONLY;
70 else if ((flags & O_ACCMODE) == O_WRONLY)
71 posix_flags = SMB_O_WRONLY;
72 else if ((flags & O_ACCMODE) == O_RDWR)
73 posix_flags = SMB_O_RDWR;
74
75 if (flags & O_CREAT)
76 posix_flags |= SMB_O_CREAT;
77 if (flags & O_EXCL)
78 posix_flags |= SMB_O_EXCL;
79 if (flags & O_TRUNC)
80 posix_flags |= SMB_O_TRUNC;
81 /* be safe and imply O_SYNC for O_DSYNC */
82 if (flags & O_DSYNC)
83 posix_flags |= SMB_O_SYNC;
84 if (flags & O_DIRECTORY)
85 posix_flags |= SMB_O_DIRECTORY;
86 if (flags & O_NOFOLLOW)
87 posix_flags |= SMB_O_NOFOLLOW;
88 if (flags & O_DIRECT)
89 posix_flags |= SMB_O_DIRECT;
90
91 return posix_flags;
92 }
93
94 static inline int cifs_get_disposition(unsigned int flags)
95 {
96 if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
97 return FILE_CREATE;
98 else if ((flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
99 return FILE_OVERWRITE_IF;
100 else if ((flags & O_CREAT) == O_CREAT)
101 return FILE_OPEN_IF;
102 else if ((flags & O_TRUNC) == O_TRUNC)
103 return FILE_OVERWRITE;
104 else
105 return FILE_OPEN;
106 }
107
108 int cifs_posix_open(char *full_path, struct inode **pinode,
109 struct super_block *sb, int mode, unsigned int f_flags,
110 __u32 *poplock, __u16 *pnetfid, int xid)
111 {
112 int rc;
113 FILE_UNIX_BASIC_INFO *presp_data;
114 __u32 posix_flags = 0;
115 struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
116 struct cifs_fattr fattr;
117 struct tcon_link *tlink;
118 struct cifs_tcon *tcon;
119
120 cFYI(1, "posix open %s", full_path);
121
122 presp_data = kzalloc(sizeof(FILE_UNIX_BASIC_INFO), GFP_KERNEL);
123 if (presp_data == NULL)
124 return -ENOMEM;
125
126 tlink = cifs_sb_tlink(cifs_sb);
127 if (IS_ERR(tlink)) {
128 rc = PTR_ERR(tlink);
129 goto posix_open_ret;
130 }
131
132 tcon = tlink_tcon(tlink);
133 mode &= ~current_umask();
134
135 posix_flags = cifs_posix_convert_flags(f_flags);
136 rc = CIFSPOSIXCreate(xid, tcon, posix_flags, mode, pnetfid, presp_data,
137 poplock, full_path, cifs_sb->local_nls,
138 cifs_sb->mnt_cifs_flags &
139 CIFS_MOUNT_MAP_SPECIAL_CHR);
140 cifs_put_tlink(tlink);
141
142 if (rc)
143 goto posix_open_ret;
144
145 if (presp_data->Type == cpu_to_le32(-1))
146 goto posix_open_ret; /* open ok, caller does qpathinfo */
147
148 if (!pinode)
149 goto posix_open_ret; /* caller does not need info */
150
151 cifs_unix_basic_to_fattr(&fattr, presp_data, cifs_sb);
152
153 /* get new inode and set it up */
154 if (*pinode == NULL) {
155 cifs_fill_uniqueid(sb, &fattr);
156 *pinode = cifs_iget(sb, &fattr);
157 if (!*pinode) {
158 rc = -ENOMEM;
159 goto posix_open_ret;
160 }
161 } else {
162 cifs_fattr_to_inode(*pinode, &fattr);
163 }
164
165 posix_open_ret:
166 kfree(presp_data);
167 return rc;
168 }
169
170 static int
171 cifs_nt_open(char *full_path, struct inode *inode, struct cifs_sb_info *cifs_sb,
172 struct cifs_tcon *tcon, unsigned int f_flags, __u32 *poplock,
173 __u16 *pnetfid, int xid)
174 {
175 int rc;
176 int desiredAccess;
177 int disposition;
178 int create_options = CREATE_NOT_DIR;
179 FILE_ALL_INFO *buf;
180
181 desiredAccess = cifs_convert_flags(f_flags);
182
183 /*********************************************************************
184 * open flag mapping table:
185 *
186 * POSIX Flag CIFS Disposition
187 * ---------- ----------------
188 * O_CREAT FILE_OPEN_IF
189 * O_CREAT | O_EXCL FILE_CREATE
190 * O_CREAT | O_TRUNC FILE_OVERWRITE_IF
191 * O_TRUNC FILE_OVERWRITE
192 * none of the above FILE_OPEN
193 *
194 * Note that there is not a direct match between disposition
195 * FILE_SUPERSEDE (ie create whether or not file exists although
196 * O_CREAT | O_TRUNC is similar but truncates the existing
197 * file rather than creating a new file as FILE_SUPERSEDE does
198 * (which uses the attributes / metadata passed in on open call)
199 *?
200 *? O_SYNC is a reasonable match to CIFS writethrough flag
201 *? and the read write flags match reasonably. O_LARGEFILE
202 *? is irrelevant because largefile support is always used
203 *? by this client. Flags O_APPEND, O_DIRECT, O_DIRECTORY,
204 * O_FASYNC, O_NOFOLLOW, O_NONBLOCK need further investigation
205 *********************************************************************/
206
207 disposition = cifs_get_disposition(f_flags);
208
209 /* BB pass O_SYNC flag through on file attributes .. BB */
210
211 buf = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
212 if (!buf)
213 return -ENOMEM;
214
215 if (backup_cred(cifs_sb))
216 create_options |= CREATE_OPEN_BACKUP_INTENT;
217
218 if (tcon->ses->capabilities & CAP_NT_SMBS)
219 rc = CIFSSMBOpen(xid, tcon, full_path, disposition,
220 desiredAccess, create_options, pnetfid, poplock, buf,
221 cifs_sb->local_nls, cifs_sb->mnt_cifs_flags
222 & CIFS_MOUNT_MAP_SPECIAL_CHR);
223 else
224 rc = SMBLegacyOpen(xid, tcon, full_path, disposition,
225 desiredAccess, CREATE_NOT_DIR, pnetfid, poplock, buf,
226 cifs_sb->local_nls, cifs_sb->mnt_cifs_flags
227 & CIFS_MOUNT_MAP_SPECIAL_CHR);
228
229 if (rc)
230 goto out;
231
232 if (tcon->unix_ext)
233 rc = cifs_get_inode_info_unix(&inode, full_path, inode->i_sb,
234 xid);
235 else
236 rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb,
237 xid, pnetfid);
238
239 out:
240 kfree(buf);
241 return rc;
242 }
243
244 struct cifsFileInfo *
245 cifs_new_fileinfo(__u16 fileHandle, struct file *file,
246 struct tcon_link *tlink, __u32 oplock)
247 {
248 struct dentry *dentry = file->f_path.dentry;
249 struct inode *inode = dentry->d_inode;
250 struct cifsInodeInfo *pCifsInode = CIFS_I(inode);
251 struct cifsFileInfo *pCifsFile;
252
253 pCifsFile = kzalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
254 if (pCifsFile == NULL)
255 return pCifsFile;
256
257 pCifsFile->count = 1;
258 pCifsFile->netfid = fileHandle;
259 pCifsFile->pid = current->tgid;
260 pCifsFile->uid = current_fsuid();
261 pCifsFile->dentry = dget(dentry);
262 pCifsFile->f_flags = file->f_flags;
263 pCifsFile->invalidHandle = false;
264 pCifsFile->tlink = cifs_get_tlink(tlink);
265 mutex_init(&pCifsFile->fh_mutex);
266 INIT_WORK(&pCifsFile->oplock_break, cifs_oplock_break);
267 INIT_LIST_HEAD(&pCifsFile->llist);
268
269 spin_lock(&cifs_file_list_lock);
270 list_add(&pCifsFile->tlist, &(tlink_tcon(tlink)->openFileList));
271 /* if readable file instance put first in list*/
272 if (file->f_mode & FMODE_READ)
273 list_add(&pCifsFile->flist, &pCifsInode->openFileList);
274 else
275 list_add_tail(&pCifsFile->flist, &pCifsInode->openFileList);
276 spin_unlock(&cifs_file_list_lock);
277
278 cifs_set_oplock_level(pCifsInode, oplock);
279 pCifsInode->can_cache_brlcks = pCifsInode->clientCanCacheAll;
280
281 file->private_data = pCifsFile;
282 return pCifsFile;
283 }
284
285 static void cifs_del_lock_waiters(struct cifsLockInfo *lock);
286
287 /*
288 * Release a reference on the file private data. This may involve closing
289 * the filehandle out on the server. Must be called without holding
290 * cifs_file_list_lock.
291 */
292 void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
293 {
294 struct inode *inode = cifs_file->dentry->d_inode;
295 struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
296 struct cifsInodeInfo *cifsi = CIFS_I(inode);
297 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
298 struct cifsLockInfo *li, *tmp;
299
300 spin_lock(&cifs_file_list_lock);
301 if (--cifs_file->count > 0) {
302 spin_unlock(&cifs_file_list_lock);
303 return;
304 }
305
306 /* remove it from the lists */
307 list_del(&cifs_file->flist);
308 list_del(&cifs_file->tlist);
309
310 if (list_empty(&cifsi->openFileList)) {
311 cFYI(1, "closing last open instance for inode %p",
312 cifs_file->dentry->d_inode);
313
314 /* in strict cache mode we need invalidate mapping on the last
315 close because it may cause a error when we open this file
316 again and get at least level II oplock */
317 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO)
318 CIFS_I(inode)->invalid_mapping = true;
319
320 cifs_set_oplock_level(cifsi, 0);
321 }
322 spin_unlock(&cifs_file_list_lock);
323
324 cancel_work_sync(&cifs_file->oplock_break);
325
326 if (!tcon->need_reconnect && !cifs_file->invalidHandle) {
327 int xid, rc;
328
329 xid = GetXid();
330 rc = CIFSSMBClose(xid, tcon, cifs_file->netfid);
331 FreeXid(xid);
332 }
333
334 /* Delete any outstanding lock records. We'll lose them when the file
335 * is closed anyway.
336 */
337 mutex_lock(&cifsi->lock_mutex);
338 list_for_each_entry_safe(li, tmp, &cifs_file->llist, llist) {
339 list_del(&li->llist);
340 cifs_del_lock_waiters(li);
341 kfree(li);
342 }
343 mutex_unlock(&cifsi->lock_mutex);
344
345 cifs_put_tlink(cifs_file->tlink);
346 dput(cifs_file->dentry);
347 kfree(cifs_file);
348 }
349
350 int cifs_open(struct inode *inode, struct file *file)
351 {
352 int rc = -EACCES;
353 int xid;
354 __u32 oplock;
355 struct cifs_sb_info *cifs_sb;
356 struct cifs_tcon *tcon;
357 struct tcon_link *tlink;
358 struct cifsFileInfo *pCifsFile = NULL;
359 char *full_path = NULL;
360 bool posix_open_ok = false;
361 __u16 netfid;
362
363 xid = GetXid();
364
365 cifs_sb = CIFS_SB(inode->i_sb);
366 tlink = cifs_sb_tlink(cifs_sb);
367 if (IS_ERR(tlink)) {
368 FreeXid(xid);
369 return PTR_ERR(tlink);
370 }
371 tcon = tlink_tcon(tlink);
372
373 full_path = build_path_from_dentry(file->f_path.dentry);
374 if (full_path == NULL) {
375 rc = -ENOMEM;
376 goto out;
377 }
378
379 cFYI(1, "inode = 0x%p file flags are 0x%x for %s",
380 inode, file->f_flags, full_path);
381
382 if (tcon->ses->server->oplocks)
383 oplock = REQ_OPLOCK;
384 else
385 oplock = 0;
386
387 if (!tcon->broken_posix_open && tcon->unix_ext &&
388 (tcon->ses->capabilities & CAP_UNIX) &&
389 (CIFS_UNIX_POSIX_PATH_OPS_CAP &
390 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
391 /* can not refresh inode info since size could be stale */
392 rc = cifs_posix_open(full_path, &inode, inode->i_sb,
393 cifs_sb->mnt_file_mode /* ignored */,
394 file->f_flags, &oplock, &netfid, xid);
395 if (rc == 0) {
396 cFYI(1, "posix open succeeded");
397 posix_open_ok = true;
398 } else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) {
399 if (tcon->ses->serverNOS)
400 cERROR(1, "server %s of type %s returned"
401 " unexpected error on SMB posix open"
402 ", disabling posix open support."
403 " Check if server update available.",
404 tcon->ses->serverName,
405 tcon->ses->serverNOS);
406 tcon->broken_posix_open = true;
407 } else if ((rc != -EIO) && (rc != -EREMOTE) &&
408 (rc != -EOPNOTSUPP)) /* path not found or net err */
409 goto out;
410 /* else fallthrough to retry open the old way on network i/o
411 or DFS errors */
412 }
413
414 if (!posix_open_ok) {
415 rc = cifs_nt_open(full_path, inode, cifs_sb, tcon,
416 file->f_flags, &oplock, &netfid, xid);
417 if (rc)
418 goto out;
419 }
420
421 pCifsFile = cifs_new_fileinfo(netfid, file, tlink, oplock);
422 if (pCifsFile == NULL) {
423 CIFSSMBClose(xid, tcon, netfid);
424 rc = -ENOMEM;
425 goto out;
426 }
427
428 cifs_fscache_set_inode_cookie(inode, file);
429
430 if ((oplock & CIFS_CREATE_ACTION) && !posix_open_ok && tcon->unix_ext) {
431 /* time to set mode which we can not set earlier due to
432 problems creating new read-only files */
433 struct cifs_unix_set_info_args args = {
434 .mode = inode->i_mode,
435 .uid = NO_CHANGE_64,
436 .gid = NO_CHANGE_64,
437 .ctime = NO_CHANGE_64,
438 .atime = NO_CHANGE_64,
439 .mtime = NO_CHANGE_64,
440 .device = 0,
441 };
442 CIFSSMBUnixSetFileInfo(xid, tcon, &args, netfid,
443 pCifsFile->pid);
444 }
445
446 out:
447 kfree(full_path);
448 FreeXid(xid);
449 cifs_put_tlink(tlink);
450 return rc;
451 }
452
453 /* Try to reacquire byte range locks that were released when session */
454 /* to server was lost */
455 static int cifs_relock_file(struct cifsFileInfo *cifsFile)
456 {
457 int rc = 0;
458
459 /* BB list all locks open on this file and relock */
460
461 return rc;
462 }
463
464 static int cifs_reopen_file(struct cifsFileInfo *pCifsFile, bool can_flush)
465 {
466 int rc = -EACCES;
467 int xid;
468 __u32 oplock;
469 struct cifs_sb_info *cifs_sb;
470 struct cifs_tcon *tcon;
471 struct cifsInodeInfo *pCifsInode;
472 struct inode *inode;
473 char *full_path = NULL;
474 int desiredAccess;
475 int disposition = FILE_OPEN;
476 int create_options = CREATE_NOT_DIR;
477 __u16 netfid;
478
479 xid = GetXid();
480 mutex_lock(&pCifsFile->fh_mutex);
481 if (!pCifsFile->invalidHandle) {
482 mutex_unlock(&pCifsFile->fh_mutex);
483 rc = 0;
484 FreeXid(xid);
485 return rc;
486 }
487
488 inode = pCifsFile->dentry->d_inode;
489 cifs_sb = CIFS_SB(inode->i_sb);
490 tcon = tlink_tcon(pCifsFile->tlink);
491
492 /* can not grab rename sem here because various ops, including
493 those that already have the rename sem can end up causing writepage
494 to get called and if the server was down that means we end up here,
495 and we can never tell if the caller already has the rename_sem */
496 full_path = build_path_from_dentry(pCifsFile->dentry);
497 if (full_path == NULL) {
498 rc = -ENOMEM;
499 mutex_unlock(&pCifsFile->fh_mutex);
500 FreeXid(xid);
501 return rc;
502 }
503
504 cFYI(1, "inode = 0x%p file flags 0x%x for %s",
505 inode, pCifsFile->f_flags, full_path);
506
507 if (tcon->ses->server->oplocks)
508 oplock = REQ_OPLOCK;
509 else
510 oplock = 0;
511
512 if (tcon->unix_ext && (tcon->ses->capabilities & CAP_UNIX) &&
513 (CIFS_UNIX_POSIX_PATH_OPS_CAP &
514 le64_to_cpu(tcon->fsUnixInfo.Capability))) {
515
516 /*
517 * O_CREAT, O_EXCL and O_TRUNC already had their effect on the
518 * original open. Must mask them off for a reopen.
519 */
520 unsigned int oflags = pCifsFile->f_flags &
521 ~(O_CREAT | O_EXCL | O_TRUNC);
522
523 rc = cifs_posix_open(full_path, NULL, inode->i_sb,
524 cifs_sb->mnt_file_mode /* ignored */,
525 oflags, &oplock, &netfid, xid);
526 if (rc == 0) {
527 cFYI(1, "posix reopen succeeded");
528 goto reopen_success;
529 }
530 /* fallthrough to retry open the old way on errors, especially
531 in the reconnect path it is important to retry hard */
532 }
533
534 desiredAccess = cifs_convert_flags(pCifsFile->f_flags);
535
536 if (backup_cred(cifs_sb))
537 create_options |= CREATE_OPEN_BACKUP_INTENT;
538
539 /* Can not refresh inode by passing in file_info buf to be returned
540 by SMBOpen and then calling get_inode_info with returned buf
541 since file might have write behind data that needs to be flushed
542 and server version of file size can be stale. If we knew for sure
543 that inode was not dirty locally we could do this */
544
545 rc = CIFSSMBOpen(xid, tcon, full_path, disposition, desiredAccess,
546 create_options, &netfid, &oplock, NULL,
547 cifs_sb->local_nls, cifs_sb->mnt_cifs_flags &
548 CIFS_MOUNT_MAP_SPECIAL_CHR);
549 if (rc) {
550 mutex_unlock(&pCifsFile->fh_mutex);
551 cFYI(1, "cifs_open returned 0x%x", rc);
552 cFYI(1, "oplock: %d", oplock);
553 goto reopen_error_exit;
554 }
555
556 reopen_success:
557 pCifsFile->netfid = netfid;
558 pCifsFile->invalidHandle = false;
559 mutex_unlock(&pCifsFile->fh_mutex);
560 pCifsInode = CIFS_I(inode);
561
562 if (can_flush) {
563 rc = filemap_write_and_wait(inode->i_mapping);
564 mapping_set_error(inode->i_mapping, rc);
565
566 if (tcon->unix_ext)
567 rc = cifs_get_inode_info_unix(&inode,
568 full_path, inode->i_sb, xid);
569 else
570 rc = cifs_get_inode_info(&inode,
571 full_path, NULL, inode->i_sb,
572 xid, NULL);
573 } /* else we are writing out data to server already
574 and could deadlock if we tried to flush data, and
575 since we do not know if we have data that would
576 invalidate the current end of file on the server
577 we can not go to the server to get the new inod
578 info */
579
580 cifs_set_oplock_level(pCifsInode, oplock);
581
582 cifs_relock_file(pCifsFile);
583
584 reopen_error_exit:
585 kfree(full_path);
586 FreeXid(xid);
587 return rc;
588 }
589
590 int cifs_close(struct inode *inode, struct file *file)
591 {
592 if (file->private_data != NULL) {
593 cifsFileInfo_put(file->private_data);
594 file->private_data = NULL;
595 }
596
597 /* return code from the ->release op is always ignored */
598 return 0;
599 }
600
601 int cifs_closedir(struct inode *inode, struct file *file)
602 {
603 int rc = 0;
604 int xid;
605 struct cifsFileInfo *pCFileStruct = file->private_data;
606 char *ptmp;
607
608 cFYI(1, "Closedir inode = 0x%p", inode);
609
610 xid = GetXid();
611
612 if (pCFileStruct) {
613 struct cifs_tcon *pTcon = tlink_tcon(pCFileStruct->tlink);
614
615 cFYI(1, "Freeing private data in close dir");
616 spin_lock(&cifs_file_list_lock);
617 if (!pCFileStruct->srch_inf.endOfSearch &&
618 !pCFileStruct->invalidHandle) {
619 pCFileStruct->invalidHandle = true;
620 spin_unlock(&cifs_file_list_lock);
621 rc = CIFSFindClose(xid, pTcon, pCFileStruct->netfid);
622 cFYI(1, "Closing uncompleted readdir with rc %d",
623 rc);
624 /* not much we can do if it fails anyway, ignore rc */
625 rc = 0;
626 } else
627 spin_unlock(&cifs_file_list_lock);
628 ptmp = pCFileStruct->srch_inf.ntwrk_buf_start;
629 if (ptmp) {
630 cFYI(1, "closedir free smb buf in srch struct");
631 pCFileStruct->srch_inf.ntwrk_buf_start = NULL;
632 if (pCFileStruct->srch_inf.smallBuf)
633 cifs_small_buf_release(ptmp);
634 else
635 cifs_buf_release(ptmp);
636 }
637 cifs_put_tlink(pCFileStruct->tlink);
638 kfree(file->private_data);
639 file->private_data = NULL;
640 }
641 /* BB can we lock the filestruct while this is going on? */
642 FreeXid(xid);
643 return rc;
644 }
645
646 static struct cifsLockInfo *
647 cifs_lock_init(__u64 offset, __u64 length, __u8 type)
648 {
649 struct cifsLockInfo *lock =
650 kmalloc(sizeof(struct cifsLockInfo), GFP_KERNEL);
651 if (!lock)
652 return lock;
653 lock->offset = offset;
654 lock->length = length;
655 lock->type = type;
656 lock->pid = current->tgid;
657 INIT_LIST_HEAD(&lock->blist);
658 init_waitqueue_head(&lock->block_q);
659 return lock;
660 }
661
662 static void
663 cifs_del_lock_waiters(struct cifsLockInfo *lock)
664 {
665 struct cifsLockInfo *li, *tmp;
666 list_for_each_entry_safe(li, tmp, &lock->blist, blist) {
667 list_del_init(&li->blist);
668 wake_up(&li->block_q);
669 }
670 }
671
672 static bool
673 cifs_find_fid_lock_conflict(struct cifsFileInfo *cfile, __u64 offset,
674 __u64 length, __u8 type, struct cifsFileInfo *cur,
675 struct cifsLockInfo **conf_lock)
676 {
677 struct cifsLockInfo *li;
678 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
679
680 list_for_each_entry(li, &cfile->llist, llist) {
681 if (offset + length <= li->offset ||
682 offset >= li->offset + li->length)
683 continue;
684 else if ((type & server->vals->shared_lock_type) &&
685 ((server->ops->compare_fids(cur, cfile) &&
686 current->tgid == li->pid) || type == li->type))
687 continue;
688 else {
689 *conf_lock = li;
690 return true;
691 }
692 }
693 return false;
694 }
695
696 static bool
697 cifs_find_lock_conflict(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
698 __u8 type, struct cifsLockInfo **conf_lock)
699 {
700 bool rc = false;
701 struct cifsFileInfo *fid, *tmp;
702 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
703
704 spin_lock(&cifs_file_list_lock);
705 list_for_each_entry_safe(fid, tmp, &cinode->openFileList, flist) {
706 rc = cifs_find_fid_lock_conflict(fid, offset, length, type,
707 cfile, conf_lock);
708 if (rc)
709 break;
710 }
711 spin_unlock(&cifs_file_list_lock);
712
713 return rc;
714 }
715
716 /*
717 * Check if there is another lock that prevents us to set the lock (mandatory
718 * style). If such a lock exists, update the flock structure with its
719 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
720 * or leave it the same if we can't. Returns 0 if we don't need to request to
721 * the server or 1 otherwise.
722 */
723 static int
724 cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
725 __u8 type, struct file_lock *flock)
726 {
727 int rc = 0;
728 struct cifsLockInfo *conf_lock;
729 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
730 struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
731 bool exist;
732
733 mutex_lock(&cinode->lock_mutex);
734
735 exist = cifs_find_lock_conflict(cfile, offset, length, type,
736 &conf_lock);
737 if (exist) {
738 flock->fl_start = conf_lock->offset;
739 flock->fl_end = conf_lock->offset + conf_lock->length - 1;
740 flock->fl_pid = conf_lock->pid;
741 if (conf_lock->type & server->vals->shared_lock_type)
742 flock->fl_type = F_RDLCK;
743 else
744 flock->fl_type = F_WRLCK;
745 } else if (!cinode->can_cache_brlcks)
746 rc = 1;
747 else
748 flock->fl_type = F_UNLCK;
749
750 mutex_unlock(&cinode->lock_mutex);
751 return rc;
752 }
753
754 static void
755 cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock)
756 {
757 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
758 mutex_lock(&cinode->lock_mutex);
759 list_add_tail(&lock->llist, &cfile->llist);
760 mutex_unlock(&cinode->lock_mutex);
761 }
762
763 /*
764 * Set the byte-range lock (mandatory style). Returns:
765 * 1) 0, if we set the lock and don't need to request to the server;
766 * 2) 1, if no locks prevent us but we need to request to the server;
767 * 3) -EACCESS, if there is a lock that prevents us and wait is false.
768 */
769 static int
770 cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock,
771 bool wait)
772 {
773 struct cifsLockInfo *conf_lock;
774 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
775 bool exist;
776 int rc = 0;
777
778 try_again:
779 exist = false;
780 mutex_lock(&cinode->lock_mutex);
781
782 exist = cifs_find_lock_conflict(cfile, lock->offset, lock->length,
783 lock->type, &conf_lock);
784 if (!exist && cinode->can_cache_brlcks) {
785 list_add_tail(&lock->llist, &cfile->llist);
786 mutex_unlock(&cinode->lock_mutex);
787 return rc;
788 }
789
790 if (!exist)
791 rc = 1;
792 else if (!wait)
793 rc = -EACCES;
794 else {
795 list_add_tail(&lock->blist, &conf_lock->blist);
796 mutex_unlock(&cinode->lock_mutex);
797 rc = wait_event_interruptible(lock->block_q,
798 (lock->blist.prev == &lock->blist) &&
799 (lock->blist.next == &lock->blist));
800 if (!rc)
801 goto try_again;
802 mutex_lock(&cinode->lock_mutex);
803 list_del_init(&lock->blist);
804 }
805
806 mutex_unlock(&cinode->lock_mutex);
807 return rc;
808 }
809
810 /*
811 * Check if there is another lock that prevents us to set the lock (posix
812 * style). If such a lock exists, update the flock structure with its
813 * properties. Otherwise, set the flock type to F_UNLCK if we can cache brlocks
814 * or leave it the same if we can't. Returns 0 if we don't need to request to
815 * the server or 1 otherwise.
816 */
817 static int
818 cifs_posix_lock_test(struct file *file, struct file_lock *flock)
819 {
820 int rc = 0;
821 struct cifsInodeInfo *cinode = CIFS_I(file->f_path.dentry->d_inode);
822 unsigned char saved_type = flock->fl_type;
823
824 if ((flock->fl_flags & FL_POSIX) == 0)
825 return 1;
826
827 mutex_lock(&cinode->lock_mutex);
828 posix_test_lock(file, flock);
829
830 if (flock->fl_type == F_UNLCK && !cinode->can_cache_brlcks) {
831 flock->fl_type = saved_type;
832 rc = 1;
833 }
834
835 mutex_unlock(&cinode->lock_mutex);
836 return rc;
837 }
838
839 /*
840 * Set the byte-range lock (posix style). Returns:
841 * 1) 0, if we set the lock and don't need to request to the server;
842 * 2) 1, if we need to request to the server;
843 * 3) <0, if the error occurs while setting the lock.
844 */
845 static int
846 cifs_posix_lock_set(struct file *file, struct file_lock *flock)
847 {
848 struct cifsInodeInfo *cinode = CIFS_I(file->f_path.dentry->d_inode);
849 int rc = 1;
850
851 if ((flock->fl_flags & FL_POSIX) == 0)
852 return rc;
853
854 try_again:
855 mutex_lock(&cinode->lock_mutex);
856 if (!cinode->can_cache_brlcks) {
857 mutex_unlock(&cinode->lock_mutex);
858 return rc;
859 }
860
861 rc = posix_lock_file(file, flock, NULL);
862 mutex_unlock(&cinode->lock_mutex);
863 if (rc == FILE_LOCK_DEFERRED) {
864 rc = wait_event_interruptible(flock->fl_wait, !flock->fl_next);
865 if (!rc)
866 goto try_again;
867 locks_delete_block(flock);
868 }
869 return rc;
870 }
871
872 static int
873 cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
874 {
875 int xid, rc = 0, stored_rc;
876 struct cifsLockInfo *li, *tmp;
877 struct cifs_tcon *tcon;
878 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
879 unsigned int num, max_num;
880 LOCKING_ANDX_RANGE *buf, *cur;
881 int types[] = {LOCKING_ANDX_LARGE_FILES,
882 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES};
883 int i;
884
885 xid = GetXid();
886 tcon = tlink_tcon(cfile->tlink);
887
888 mutex_lock(&cinode->lock_mutex);
889 if (!cinode->can_cache_brlcks) {
890 mutex_unlock(&cinode->lock_mutex);
891 FreeXid(xid);
892 return rc;
893 }
894
895 max_num = (tcon->ses->server->maxBuf - sizeof(struct smb_hdr)) /
896 sizeof(LOCKING_ANDX_RANGE);
897 buf = kzalloc(max_num * sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
898 if (!buf) {
899 mutex_unlock(&cinode->lock_mutex);
900 FreeXid(xid);
901 return rc;
902 }
903
904 for (i = 0; i < 2; i++) {
905 cur = buf;
906 num = 0;
907 list_for_each_entry_safe(li, tmp, &cfile->llist, llist) {
908 if (li->type != types[i])
909 continue;
910 cur->Pid = cpu_to_le16(li->pid);
911 cur->LengthLow = cpu_to_le32((u32)li->length);
912 cur->LengthHigh = cpu_to_le32((u32)(li->length>>32));
913 cur->OffsetLow = cpu_to_le32((u32)li->offset);
914 cur->OffsetHigh = cpu_to_le32((u32)(li->offset>>32));
915 if (++num == max_num) {
916 stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
917 (__u8)li->type, 0, num,
918 buf);
919 if (stored_rc)
920 rc = stored_rc;
921 cur = buf;
922 num = 0;
923 } else
924 cur++;
925 }
926
927 if (num) {
928 stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
929 (__u8)types[i], 0, num, buf);
930 if (stored_rc)
931 rc = stored_rc;
932 }
933 }
934
935 cinode->can_cache_brlcks = false;
936 mutex_unlock(&cinode->lock_mutex);
937
938 kfree(buf);
939 FreeXid(xid);
940 return rc;
941 }
942
943 /* copied from fs/locks.c with a name change */
944 #define cifs_for_each_lock(inode, lockp) \
945 for (lockp = &inode->i_flock; *lockp != NULL; \
946 lockp = &(*lockp)->fl_next)
947
948 struct lock_to_push {
949 struct list_head llist;
950 __u64 offset;
951 __u64 length;
952 __u32 pid;
953 __u16 netfid;
954 __u8 type;
955 };
956
957 static int
958 cifs_push_posix_locks(struct cifsFileInfo *cfile)
959 {
960 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
961 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
962 struct file_lock *flock, **before;
963 unsigned int count = 0, i = 0;
964 int rc = 0, xid, type;
965 struct list_head locks_to_send, *el;
966 struct lock_to_push *lck, *tmp;
967 __u64 length;
968
969 xid = GetXid();
970
971 mutex_lock(&cinode->lock_mutex);
972 if (!cinode->can_cache_brlcks) {
973 mutex_unlock(&cinode->lock_mutex);
974 FreeXid(xid);
975 return rc;
976 }
977
978 lock_flocks();
979 cifs_for_each_lock(cfile->dentry->d_inode, before) {
980 if ((*before)->fl_flags & FL_POSIX)
981 count++;
982 }
983 unlock_flocks();
984
985 INIT_LIST_HEAD(&locks_to_send);
986
987 /*
988 * Allocating count locks is enough because no FL_POSIX locks can be
989 * added to the list while we are holding cinode->lock_mutex that
990 * protects locking operations of this inode.
991 */
992 for (; i < count; i++) {
993 lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL);
994 if (!lck) {
995 rc = -ENOMEM;
996 goto err_out;
997 }
998 list_add_tail(&lck->llist, &locks_to_send);
999 }
1000
1001 el = locks_to_send.next;
1002 lock_flocks();
1003 cifs_for_each_lock(cfile->dentry->d_inode, before) {
1004 flock = *before;
1005 if ((flock->fl_flags & FL_POSIX) == 0)
1006 continue;
1007 if (el == &locks_to_send) {
1008 /*
1009 * The list ended. We don't have enough allocated
1010 * structures - something is really wrong.
1011 */
1012 cERROR(1, "Can't push all brlocks!");
1013 break;
1014 }
1015 length = 1 + flock->fl_end - flock->fl_start;
1016 if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK)
1017 type = CIFS_RDLCK;
1018 else
1019 type = CIFS_WRLCK;
1020 lck = list_entry(el, struct lock_to_push, llist);
1021 lck->pid = flock->fl_pid;
1022 lck->netfid = cfile->netfid;
1023 lck->length = length;
1024 lck->type = type;
1025 lck->offset = flock->fl_start;
1026 el = el->next;
1027 }
1028 unlock_flocks();
1029
1030 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1031 struct file_lock tmp_lock;
1032 int stored_rc;
1033
1034 tmp_lock.fl_start = lck->offset;
1035 stored_rc = CIFSSMBPosixLock(xid, tcon, lck->netfid, lck->pid,
1036 0, lck->length, &tmp_lock,
1037 lck->type, 0);
1038 if (stored_rc)
1039 rc = stored_rc;
1040 list_del(&lck->llist);
1041 kfree(lck);
1042 }
1043
1044 out:
1045 cinode->can_cache_brlcks = false;
1046 mutex_unlock(&cinode->lock_mutex);
1047
1048 FreeXid(xid);
1049 return rc;
1050 err_out:
1051 list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1052 list_del(&lck->llist);
1053 kfree(lck);
1054 }
1055 goto out;
1056 }
1057
1058 static int
1059 cifs_push_locks(struct cifsFileInfo *cfile)
1060 {
1061 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1062 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1063
1064 if ((tcon->ses->capabilities & CAP_UNIX) &&
1065 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1066 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1067 return cifs_push_posix_locks(cfile);
1068
1069 return cifs_push_mandatory_locks(cfile);
1070 }
1071
1072 static void
1073 cifs_read_flock(struct file_lock *flock, __u32 *type, int *lock, int *unlock,
1074 bool *wait_flag, struct TCP_Server_Info *server)
1075 {
1076 if (flock->fl_flags & FL_POSIX)
1077 cFYI(1, "Posix");
1078 if (flock->fl_flags & FL_FLOCK)
1079 cFYI(1, "Flock");
1080 if (flock->fl_flags & FL_SLEEP) {
1081 cFYI(1, "Blocking lock");
1082 *wait_flag = true;
1083 }
1084 if (flock->fl_flags & FL_ACCESS)
1085 cFYI(1, "Process suspended by mandatory locking - "
1086 "not implemented yet");
1087 if (flock->fl_flags & FL_LEASE)
1088 cFYI(1, "Lease on file - not implemented yet");
1089 if (flock->fl_flags &
1090 (~(FL_POSIX | FL_FLOCK | FL_SLEEP | FL_ACCESS | FL_LEASE)))
1091 cFYI(1, "Unknown lock flags 0x%x", flock->fl_flags);
1092
1093 *type = server->vals->large_lock_type;
1094 if (flock->fl_type == F_WRLCK) {
1095 cFYI(1, "F_WRLCK ");
1096 *type |= server->vals->exclusive_lock_type;
1097 *lock = 1;
1098 } else if (flock->fl_type == F_UNLCK) {
1099 cFYI(1, "F_UNLCK");
1100 *type |= server->vals->unlock_lock_type;
1101 *unlock = 1;
1102 /* Check if unlock includes more than one lock range */
1103 } else if (flock->fl_type == F_RDLCK) {
1104 cFYI(1, "F_RDLCK");
1105 *type |= server->vals->shared_lock_type;
1106 *lock = 1;
1107 } else if (flock->fl_type == F_EXLCK) {
1108 cFYI(1, "F_EXLCK");
1109 *type |= server->vals->exclusive_lock_type;
1110 *lock = 1;
1111 } else if (flock->fl_type == F_SHLCK) {
1112 cFYI(1, "F_SHLCK");
1113 *type |= server->vals->shared_lock_type;
1114 *lock = 1;
1115 } else
1116 cFYI(1, "Unknown type of lock");
1117 }
1118
1119 static int
1120 cifs_mandatory_lock(int xid, struct cifsFileInfo *cfile, __u64 offset,
1121 __u64 length, __u32 type, int lock, int unlock, bool wait)
1122 {
1123 return CIFSSMBLock(xid, tlink_tcon(cfile->tlink), cfile->netfid,
1124 current->tgid, length, offset, unlock, lock,
1125 (__u8)type, wait, 0);
1126 }
1127
1128 static int
1129 cifs_getlk(struct file *file, struct file_lock *flock, __u32 type,
1130 bool wait_flag, bool posix_lck, int xid)
1131 {
1132 int rc = 0;
1133 __u64 length = 1 + flock->fl_end - flock->fl_start;
1134 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1135 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1136 struct TCP_Server_Info *server = tcon->ses->server;
1137 __u16 netfid = cfile->netfid;
1138
1139 if (posix_lck) {
1140 int posix_lock_type;
1141
1142 rc = cifs_posix_lock_test(file, flock);
1143 if (!rc)
1144 return rc;
1145
1146 if (type & server->vals->shared_lock_type)
1147 posix_lock_type = CIFS_RDLCK;
1148 else
1149 posix_lock_type = CIFS_WRLCK;
1150 rc = CIFSSMBPosixLock(xid, tcon, netfid, current->tgid,
1151 1 /* get */, length, flock,
1152 posix_lock_type, wait_flag);
1153 return rc;
1154 }
1155
1156 rc = cifs_lock_test(cfile, flock->fl_start, length, type, flock);
1157 if (!rc)
1158 return rc;
1159
1160 /* BB we could chain these into one lock request BB */
1161 rc = cifs_mandatory_lock(xid, cfile, flock->fl_start, length, type,
1162 1, 0, false);
1163 if (rc == 0) {
1164 rc = cifs_mandatory_lock(xid, cfile, flock->fl_start, length,
1165 type, 0, 1, false);
1166 flock->fl_type = F_UNLCK;
1167 if (rc != 0)
1168 cERROR(1, "Error unlocking previously locked "
1169 "range %d during test of lock", rc);
1170 return 0;
1171 }
1172
1173 if (type & server->vals->shared_lock_type) {
1174 flock->fl_type = F_WRLCK;
1175 return 0;
1176 }
1177
1178 rc = cifs_mandatory_lock(xid, cfile, flock->fl_start, length,
1179 type | server->vals->shared_lock_type, 1, 0,
1180 false);
1181 if (rc == 0) {
1182 rc = cifs_mandatory_lock(xid, cfile, flock->fl_start, length,
1183 type | server->vals->shared_lock_type,
1184 0, 1, false);
1185 flock->fl_type = F_RDLCK;
1186 if (rc != 0)
1187 cERROR(1, "Error unlocking previously locked "
1188 "range %d during test of lock", rc);
1189 } else
1190 flock->fl_type = F_WRLCK;
1191
1192 return 0;
1193 }
1194
1195 static void
1196 cifs_move_llist(struct list_head *source, struct list_head *dest)
1197 {
1198 struct list_head *li, *tmp;
1199 list_for_each_safe(li, tmp, source)
1200 list_move(li, dest);
1201 }
1202
1203 static void
1204 cifs_free_llist(struct list_head *llist)
1205 {
1206 struct cifsLockInfo *li, *tmp;
1207 list_for_each_entry_safe(li, tmp, llist, llist) {
1208 cifs_del_lock_waiters(li);
1209 list_del(&li->llist);
1210 kfree(li);
1211 }
1212 }
1213
1214 static int
1215 cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, int xid)
1216 {
1217 int rc = 0, stored_rc;
1218 int types[] = {LOCKING_ANDX_LARGE_FILES,
1219 LOCKING_ANDX_SHARED_LOCK | LOCKING_ANDX_LARGE_FILES};
1220 unsigned int i;
1221 unsigned int max_num, num;
1222 LOCKING_ANDX_RANGE *buf, *cur;
1223 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1224 struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
1225 struct cifsLockInfo *li, *tmp;
1226 __u64 length = 1 + flock->fl_end - flock->fl_start;
1227 struct list_head tmp_llist;
1228
1229 INIT_LIST_HEAD(&tmp_llist);
1230
1231 max_num = (tcon->ses->server->maxBuf - sizeof(struct smb_hdr)) /
1232 sizeof(LOCKING_ANDX_RANGE);
1233 buf = kzalloc(max_num * sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
1234 if (!buf)
1235 return -ENOMEM;
1236
1237 mutex_lock(&cinode->lock_mutex);
1238 for (i = 0; i < 2; i++) {
1239 cur = buf;
1240 num = 0;
1241 list_for_each_entry_safe(li, tmp, &cfile->llist, llist) {
1242 if (flock->fl_start > li->offset ||
1243 (flock->fl_start + length) <
1244 (li->offset + li->length))
1245 continue;
1246 if (current->tgid != li->pid)
1247 continue;
1248 if (types[i] != li->type)
1249 continue;
1250 if (!cinode->can_cache_brlcks) {
1251 cur->Pid = cpu_to_le16(li->pid);
1252 cur->LengthLow = cpu_to_le32((u32)li->length);
1253 cur->LengthHigh =
1254 cpu_to_le32((u32)(li->length>>32));
1255 cur->OffsetLow = cpu_to_le32((u32)li->offset);
1256 cur->OffsetHigh =
1257 cpu_to_le32((u32)(li->offset>>32));
1258 /*
1259 * We need to save a lock here to let us add
1260 * it again to the file's list if the unlock
1261 * range request fails on the server.
1262 */
1263 list_move(&li->llist, &tmp_llist);
1264 if (++num == max_num) {
1265 stored_rc = cifs_lockv(xid, tcon,
1266 cfile->netfid,
1267 li->type, num,
1268 0, buf);
1269 if (stored_rc) {
1270 /*
1271 * We failed on the unlock range
1272 * request - add all locks from
1273 * the tmp list to the head of
1274 * the file's list.
1275 */
1276 cifs_move_llist(&tmp_llist,
1277 &cfile->llist);
1278 rc = stored_rc;
1279 } else
1280 /*
1281 * The unlock range request
1282 * succeed - free the tmp list.
1283 */
1284 cifs_free_llist(&tmp_llist);
1285 cur = buf;
1286 num = 0;
1287 } else
1288 cur++;
1289 } else {
1290 /*
1291 * We can cache brlock requests - simply remove
1292 * a lock from the file's list.
1293 */
1294 list_del(&li->llist);
1295 cifs_del_lock_waiters(li);
1296 kfree(li);
1297 }
1298 }
1299 if (num) {
1300 stored_rc = cifs_lockv(xid, tcon, cfile->netfid,
1301 types[i], num, 0, buf);
1302 if (stored_rc) {
1303 cifs_move_llist(&tmp_llist, &cfile->llist);
1304 rc = stored_rc;
1305 } else
1306 cifs_free_llist(&tmp_llist);
1307 }
1308 }
1309
1310 mutex_unlock(&cinode->lock_mutex);
1311 kfree(buf);
1312 return rc;
1313 }
1314
1315 static int
1316 cifs_setlk(struct file *file, struct file_lock *flock, __u32 type,
1317 bool wait_flag, bool posix_lck, int lock, int unlock, int xid)
1318 {
1319 int rc = 0;
1320 __u64 length = 1 + flock->fl_end - flock->fl_start;
1321 struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
1322 struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1323 struct TCP_Server_Info *server = tcon->ses->server;
1324 __u16 netfid = cfile->netfid;
1325
1326 if (posix_lck) {
1327 int posix_lock_type;
1328
1329 rc = cifs_posix_lock_set(file, flock);
1330 if (!rc || rc < 0)
1331 return rc;
1332
1333 if (type & server->vals->shared_lock_type)
1334 posix_lock_type = CIFS_RDLCK;
1335 else
1336 posix_lock_type = CIFS_WRLCK;
1337
1338 if (unlock == 1)
1339 posix_lock_type = CIFS_UNLCK;
1340
1341 rc = CIFSSMBPosixLock(xid, tcon, netfid, current->tgid,
1342 0 /* set */, length, flock,
1343 posix_lock_type, wait_flag);
1344 goto out;
1345 }
1346
1347 if (lock) {
1348 struct cifsLockInfo *lock;
1349
1350 lock = cifs_lock_init(flock->fl_start, length, type);
1351 if (!lock)
1352 return -ENOMEM;
1353
1354 rc = cifs_lock_add_if(cfile, lock, wait_flag);
1355 if (rc < 0)
1356 kfree(lock);
1357 if (rc <= 0)
1358 goto out;
1359
1360 rc = cifs_mandatory_lock(xid, cfile, flock->fl_start, length,
1361 type, 1, 0, wait_flag);
1362 if (rc) {
1363 kfree(lock);
1364 goto out;
1365 }
1366
1367 cifs_lock_add(cfile, lock);
1368 } else if (unlock)
1369 rc = cifs_unlock_range(cfile, flock, xid);
1370
1371 out:
1372 if (flock->fl_flags & FL_POSIX)
1373 posix_lock_file_wait(file, flock);
1374 return rc;
1375 }
1376
1377 int cifs_lock(struct file *file, int cmd, struct file_lock *flock)
1378 {
1379 int rc, xid;
1380 int lock = 0, unlock = 0;
1381 bool wait_flag = false;
1382 bool posix_lck = false;
1383 struct cifs_sb_info *cifs_sb;
1384 struct cifs_tcon *tcon;
1385 struct cifsInodeInfo *cinode;
1386 struct cifsFileInfo *cfile;
1387 __u16 netfid;
1388 __u32 type;
1389
1390 rc = -EACCES;
1391 xid = GetXid();
1392
1393 cFYI(1, "Lock parm: 0x%x flockflags: 0x%x flocktype: 0x%x start: %lld "
1394 "end: %lld", cmd, flock->fl_flags, flock->fl_type,
1395 flock->fl_start, flock->fl_end);
1396
1397 cfile = (struct cifsFileInfo *)file->private_data;
1398 tcon = tlink_tcon(cfile->tlink);
1399
1400 cifs_read_flock(flock, &type, &lock, &unlock, &wait_flag,
1401 tcon->ses->server);
1402
1403 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
1404 netfid = cfile->netfid;
1405 cinode = CIFS_I(file->f_path.dentry->d_inode);
1406
1407 if ((tcon->ses->capabilities & CAP_UNIX) &&
1408 (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability)) &&
1409 ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
1410 posix_lck = true;
1411 /*
1412 * BB add code here to normalize offset and length to account for
1413 * negative length which we can not accept over the wire.
1414 */
1415 if (IS_GETLK(cmd)) {
1416 rc = cifs_getlk(file, flock, type, wait_flag, posix_lck, xid);
1417 FreeXid(xid);
1418 return rc;
1419 }
1420
1421 if (!lock && !unlock) {
1422 /*
1423 * if no lock or unlock then nothing to do since we do not
1424 * know what it is
1425 */
1426 FreeXid(xid);
1427 return -EOPNOTSUPP;
1428 }
1429
1430 rc = cifs_setlk(file, flock, type, wait_flag, posix_lck, lock, unlock,
1431 xid);
1432 FreeXid(xid);
1433 return rc;
1434 }
1435
1436 /*
1437 * update the file size (if needed) after a write. Should be called with
1438 * the inode->i_lock held
1439 */
1440 void
1441 cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
1442 unsigned int bytes_written)
1443 {
1444 loff_t end_of_write = offset + bytes_written;
1445
1446 if (end_of_write > cifsi->server_eof)
1447 cifsi->server_eof = end_of_write;
1448 }
1449
1450 static ssize_t cifs_write(struct cifsFileInfo *open_file, __u32 pid,
1451 const char *write_data, size_t write_size,
1452 loff_t *poffset)
1453 {
1454 int rc = 0;
1455 unsigned int bytes_written = 0;
1456 unsigned int total_written;
1457 struct cifs_sb_info *cifs_sb;
1458 struct cifs_tcon *pTcon;
1459 int xid;
1460 struct dentry *dentry = open_file->dentry;
1461 struct cifsInodeInfo *cifsi = CIFS_I(dentry->d_inode);
1462 struct cifs_io_parms io_parms;
1463
1464 cifs_sb = CIFS_SB(dentry->d_sb);
1465
1466 cFYI(1, "write %zd bytes to offset %lld of %s", write_size,
1467 *poffset, dentry->d_name.name);
1468
1469 pTcon = tlink_tcon(open_file->tlink);
1470
1471 xid = GetXid();
1472
1473 for (total_written = 0; write_size > total_written;
1474 total_written += bytes_written) {
1475 rc = -EAGAIN;
1476 while (rc == -EAGAIN) {
1477 struct kvec iov[2];
1478 unsigned int len;
1479
1480 if (open_file->invalidHandle) {
1481 /* we could deadlock if we called
1482 filemap_fdatawait from here so tell
1483 reopen_file not to flush data to
1484 server now */
1485 rc = cifs_reopen_file(open_file, false);
1486 if (rc != 0)
1487 break;
1488 }
1489
1490 len = min((size_t)cifs_sb->wsize,
1491 write_size - total_written);
1492 /* iov[0] is reserved for smb header */
1493 iov[1].iov_base = (char *)write_data + total_written;
1494 iov[1].iov_len = len;
1495 io_parms.netfid = open_file->netfid;
1496 io_parms.pid = pid;
1497 io_parms.tcon = pTcon;
1498 io_parms.offset = *poffset;
1499 io_parms.length = len;
1500 rc = CIFSSMBWrite2(xid, &io_parms, &bytes_written, iov,
1501 1, 0);
1502 }
1503 if (rc || (bytes_written == 0)) {
1504 if (total_written)
1505 break;
1506 else {
1507 FreeXid(xid);
1508 return rc;
1509 }
1510 } else {
1511 spin_lock(&dentry->d_inode->i_lock);
1512 cifs_update_eof(cifsi, *poffset, bytes_written);
1513 spin_unlock(&dentry->d_inode->i_lock);
1514 *poffset += bytes_written;
1515 }
1516 }
1517
1518 cifs_stats_bytes_written(pTcon, total_written);
1519
1520 if (total_written > 0) {
1521 spin_lock(&dentry->d_inode->i_lock);
1522 if (*poffset > dentry->d_inode->i_size)
1523 i_size_write(dentry->d_inode, *poffset);
1524 spin_unlock(&dentry->d_inode->i_lock);
1525 }
1526 mark_inode_dirty_sync(dentry->d_inode);
1527 FreeXid(xid);
1528 return total_written;
1529 }
1530
1531 struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
1532 bool fsuid_only)
1533 {
1534 struct cifsFileInfo *open_file = NULL;
1535 struct cifs_sb_info *cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1536
1537 /* only filter by fsuid on multiuser mounts */
1538 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1539 fsuid_only = false;
1540
1541 spin_lock(&cifs_file_list_lock);
1542 /* we could simply get the first_list_entry since write-only entries
1543 are always at the end of the list but since the first entry might
1544 have a close pending, we go through the whole list */
1545 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1546 if (fsuid_only && open_file->uid != current_fsuid())
1547 continue;
1548 if (OPEN_FMODE(open_file->f_flags) & FMODE_READ) {
1549 if (!open_file->invalidHandle) {
1550 /* found a good file */
1551 /* lock it so it will not be closed on us */
1552 cifsFileInfo_get(open_file);
1553 spin_unlock(&cifs_file_list_lock);
1554 return open_file;
1555 } /* else might as well continue, and look for
1556 another, or simply have the caller reopen it
1557 again rather than trying to fix this handle */
1558 } else /* write only file */
1559 break; /* write only files are last so must be done */
1560 }
1561 spin_unlock(&cifs_file_list_lock);
1562 return NULL;
1563 }
1564
1565 struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode,
1566 bool fsuid_only)
1567 {
1568 struct cifsFileInfo *open_file, *inv_file = NULL;
1569 struct cifs_sb_info *cifs_sb;
1570 bool any_available = false;
1571 int rc;
1572 unsigned int refind = 0;
1573
1574 /* Having a null inode here (because mapping->host was set to zero by
1575 the VFS or MM) should not happen but we had reports of on oops (due to
1576 it being zero) during stress testcases so we need to check for it */
1577
1578 if (cifs_inode == NULL) {
1579 cERROR(1, "Null inode passed to cifs_writeable_file");
1580 dump_stack();
1581 return NULL;
1582 }
1583
1584 cifs_sb = CIFS_SB(cifs_inode->vfs_inode.i_sb);
1585
1586 /* only filter by fsuid on multiuser mounts */
1587 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
1588 fsuid_only = false;
1589
1590 spin_lock(&cifs_file_list_lock);
1591 refind_writable:
1592 if (refind > MAX_REOPEN_ATT) {
1593 spin_unlock(&cifs_file_list_lock);
1594 return NULL;
1595 }
1596 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
1597 if (!any_available && open_file->pid != current->tgid)
1598 continue;
1599 if (fsuid_only && open_file->uid != current_fsuid())
1600 continue;
1601 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
1602 if (!open_file->invalidHandle) {
1603 /* found a good writable file */
1604 cifsFileInfo_get(open_file);
1605 spin_unlock(&cifs_file_list_lock);
1606 return open_file;
1607 } else {
1608 if (!inv_file)
1609 inv_file = open_file;
1610 }
1611 }
1612 }
1613 /* couldn't find useable FH with same pid, try any available */
1614 if (!any_available) {
1615 any_available = true;
1616 goto refind_writable;
1617 }
1618
1619 if (inv_file) {
1620 any_available = false;
1621 cifsFileInfo_get(inv_file);
1622 }
1623
1624 spin_unlock(&cifs_file_list_lock);
1625
1626 if (inv_file) {
1627 rc = cifs_reopen_file(inv_file, false);
1628 if (!rc)
1629 return inv_file;
1630 else {
1631 spin_lock(&cifs_file_list_lock);
1632 list_move_tail(&inv_file->flist,
1633 &cifs_inode->openFileList);
1634 spin_unlock(&cifs_file_list_lock);
1635 cifsFileInfo_put(inv_file);
1636 spin_lock(&cifs_file_list_lock);
1637 ++refind;
1638 goto refind_writable;
1639 }
1640 }
1641
1642 return NULL;
1643 }
1644
1645 static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to)
1646 {
1647 struct address_space *mapping = page->mapping;
1648 loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
1649 char *write_data;
1650 int rc = -EFAULT;
1651 int bytes_written = 0;
1652 struct inode *inode;
1653 struct cifsFileInfo *open_file;
1654
1655 if (!mapping || !mapping->host)
1656 return -EFAULT;
1657
1658 inode = page->mapping->host;
1659
1660 offset += (loff_t)from;
1661 write_data = kmap(page);
1662 write_data += from;
1663
1664 if ((to > PAGE_CACHE_SIZE) || (from > to)) {
1665 kunmap(page);
1666 return -EIO;
1667 }
1668
1669 /* racing with truncate? */
1670 if (offset > mapping->host->i_size) {
1671 kunmap(page);
1672 return 0; /* don't care */
1673 }
1674
1675 /* check to make sure that we are not extending the file */
1676 if (mapping->host->i_size - offset < (loff_t)to)
1677 to = (unsigned)(mapping->host->i_size - offset);
1678
1679 open_file = find_writable_file(CIFS_I(mapping->host), false);
1680 if (open_file) {
1681 bytes_written = cifs_write(open_file, open_file->pid,
1682 write_data, to - from, &offset);
1683 cifsFileInfo_put(open_file);
1684 /* Does mm or vfs already set times? */
1685 inode->i_atime = inode->i_mtime = current_fs_time(inode->i_sb);
1686 if ((bytes_written > 0) && (offset))
1687 rc = 0;
1688 else if (bytes_written < 0)
1689 rc = bytes_written;
1690 } else {
1691 cFYI(1, "No writeable filehandles for inode");
1692 rc = -EIO;
1693 }
1694
1695 kunmap(page);
1696 return rc;
1697 }
1698
1699 /*
1700 * Marshal up the iov array, reserving the first one for the header. Also,
1701 * set wdata->bytes.
1702 */
1703 static void
1704 cifs_writepages_marshal_iov(struct kvec *iov, struct cifs_writedata *wdata)
1705 {
1706 int i;
1707 struct inode *inode = wdata->cfile->dentry->d_inode;
1708 loff_t size = i_size_read(inode);
1709
1710 /* marshal up the pages into iov array */
1711 wdata->bytes = 0;
1712 for (i = 0; i < wdata->nr_pages; i++) {
1713 iov[i + 1].iov_len = min(size - page_offset(wdata->pages[i]),
1714 (loff_t)PAGE_CACHE_SIZE);
1715 iov[i + 1].iov_base = kmap(wdata->pages[i]);
1716 wdata->bytes += iov[i + 1].iov_len;
1717 }
1718 }
1719
1720 static int cifs_writepages(struct address_space *mapping,
1721 struct writeback_control *wbc)
1722 {
1723 struct cifs_sb_info *cifs_sb = CIFS_SB(mapping->host->i_sb);
1724 bool done = false, scanned = false, range_whole = false;
1725 pgoff_t end, index;
1726 struct cifs_writedata *wdata;
1727 struct page *page;
1728 int rc = 0;
1729
1730 /*
1731 * If wsize is smaller than the page cache size, default to writing
1732 * one page at a time via cifs_writepage
1733 */
1734 if (cifs_sb->wsize < PAGE_CACHE_SIZE)
1735 return generic_writepages(mapping, wbc);
1736
1737 if (wbc->range_cyclic) {
1738 index = mapping->writeback_index; /* Start from prev offset */
1739 end = -1;
1740 } else {
1741 index = wbc->range_start >> PAGE_CACHE_SHIFT;
1742 end = wbc->range_end >> PAGE_CACHE_SHIFT;
1743 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
1744 range_whole = true;
1745 scanned = true;
1746 }
1747 retry:
1748 while (!done && index <= end) {
1749 unsigned int i, nr_pages, found_pages;
1750 pgoff_t next = 0, tofind;
1751 struct page **pages;
1752
1753 tofind = min((cifs_sb->wsize / PAGE_CACHE_SIZE) - 1,
1754 end - index) + 1;
1755
1756 wdata = cifs_writedata_alloc((unsigned int)tofind,
1757 cifs_writev_complete);
1758 if (!wdata) {
1759 rc = -ENOMEM;
1760 break;
1761 }
1762
1763 /*
1764 * find_get_pages_tag seems to return a max of 256 on each
1765 * iteration, so we must call it several times in order to
1766 * fill the array or the wsize is effectively limited to
1767 * 256 * PAGE_CACHE_SIZE.
1768 */
1769 found_pages = 0;
1770 pages = wdata->pages;
1771 do {
1772 nr_pages = find_get_pages_tag(mapping, &index,
1773 PAGECACHE_TAG_DIRTY,
1774 tofind, pages);
1775 found_pages += nr_pages;
1776 tofind -= nr_pages;
1777 pages += nr_pages;
1778 } while (nr_pages && tofind && index <= end);
1779
1780 if (found_pages == 0) {
1781 kref_put(&wdata->refcount, cifs_writedata_release);
1782 break;
1783 }
1784
1785 nr_pages = 0;
1786 for (i = 0; i < found_pages; i++) {
1787 page = wdata->pages[i];
1788 /*
1789 * At this point we hold neither mapping->tree_lock nor
1790 * lock on the page itself: the page may be truncated or
1791 * invalidated (changing page->mapping to NULL), or even
1792 * swizzled back from swapper_space to tmpfs file
1793 * mapping
1794 */
1795
1796 if (nr_pages == 0)
1797 lock_page(page);
1798 else if (!trylock_page(page))
1799 break;
1800
1801 if (unlikely(page->mapping != mapping)) {
1802 unlock_page(page);
1803 break;
1804 }
1805
1806 if (!wbc->range_cyclic && page->index > end) {
1807 done = true;
1808 unlock_page(page);
1809 break;
1810 }
1811
1812 if (next && (page->index != next)) {
1813 /* Not next consecutive page */
1814 unlock_page(page);
1815 break;
1816 }
1817
1818 if (wbc->sync_mode != WB_SYNC_NONE)
1819 wait_on_page_writeback(page);
1820
1821 if (PageWriteback(page) ||
1822 !clear_page_dirty_for_io(page)) {
1823 unlock_page(page);
1824 break;
1825 }
1826
1827 /*
1828 * This actually clears the dirty bit in the radix tree.
1829 * See cifs_writepage() for more commentary.
1830 */
1831 set_page_writeback(page);
1832
1833 if (page_offset(page) >= mapping->host->i_size) {
1834 done = true;
1835 unlock_page(page);
1836 end_page_writeback(page);
1837 break;
1838 }
1839
1840 wdata->pages[i] = page;
1841 next = page->index + 1;
1842 ++nr_pages;
1843 }
1844
1845 /* reset index to refind any pages skipped */
1846 if (nr_pages == 0)
1847 index = wdata->pages[0]->index + 1;
1848
1849 /* put any pages we aren't going to use */
1850 for (i = nr_pages; i < found_pages; i++) {
1851 page_cache_release(wdata->pages[i]);
1852 wdata->pages[i] = NULL;
1853 }
1854
1855 /* nothing to write? */
1856 if (nr_pages == 0) {
1857 kref_put(&wdata->refcount, cifs_writedata_release);
1858 continue;
1859 }
1860
1861 wdata->sync_mode = wbc->sync_mode;
1862 wdata->nr_pages = nr_pages;
1863 wdata->offset = page_offset(wdata->pages[0]);
1864 wdata->marshal_iov = cifs_writepages_marshal_iov;
1865
1866 do {
1867 if (wdata->cfile != NULL)
1868 cifsFileInfo_put(wdata->cfile);
1869 wdata->cfile = find_writable_file(CIFS_I(mapping->host),
1870 false);
1871 if (!wdata->cfile) {
1872 cERROR(1, "No writable handles for inode");
1873 rc = -EBADF;
1874 break;
1875 }
1876 wdata->pid = wdata->cfile->pid;
1877 rc = cifs_async_writev(wdata);
1878 } while (wbc->sync_mode == WB_SYNC_ALL && rc == -EAGAIN);
1879
1880 for (i = 0; i < nr_pages; ++i)
1881 unlock_page(wdata->pages[i]);
1882
1883 /* send failure -- clean up the mess */
1884 if (rc != 0) {
1885 for (i = 0; i < nr_pages; ++i) {
1886 if (rc == -EAGAIN)
1887 redirty_page_for_writepage(wbc,
1888 wdata->pages[i]);
1889 else
1890 SetPageError(wdata->pages[i]);
1891 end_page_writeback(wdata->pages[i]);
1892 page_cache_release(wdata->pages[i]);
1893 }
1894 if (rc != -EAGAIN)
1895 mapping_set_error(mapping, rc);
1896 }
1897 kref_put(&wdata->refcount, cifs_writedata_release);
1898
1899 wbc->nr_to_write -= nr_pages;
1900 if (wbc->nr_to_write <= 0)
1901 done = true;
1902
1903 index = next;
1904 }
1905
1906 if (!scanned && !done) {
1907 /*
1908 * We hit the last page and there is more work to be done: wrap
1909 * back to the start of the file
1910 */
1911 scanned = true;
1912 index = 0;
1913 goto retry;
1914 }
1915
1916 if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
1917 mapping->writeback_index = index;
1918
1919 return rc;
1920 }
1921
1922 static int
1923 cifs_writepage_locked(struct page *page, struct writeback_control *wbc)
1924 {
1925 int rc;
1926 int xid;
1927
1928 xid = GetXid();
1929 /* BB add check for wbc flags */
1930 page_cache_get(page);
1931 if (!PageUptodate(page))
1932 cFYI(1, "ppw - page not up to date");
1933
1934 /*
1935 * Set the "writeback" flag, and clear "dirty" in the radix tree.
1936 *
1937 * A writepage() implementation always needs to do either this,
1938 * or re-dirty the page with "redirty_page_for_writepage()" in
1939 * the case of a failure.
1940 *
1941 * Just unlocking the page will cause the radix tree tag-bits
1942 * to fail to update with the state of the page correctly.
1943 */
1944 set_page_writeback(page);
1945 retry_write:
1946 rc = cifs_partialpagewrite(page, 0, PAGE_CACHE_SIZE);
1947 if (rc == -EAGAIN && wbc->sync_mode == WB_SYNC_ALL)
1948 goto retry_write;
1949 else if (rc == -EAGAIN)
1950 redirty_page_for_writepage(wbc, page);
1951 else if (rc != 0)
1952 SetPageError(page);
1953 else
1954 SetPageUptodate(page);
1955 end_page_writeback(page);
1956 page_cache_release(page);
1957 FreeXid(xid);
1958 return rc;
1959 }
1960
1961 static int cifs_writepage(struct page *page, struct writeback_control *wbc)
1962 {
1963 int rc = cifs_writepage_locked(page, wbc);
1964 unlock_page(page);
1965 return rc;
1966 }
1967
1968 static int cifs_write_end(struct file *file, struct address_space *mapping,
1969 loff_t pos, unsigned len, unsigned copied,
1970 struct page *page, void *fsdata)
1971 {
1972 int rc;
1973 struct inode *inode = mapping->host;
1974 struct cifsFileInfo *cfile = file->private_data;
1975 struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
1976 __u32 pid;
1977
1978 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
1979 pid = cfile->pid;
1980 else
1981 pid = current->tgid;
1982
1983 cFYI(1, "write_end for page %p from pos %lld with %d bytes",
1984 page, pos, copied);
1985
1986 if (PageChecked(page)) {
1987 if (copied == len)
1988 SetPageUptodate(page);
1989 ClearPageChecked(page);
1990 } else if (!PageUptodate(page) && copied == PAGE_CACHE_SIZE)
1991 SetPageUptodate(page);
1992
1993 if (!PageUptodate(page)) {
1994 char *page_data;
1995 unsigned offset = pos & (PAGE_CACHE_SIZE - 1);
1996 int xid;
1997
1998 xid = GetXid();
1999 /* this is probably better than directly calling
2000 partialpage_write since in this function the file handle is
2001 known which we might as well leverage */
2002 /* BB check if anything else missing out of ppw
2003 such as updating last write time */
2004 page_data = kmap(page);
2005 rc = cifs_write(cfile, pid, page_data + offset, copied, &pos);
2006 /* if (rc < 0) should we set writebehind rc? */
2007 kunmap(page);
2008
2009 FreeXid(xid);
2010 } else {
2011 rc = copied;
2012 pos += copied;
2013 set_page_dirty(page);
2014 }
2015
2016 if (rc > 0) {
2017 spin_lock(&inode->i_lock);
2018 if (pos > inode->i_size)
2019 i_size_write(inode, pos);
2020 spin_unlock(&inode->i_lock);
2021 }
2022
2023 unlock_page(page);
2024 page_cache_release(page);
2025
2026 return rc;
2027 }
2028
2029 int cifs_strict_fsync(struct file *file, loff_t start, loff_t end,
2030 int datasync)
2031 {
2032 int xid;
2033 int rc = 0;
2034 struct cifs_tcon *tcon;
2035 struct cifsFileInfo *smbfile = file->private_data;
2036 struct inode *inode = file->f_path.dentry->d_inode;
2037 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
2038
2039 rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
2040 if (rc)
2041 return rc;
2042 mutex_lock(&inode->i_mutex);
2043
2044 xid = GetXid();
2045
2046 cFYI(1, "Sync file - name: %s datasync: 0x%x",
2047 file->f_path.dentry->d_name.name, datasync);
2048
2049 if (!CIFS_I(inode)->clientCanCacheRead) {
2050 rc = cifs_invalidate_mapping(inode);
2051 if (rc) {
2052 cFYI(1, "rc: %d during invalidate phase", rc);
2053 rc = 0; /* don't care about it in fsync */
2054 }
2055 }
2056
2057 tcon = tlink_tcon(smbfile->tlink);
2058 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC))
2059 rc = CIFSSMBFlush(xid, tcon, smbfile->netfid);
2060
2061 FreeXid(xid);
2062 mutex_unlock(&inode->i_mutex);
2063 return rc;
2064 }
2065
2066 int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
2067 {
2068 int xid;
2069 int rc = 0;
2070 struct cifs_tcon *tcon;
2071 struct cifsFileInfo *smbfile = file->private_data;
2072 struct cifs_sb_info *cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2073 struct inode *inode = file->f_mapping->host;
2074
2075 rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
2076 if (rc)
2077 return rc;
2078 mutex_lock(&inode->i_mutex);
2079
2080 xid = GetXid();
2081
2082 cFYI(1, "Sync file - name: %s datasync: 0x%x",
2083 file->f_path.dentry->d_name.name, datasync);
2084
2085 tcon = tlink_tcon(smbfile->tlink);
2086 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOSSYNC))
2087 rc = CIFSSMBFlush(xid, tcon, smbfile->netfid);
2088
2089 FreeXid(xid);
2090 mutex_unlock(&inode->i_mutex);
2091 return rc;
2092 }
2093
2094 /*
2095 * As file closes, flush all cached write data for this inode checking
2096 * for write behind errors.
2097 */
2098 int cifs_flush(struct file *file, fl_owner_t id)
2099 {
2100 struct inode *inode = file->f_path.dentry->d_inode;
2101 int rc = 0;
2102
2103 if (file->f_mode & FMODE_WRITE)
2104 rc = filemap_write_and_wait(inode->i_mapping);
2105
2106 cFYI(1, "Flush inode %p file %p rc %d", inode, file, rc);
2107
2108 return rc;
2109 }
2110
2111 static int
2112 cifs_write_allocate_pages(struct page **pages, unsigned long num_pages)
2113 {
2114 int rc = 0;
2115 unsigned long i;
2116
2117 for (i = 0; i < num_pages; i++) {
2118 pages[i] = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
2119 if (!pages[i]) {
2120 /*
2121 * save number of pages we have already allocated and
2122 * return with ENOMEM error
2123 */
2124 num_pages = i;
2125 rc = -ENOMEM;
2126 break;
2127 }
2128 }
2129
2130 if (rc) {
2131 for (i = 0; i < num_pages; i++)
2132 put_page(pages[i]);
2133 }
2134 return rc;
2135 }
2136
2137 static inline
2138 size_t get_numpages(const size_t wsize, const size_t len, size_t *cur_len)
2139 {
2140 size_t num_pages;
2141 size_t clen;
2142
2143 clen = min_t(const size_t, len, wsize);
2144 num_pages = DIV_ROUND_UP(clen, PAGE_SIZE);
2145
2146 if (cur_len)
2147 *cur_len = clen;
2148
2149 return num_pages;
2150 }
2151
2152 static void
2153 cifs_uncached_marshal_iov(struct kvec *iov, struct cifs_writedata *wdata)
2154 {
2155 int i;
2156 size_t bytes = wdata->bytes;
2157
2158 /* marshal up the pages into iov array */
2159 for (i = 0; i < wdata->nr_pages; i++) {
2160 iov[i + 1].iov_len = min_t(size_t, bytes, PAGE_SIZE);
2161 iov[i + 1].iov_base = kmap(wdata->pages[i]);
2162 bytes -= iov[i + 1].iov_len;
2163 }
2164 }
2165
2166 static void
2167 cifs_uncached_writev_complete(struct work_struct *work)
2168 {
2169 int i;
2170 struct cifs_writedata *wdata = container_of(work,
2171 struct cifs_writedata, work);
2172 struct inode *inode = wdata->cfile->dentry->d_inode;
2173 struct cifsInodeInfo *cifsi = CIFS_I(inode);
2174
2175 spin_lock(&inode->i_lock);
2176 cifs_update_eof(cifsi, wdata->offset, wdata->bytes);
2177 if (cifsi->server_eof > inode->i_size)
2178 i_size_write(inode, cifsi->server_eof);
2179 spin_unlock(&inode->i_lock);
2180
2181 complete(&wdata->done);
2182
2183 if (wdata->result != -EAGAIN) {
2184 for (i = 0; i < wdata->nr_pages; i++)
2185 put_page(wdata->pages[i]);
2186 }
2187
2188 kref_put(&wdata->refcount, cifs_writedata_release);
2189 }
2190
2191 /* attempt to send write to server, retry on any -EAGAIN errors */
2192 static int
2193 cifs_uncached_retry_writev(struct cifs_writedata *wdata)
2194 {
2195 int rc;
2196
2197 do {
2198 if (wdata->cfile->invalidHandle) {
2199 rc = cifs_reopen_file(wdata->cfile, false);
2200 if (rc != 0)
2201 continue;
2202 }
2203 rc = cifs_async_writev(wdata);
2204 } while (rc == -EAGAIN);
2205
2206 return rc;
2207 }
2208
2209 static ssize_t
2210 cifs_iovec_write(struct file *file, const struct iovec *iov,
2211 unsigned long nr_segs, loff_t *poffset)
2212 {
2213 unsigned long nr_pages, i;
2214 size_t copied, len, cur_len;
2215 ssize_t total_written = 0;
2216 loff_t offset;
2217 struct iov_iter it;
2218 struct cifsFileInfo *open_file;
2219 struct cifs_tcon *tcon;
2220 struct cifs_sb_info *cifs_sb;
2221 struct cifs_writedata *wdata, *tmp;
2222 struct list_head wdata_list;
2223 int rc;
2224 pid_t pid;
2225
2226 len = iov_length(iov, nr_segs);
2227 if (!len)
2228 return 0;
2229
2230 rc = generic_write_checks(file, poffset, &len, 0);
2231 if (rc)
2232 return rc;
2233
2234 INIT_LIST_HEAD(&wdata_list);
2235 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2236 open_file = file->private_data;
2237 tcon = tlink_tcon(open_file->tlink);
2238 offset = *poffset;
2239
2240 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2241 pid = open_file->pid;
2242 else
2243 pid = current->tgid;
2244
2245 iov_iter_init(&it, iov, nr_segs, len, 0);
2246 do {
2247 size_t save_len;
2248
2249 nr_pages = get_numpages(cifs_sb->wsize, len, &cur_len);
2250 wdata = cifs_writedata_alloc(nr_pages,
2251 cifs_uncached_writev_complete);
2252 if (!wdata) {
2253 rc = -ENOMEM;
2254 break;
2255 }
2256
2257 rc = cifs_write_allocate_pages(wdata->pages, nr_pages);
2258 if (rc) {
2259 kfree(wdata);
2260 break;
2261 }
2262
2263 save_len = cur_len;
2264 for (i = 0; i < nr_pages; i++) {
2265 copied = min_t(const size_t, cur_len, PAGE_SIZE);
2266 copied = iov_iter_copy_from_user(wdata->pages[i], &it,
2267 0, copied);
2268 cur_len -= copied;
2269 iov_iter_advance(&it, copied);
2270 }
2271 cur_len = save_len - cur_len;
2272
2273 wdata->sync_mode = WB_SYNC_ALL;
2274 wdata->nr_pages = nr_pages;
2275 wdata->offset = (__u64)offset;
2276 wdata->cfile = cifsFileInfo_get(open_file);
2277 wdata->pid = pid;
2278 wdata->bytes = cur_len;
2279 wdata->marshal_iov = cifs_uncached_marshal_iov;
2280 rc = cifs_uncached_retry_writev(wdata);
2281 if (rc) {
2282 kref_put(&wdata->refcount, cifs_writedata_release);
2283 break;
2284 }
2285
2286 list_add_tail(&wdata->list, &wdata_list);
2287 offset += cur_len;
2288 len -= cur_len;
2289 } while (len > 0);
2290
2291 /*
2292 * If at least one write was successfully sent, then discard any rc
2293 * value from the later writes. If the other write succeeds, then
2294 * we'll end up returning whatever was written. If it fails, then
2295 * we'll get a new rc value from that.
2296 */
2297 if (!list_empty(&wdata_list))
2298 rc = 0;
2299
2300 /*
2301 * Wait for and collect replies for any successful sends in order of
2302 * increasing offset. Once an error is hit or we get a fatal signal
2303 * while waiting, then return without waiting for any more replies.
2304 */
2305 restart_loop:
2306 list_for_each_entry_safe(wdata, tmp, &wdata_list, list) {
2307 if (!rc) {
2308 /* FIXME: freezable too? */
2309 rc = wait_for_completion_killable(&wdata->done);
2310 if (rc)
2311 rc = -EINTR;
2312 else if (wdata->result)
2313 rc = wdata->result;
2314 else
2315 total_written += wdata->bytes;
2316
2317 /* resend call if it's a retryable error */
2318 if (rc == -EAGAIN) {
2319 rc = cifs_uncached_retry_writev(wdata);
2320 goto restart_loop;
2321 }
2322 }
2323 list_del_init(&wdata->list);
2324 kref_put(&wdata->refcount, cifs_writedata_release);
2325 }
2326
2327 if (total_written > 0)
2328 *poffset += total_written;
2329
2330 cifs_stats_bytes_written(tcon, total_written);
2331 return total_written ? total_written : (ssize_t)rc;
2332 }
2333
2334 ssize_t cifs_user_writev(struct kiocb *iocb, const struct iovec *iov,
2335 unsigned long nr_segs, loff_t pos)
2336 {
2337 ssize_t written;
2338 struct inode *inode;
2339
2340 inode = iocb->ki_filp->f_path.dentry->d_inode;
2341
2342 /*
2343 * BB - optimize the way when signing is disabled. We can drop this
2344 * extra memory-to-memory copying and use iovec buffers for constructing
2345 * write request.
2346 */
2347
2348 written = cifs_iovec_write(iocb->ki_filp, iov, nr_segs, &pos);
2349 if (written > 0) {
2350 CIFS_I(inode)->invalid_mapping = true;
2351 iocb->ki_pos = pos;
2352 }
2353
2354 return written;
2355 }
2356
2357 ssize_t cifs_strict_writev(struct kiocb *iocb, const struct iovec *iov,
2358 unsigned long nr_segs, loff_t pos)
2359 {
2360 struct inode *inode;
2361
2362 inode = iocb->ki_filp->f_path.dentry->d_inode;
2363
2364 if (CIFS_I(inode)->clientCanCacheAll)
2365 return generic_file_aio_write(iocb, iov, nr_segs, pos);
2366
2367 /*
2368 * In strict cache mode we need to write the data to the server exactly
2369 * from the pos to pos+len-1 rather than flush all affected pages
2370 * because it may cause a error with mandatory locks on these pages but
2371 * not on the region from pos to ppos+len-1.
2372 */
2373
2374 return cifs_user_writev(iocb, iov, nr_segs, pos);
2375 }
2376
2377 static struct cifs_readdata *
2378 cifs_readdata_alloc(unsigned int nr_vecs, work_func_t complete)
2379 {
2380 struct cifs_readdata *rdata;
2381
2382 rdata = kzalloc(sizeof(*rdata) +
2383 sizeof(struct kvec) * nr_vecs, GFP_KERNEL);
2384 if (rdata != NULL) {
2385 kref_init(&rdata->refcount);
2386 INIT_LIST_HEAD(&rdata->list);
2387 init_completion(&rdata->done);
2388 INIT_WORK(&rdata->work, complete);
2389 INIT_LIST_HEAD(&rdata->pages);
2390 }
2391 return rdata;
2392 }
2393
2394 void
2395 cifs_readdata_release(struct kref *refcount)
2396 {
2397 struct cifs_readdata *rdata = container_of(refcount,
2398 struct cifs_readdata, refcount);
2399
2400 if (rdata->cfile)
2401 cifsFileInfo_put(rdata->cfile);
2402
2403 kfree(rdata);
2404 }
2405
2406 static int
2407 cifs_read_allocate_pages(struct list_head *list, unsigned int npages)
2408 {
2409 int rc = 0;
2410 struct page *page, *tpage;
2411 unsigned int i;
2412
2413 for (i = 0; i < npages; i++) {
2414 page = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
2415 if (!page) {
2416 rc = -ENOMEM;
2417 break;
2418 }
2419 list_add(&page->lru, list);
2420 }
2421
2422 if (rc) {
2423 list_for_each_entry_safe(page, tpage, list, lru) {
2424 list_del(&page->lru);
2425 put_page(page);
2426 }
2427 }
2428 return rc;
2429 }
2430
2431 static void
2432 cifs_uncached_readdata_release(struct kref *refcount)
2433 {
2434 struct page *page, *tpage;
2435 struct cifs_readdata *rdata = container_of(refcount,
2436 struct cifs_readdata, refcount);
2437
2438 list_for_each_entry_safe(page, tpage, &rdata->pages, lru) {
2439 list_del(&page->lru);
2440 put_page(page);
2441 }
2442 cifs_readdata_release(refcount);
2443 }
2444
2445 static int
2446 cifs_retry_async_readv(struct cifs_readdata *rdata)
2447 {
2448 int rc;
2449
2450 do {
2451 if (rdata->cfile->invalidHandle) {
2452 rc = cifs_reopen_file(rdata->cfile, true);
2453 if (rc != 0)
2454 continue;
2455 }
2456 rc = cifs_async_readv(rdata);
2457 } while (rc == -EAGAIN);
2458
2459 return rc;
2460 }
2461
2462 /**
2463 * cifs_readdata_to_iov - copy data from pages in response to an iovec
2464 * @rdata: the readdata response with list of pages holding data
2465 * @iov: vector in which we should copy the data
2466 * @nr_segs: number of segments in vector
2467 * @offset: offset into file of the first iovec
2468 * @copied: used to return the amount of data copied to the iov
2469 *
2470 * This function copies data from a list of pages in a readdata response into
2471 * an array of iovecs. It will first calculate where the data should go
2472 * based on the info in the readdata and then copy the data into that spot.
2473 */
2474 static ssize_t
2475 cifs_readdata_to_iov(struct cifs_readdata *rdata, const struct iovec *iov,
2476 unsigned long nr_segs, loff_t offset, ssize_t *copied)
2477 {
2478 int rc = 0;
2479 struct iov_iter ii;
2480 size_t pos = rdata->offset - offset;
2481 struct page *page, *tpage;
2482 ssize_t remaining = rdata->bytes;
2483 unsigned char *pdata;
2484
2485 /* set up iov_iter and advance to the correct offset */
2486 iov_iter_init(&ii, iov, nr_segs, iov_length(iov, nr_segs), 0);
2487 iov_iter_advance(&ii, pos);
2488
2489 *copied = 0;
2490 list_for_each_entry_safe(page, tpage, &rdata->pages, lru) {
2491 ssize_t copy;
2492
2493 /* copy a whole page or whatever's left */
2494 copy = min_t(ssize_t, remaining, PAGE_SIZE);
2495
2496 /* ...but limit it to whatever space is left in the iov */
2497 copy = min_t(ssize_t, copy, iov_iter_count(&ii));
2498
2499 /* go while there's data to be copied and no errors */
2500 if (copy && !rc) {
2501 pdata = kmap(page);
2502 rc = memcpy_toiovecend(ii.iov, pdata, ii.iov_offset,
2503 (int)copy);
2504 kunmap(page);
2505 if (!rc) {
2506 *copied += copy;
2507 remaining -= copy;
2508 iov_iter_advance(&ii, copy);
2509 }
2510 }
2511
2512 list_del(&page->lru);
2513 put_page(page);
2514 }
2515
2516 return rc;
2517 }
2518
2519 static void
2520 cifs_uncached_readv_complete(struct work_struct *work)
2521 {
2522 struct cifs_readdata *rdata = container_of(work,
2523 struct cifs_readdata, work);
2524
2525 /* if the result is non-zero then the pages weren't kmapped */
2526 if (rdata->result == 0) {
2527 struct page *page;
2528
2529 list_for_each_entry(page, &rdata->pages, lru)
2530 kunmap(page);
2531 }
2532
2533 complete(&rdata->done);
2534 kref_put(&rdata->refcount, cifs_uncached_readdata_release);
2535 }
2536
2537 static int
2538 cifs_uncached_read_marshal_iov(struct cifs_readdata *rdata,
2539 unsigned int remaining)
2540 {
2541 int len = 0;
2542 struct page *page, *tpage;
2543
2544 rdata->nr_iov = 1;
2545 list_for_each_entry_safe(page, tpage, &rdata->pages, lru) {
2546 if (remaining >= PAGE_SIZE) {
2547 /* enough data to fill the page */
2548 rdata->iov[rdata->nr_iov].iov_base = kmap(page);
2549 rdata->iov[rdata->nr_iov].iov_len = PAGE_SIZE;
2550 cFYI(1, "%u: idx=%lu iov_base=%p iov_len=%zu",
2551 rdata->nr_iov, page->index,
2552 rdata->iov[rdata->nr_iov].iov_base,
2553 rdata->iov[rdata->nr_iov].iov_len);
2554 ++rdata->nr_iov;
2555 len += PAGE_SIZE;
2556 remaining -= PAGE_SIZE;
2557 } else if (remaining > 0) {
2558 /* enough for partial page, fill and zero the rest */
2559 rdata->iov[rdata->nr_iov].iov_base = kmap(page);
2560 rdata->iov[rdata->nr_iov].iov_len = remaining;
2561 cFYI(1, "%u: idx=%lu iov_base=%p iov_len=%zu",
2562 rdata->nr_iov, page->index,
2563 rdata->iov[rdata->nr_iov].iov_base,
2564 rdata->iov[rdata->nr_iov].iov_len);
2565 memset(rdata->iov[rdata->nr_iov].iov_base + remaining,
2566 '\0', PAGE_SIZE - remaining);
2567 ++rdata->nr_iov;
2568 len += remaining;
2569 remaining = 0;
2570 } else {
2571 /* no need to hold page hostage */
2572 list_del(&page->lru);
2573 put_page(page);
2574 }
2575 }
2576
2577 return len;
2578 }
2579
2580 static ssize_t
2581 cifs_iovec_read(struct file *file, const struct iovec *iov,
2582 unsigned long nr_segs, loff_t *poffset)
2583 {
2584 ssize_t rc;
2585 size_t len, cur_len;
2586 ssize_t total_read = 0;
2587 loff_t offset = *poffset;
2588 unsigned int npages;
2589 struct cifs_sb_info *cifs_sb;
2590 struct cifs_tcon *tcon;
2591 struct cifsFileInfo *open_file;
2592 struct cifs_readdata *rdata, *tmp;
2593 struct list_head rdata_list;
2594 pid_t pid;
2595
2596 if (!nr_segs)
2597 return 0;
2598
2599 len = iov_length(iov, nr_segs);
2600 if (!len)
2601 return 0;
2602
2603 INIT_LIST_HEAD(&rdata_list);
2604 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2605 open_file = file->private_data;
2606 tcon = tlink_tcon(open_file->tlink);
2607
2608 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2609 pid = open_file->pid;
2610 else
2611 pid = current->tgid;
2612
2613 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
2614 cFYI(1, "attempting read on write only file instance");
2615
2616 do {
2617 cur_len = min_t(const size_t, len - total_read, cifs_sb->rsize);
2618 npages = DIV_ROUND_UP(cur_len, PAGE_SIZE);
2619
2620 /* allocate a readdata struct */
2621 rdata = cifs_readdata_alloc(npages,
2622 cifs_uncached_readv_complete);
2623 if (!rdata) {
2624 rc = -ENOMEM;
2625 goto error;
2626 }
2627
2628 rc = cifs_read_allocate_pages(&rdata->pages, npages);
2629 if (rc)
2630 goto error;
2631
2632 rdata->cfile = cifsFileInfo_get(open_file);
2633 rdata->offset = offset;
2634 rdata->bytes = cur_len;
2635 rdata->pid = pid;
2636 rdata->marshal_iov = cifs_uncached_read_marshal_iov;
2637
2638 rc = cifs_retry_async_readv(rdata);
2639 error:
2640 if (rc) {
2641 kref_put(&rdata->refcount,
2642 cifs_uncached_readdata_release);
2643 break;
2644 }
2645
2646 list_add_tail(&rdata->list, &rdata_list);
2647 offset += cur_len;
2648 len -= cur_len;
2649 } while (len > 0);
2650
2651 /* if at least one read request send succeeded, then reset rc */
2652 if (!list_empty(&rdata_list))
2653 rc = 0;
2654
2655 /* the loop below should proceed in the order of increasing offsets */
2656 restart_loop:
2657 list_for_each_entry_safe(rdata, tmp, &rdata_list, list) {
2658 if (!rc) {
2659 ssize_t copied;
2660
2661 /* FIXME: freezable sleep too? */
2662 rc = wait_for_completion_killable(&rdata->done);
2663 if (rc)
2664 rc = -EINTR;
2665 else if (rdata->result)
2666 rc = rdata->result;
2667 else {
2668 rc = cifs_readdata_to_iov(rdata, iov,
2669 nr_segs, *poffset,
2670 &copied);
2671 total_read += copied;
2672 }
2673
2674 /* resend call if it's a retryable error */
2675 if (rc == -EAGAIN) {
2676 rc = cifs_retry_async_readv(rdata);
2677 goto restart_loop;
2678 }
2679 }
2680 list_del_init(&rdata->list);
2681 kref_put(&rdata->refcount, cifs_uncached_readdata_release);
2682 }
2683
2684 cifs_stats_bytes_read(tcon, total_read);
2685 *poffset += total_read;
2686
2687 return total_read ? total_read : rc;
2688 }
2689
2690 ssize_t cifs_user_readv(struct kiocb *iocb, const struct iovec *iov,
2691 unsigned long nr_segs, loff_t pos)
2692 {
2693 ssize_t read;
2694
2695 read = cifs_iovec_read(iocb->ki_filp, iov, nr_segs, &pos);
2696 if (read > 0)
2697 iocb->ki_pos = pos;
2698
2699 return read;
2700 }
2701
2702 ssize_t cifs_strict_readv(struct kiocb *iocb, const struct iovec *iov,
2703 unsigned long nr_segs, loff_t pos)
2704 {
2705 struct inode *inode;
2706
2707 inode = iocb->ki_filp->f_path.dentry->d_inode;
2708
2709 if (CIFS_I(inode)->clientCanCacheRead)
2710 return generic_file_aio_read(iocb, iov, nr_segs, pos);
2711
2712 /*
2713 * In strict cache mode we need to read from the server all the time
2714 * if we don't have level II oplock because the server can delay mtime
2715 * change - so we can't make a decision about inode invalidating.
2716 * And we can also fail with pagereading if there are mandatory locks
2717 * on pages affected by this read but not on the region from pos to
2718 * pos+len-1.
2719 */
2720
2721 return cifs_user_readv(iocb, iov, nr_segs, pos);
2722 }
2723
2724 static ssize_t cifs_read(struct file *file, char *read_data, size_t read_size,
2725 loff_t *poffset)
2726 {
2727 int rc = -EACCES;
2728 unsigned int bytes_read = 0;
2729 unsigned int total_read;
2730 unsigned int current_read_size;
2731 unsigned int rsize;
2732 struct cifs_sb_info *cifs_sb;
2733 struct cifs_tcon *pTcon;
2734 int xid;
2735 char *current_offset;
2736 struct cifsFileInfo *open_file;
2737 struct cifs_io_parms io_parms;
2738 int buf_type = CIFS_NO_BUFFER;
2739 __u32 pid;
2740
2741 xid = GetXid();
2742 cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2743
2744 /* FIXME: set up handlers for larger reads and/or convert to async */
2745 rsize = min_t(unsigned int, cifs_sb->rsize, CIFSMaxBufSize);
2746
2747 if (file->private_data == NULL) {
2748 rc = -EBADF;
2749 FreeXid(xid);
2750 return rc;
2751 }
2752 open_file = file->private_data;
2753 pTcon = tlink_tcon(open_file->tlink);
2754
2755 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2756 pid = open_file->pid;
2757 else
2758 pid = current->tgid;
2759
2760 if ((file->f_flags & O_ACCMODE) == O_WRONLY)
2761 cFYI(1, "attempting read on write only file instance");
2762
2763 for (total_read = 0, current_offset = read_data;
2764 read_size > total_read;
2765 total_read += bytes_read, current_offset += bytes_read) {
2766 current_read_size = min_t(uint, read_size - total_read, rsize);
2767
2768 /* For windows me and 9x we do not want to request more
2769 than it negotiated since it will refuse the read then */
2770 if ((pTcon->ses) &&
2771 !(pTcon->ses->capabilities & CAP_LARGE_FILES)) {
2772 current_read_size = min_t(uint, current_read_size,
2773 CIFSMaxBufSize);
2774 }
2775 rc = -EAGAIN;
2776 while (rc == -EAGAIN) {
2777 if (open_file->invalidHandle) {
2778 rc = cifs_reopen_file(open_file, true);
2779 if (rc != 0)
2780 break;
2781 }
2782 io_parms.netfid = open_file->netfid;
2783 io_parms.pid = pid;
2784 io_parms.tcon = pTcon;
2785 io_parms.offset = *poffset;
2786 io_parms.length = current_read_size;
2787 rc = CIFSSMBRead(xid, &io_parms, &bytes_read,
2788 &current_offset, &buf_type);
2789 }
2790 if (rc || (bytes_read == 0)) {
2791 if (total_read) {
2792 break;
2793 } else {
2794 FreeXid(xid);
2795 return rc;
2796 }
2797 } else {
2798 cifs_stats_bytes_read(pTcon, total_read);
2799 *poffset += bytes_read;
2800 }
2801 }
2802 FreeXid(xid);
2803 return total_read;
2804 }
2805
2806 /*
2807 * If the page is mmap'ed into a process' page tables, then we need to make
2808 * sure that it doesn't change while being written back.
2809 */
2810 static int
2811 cifs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
2812 {
2813 struct page *page = vmf->page;
2814
2815 lock_page(page);
2816 return VM_FAULT_LOCKED;
2817 }
2818
2819 static struct vm_operations_struct cifs_file_vm_ops = {
2820 .fault = filemap_fault,
2821 .page_mkwrite = cifs_page_mkwrite,
2822 };
2823
2824 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
2825 {
2826 int rc, xid;
2827 struct inode *inode = file->f_path.dentry->d_inode;
2828
2829 xid = GetXid();
2830
2831 if (!CIFS_I(inode)->clientCanCacheRead) {
2832 rc = cifs_invalidate_mapping(inode);
2833 if (rc)
2834 return rc;
2835 }
2836
2837 rc = generic_file_mmap(file, vma);
2838 if (rc == 0)
2839 vma->vm_ops = &cifs_file_vm_ops;
2840 FreeXid(xid);
2841 return rc;
2842 }
2843
2844 int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
2845 {
2846 int rc, xid;
2847
2848 xid = GetXid();
2849 rc = cifs_revalidate_file(file);
2850 if (rc) {
2851 cFYI(1, "Validation prior to mmap failed, error=%d", rc);
2852 FreeXid(xid);
2853 return rc;
2854 }
2855 rc = generic_file_mmap(file, vma);
2856 if (rc == 0)
2857 vma->vm_ops = &cifs_file_vm_ops;
2858 FreeXid(xid);
2859 return rc;
2860 }
2861
2862 static void
2863 cifs_readv_complete(struct work_struct *work)
2864 {
2865 struct cifs_readdata *rdata = container_of(work,
2866 struct cifs_readdata, work);
2867 struct page *page, *tpage;
2868
2869 list_for_each_entry_safe(page, tpage, &rdata->pages, lru) {
2870 list_del(&page->lru);
2871 lru_cache_add_file(page);
2872
2873 if (rdata->result == 0) {
2874 kunmap(page);
2875 flush_dcache_page(page);
2876 SetPageUptodate(page);
2877 }
2878
2879 unlock_page(page);
2880
2881 if (rdata->result == 0)
2882 cifs_readpage_to_fscache(rdata->mapping->host, page);
2883
2884 page_cache_release(page);
2885 }
2886 kref_put(&rdata->refcount, cifs_readdata_release);
2887 }
2888
2889 static int
2890 cifs_readpages_marshal_iov(struct cifs_readdata *rdata, unsigned int remaining)
2891 {
2892 int len = 0;
2893 struct page *page, *tpage;
2894 u64 eof;
2895 pgoff_t eof_index;
2896
2897 /* determine the eof that the server (probably) has */
2898 eof = CIFS_I(rdata->mapping->host)->server_eof;
2899 eof_index = eof ? (eof - 1) >> PAGE_CACHE_SHIFT : 0;
2900 cFYI(1, "eof=%llu eof_index=%lu", eof, eof_index);
2901
2902 rdata->nr_iov = 1;
2903 list_for_each_entry_safe(page, tpage, &rdata->pages, lru) {
2904 if (remaining >= PAGE_CACHE_SIZE) {
2905 /* enough data to fill the page */
2906 rdata->iov[rdata->nr_iov].iov_base = kmap(page);
2907 rdata->iov[rdata->nr_iov].iov_len = PAGE_CACHE_SIZE;
2908 cFYI(1, "%u: idx=%lu iov_base=%p iov_len=%zu",
2909 rdata->nr_iov, page->index,
2910 rdata->iov[rdata->nr_iov].iov_base,
2911 rdata->iov[rdata->nr_iov].iov_len);
2912 ++rdata->nr_iov;
2913 len += PAGE_CACHE_SIZE;
2914 remaining -= PAGE_CACHE_SIZE;
2915 } else if (remaining > 0) {
2916 /* enough for partial page, fill and zero the rest */
2917 rdata->iov[rdata->nr_iov].iov_base = kmap(page);
2918 rdata->iov[rdata->nr_iov].iov_len = remaining;
2919 cFYI(1, "%u: idx=%lu iov_base=%p iov_len=%zu",
2920 rdata->nr_iov, page->index,
2921 rdata->iov[rdata->nr_iov].iov_base,
2922 rdata->iov[rdata->nr_iov].iov_len);
2923 memset(rdata->iov[rdata->nr_iov].iov_base + remaining,
2924 '\0', PAGE_CACHE_SIZE - remaining);
2925 ++rdata->nr_iov;
2926 len += remaining;
2927 remaining = 0;
2928 } else if (page->index > eof_index) {
2929 /*
2930 * The VFS will not try to do readahead past the
2931 * i_size, but it's possible that we have outstanding
2932 * writes with gaps in the middle and the i_size hasn't
2933 * caught up yet. Populate those with zeroed out pages
2934 * to prevent the VFS from repeatedly attempting to
2935 * fill them until the writes are flushed.
2936 */
2937 zero_user(page, 0, PAGE_CACHE_SIZE);
2938 list_del(&page->lru);
2939 lru_cache_add_file(page);
2940 flush_dcache_page(page);
2941 SetPageUptodate(page);
2942 unlock_page(page);
2943 page_cache_release(page);
2944 } else {
2945 /* no need to hold page hostage */
2946 list_del(&page->lru);
2947 lru_cache_add_file(page);
2948 unlock_page(page);
2949 page_cache_release(page);
2950 }
2951 }
2952
2953 return len;
2954 }
2955
2956 static int cifs_readpages(struct file *file, struct address_space *mapping,
2957 struct list_head *page_list, unsigned num_pages)
2958 {
2959 int rc;
2960 struct list_head tmplist;
2961 struct cifsFileInfo *open_file = file->private_data;
2962 struct cifs_sb_info *cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
2963 unsigned int rsize = cifs_sb->rsize;
2964 pid_t pid;
2965
2966 /*
2967 * Give up immediately if rsize is too small to read an entire page.
2968 * The VFS will fall back to readpage. We should never reach this
2969 * point however since we set ra_pages to 0 when the rsize is smaller
2970 * than a cache page.
2971 */
2972 if (unlikely(rsize < PAGE_CACHE_SIZE))
2973 return 0;
2974
2975 /*
2976 * Reads as many pages as possible from fscache. Returns -ENOBUFS
2977 * immediately if the cookie is negative
2978 */
2979 rc = cifs_readpages_from_fscache(mapping->host, mapping, page_list,
2980 &num_pages);
2981 if (rc == 0)
2982 return rc;
2983
2984 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RWPIDFORWARD)
2985 pid = open_file->pid;
2986 else
2987 pid = current->tgid;
2988
2989 rc = 0;
2990 INIT_LIST_HEAD(&tmplist);
2991
2992 cFYI(1, "%s: file=%p mapping=%p num_pages=%u", __func__, file,
2993 mapping, num_pages);
2994
2995 /*
2996 * Start with the page at end of list and move it to private
2997 * list. Do the same with any following pages until we hit
2998 * the rsize limit, hit an index discontinuity, or run out of
2999 * pages. Issue the async read and then start the loop again
3000 * until the list is empty.
3001 *
3002 * Note that list order is important. The page_list is in
3003 * the order of declining indexes. When we put the pages in
3004 * the rdata->pages, then we want them in increasing order.
3005 */
3006 while (!list_empty(page_list)) {
3007 unsigned int bytes = PAGE_CACHE_SIZE;
3008 unsigned int expected_index;
3009 unsigned int nr_pages = 1;
3010 loff_t offset;
3011 struct page *page, *tpage;
3012 struct cifs_readdata *rdata;
3013
3014 page = list_entry(page_list->prev, struct page, lru);
3015
3016 /*
3017 * Lock the page and put it in the cache. Since no one else
3018 * should have access to this page, we're safe to simply set
3019 * PG_locked without checking it first.
3020 */
3021 __set_page_locked(page);
3022 rc = add_to_page_cache_locked(page, mapping,
3023 page->index, GFP_KERNEL);
3024
3025 /* give up if we can't stick it in the cache */
3026 if (rc) {
3027 __clear_page_locked(page);
3028 break;
3029 }
3030
3031 /* move first page to the tmplist */
3032 offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
3033 list_move_tail(&page->lru, &tmplist);
3034
3035 /* now try and add more pages onto the request */
3036 expected_index = page->index + 1;
3037 list_for_each_entry_safe_reverse(page, tpage, page_list, lru) {
3038 /* discontinuity ? */
3039 if (page->index != expected_index)
3040 break;
3041
3042 /* would this page push the read over the rsize? */
3043 if (bytes + PAGE_CACHE_SIZE > rsize)
3044 break;
3045
3046 __set_page_locked(page);
3047 if (add_to_page_cache_locked(page, mapping,
3048 page->index, GFP_KERNEL)) {
3049 __clear_page_locked(page);
3050 break;
3051 }
3052 list_move_tail(&page->lru, &tmplist);
3053 bytes += PAGE_CACHE_SIZE;
3054 expected_index++;
3055 nr_pages++;
3056 }
3057
3058 rdata = cifs_readdata_alloc(nr_pages, cifs_readv_complete);
3059 if (!rdata) {
3060 /* best to give up if we're out of mem */
3061 list_for_each_entry_safe(page, tpage, &tmplist, lru) {
3062 list_del(&page->lru);
3063 lru_cache_add_file(page);
3064 unlock_page(page);
3065 page_cache_release(page);
3066 }
3067 rc = -ENOMEM;
3068 break;
3069 }
3070
3071 spin_lock(&cifs_file_list_lock);
3072 spin_unlock(&cifs_file_list_lock);
3073 rdata->cfile = cifsFileInfo_get(open_file);
3074 rdata->mapping = mapping;
3075 rdata->offset = offset;
3076 rdata->bytes = bytes;
3077 rdata->pid = pid;
3078 rdata->marshal_iov = cifs_readpages_marshal_iov;
3079 list_splice_init(&tmplist, &rdata->pages);
3080
3081 rc = cifs_retry_async_readv(rdata);
3082 if (rc != 0) {
3083 list_for_each_entry_safe(page, tpage, &rdata->pages,
3084 lru) {
3085 list_del(&page->lru);
3086 lru_cache_add_file(page);
3087 unlock_page(page);
3088 page_cache_release(page);
3089 }
3090 kref_put(&rdata->refcount, cifs_readdata_release);
3091 break;
3092 }
3093
3094 kref_put(&rdata->refcount, cifs_readdata_release);
3095 }
3096
3097 return rc;
3098 }
3099
3100 static int cifs_readpage_worker(struct file *file, struct page *page,
3101 loff_t *poffset)
3102 {
3103 char *read_data;
3104 int rc;
3105
3106 /* Is the page cached? */
3107 rc = cifs_readpage_from_fscache(file->f_path.dentry->d_inode, page);
3108 if (rc == 0)
3109 goto read_complete;
3110
3111 page_cache_get(page);
3112 read_data = kmap(page);
3113 /* for reads over a certain size could initiate async read ahead */
3114
3115 rc = cifs_read(file, read_data, PAGE_CACHE_SIZE, poffset);
3116
3117 if (rc < 0)
3118 goto io_error;
3119 else
3120 cFYI(1, "Bytes read %d", rc);
3121
3122 file->f_path.dentry->d_inode->i_atime =
3123 current_fs_time(file->f_path.dentry->d_inode->i_sb);
3124
3125 if (PAGE_CACHE_SIZE > rc)
3126 memset(read_data + rc, 0, PAGE_CACHE_SIZE - rc);
3127
3128 flush_dcache_page(page);
3129 SetPageUptodate(page);
3130
3131 /* send this page to the cache */
3132 cifs_readpage_to_fscache(file->f_path.dentry->d_inode, page);
3133
3134 rc = 0;
3135
3136 io_error:
3137 kunmap(page);
3138 page_cache_release(page);
3139
3140 read_complete:
3141 return rc;
3142 }
3143
3144 static int cifs_readpage(struct file *file, struct page *page)
3145 {
3146 loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
3147 int rc = -EACCES;
3148 int xid;
3149
3150 xid = GetXid();
3151
3152 if (file->private_data == NULL) {
3153 rc = -EBADF;
3154 FreeXid(xid);
3155 return rc;
3156 }
3157
3158 cFYI(1, "readpage %p at offset %d 0x%x\n",
3159 page, (int)offset, (int)offset);
3160
3161 rc = cifs_readpage_worker(file, page, &offset);
3162
3163 unlock_page(page);
3164
3165 FreeXid(xid);
3166 return rc;
3167 }
3168
3169 static int is_inode_writable(struct cifsInodeInfo *cifs_inode)
3170 {
3171 struct cifsFileInfo *open_file;
3172
3173 spin_lock(&cifs_file_list_lock);
3174 list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
3175 if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
3176 spin_unlock(&cifs_file_list_lock);
3177 return 1;
3178 }
3179 }
3180 spin_unlock(&cifs_file_list_lock);
3181 return 0;
3182 }
3183
3184 /* We do not want to update the file size from server for inodes
3185 open for write - to avoid races with writepage extending
3186 the file - in the future we could consider allowing
3187 refreshing the inode only on increases in the file size
3188 but this is tricky to do without racing with writebehind
3189 page caching in the current Linux kernel design */
3190 bool is_size_safe_to_change(struct cifsInodeInfo *cifsInode, __u64 end_of_file)
3191 {
3192 if (!cifsInode)
3193 return true;
3194
3195 if (is_inode_writable(cifsInode)) {
3196 /* This inode is open for write at least once */
3197 struct cifs_sb_info *cifs_sb;
3198
3199 cifs_sb = CIFS_SB(cifsInode->vfs_inode.i_sb);
3200 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DIRECT_IO) {
3201 /* since no page cache to corrupt on directio
3202 we can change size safely */
3203 return true;
3204 }
3205
3206 if (i_size_read(&cifsInode->vfs_inode) < end_of_file)
3207 return true;
3208
3209 return false;
3210 } else
3211 return true;
3212 }
3213
3214 static int cifs_write_begin(struct file *file, struct address_space *mapping,
3215 loff_t pos, unsigned len, unsigned flags,
3216 struct page **pagep, void **fsdata)
3217 {
3218 pgoff_t index = pos >> PAGE_CACHE_SHIFT;
3219 loff_t offset = pos & (PAGE_CACHE_SIZE - 1);
3220 loff_t page_start = pos & PAGE_MASK;
3221 loff_t i_size;
3222 struct page *page;
3223 int rc = 0;
3224
3225 cFYI(1, "write_begin from %lld len %d", (long long)pos, len);
3226
3227 page = grab_cache_page_write_begin(mapping, index, flags);
3228 if (!page) {
3229 rc = -ENOMEM;
3230 goto out;
3231 }
3232
3233 if (PageUptodate(page))
3234 goto out;
3235
3236 /*
3237 * If we write a full page it will be up to date, no need to read from
3238 * the server. If the write is short, we'll end up doing a sync write
3239 * instead.
3240 */
3241 if (len == PAGE_CACHE_SIZE)
3242 goto out;
3243
3244 /*
3245 * optimize away the read when we have an oplock, and we're not
3246 * expecting to use any of the data we'd be reading in. That
3247 * is, when the page lies beyond the EOF, or straddles the EOF
3248 * and the write will cover all of the existing data.
3249 */
3250 if (CIFS_I(mapping->host)->clientCanCacheRead) {
3251 i_size = i_size_read(mapping->host);
3252 if (page_start >= i_size ||
3253 (offset == 0 && (pos + len) >= i_size)) {
3254 zero_user_segments(page, 0, offset,
3255 offset + len,
3256 PAGE_CACHE_SIZE);
3257 /*
3258 * PageChecked means that the parts of the page
3259 * to which we're not writing are considered up
3260 * to date. Once the data is copied to the
3261 * page, it can be set uptodate.
3262 */
3263 SetPageChecked(page);
3264 goto out;
3265 }
3266 }
3267
3268 if ((file->f_flags & O_ACCMODE) != O_WRONLY) {
3269 /*
3270 * might as well read a page, it is fast enough. If we get
3271 * an error, we don't need to return it. cifs_write_end will
3272 * do a sync write instead since PG_uptodate isn't set.
3273 */
3274 cifs_readpage_worker(file, page, &page_start);
3275 } else {
3276 /* we could try using another file handle if there is one -
3277 but how would we lock it to prevent close of that handle
3278 racing with this read? In any case
3279 this will be written out by write_end so is fine */
3280 }
3281 out:
3282 *pagep = page;
3283 return rc;
3284 }
3285
3286 static int cifs_release_page(struct page *page, gfp_t gfp)
3287 {
3288 if (PagePrivate(page))
3289 return 0;
3290
3291 return cifs_fscache_release_page(page, gfp);
3292 }
3293
3294 static void cifs_invalidate_page(struct page *page, unsigned long offset)
3295 {
3296 struct cifsInodeInfo *cifsi = CIFS_I(page->mapping->host);
3297
3298 if (offset == 0)
3299 cifs_fscache_invalidate_page(page, &cifsi->vfs_inode);
3300 }
3301
3302 static int cifs_launder_page(struct page *page)
3303 {
3304 int rc = 0;
3305 loff_t range_start = page_offset(page);
3306 loff_t range_end = range_start + (loff_t)(PAGE_CACHE_SIZE - 1);
3307 struct writeback_control wbc = {
3308 .sync_mode = WB_SYNC_ALL,
3309 .nr_to_write = 0,
3310 .range_start = range_start,
3311 .range_end = range_end,
3312 };
3313
3314 cFYI(1, "Launder page: %p", page);
3315
3316 if (clear_page_dirty_for_io(page))
3317 rc = cifs_writepage_locked(page, &wbc);
3318
3319 cifs_fscache_invalidate_page(page, page->mapping->host);
3320 return rc;
3321 }
3322
3323 void cifs_oplock_break(struct work_struct *work)
3324 {
3325 struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
3326 oplock_break);
3327 struct inode *inode = cfile->dentry->d_inode;
3328 struct cifsInodeInfo *cinode = CIFS_I(inode);
3329 int rc = 0;
3330
3331 if (inode && S_ISREG(inode->i_mode)) {
3332 if (cinode->clientCanCacheRead)
3333 break_lease(inode, O_RDONLY);
3334 else
3335 break_lease(inode, O_WRONLY);
3336 rc = filemap_fdatawrite(inode->i_mapping);
3337 if (cinode->clientCanCacheRead == 0) {
3338 rc = filemap_fdatawait(inode->i_mapping);
3339 mapping_set_error(inode->i_mapping, rc);
3340 invalidate_remote_inode(inode);
3341 }
3342 cFYI(1, "Oplock flush inode %p rc %d", inode, rc);
3343 }
3344
3345 rc = cifs_push_locks(cfile);
3346 if (rc)
3347 cERROR(1, "Push locks rc = %d", rc);
3348
3349 /*
3350 * releasing stale oplock after recent reconnect of smb session using
3351 * a now incorrect file handle is not a data integrity issue but do
3352 * not bother sending an oplock release if session to server still is
3353 * disconnected since oplock already released by the server
3354 */
3355 if (!cfile->oplock_break_cancelled) {
3356 rc = CIFSSMBLock(0, tlink_tcon(cfile->tlink), cfile->netfid,
3357 current->tgid, 0, 0, 0, 0,
3358 LOCKING_ANDX_OPLOCK_RELEASE, false,
3359 cinode->clientCanCacheRead ? 1 : 0);
3360 cFYI(1, "Oplock release rc = %d", rc);
3361 }
3362 }
3363
3364 const struct address_space_operations cifs_addr_ops = {
3365 .readpage = cifs_readpage,
3366 .readpages = cifs_readpages,
3367 .writepage = cifs_writepage,
3368 .writepages = cifs_writepages,
3369 .write_begin = cifs_write_begin,
3370 .write_end = cifs_write_end,
3371 .set_page_dirty = __set_page_dirty_nobuffers,
3372 .releasepage = cifs_release_page,
3373 .invalidatepage = cifs_invalidate_page,
3374 .launder_page = cifs_launder_page,
3375 };
3376
3377 /*
3378 * cifs_readpages requires the server to support a buffer large enough to
3379 * contain the header plus one complete page of data. Otherwise, we need
3380 * to leave cifs_readpages out of the address space operations.
3381 */
3382 const struct address_space_operations cifs_addr_ops_smallbuf = {
3383 .readpage = cifs_readpage,
3384 .writepage = cifs_writepage,
3385 .writepages = cifs_writepages,
3386 .write_begin = cifs_write_begin,
3387 .write_end = cifs_write_end,
3388 .set_page_dirty = __set_page_dirty_nobuffers,
3389 .releasepage = cifs_release_page,
3390 .invalidatepage = cifs_invalidate_page,
3391 .launder_page = cifs_launder_page,
3392 };