|
@@ -3,7 +3,7 @@
|
|
*
|
|
*
|
|
* vfs operations that deal with files
|
|
* vfs operations that deal with files
|
|
*
|
|
*
|
|
- * Copyright (C) International Business Machines Corp., 2002,2007
|
|
|
|
|
|
+ * Copyright (C) International Business Machines Corp., 2002,2010
|
|
* Author(s): Steve French (sfrench@us.ibm.com)
|
|
* Author(s): Steve French (sfrench@us.ibm.com)
|
|
* Jeremy Allison (jra@samba.org)
|
|
* Jeremy Allison (jra@samba.org)
|
|
*
|
|
*
|
|
@@ -108,8 +108,7 @@ static inline int cifs_get_disposition(unsigned int flags)
|
|
/* all arguments to this function must be checked for validity in caller */
|
|
/* all arguments to this function must be checked for validity in caller */
|
|
static inline int
|
|
static inline int
|
|
cifs_posix_open_inode_helper(struct inode *inode, struct file *file,
|
|
cifs_posix_open_inode_helper(struct inode *inode, struct file *file,
|
|
- struct cifsInodeInfo *pCifsInode,
|
|
|
|
- struct cifsFileInfo *pCifsFile, __u32 oplock,
|
|
|
|
|
|
+ struct cifsInodeInfo *pCifsInode, __u32 oplock,
|
|
u16 netfid)
|
|
u16 netfid)
|
|
{
|
|
{
|
|
|
|
|
|
@@ -136,15 +135,15 @@ cifs_posix_open_inode_helper(struct inode *inode, struct file *file,
|
|
if (timespec_equal(&file->f_path.dentry->d_inode->i_mtime, &temp) &&
|
|
if (timespec_equal(&file->f_path.dentry->d_inode->i_mtime, &temp) &&
|
|
(file->f_path.dentry->d_inode->i_size ==
|
|
(file->f_path.dentry->d_inode->i_size ==
|
|
(loff_t)le64_to_cpu(buf->EndOfFile))) {
|
|
(loff_t)le64_to_cpu(buf->EndOfFile))) {
|
|
- cFYI(1, ("inode unchanged on server"));
|
|
|
|
|
|
+ cFYI(1, "inode unchanged on server");
|
|
} else {
|
|
} else {
|
|
if (file->f_path.dentry->d_inode->i_mapping) {
|
|
if (file->f_path.dentry->d_inode->i_mapping) {
|
|
rc = filemap_write_and_wait(file->f_path.dentry->d_inode->i_mapping);
|
|
rc = filemap_write_and_wait(file->f_path.dentry->d_inode->i_mapping);
|
|
if (rc != 0)
|
|
if (rc != 0)
|
|
CIFS_I(file->f_path.dentry->d_inode)->write_behind_rc = rc;
|
|
CIFS_I(file->f_path.dentry->d_inode)->write_behind_rc = rc;
|
|
}
|
|
}
|
|
- cFYI(1, ("invalidating remote inode since open detected it "
|
|
|
|
- "changed"));
|
|
|
|
|
|
+ cFYI(1, "invalidating remote inode since open detected it "
|
|
|
|
+ "changed");
|
|
invalidate_remote_inode(file->f_path.dentry->d_inode);
|
|
invalidate_remote_inode(file->f_path.dentry->d_inode);
|
|
} */
|
|
} */
|
|
|
|
|
|
@@ -152,8 +151,8 @@ psx_client_can_cache:
|
|
if ((oplock & 0xF) == OPLOCK_EXCLUSIVE) {
|
|
if ((oplock & 0xF) == OPLOCK_EXCLUSIVE) {
|
|
pCifsInode->clientCanCacheAll = true;
|
|
pCifsInode->clientCanCacheAll = true;
|
|
pCifsInode->clientCanCacheRead = true;
|
|
pCifsInode->clientCanCacheRead = true;
|
|
- cFYI(1, ("Exclusive Oplock granted on inode %p",
|
|
|
|
- file->f_path.dentry->d_inode));
|
|
|
|
|
|
+ cFYI(1, "Exclusive Oplock granted on inode %p",
|
|
|
|
+ file->f_path.dentry->d_inode);
|
|
} else if ((oplock & 0xF) == OPLOCK_READ)
|
|
} else if ((oplock & 0xF) == OPLOCK_READ)
|
|
pCifsInode->clientCanCacheRead = true;
|
|
pCifsInode->clientCanCacheRead = true;
|
|
|
|
|
|
@@ -190,8 +189,8 @@ cifs_fill_filedata(struct file *file)
|
|
if (file->private_data != NULL) {
|
|
if (file->private_data != NULL) {
|
|
return pCifsFile;
|
|
return pCifsFile;
|
|
} else if ((file->f_flags & O_CREAT) && (file->f_flags & O_EXCL))
|
|
} else if ((file->f_flags & O_CREAT) && (file->f_flags & O_EXCL))
|
|
- cERROR(1, ("could not find file instance for "
|
|
|
|
- "new file %p", file));
|
|
|
|
|
|
+ cERROR(1, "could not find file instance for "
|
|
|
|
+ "new file %p", file);
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -217,7 +216,7 @@ static inline int cifs_open_inode_helper(struct inode *inode, struct file *file,
|
|
if (timespec_equal(&file->f_path.dentry->d_inode->i_mtime, &temp) &&
|
|
if (timespec_equal(&file->f_path.dentry->d_inode->i_mtime, &temp) &&
|
|
(file->f_path.dentry->d_inode->i_size ==
|
|
(file->f_path.dentry->d_inode->i_size ==
|
|
(loff_t)le64_to_cpu(buf->EndOfFile))) {
|
|
(loff_t)le64_to_cpu(buf->EndOfFile))) {
|
|
- cFYI(1, ("inode unchanged on server"));
|
|
|
|
|
|
+ cFYI(1, "inode unchanged on server");
|
|
} else {
|
|
} else {
|
|
if (file->f_path.dentry->d_inode->i_mapping) {
|
|
if (file->f_path.dentry->d_inode->i_mapping) {
|
|
/* BB no need to lock inode until after invalidate
|
|
/* BB no need to lock inode until after invalidate
|
|
@@ -226,8 +225,8 @@ static inline int cifs_open_inode_helper(struct inode *inode, struct file *file,
|
|
if (rc != 0)
|
|
if (rc != 0)
|
|
CIFS_I(file->f_path.dentry->d_inode)->write_behind_rc = rc;
|
|
CIFS_I(file->f_path.dentry->d_inode)->write_behind_rc = rc;
|
|
}
|
|
}
|
|
- cFYI(1, ("invalidating remote inode since open detected it "
|
|
|
|
- "changed"));
|
|
|
|
|
|
+ cFYI(1, "invalidating remote inode since open detected it "
|
|
|
|
+ "changed");
|
|
invalidate_remote_inode(file->f_path.dentry->d_inode);
|
|
invalidate_remote_inode(file->f_path.dentry->d_inode);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -242,8 +241,8 @@ client_can_cache:
|
|
if ((*oplock & 0xF) == OPLOCK_EXCLUSIVE) {
|
|
if ((*oplock & 0xF) == OPLOCK_EXCLUSIVE) {
|
|
pCifsInode->clientCanCacheAll = true;
|
|
pCifsInode->clientCanCacheAll = true;
|
|
pCifsInode->clientCanCacheRead = true;
|
|
pCifsInode->clientCanCacheRead = true;
|
|
- cFYI(1, ("Exclusive Oplock granted on inode %p",
|
|
|
|
- file->f_path.dentry->d_inode));
|
|
|
|
|
|
+ cFYI(1, "Exclusive Oplock granted on inode %p",
|
|
|
|
+ file->f_path.dentry->d_inode);
|
|
} else if ((*oplock & 0xF) == OPLOCK_READ)
|
|
} else if ((*oplock & 0xF) == OPLOCK_READ)
|
|
pCifsInode->clientCanCacheRead = true;
|
|
pCifsInode->clientCanCacheRead = true;
|
|
|
|
|
|
@@ -285,8 +284,8 @@ int cifs_open(struct inode *inode, struct file *file)
|
|
return rc;
|
|
return rc;
|
|
}
|
|
}
|
|
|
|
|
|
- cFYI(1, ("inode = 0x%p file flags are 0x%x for %s",
|
|
|
|
- inode, file->f_flags, full_path));
|
|
|
|
|
|
+ cFYI(1, "inode = 0x%p file flags are 0x%x for %s",
|
|
|
|
+ inode, file->f_flags, full_path);
|
|
|
|
|
|
if (oplockEnabled)
|
|
if (oplockEnabled)
|
|
oplock = REQ_OPLOCK;
|
|
oplock = REQ_OPLOCK;
|
|
@@ -298,27 +297,29 @@ int cifs_open(struct inode *inode, struct file *file)
|
|
(CIFS_UNIX_POSIX_PATH_OPS_CAP &
|
|
(CIFS_UNIX_POSIX_PATH_OPS_CAP &
|
|
le64_to_cpu(tcon->fsUnixInfo.Capability))) {
|
|
le64_to_cpu(tcon->fsUnixInfo.Capability))) {
|
|
int oflags = (int) cifs_posix_convert_flags(file->f_flags);
|
|
int oflags = (int) cifs_posix_convert_flags(file->f_flags);
|
|
|
|
+ oflags |= SMB_O_CREAT;
|
|
/* can not refresh inode info since size could be stale */
|
|
/* can not refresh inode info since size could be stale */
|
|
rc = cifs_posix_open(full_path, &inode, file->f_path.mnt,
|
|
rc = cifs_posix_open(full_path, &inode, file->f_path.mnt,
|
|
- cifs_sb->mnt_file_mode /* ignored */,
|
|
|
|
- oflags, &oplock, &netfid, xid);
|
|
|
|
|
|
+ inode->i_sb,
|
|
|
|
+ cifs_sb->mnt_file_mode /* ignored */,
|
|
|
|
+ oflags, &oplock, &netfid, xid);
|
|
if (rc == 0) {
|
|
if (rc == 0) {
|
|
- cFYI(1, ("posix open succeeded"));
|
|
|
|
|
|
+ cFYI(1, "posix open succeeded");
|
|
/* no need for special case handling of setting mode
|
|
/* no need for special case handling of setting mode
|
|
on read only files needed here */
|
|
on read only files needed here */
|
|
|
|
|
|
pCifsFile = cifs_fill_filedata(file);
|
|
pCifsFile = cifs_fill_filedata(file);
|
|
cifs_posix_open_inode_helper(inode, file, pCifsInode,
|
|
cifs_posix_open_inode_helper(inode, file, pCifsInode,
|
|
- pCifsFile, oplock, netfid);
|
|
|
|
|
|
+ oplock, netfid);
|
|
goto out;
|
|
goto out;
|
|
} else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) {
|
|
} else if ((rc == -EINVAL) || (rc == -EOPNOTSUPP)) {
|
|
if (tcon->ses->serverNOS)
|
|
if (tcon->ses->serverNOS)
|
|
- cERROR(1, ("server %s of type %s returned"
|
|
|
|
|
|
+ cERROR(1, "server %s of type %s returned"
|
|
" unexpected error on SMB posix open"
|
|
" unexpected error on SMB posix open"
|
|
", disabling posix open support."
|
|
", disabling posix open support."
|
|
" Check if server update available.",
|
|
" Check if server update available.",
|
|
tcon->ses->serverName,
|
|
tcon->ses->serverName,
|
|
- tcon->ses->serverNOS));
|
|
|
|
|
|
+ tcon->ses->serverNOS);
|
|
tcon->broken_posix_open = true;
|
|
tcon->broken_posix_open = true;
|
|
} else if ((rc != -EIO) && (rc != -EREMOTE) &&
|
|
} else if ((rc != -EIO) && (rc != -EREMOTE) &&
|
|
(rc != -EOPNOTSUPP)) /* path not found or net err */
|
|
(rc != -EOPNOTSUPP)) /* path not found or net err */
|
|
@@ -386,7 +387,7 @@ int cifs_open(struct inode *inode, struct file *file)
|
|
& CIFS_MOUNT_MAP_SPECIAL_CHR);
|
|
& CIFS_MOUNT_MAP_SPECIAL_CHR);
|
|
}
|
|
}
|
|
if (rc) {
|
|
if (rc) {
|
|
- cFYI(1, ("cifs_open returned 0x%x", rc));
|
|
|
|
|
|
+ cFYI(1, "cifs_open returned 0x%x", rc);
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -469,7 +470,7 @@ static int cifs_reopen_file(struct file *file, bool can_flush)
|
|
}
|
|
}
|
|
|
|
|
|
if (file->f_path.dentry == NULL) {
|
|
if (file->f_path.dentry == NULL) {
|
|
- cERROR(1, ("no valid name if dentry freed"));
|
|
|
|
|
|
+ cERROR(1, "no valid name if dentry freed");
|
|
dump_stack();
|
|
dump_stack();
|
|
rc = -EBADF;
|
|
rc = -EBADF;
|
|
goto reopen_error_exit;
|
|
goto reopen_error_exit;
|
|
@@ -477,7 +478,7 @@ static int cifs_reopen_file(struct file *file, bool can_flush)
|
|
|
|
|
|
inode = file->f_path.dentry->d_inode;
|
|
inode = file->f_path.dentry->d_inode;
|
|
if (inode == NULL) {
|
|
if (inode == NULL) {
|
|
- cERROR(1, ("inode not valid"));
|
|
|
|
|
|
+ cERROR(1, "inode not valid");
|
|
dump_stack();
|
|
dump_stack();
|
|
rc = -EBADF;
|
|
rc = -EBADF;
|
|
goto reopen_error_exit;
|
|
goto reopen_error_exit;
|
|
@@ -499,8 +500,8 @@ reopen_error_exit:
|
|
return rc;
|
|
return rc;
|
|
}
|
|
}
|
|
|
|
|
|
- cFYI(1, ("inode = 0x%p file flags 0x%x for %s",
|
|
|
|
- inode, file->f_flags, full_path));
|
|
|
|
|
|
+ cFYI(1, "inode = 0x%p file flags 0x%x for %s",
|
|
|
|
+ inode, file->f_flags, full_path);
|
|
|
|
|
|
if (oplockEnabled)
|
|
if (oplockEnabled)
|
|
oplock = REQ_OPLOCK;
|
|
oplock = REQ_OPLOCK;
|
|
@@ -513,10 +514,11 @@ reopen_error_exit:
|
|
int oflags = (int) cifs_posix_convert_flags(file->f_flags);
|
|
int oflags = (int) cifs_posix_convert_flags(file->f_flags);
|
|
/* can not refresh inode info since size could be stale */
|
|
/* can not refresh inode info since size could be stale */
|
|
rc = cifs_posix_open(full_path, NULL, file->f_path.mnt,
|
|
rc = cifs_posix_open(full_path, NULL, file->f_path.mnt,
|
|
- cifs_sb->mnt_file_mode /* ignored */,
|
|
|
|
- oflags, &oplock, &netfid, xid);
|
|
|
|
|
|
+ inode->i_sb,
|
|
|
|
+ cifs_sb->mnt_file_mode /* ignored */,
|
|
|
|
+ oflags, &oplock, &netfid, xid);
|
|
if (rc == 0) {
|
|
if (rc == 0) {
|
|
- cFYI(1, ("posix reopen succeeded"));
|
|
|
|
|
|
+ cFYI(1, "posix reopen succeeded");
|
|
goto reopen_success;
|
|
goto reopen_success;
|
|
}
|
|
}
|
|
/* fallthrough to retry open the old way on errors, especially
|
|
/* fallthrough to retry open the old way on errors, especially
|
|
@@ -537,8 +539,8 @@ reopen_error_exit:
|
|
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
|
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
|
if (rc) {
|
|
if (rc) {
|
|
mutex_unlock(&pCifsFile->fh_mutex);
|
|
mutex_unlock(&pCifsFile->fh_mutex);
|
|
- cFYI(1, ("cifs_open returned 0x%x", rc));
|
|
|
|
- cFYI(1, ("oplock: %d", oplock));
|
|
|
|
|
|
+ cFYI(1, "cifs_open returned 0x%x", rc);
|
|
|
|
+ cFYI(1, "oplock: %d", oplock);
|
|
} else {
|
|
} else {
|
|
reopen_success:
|
|
reopen_success:
|
|
pCifsFile->netfid = netfid;
|
|
pCifsFile->netfid = netfid;
|
|
@@ -570,8 +572,8 @@ reopen_success:
|
|
if ((oplock & 0xF) == OPLOCK_EXCLUSIVE) {
|
|
if ((oplock & 0xF) == OPLOCK_EXCLUSIVE) {
|
|
pCifsInode->clientCanCacheAll = true;
|
|
pCifsInode->clientCanCacheAll = true;
|
|
pCifsInode->clientCanCacheRead = true;
|
|
pCifsInode->clientCanCacheRead = true;
|
|
- cFYI(1, ("Exclusive Oplock granted on inode %p",
|
|
|
|
- file->f_path.dentry->d_inode));
|
|
|
|
|
|
+ cFYI(1, "Exclusive Oplock granted on inode %p",
|
|
|
|
+ file->f_path.dentry->d_inode);
|
|
} else if ((oplock & 0xF) == OPLOCK_READ) {
|
|
} else if ((oplock & 0xF) == OPLOCK_READ) {
|
|
pCifsInode->clientCanCacheRead = true;
|
|
pCifsInode->clientCanCacheRead = true;
|
|
pCifsInode->clientCanCacheAll = false;
|
|
pCifsInode->clientCanCacheAll = false;
|
|
@@ -619,8 +621,7 @@ int cifs_close(struct inode *inode, struct file *file)
|
|
the struct would be in each open file,
|
|
the struct would be in each open file,
|
|
but this should give enough time to
|
|
but this should give enough time to
|
|
clear the socket */
|
|
clear the socket */
|
|
- cFYI(DBG2,
|
|
|
|
- ("close delay, write pending"));
|
|
|
|
|
|
+ cFYI(DBG2, "close delay, write pending");
|
|
msleep(timeout);
|
|
msleep(timeout);
|
|
timeout *= 4;
|
|
timeout *= 4;
|
|
}
|
|
}
|
|
@@ -653,7 +654,7 @@ int cifs_close(struct inode *inode, struct file *file)
|
|
|
|
|
|
read_lock(&GlobalSMBSeslock);
|
|
read_lock(&GlobalSMBSeslock);
|
|
if (list_empty(&(CIFS_I(inode)->openFileList))) {
|
|
if (list_empty(&(CIFS_I(inode)->openFileList))) {
|
|
- cFYI(1, ("closing last open instance for inode %p", inode));
|
|
|
|
|
|
+ cFYI(1, "closing last open instance for inode %p", inode);
|
|
/* if the file is not open we do not know if we can cache info
|
|
/* if the file is not open we do not know if we can cache info
|
|
on this inode, much less write behind and read ahead */
|
|
on this inode, much less write behind and read ahead */
|
|
CIFS_I(inode)->clientCanCacheRead = false;
|
|
CIFS_I(inode)->clientCanCacheRead = false;
|
|
@@ -674,7 +675,7 @@ int cifs_closedir(struct inode *inode, struct file *file)
|
|
(struct cifsFileInfo *)file->private_data;
|
|
(struct cifsFileInfo *)file->private_data;
|
|
char *ptmp;
|
|
char *ptmp;
|
|
|
|
|
|
- cFYI(1, ("Closedir inode = 0x%p", inode));
|
|
|
|
|
|
+ cFYI(1, "Closedir inode = 0x%p", inode);
|
|
|
|
|
|
xid = GetXid();
|
|
xid = GetXid();
|
|
|
|
|
|
@@ -685,22 +686,22 @@ int cifs_closedir(struct inode *inode, struct file *file)
|
|
|
|
|
|
pTcon = cifs_sb->tcon;
|
|
pTcon = cifs_sb->tcon;
|
|
|
|
|
|
- cFYI(1, ("Freeing private data in close dir"));
|
|
|
|
|
|
+ cFYI(1, "Freeing private data in close dir");
|
|
write_lock(&GlobalSMBSeslock);
|
|
write_lock(&GlobalSMBSeslock);
|
|
if (!pCFileStruct->srch_inf.endOfSearch &&
|
|
if (!pCFileStruct->srch_inf.endOfSearch &&
|
|
!pCFileStruct->invalidHandle) {
|
|
!pCFileStruct->invalidHandle) {
|
|
pCFileStruct->invalidHandle = true;
|
|
pCFileStruct->invalidHandle = true;
|
|
write_unlock(&GlobalSMBSeslock);
|
|
write_unlock(&GlobalSMBSeslock);
|
|
rc = CIFSFindClose(xid, pTcon, pCFileStruct->netfid);
|
|
rc = CIFSFindClose(xid, pTcon, pCFileStruct->netfid);
|
|
- cFYI(1, ("Closing uncompleted readdir with rc %d",
|
|
|
|
- rc));
|
|
|
|
|
|
+ cFYI(1, "Closing uncompleted readdir with rc %d",
|
|
|
|
+ rc);
|
|
/* not much we can do if it fails anyway, ignore rc */
|
|
/* not much we can do if it fails anyway, ignore rc */
|
|
rc = 0;
|
|
rc = 0;
|
|
} else
|
|
} else
|
|
write_unlock(&GlobalSMBSeslock);
|
|
write_unlock(&GlobalSMBSeslock);
|
|
ptmp = pCFileStruct->srch_inf.ntwrk_buf_start;
|
|
ptmp = pCFileStruct->srch_inf.ntwrk_buf_start;
|
|
if (ptmp) {
|
|
if (ptmp) {
|
|
- cFYI(1, ("closedir free smb buf in srch struct"));
|
|
|
|
|
|
+ cFYI(1, "closedir free smb buf in srch struct");
|
|
pCFileStruct->srch_inf.ntwrk_buf_start = NULL;
|
|
pCFileStruct->srch_inf.ntwrk_buf_start = NULL;
|
|
if (pCFileStruct->srch_inf.smallBuf)
|
|
if (pCFileStruct->srch_inf.smallBuf)
|
|
cifs_small_buf_release(ptmp);
|
|
cifs_small_buf_release(ptmp);
|
|
@@ -748,49 +749,49 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
|
|
rc = -EACCES;
|
|
rc = -EACCES;
|
|
xid = GetXid();
|
|
xid = GetXid();
|
|
|
|
|
|
- cFYI(1, ("Lock parm: 0x%x flockflags: "
|
|
|
|
|
|
+ cFYI(1, "Lock parm: 0x%x flockflags: "
|
|
"0x%x flocktype: 0x%x start: %lld end: %lld",
|
|
"0x%x flocktype: 0x%x start: %lld end: %lld",
|
|
cmd, pfLock->fl_flags, pfLock->fl_type, pfLock->fl_start,
|
|
cmd, pfLock->fl_flags, pfLock->fl_type, pfLock->fl_start,
|
|
- pfLock->fl_end));
|
|
|
|
|
|
+ pfLock->fl_end);
|
|
|
|
|
|
if (pfLock->fl_flags & FL_POSIX)
|
|
if (pfLock->fl_flags & FL_POSIX)
|
|
- cFYI(1, ("Posix"));
|
|
|
|
|
|
+ cFYI(1, "Posix");
|
|
if (pfLock->fl_flags & FL_FLOCK)
|
|
if (pfLock->fl_flags & FL_FLOCK)
|
|
- cFYI(1, ("Flock"));
|
|
|
|
|
|
+ cFYI(1, "Flock");
|
|
if (pfLock->fl_flags & FL_SLEEP) {
|
|
if (pfLock->fl_flags & FL_SLEEP) {
|
|
- cFYI(1, ("Blocking lock"));
|
|
|
|
|
|
+ cFYI(1, "Blocking lock");
|
|
wait_flag = true;
|
|
wait_flag = true;
|
|
}
|
|
}
|
|
if (pfLock->fl_flags & FL_ACCESS)
|
|
if (pfLock->fl_flags & FL_ACCESS)
|
|
- cFYI(1, ("Process suspended by mandatory locking - "
|
|
|
|
- "not implemented yet"));
|
|
|
|
|
|
+ cFYI(1, "Process suspended by mandatory locking - "
|
|
|
|
+ "not implemented yet");
|
|
if (pfLock->fl_flags & FL_LEASE)
|
|
if (pfLock->fl_flags & FL_LEASE)
|
|
- cFYI(1, ("Lease on file - not implemented yet"));
|
|
|
|
|
|
+ cFYI(1, "Lease on file - not implemented yet");
|
|
if (pfLock->fl_flags &
|
|
if (pfLock->fl_flags &
|
|
(~(FL_POSIX | FL_FLOCK | FL_SLEEP | FL_ACCESS | FL_LEASE)))
|
|
(~(FL_POSIX | FL_FLOCK | FL_SLEEP | FL_ACCESS | FL_LEASE)))
|
|
- cFYI(1, ("Unknown lock flags 0x%x", pfLock->fl_flags));
|
|
|
|
|
|
+ cFYI(1, "Unknown lock flags 0x%x", pfLock->fl_flags);
|
|
|
|
|
|
if (pfLock->fl_type == F_WRLCK) {
|
|
if (pfLock->fl_type == F_WRLCK) {
|
|
- cFYI(1, ("F_WRLCK "));
|
|
|
|
|
|
+ cFYI(1, "F_WRLCK ");
|
|
numLock = 1;
|
|
numLock = 1;
|
|
} else if (pfLock->fl_type == F_UNLCK) {
|
|
} else if (pfLock->fl_type == F_UNLCK) {
|
|
- cFYI(1, ("F_UNLCK"));
|
|
|
|
|
|
+ cFYI(1, "F_UNLCK");
|
|
numUnlock = 1;
|
|
numUnlock = 1;
|
|
/* Check if unlock includes more than
|
|
/* Check if unlock includes more than
|
|
one lock range */
|
|
one lock range */
|
|
} else if (pfLock->fl_type == F_RDLCK) {
|
|
} else if (pfLock->fl_type == F_RDLCK) {
|
|
- cFYI(1, ("F_RDLCK"));
|
|
|
|
|
|
+ cFYI(1, "F_RDLCK");
|
|
lockType |= LOCKING_ANDX_SHARED_LOCK;
|
|
lockType |= LOCKING_ANDX_SHARED_LOCK;
|
|
numLock = 1;
|
|
numLock = 1;
|
|
} else if (pfLock->fl_type == F_EXLCK) {
|
|
} else if (pfLock->fl_type == F_EXLCK) {
|
|
- cFYI(1, ("F_EXLCK"));
|
|
|
|
|
|
+ cFYI(1, "F_EXLCK");
|
|
numLock = 1;
|
|
numLock = 1;
|
|
} else if (pfLock->fl_type == F_SHLCK) {
|
|
} else if (pfLock->fl_type == F_SHLCK) {
|
|
- cFYI(1, ("F_SHLCK"));
|
|
|
|
|
|
+ cFYI(1, "F_SHLCK");
|
|
lockType |= LOCKING_ANDX_SHARED_LOCK;
|
|
lockType |= LOCKING_ANDX_SHARED_LOCK;
|
|
numLock = 1;
|
|
numLock = 1;
|
|
} else
|
|
} else
|
|
- cFYI(1, ("Unknown type of lock"));
|
|
|
|
|
|
+ cFYI(1, "Unknown type of lock");
|
|
|
|
|
|
cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
|
|
cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
|
|
tcon = cifs_sb->tcon;
|
|
tcon = cifs_sb->tcon;
|
|
@@ -833,8 +834,8 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
|
|
0 /* wait flag */ );
|
|
0 /* wait flag */ );
|
|
pfLock->fl_type = F_UNLCK;
|
|
pfLock->fl_type = F_UNLCK;
|
|
if (rc != 0)
|
|
if (rc != 0)
|
|
- cERROR(1, ("Error unlocking previously locked "
|
|
|
|
- "range %d during test of lock", rc));
|
|
|
|
|
|
+ cERROR(1, "Error unlocking previously locked "
|
|
|
|
+ "range %d during test of lock", rc);
|
|
rc = 0;
|
|
rc = 0;
|
|
|
|
|
|
} else {
|
|
} else {
|
|
@@ -856,9 +857,9 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
|
|
0 /* wait flag */);
|
|
0 /* wait flag */);
|
|
pfLock->fl_type = F_RDLCK;
|
|
pfLock->fl_type = F_RDLCK;
|
|
if (rc != 0)
|
|
if (rc != 0)
|
|
- cERROR(1, ("Error unlocking "
|
|
|
|
|
|
+ cERROR(1, "Error unlocking "
|
|
"previously locked range %d "
|
|
"previously locked range %d "
|
|
- "during test of lock", rc));
|
|
|
|
|
|
+ "during test of lock", rc);
|
|
rc = 0;
|
|
rc = 0;
|
|
} else {
|
|
} else {
|
|
pfLock->fl_type = F_WRLCK;
|
|
pfLock->fl_type = F_WRLCK;
|
|
@@ -923,9 +924,10 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
|
|
1, 0, li->type, false);
|
|
1, 0, li->type, false);
|
|
if (stored_rc)
|
|
if (stored_rc)
|
|
rc = stored_rc;
|
|
rc = stored_rc;
|
|
-
|
|
|
|
- list_del(&li->llist);
|
|
|
|
- kfree(li);
|
|
|
|
|
|
+ else {
|
|
|
|
+ list_del(&li->llist);
|
|
|
|
+ kfree(li);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
mutex_unlock(&fid->lock_mutex);
|
|
mutex_unlock(&fid->lock_mutex);
|
|
@@ -988,9 +990,8 @@ ssize_t cifs_user_write(struct file *file, const char __user *write_data,
|
|
|
|
|
|
pTcon = cifs_sb->tcon;
|
|
pTcon = cifs_sb->tcon;
|
|
|
|
|
|
- /* cFYI(1,
|
|
|
|
- (" write %d bytes to offset %lld of %s", write_size,
|
|
|
|
- *poffset, file->f_path.dentry->d_name.name)); */
|
|
|
|
|
|
+ /* cFYI(1, " write %d bytes to offset %lld of %s", write_size,
|
|
|
|
+ *poffset, file->f_path.dentry->d_name.name); */
|
|
|
|
|
|
if (file->private_data == NULL)
|
|
if (file->private_data == NULL)
|
|
return -EBADF;
|
|
return -EBADF;
|
|
@@ -1091,8 +1092,8 @@ static ssize_t cifs_write(struct file *file, const char *write_data,
|
|
|
|
|
|
pTcon = cifs_sb->tcon;
|
|
pTcon = cifs_sb->tcon;
|
|
|
|
|
|
- cFYI(1, ("write %zd bytes to offset %lld of %s", write_size,
|
|
|
|
- *poffset, file->f_path.dentry->d_name.name));
|
|
|
|
|
|
+ cFYI(1, "write %zd bytes to offset %lld of %s", write_size,
|
|
|
|
+ *poffset, file->f_path.dentry->d_name.name);
|
|
|
|
|
|
if (file->private_data == NULL)
|
|
if (file->private_data == NULL)
|
|
return -EBADF;
|
|
return -EBADF;
|
|
@@ -1233,7 +1234,7 @@ struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode)
|
|
it being zero) during stress testcases so we need to check for it */
|
|
it being zero) during stress testcases so we need to check for it */
|
|
|
|
|
|
if (cifs_inode == NULL) {
|
|
if (cifs_inode == NULL) {
|
|
- cERROR(1, ("Null inode passed to cifs_writeable_file"));
|
|
|
|
|
|
+ cERROR(1, "Null inode passed to cifs_writeable_file");
|
|
dump_stack();
|
|
dump_stack();
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
@@ -1277,7 +1278,7 @@ refind_writable:
|
|
again. Note that it would be bad
|
|
again. Note that it would be bad
|
|
to hold up writepages here (rather than
|
|
to hold up writepages here (rather than
|
|
in caller) with continuous retries */
|
|
in caller) with continuous retries */
|
|
- cFYI(1, ("wp failed on reopen file"));
|
|
|
|
|
|
+ cFYI(1, "wp failed on reopen file");
|
|
read_lock(&GlobalSMBSeslock);
|
|
read_lock(&GlobalSMBSeslock);
|
|
/* can not use this handle, no write
|
|
/* can not use this handle, no write
|
|
pending on this one after all */
|
|
pending on this one after all */
|
|
@@ -1353,7 +1354,7 @@ static int cifs_partialpagewrite(struct page *page, unsigned from, unsigned to)
|
|
else if (bytes_written < 0)
|
|
else if (bytes_written < 0)
|
|
rc = bytes_written;
|
|
rc = bytes_written;
|
|
} else {
|
|
} else {
|
|
- cFYI(1, ("No writeable filehandles for inode"));
|
|
|
|
|
|
+ cFYI(1, "No writeable filehandles for inode");
|
|
rc = -EIO;
|
|
rc = -EIO;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1525,7 +1526,7 @@ retry:
|
|
*/
|
|
*/
|
|
open_file = find_writable_file(CIFS_I(mapping->host));
|
|
open_file = find_writable_file(CIFS_I(mapping->host));
|
|
if (!open_file) {
|
|
if (!open_file) {
|
|
- cERROR(1, ("No writable handles for inode"));
|
|
|
|
|
|
+ cERROR(1, "No writable handles for inode");
|
|
rc = -EBADF;
|
|
rc = -EBADF;
|
|
} else {
|
|
} else {
|
|
long_op = cifs_write_timeout(cifsi, offset);
|
|
long_op = cifs_write_timeout(cifsi, offset);
|
|
@@ -1538,8 +1539,8 @@ retry:
|
|
cifs_update_eof(cifsi, offset, bytes_written);
|
|
cifs_update_eof(cifsi, offset, bytes_written);
|
|
|
|
|
|
if (rc || bytes_written < bytes_to_write) {
|
|
if (rc || bytes_written < bytes_to_write) {
|
|
- cERROR(1, ("Write2 ret %d, wrote %d",
|
|
|
|
- rc, bytes_written));
|
|
|
|
|
|
+ cERROR(1, "Write2 ret %d, wrote %d",
|
|
|
|
+ rc, bytes_written);
|
|
/* BB what if continued retry is
|
|
/* BB what if continued retry is
|
|
requested via mount flags? */
|
|
requested via mount flags? */
|
|
if (rc == -ENOSPC)
|
|
if (rc == -ENOSPC)
|
|
@@ -1600,7 +1601,7 @@ static int cifs_writepage(struct page *page, struct writeback_control *wbc)
|
|
/* BB add check for wbc flags */
|
|
/* BB add check for wbc flags */
|
|
page_cache_get(page);
|
|
page_cache_get(page);
|
|
if (!PageUptodate(page))
|
|
if (!PageUptodate(page))
|
|
- cFYI(1, ("ppw - page not up to date"));
|
|
|
|
|
|
+ cFYI(1, "ppw - page not up to date");
|
|
|
|
|
|
/*
|
|
/*
|
|
* Set the "writeback" flag, and clear "dirty" in the radix tree.
|
|
* Set the "writeback" flag, and clear "dirty" in the radix tree.
|
|
@@ -1629,8 +1630,8 @@ static int cifs_write_end(struct file *file, struct address_space *mapping,
|
|
int rc;
|
|
int rc;
|
|
struct inode *inode = mapping->host;
|
|
struct inode *inode = mapping->host;
|
|
|
|
|
|
- cFYI(1, ("write_end for page %p from pos %lld with %d bytes",
|
|
|
|
- page, pos, copied));
|
|
|
|
|
|
+ cFYI(1, "write_end for page %p from pos %lld with %d bytes",
|
|
|
|
+ page, pos, copied);
|
|
|
|
|
|
if (PageChecked(page)) {
|
|
if (PageChecked(page)) {
|
|
if (copied == len)
|
|
if (copied == len)
|
|
@@ -1686,8 +1687,8 @@ int cifs_fsync(struct file *file, struct dentry *dentry, int datasync)
|
|
|
|
|
|
xid = GetXid();
|
|
xid = GetXid();
|
|
|
|
|
|
- cFYI(1, ("Sync file - name: %s datasync: 0x%x",
|
|
|
|
- dentry->d_name.name, datasync));
|
|
|
|
|
|
+ cFYI(1, "Sync file - name: %s datasync: 0x%x",
|
|
|
|
+ dentry->d_name.name, datasync);
|
|
|
|
|
|
rc = filemap_write_and_wait(inode->i_mapping);
|
|
rc = filemap_write_and_wait(inode->i_mapping);
|
|
if (rc == 0) {
|
|
if (rc == 0) {
|
|
@@ -1711,7 +1712,7 @@ int cifs_fsync(struct file *file, struct dentry *dentry, int datasync)
|
|
unsigned int rpages = 0;
|
|
unsigned int rpages = 0;
|
|
int rc = 0;
|
|
int rc = 0;
|
|
|
|
|
|
- cFYI(1, ("sync page %p",page));
|
|
|
|
|
|
+ cFYI(1, "sync page %p", page);
|
|
mapping = page->mapping;
|
|
mapping = page->mapping;
|
|
if (!mapping)
|
|
if (!mapping)
|
|
return 0;
|
|
return 0;
|
|
@@ -1722,7 +1723,7 @@ int cifs_fsync(struct file *file, struct dentry *dentry, int datasync)
|
|
/* fill in rpages then
|
|
/* fill in rpages then
|
|
result = cifs_pagein_inode(inode, index, rpages); */ /* BB finish */
|
|
result = cifs_pagein_inode(inode, index, rpages); */ /* BB finish */
|
|
|
|
|
|
-/* cFYI(1, ("rpages is %d for sync page of Index %ld", rpages, index));
|
|
|
|
|
|
+/* cFYI(1, "rpages is %d for sync page of Index %ld", rpages, index);
|
|
|
|
|
|
#if 0
|
|
#if 0
|
|
if (rc < 0)
|
|
if (rc < 0)
|
|
@@ -1756,7 +1757,7 @@ int cifs_flush(struct file *file, fl_owner_t id)
|
|
CIFS_I(inode)->write_behind_rc = 0;
|
|
CIFS_I(inode)->write_behind_rc = 0;
|
|
}
|
|
}
|
|
|
|
|
|
- cFYI(1, ("Flush inode %p file %p rc %d", inode, file, rc));
|
|
|
|
|
|
+ cFYI(1, "Flush inode %p file %p rc %d", inode, file, rc);
|
|
|
|
|
|
return rc;
|
|
return rc;
|
|
}
|
|
}
|
|
@@ -1788,7 +1789,7 @@ ssize_t cifs_user_read(struct file *file, char __user *read_data,
|
|
open_file = (struct cifsFileInfo *)file->private_data;
|
|
open_file = (struct cifsFileInfo *)file->private_data;
|
|
|
|
|
|
if ((file->f_flags & O_ACCMODE) == O_WRONLY)
|
|
if ((file->f_flags & O_ACCMODE) == O_WRONLY)
|
|
- cFYI(1, ("attempting read on write only file instance"));
|
|
|
|
|
|
+ cFYI(1, "attempting read on write only file instance");
|
|
|
|
|
|
for (total_read = 0, current_offset = read_data;
|
|
for (total_read = 0, current_offset = read_data;
|
|
read_size > total_read;
|
|
read_size > total_read;
|
|
@@ -1869,7 +1870,7 @@ static ssize_t cifs_read(struct file *file, char *read_data, size_t read_size,
|
|
open_file = (struct cifsFileInfo *)file->private_data;
|
|
open_file = (struct cifsFileInfo *)file->private_data;
|
|
|
|
|
|
if ((file->f_flags & O_ACCMODE) == O_WRONLY)
|
|
if ((file->f_flags & O_ACCMODE) == O_WRONLY)
|
|
- cFYI(1, ("attempting read on write only file instance"));
|
|
|
|
|
|
+ cFYI(1, "attempting read on write only file instance");
|
|
|
|
|
|
for (total_read = 0, current_offset = read_data;
|
|
for (total_read = 0, current_offset = read_data;
|
|
read_size > total_read;
|
|
read_size > total_read;
|
|
@@ -1920,7 +1921,7 @@ int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
|
|
xid = GetXid();
|
|
xid = GetXid();
|
|
rc = cifs_revalidate_file(file);
|
|
rc = cifs_revalidate_file(file);
|
|
if (rc) {
|
|
if (rc) {
|
|
- cFYI(1, ("Validation prior to mmap failed, error=%d", rc));
|
|
|
|
|
|
+ cFYI(1, "Validation prior to mmap failed, error=%d", rc);
|
|
FreeXid(xid);
|
|
FreeXid(xid);
|
|
return rc;
|
|
return rc;
|
|
}
|
|
}
|
|
@@ -1931,8 +1932,7 @@ int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
|
|
|
|
|
|
|
|
|
|
static void cifs_copy_cache_pages(struct address_space *mapping,
|
|
static void cifs_copy_cache_pages(struct address_space *mapping,
|
|
- struct list_head *pages, int bytes_read, char *data,
|
|
|
|
- struct pagevec *plru_pvec)
|
|
|
|
|
|
+ struct list_head *pages, int bytes_read, char *data)
|
|
{
|
|
{
|
|
struct page *page;
|
|
struct page *page;
|
|
char *target;
|
|
char *target;
|
|
@@ -1944,10 +1944,10 @@ static void cifs_copy_cache_pages(struct address_space *mapping,
|
|
page = list_entry(pages->prev, struct page, lru);
|
|
page = list_entry(pages->prev, struct page, lru);
|
|
list_del(&page->lru);
|
|
list_del(&page->lru);
|
|
|
|
|
|
- if (add_to_page_cache(page, mapping, page->index,
|
|
|
|
|
|
+ if (add_to_page_cache_lru(page, mapping, page->index,
|
|
GFP_KERNEL)) {
|
|
GFP_KERNEL)) {
|
|
page_cache_release(page);
|
|
page_cache_release(page);
|
|
- cFYI(1, ("Add page cache failed"));
|
|
|
|
|
|
+ cFYI(1, "Add page cache failed");
|
|
data += PAGE_CACHE_SIZE;
|
|
data += PAGE_CACHE_SIZE;
|
|
bytes_read -= PAGE_CACHE_SIZE;
|
|
bytes_read -= PAGE_CACHE_SIZE;
|
|
continue;
|
|
continue;
|
|
@@ -1970,8 +1970,6 @@ static void cifs_copy_cache_pages(struct address_space *mapping,
|
|
flush_dcache_page(page);
|
|
flush_dcache_page(page);
|
|
SetPageUptodate(page);
|
|
SetPageUptodate(page);
|
|
unlock_page(page);
|
|
unlock_page(page);
|
|
- if (!pagevec_add(plru_pvec, page))
|
|
|
|
- __pagevec_lru_add_file(plru_pvec);
|
|
|
|
data += PAGE_CACHE_SIZE;
|
|
data += PAGE_CACHE_SIZE;
|
|
}
|
|
}
|
|
return;
|
|
return;
|
|
@@ -1990,7 +1988,6 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
|
|
unsigned int read_size, i;
|
|
unsigned int read_size, i;
|
|
char *smb_read_data = NULL;
|
|
char *smb_read_data = NULL;
|
|
struct smb_com_read_rsp *pSMBr;
|
|
struct smb_com_read_rsp *pSMBr;
|
|
- struct pagevec lru_pvec;
|
|
|
|
struct cifsFileInfo *open_file;
|
|
struct cifsFileInfo *open_file;
|
|
int buf_type = CIFS_NO_BUFFER;
|
|
int buf_type = CIFS_NO_BUFFER;
|
|
|
|
|
|
@@ -2004,8 +2001,7 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
|
|
cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
|
|
cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
|
|
pTcon = cifs_sb->tcon;
|
|
pTcon = cifs_sb->tcon;
|
|
|
|
|
|
- pagevec_init(&lru_pvec, 0);
|
|
|
|
- cFYI(DBG2, ("rpages: num pages %d", num_pages));
|
|
|
|
|
|
+ cFYI(DBG2, "rpages: num pages %d", num_pages);
|
|
for (i = 0; i < num_pages; ) {
|
|
for (i = 0; i < num_pages; ) {
|
|
unsigned contig_pages;
|
|
unsigned contig_pages;
|
|
struct page *tmp_page;
|
|
struct page *tmp_page;
|
|
@@ -2038,8 +2034,8 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
|
|
/* Read size needs to be in multiples of one page */
|
|
/* Read size needs to be in multiples of one page */
|
|
read_size = min_t(const unsigned int, read_size,
|
|
read_size = min_t(const unsigned int, read_size,
|
|
cifs_sb->rsize & PAGE_CACHE_MASK);
|
|
cifs_sb->rsize & PAGE_CACHE_MASK);
|
|
- cFYI(DBG2, ("rpages: read size 0x%x contiguous pages %d",
|
|
|
|
- read_size, contig_pages));
|
|
|
|
|
|
+ cFYI(DBG2, "rpages: read size 0x%x contiguous pages %d",
|
|
|
|
+ read_size, contig_pages);
|
|
rc = -EAGAIN;
|
|
rc = -EAGAIN;
|
|
while (rc == -EAGAIN) {
|
|
while (rc == -EAGAIN) {
|
|
if ((open_file->invalidHandle) &&
|
|
if ((open_file->invalidHandle) &&
|
|
@@ -2066,14 +2062,14 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ((rc < 0) || (smb_read_data == NULL)) {
|
|
if ((rc < 0) || (smb_read_data == NULL)) {
|
|
- cFYI(1, ("Read error in readpages: %d", rc));
|
|
|
|
|
|
+ cFYI(1, "Read error in readpages: %d", rc);
|
|
break;
|
|
break;
|
|
} else if (bytes_read > 0) {
|
|
} else if (bytes_read > 0) {
|
|
task_io_account_read(bytes_read);
|
|
task_io_account_read(bytes_read);
|
|
pSMBr = (struct smb_com_read_rsp *)smb_read_data;
|
|
pSMBr = (struct smb_com_read_rsp *)smb_read_data;
|
|
cifs_copy_cache_pages(mapping, page_list, bytes_read,
|
|
cifs_copy_cache_pages(mapping, page_list, bytes_read,
|
|
smb_read_data + 4 /* RFC1001 hdr */ +
|
|
smb_read_data + 4 /* RFC1001 hdr */ +
|
|
- le16_to_cpu(pSMBr->DataOffset), &lru_pvec);
|
|
|
|
|
|
+ le16_to_cpu(pSMBr->DataOffset));
|
|
|
|
|
|
i += bytes_read >> PAGE_CACHE_SHIFT;
|
|
i += bytes_read >> PAGE_CACHE_SHIFT;
|
|
cifs_stats_bytes_read(pTcon, bytes_read);
|
|
cifs_stats_bytes_read(pTcon, bytes_read);
|
|
@@ -2089,9 +2085,9 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
|
|
/* break; */
|
|
/* break; */
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- cFYI(1, ("No bytes read (%d) at offset %lld . "
|
|
|
|
- "Cleaning remaining pages from readahead list",
|
|
|
|
- bytes_read, offset));
|
|
|
|
|
|
+ cFYI(1, "No bytes read (%d) at offset %lld . "
|
|
|
|
+ "Cleaning remaining pages from readahead list",
|
|
|
|
+ bytes_read, offset);
|
|
/* BB turn off caching and do new lookup on
|
|
/* BB turn off caching and do new lookup on
|
|
file size at server? */
|
|
file size at server? */
|
|
break;
|
|
break;
|
|
@@ -2106,8 +2102,6 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
|
|
bytes_read = 0;
|
|
bytes_read = 0;
|
|
}
|
|
}
|
|
|
|
|
|
- pagevec_lru_add_file(&lru_pvec);
|
|
|
|
-
|
|
|
|
/* need to free smb_read_data buf before exit */
|
|
/* need to free smb_read_data buf before exit */
|
|
if (smb_read_data) {
|
|
if (smb_read_data) {
|
|
if (buf_type == CIFS_SMALL_BUFFER)
|
|
if (buf_type == CIFS_SMALL_BUFFER)
|
|
@@ -2136,7 +2130,7 @@ static int cifs_readpage_worker(struct file *file, struct page *page,
|
|
if (rc < 0)
|
|
if (rc < 0)
|
|
goto io_error;
|
|
goto io_error;
|
|
else
|
|
else
|
|
- cFYI(1, ("Bytes read %d", rc));
|
|
|
|
|
|
+ cFYI(1, "Bytes read %d", rc);
|
|
|
|
|
|
file->f_path.dentry->d_inode->i_atime =
|
|
file->f_path.dentry->d_inode->i_atime =
|
|
current_fs_time(file->f_path.dentry->d_inode->i_sb);
|
|
current_fs_time(file->f_path.dentry->d_inode->i_sb);
|
|
@@ -2168,8 +2162,8 @@ static int cifs_readpage(struct file *file, struct page *page)
|
|
return rc;
|
|
return rc;
|
|
}
|
|
}
|
|
|
|
|
|
- cFYI(1, ("readpage %p at offset %d 0x%x\n",
|
|
|
|
- page, (int)offset, (int)offset));
|
|
|
|
|
|
+ cFYI(1, "readpage %p at offset %d 0x%x\n",
|
|
|
|
+ page, (int)offset, (int)offset);
|
|
|
|
|
|
rc = cifs_readpage_worker(file, page, &offset);
|
|
rc = cifs_readpage_worker(file, page, &offset);
|
|
|
|
|
|
@@ -2239,7 +2233,7 @@ static int cifs_write_begin(struct file *file, struct address_space *mapping,
|
|
struct page *page;
|
|
struct page *page;
|
|
int rc = 0;
|
|
int rc = 0;
|
|
|
|
|
|
- cFYI(1, ("write_begin from %lld len %d", (long long)pos, len));
|
|
|
|
|
|
+ cFYI(1, "write_begin from %lld len %d", (long long)pos, len);
|
|
|
|
|
|
page = grab_cache_page_write_begin(mapping, index, flags);
|
|
page = grab_cache_page_write_begin(mapping, index, flags);
|
|
if (!page) {
|
|
if (!page) {
|
|
@@ -2311,12 +2305,10 @@ cifs_oplock_break(struct slow_work *work)
|
|
int rc, waitrc = 0;
|
|
int rc, waitrc = 0;
|
|
|
|
|
|
if (inode && S_ISREG(inode->i_mode)) {
|
|
if (inode && S_ISREG(inode->i_mode)) {
|
|
-#ifdef CONFIG_CIFS_EXPERIMENTAL
|
|
|
|
- if (cinode->clientCanCacheAll == 0)
|
|
|
|
|
|
+ if (cinode->clientCanCacheRead)
|
|
break_lease(inode, O_RDONLY);
|
|
break_lease(inode, O_RDONLY);
|
|
- else if (cinode->clientCanCacheRead == 0)
|
|
|
|
|
|
+ else
|
|
break_lease(inode, O_WRONLY);
|
|
break_lease(inode, O_WRONLY);
|
|
-#endif
|
|
|
|
rc = filemap_fdatawrite(inode->i_mapping);
|
|
rc = filemap_fdatawrite(inode->i_mapping);
|
|
if (cinode->clientCanCacheRead == 0) {
|
|
if (cinode->clientCanCacheRead == 0) {
|
|
waitrc = filemap_fdatawait(inode->i_mapping);
|
|
waitrc = filemap_fdatawait(inode->i_mapping);
|
|
@@ -2326,7 +2318,7 @@ cifs_oplock_break(struct slow_work *work)
|
|
rc = waitrc;
|
|
rc = waitrc;
|
|
if (rc)
|
|
if (rc)
|
|
cinode->write_behind_rc = rc;
|
|
cinode->write_behind_rc = rc;
|
|
- cFYI(1, ("Oplock flush inode %p rc %d", inode, rc));
|
|
|
|
|
|
+ cFYI(1, "Oplock flush inode %p rc %d", inode, rc);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -2338,7 +2330,7 @@ cifs_oplock_break(struct slow_work *work)
|
|
if (!cfile->closePend && !cfile->oplock_break_cancelled) {
|
|
if (!cfile->closePend && !cfile->oplock_break_cancelled) {
|
|
rc = CIFSSMBLock(0, cifs_sb->tcon, cfile->netfid, 0, 0, 0, 0,
|
|
rc = CIFSSMBLock(0, cifs_sb->tcon, cfile->netfid, 0, 0, 0, 0,
|
|
LOCKING_ANDX_OPLOCK_RELEASE, false);
|
|
LOCKING_ANDX_OPLOCK_RELEASE, false);
|
|
- cFYI(1, ("Oplock release rc = %d", rc));
|
|
|
|
|
|
+ cFYI(1, "Oplock release rc = %d", rc);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|