mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 02:36:21 +00:00
smb3: fix leak in "open on server" perf counter
We were not bumping up the "open on server" (num_remote_opens) counter (in some cases) on opens of the share root so could end up showing as a negative value. CC: Stable <stable@vger.kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com> Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
This commit is contained in:
parent
7e7db86c7e
commit
d2f15428d6
@ -751,6 +751,8 @@ int open_shroot(unsigned int xid, struct cifs_tcon *tcon, struct cifs_fid *pfid)
|
|||||||
goto oshr_exit;
|
goto oshr_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
atomic_inc(&tcon->num_remote_opens);
|
||||||
|
|
||||||
o_rsp = (struct smb2_create_rsp *)rsp_iov[0].iov_base;
|
o_rsp = (struct smb2_create_rsp *)rsp_iov[0].iov_base;
|
||||||
oparms.fid->persistent_fid = o_rsp->PersistentFileId;
|
oparms.fid->persistent_fid = o_rsp->PersistentFileId;
|
||||||
oparms.fid->volatile_fid = o_rsp->VolatileFileId;
|
oparms.fid->volatile_fid = o_rsp->VolatileFileId;
|
||||||
@ -1176,6 +1178,7 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon,
|
|||||||
|
|
||||||
rc = compound_send_recv(xid, ses, flags, 3, rqst,
|
rc = compound_send_recv(xid, ses, flags, 3, rqst,
|
||||||
resp_buftype, rsp_iov);
|
resp_buftype, rsp_iov);
|
||||||
|
/* no need to bump num_remote_opens because handle immediately closed */
|
||||||
|
|
||||||
sea_exit:
|
sea_exit:
|
||||||
kfree(ea);
|
kfree(ea);
|
||||||
@ -1518,6 +1521,8 @@ smb2_ioctl_query_info(const unsigned int xid,
|
|||||||
resp_buftype, rsp_iov);
|
resp_buftype, rsp_iov);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto iqinf_exit;
|
goto iqinf_exit;
|
||||||
|
|
||||||
|
/* No need to bump num_remote_opens since handle immediately closed */
|
||||||
if (qi.flags & PASSTHRU_FSCTL) {
|
if (qi.flags & PASSTHRU_FSCTL) {
|
||||||
pqi = (struct smb_query_info __user *)arg;
|
pqi = (struct smb_query_info __user *)arg;
|
||||||
io_rsp = (struct smb2_ioctl_rsp *)rsp_iov[1].iov_base;
|
io_rsp = (struct smb2_ioctl_rsp *)rsp_iov[1].iov_base;
|
||||||
|
@ -2352,6 +2352,7 @@ int smb311_posix_mkdir(const unsigned int xid, struct inode *inode,
|
|||||||
rqst.rq_iov = iov;
|
rqst.rq_iov = iov;
|
||||||
rqst.rq_nvec = n_iov;
|
rqst.rq_nvec = n_iov;
|
||||||
|
|
||||||
|
/* no need to inc num_remote_opens because we close it just below */
|
||||||
trace_smb3_posix_mkdir_enter(xid, tcon->tid, ses->Suid, CREATE_NOT_FILE,
|
trace_smb3_posix_mkdir_enter(xid, tcon->tid, ses->Suid, CREATE_NOT_FILE,
|
||||||
FILE_WRITE_ATTRIBUTES);
|
FILE_WRITE_ATTRIBUTES);
|
||||||
/* resource #4: response buffer */
|
/* resource #4: response buffer */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user