mirror of
https://github.com/torvalds/linux
synced 2024-09-29 16:00:27 +00:00
smb3: fix problem unloading module due to leaked refcount on shutdown
The shutdown ioctl can leak a refcount on the tlink which can
prevent rmmod (unloading the cifs.ko) module from working.
Found while debugging xfstest generic/043
Fixes: 69ca1f5755
("smb3: add dynamic tracepoints for shutdown ioctl")
Reviewed-by: Meetakshi Setiya <msetiya@microsoft.com>
Reviewed-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
e4be320eec
commit
15179cf280
|
@ -4194,6 +4194,9 @@ tlink_rb_insert(struct rb_root *root, struct tcon_link *new_tlink)
|
|||
*
|
||||
* If one doesn't exist then insert a new tcon_link struct into the tree and
|
||||
* try to construct a new one.
|
||||
*
|
||||
* REMEMBER to call cifs_put_tlink() after successful calls to cifs_sb_tlink,
|
||||
* to avoid refcount issues
|
||||
*/
|
||||
struct tcon_link *
|
||||
cifs_sb_tlink(struct cifs_sb_info *cifs_sb)
|
||||
|
|
|
@ -229,9 +229,11 @@ static int cifs_shutdown(struct super_block *sb, unsigned long arg)
|
|||
|
||||
shutdown_good:
|
||||
trace_smb3_shutdown_done(flags, tcon->tid);
|
||||
cifs_put_tlink(tlink);
|
||||
return 0;
|
||||
shutdown_out_err:
|
||||
trace_smb3_shutdown_err(rc, flags, tcon->tid);
|
||||
cifs_put_tlink(tlink);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
@ -588,6 +588,7 @@ cifs_symlink(struct mnt_idmap *idmap, struct inode *inode,
|
|||
tlink = cifs_sb_tlink(cifs_sb);
|
||||
if (IS_ERR(tlink)) {
|
||||
rc = PTR_ERR(tlink);
|
||||
/* BB could be clearer if skipped put_tlink on error here, but harmless */
|
||||
goto symlink_exit;
|
||||
}
|
||||
pTcon = tlink_tcon(tlink);
|
||||
|
|
Loading…
Reference in a new issue