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