[PATCH 3.18 11/45] cifs: Fix missing put_xid in cifs_file_strict_mmap

2018-02-15 Thread Greg Kroah-Hartman
3.18-stable review patch.  If anyone has any objections, please let me know.

--

From: Matthew Wilcox 

commit f04a703c3d613845ae3141bfaf223489de8ab3eb upstream.

If cifs_zap_mapping() returned an error, we would return without putting
the xid that we got earlier.  Restructure cifs_file_strict_mmap() and
cifs_file_mmap() to be more similar to each other and have a single
point of return that always puts the xid.

Signed-off-by: Matthew Wilcox 
Signed-off-by: Steve French 
Signed-off-by: Greg Kroah-Hartman 

---
 fs/cifs/file.c |   26 --
 1 file changed, 12 insertions(+), 14 deletions(-)

--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -3261,20 +3261,18 @@ static struct vm_operations_struct cifs_
 
 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
 {
-   int rc, xid;
+   int xid, rc = 0;
struct inode *inode = file_inode(file);
 
xid = get_xid();
 
-   if (!CIFS_CACHE_READ(CIFS_I(inode))) {
+   if (!CIFS_CACHE_READ(CIFS_I(inode)))
rc = cifs_zap_mapping(inode);
-   if (rc)
-   return rc;
-   }
-
-   rc = generic_file_mmap(file, vma);
-   if (rc == 0)
+   if (!rc)
+   rc = generic_file_mmap(file, vma);
+   if (!rc)
vma->vm_ops = _file_vm_ops;
+
free_xid(xid);
return rc;
 }
@@ -3284,16 +3282,16 @@ int cifs_file_mmap(struct file *file, st
int rc, xid;
 
xid = get_xid();
+
rc = cifs_revalidate_file(file);
-   if (rc) {
+   if (rc)
cifs_dbg(FYI, "Validation prior to mmap failed, error=%d\n",
 rc);
-   free_xid(xid);
-   return rc;
-   }
-   rc = generic_file_mmap(file, vma);
-   if (rc == 0)
+   if (!rc)
+   rc = generic_file_mmap(file, vma);
+   if (!rc)
vma->vm_ops = _file_vm_ops;
+
free_xid(xid);
return rc;
 }




[PATCH 3.18 11/45] cifs: Fix missing put_xid in cifs_file_strict_mmap

2018-02-15 Thread Greg Kroah-Hartman
3.18-stable review patch.  If anyone has any objections, please let me know.

--

From: Matthew Wilcox 

commit f04a703c3d613845ae3141bfaf223489de8ab3eb upstream.

If cifs_zap_mapping() returned an error, we would return without putting
the xid that we got earlier.  Restructure cifs_file_strict_mmap() and
cifs_file_mmap() to be more similar to each other and have a single
point of return that always puts the xid.

Signed-off-by: Matthew Wilcox 
Signed-off-by: Steve French 
Signed-off-by: Greg Kroah-Hartman 

---
 fs/cifs/file.c |   26 --
 1 file changed, 12 insertions(+), 14 deletions(-)

--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -3261,20 +3261,18 @@ static struct vm_operations_struct cifs_
 
 int cifs_file_strict_mmap(struct file *file, struct vm_area_struct *vma)
 {
-   int rc, xid;
+   int xid, rc = 0;
struct inode *inode = file_inode(file);
 
xid = get_xid();
 
-   if (!CIFS_CACHE_READ(CIFS_I(inode))) {
+   if (!CIFS_CACHE_READ(CIFS_I(inode)))
rc = cifs_zap_mapping(inode);
-   if (rc)
-   return rc;
-   }
-
-   rc = generic_file_mmap(file, vma);
-   if (rc == 0)
+   if (!rc)
+   rc = generic_file_mmap(file, vma);
+   if (!rc)
vma->vm_ops = _file_vm_ops;
+
free_xid(xid);
return rc;
 }
@@ -3284,16 +3282,16 @@ int cifs_file_mmap(struct file *file, st
int rc, xid;
 
xid = get_xid();
+
rc = cifs_revalidate_file(file);
-   if (rc) {
+   if (rc)
cifs_dbg(FYI, "Validation prior to mmap failed, error=%d\n",
 rc);
-   free_xid(xid);
-   return rc;
-   }
-   rc = generic_file_mmap(file, vma);
-   if (rc == 0)
+   if (!rc)
+   rc = generic_file_mmap(file, vma);
+   if (!rc)
vma->vm_ops = _file_vm_ops;
+
free_xid(xid);
return rc;
 }