Linux Audio

Check our new training course

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