aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/file.c
diff options
context:
space:
mode:
authorJeff Layton <jlayton@redhat.com>2009-09-12 11:54:28 -0400
committerSteve French <sfrench@us.ibm.com>2009-09-15 15:45:03 -0400
commit590a3fe0e18473a55b0ff48548ba87a2010d7730 (patch)
tree0e5fdfa70ee40a10a5b0df3b85cef3baa0d1b2c6 /fs/cifs/file.c
parent20d1752f3d6bd32beb90949559e0d14a0b234445 (diff)
cifs: fix oplock request handling in posix codepath
cifs_posix_open takes a "poplock" argument that's intended to be used in the actual posix open call to set the "Flags" field. It ignores this value however and declares an "oplock" parameter on the stack that it passes uninitialized to the CIFSPOSIXOpen function. Not only does this mean that the oplock request flags are bogus, but the result that's expected to be in that variable is unchanged. Fix this, and also clean up the type of the oplock parameter used. Since it's expected to be __u32, we should use that everywhere and not implicitly cast it from a signed type. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs/file.c')
-rw-r--r--fs/cifs/file.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index fa7beac8b80e..225d127c960e 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -123,9 +123,11 @@ static inline int cifs_get_disposition(unsigned int flags)
123} 123}
124 124
125/* all arguments to this function must be checked for validity in caller */ 125/* all arguments to this function must be checked for validity in caller */
126static inline int cifs_posix_open_inode_helper(struct inode *inode, 126static inline int
127 struct file *file, struct cifsInodeInfo *pCifsInode, 127cifs_posix_open_inode_helper(struct inode *inode, struct file *file,
128 struct cifsFileInfo *pCifsFile, int oplock, u16 netfid) 128 struct cifsInodeInfo *pCifsInode,
129 struct cifsFileInfo *pCifsFile, __u32 oplock,
130 u16 netfid)
129{ 131{
130 132
131 write_lock(&GlobalSMBSeslock); 133 write_lock(&GlobalSMBSeslock);
@@ -279,7 +281,8 @@ client_can_cache:
279int cifs_open(struct inode *inode, struct file *file) 281int cifs_open(struct inode *inode, struct file *file)
280{ 282{
281 int rc = -EACCES; 283 int rc = -EACCES;
282 int xid, oplock; 284 int xid;
285 __u32 oplock;
283 struct cifs_sb_info *cifs_sb; 286 struct cifs_sb_info *cifs_sb;
284 struct cifsTconInfo *tcon; 287 struct cifsTconInfo *tcon;
285 struct cifsFileInfo *pCifsFile; 288 struct cifsFileInfo *pCifsFile;
@@ -474,7 +477,8 @@ static int cifs_relock_file(struct cifsFileInfo *cifsFile)
474static int cifs_reopen_file(struct file *file, bool can_flush) 477static int cifs_reopen_file(struct file *file, bool can_flush)
475{ 478{
476 int rc = -EACCES; 479 int rc = -EACCES;
477 int xid, oplock; 480 int xid;
481 __u32 oplock;
478 struct cifs_sb_info *cifs_sb; 482 struct cifs_sb_info *cifs_sb;
479 struct cifsTconInfo *tcon; 483 struct cifsTconInfo *tcon;
480 struct cifsFileInfo *pCifsFile; 484 struct cifsFileInfo *pCifsFile;