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