cifs: Fix missing put_xid in cifs_file_strict_mmap
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 <mawilcox@microsoft.com> Signed-off-by: Steve French <smfrench@gmail.com> CC: Stable <stable@vger.kernel.org>
This commit is contained in:
parent
d8ec913b17
commit
f04a703c3d
|
@ -3471,20 +3471,18 @@ static const struct vm_operations_struct cifs_file_vm_ops = {
|
|||
|
||||
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 = &cifs_file_vm_ops;
|
||||
|
||||
free_xid(xid);
|
||||
return rc;
|
||||
}
|
||||
|
@ -3494,16 +3492,16 @@ int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
|
|||
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 = &cifs_file_vm_ops;
|
||||
|
||||
free_xid(xid);
|
||||
return rc;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue