Re: [PATCH] cifs: Fix memory leak on the deferred close

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Aug 19, 2022 at 8:29 AM Steve French <smfrench@xxxxxxxxx> wrote:
>
> Don't see any problems with this - but would like to run some more tests on it
>
> On Thu, Aug 18, 2022 at 8:24 PM zhangxiaoxu (A) <zhangxiaoxu5@xxxxxxxxxx> wrote:
> >
> > running generic/029 and scan kmemleak on backend report this issue.
> >
> > 在 2022/8/19 0:28, Steve French 写道:
> > > looks promising - am reviewing this now.  Which xfstest did you see
> > > this when runnign?
> > >
> > > On Thu, Aug 18, 2022 at 8:01 AM Zhang Xiaoxu <zhangxiaoxu5@xxxxxxxxxx> wrote:
> > >>
> > >> xfstests on smb21 report kmemleak as below:
> > >>
> > >>    unreferenced object 0xffff8881767d6200 (size 64):
> > >>      comm "xfs_io", pid 1284, jiffies 4294777434 (age 20.789s)
> > >>      hex dump (first 32 bytes):
> > >>        80 5a d0 11 81 88 ff ff 78 8a aa 63 81 88 ff ff  .Z......x..c....
> > >>        00 71 99 76 81 88 ff ff 00 00 00 00 00 00 00 00  .q.v............
> > >>      backtrace:
> > >>        [<00000000ad04e6ea>] cifs_close+0x92/0x2c0
> > >>        [<0000000028b93c82>] __fput+0xff/0x3f0
> > >>        [<00000000d8116851>] task_work_run+0x85/0xc0
> > >>        [<0000000027e14f9e>] do_exit+0x5e5/0x1240
> > >>        [<00000000fb492b95>] do_group_exit+0x58/0xe0
> > >>        [<00000000129a32d9>] __x64_sys_exit_group+0x28/0x30
> > >>        [<00000000e3f7d8e9>] do_syscall_64+0x35/0x80
> > >>        [<00000000102e8a0b>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
> > >>
> > >> When cancel the deferred close work, we should also cleanup the struct
> > >> cifs_deferred_close.
> > >>
> > >> Fixes: 9e992755be8f2 ("cifs: Call close synchronously during unlink/rename/lease break.")
> > >> Fixes: e3fc065682ebb ("cifs: Deferred close performance improvements")
> > >> Signed-off-by: Zhang Xiaoxu <zhangxiaoxu5@xxxxxxxxxx>
> > >> ---
> > >>   fs/cifs/misc.c | 6 ++++++
> > >>   1 file changed, 6 insertions(+)
> > >>
> > >> diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c
> > >> index 1f2628ffe9d7..87f60f736731 100644
> > >> --- a/fs/cifs/misc.c
> > >> +++ b/fs/cifs/misc.c
> > >> @@ -737,6 +737,8 @@ cifs_close_deferred_file(struct cifsInodeInfo *cifs_inode)
> > >>          list_for_each_entry(cfile, &cifs_inode->openFileList, flist) {
> > >>                  if (delayed_work_pending(&cfile->deferred)) {
> > >>                          if (cancel_delayed_work(&cfile->deferred)) {
> > >> +                               cifs_del_deferred_close(cfile);
> > >> +
> > >>                                  tmp_list = kmalloc(sizeof(struct file_list), GFP_ATOMIC);
> > >>                                  if (tmp_list == NULL)
> > >>                                          break;
> > >> @@ -766,6 +768,8 @@ cifs_close_all_deferred_files(struct cifs_tcon *tcon)
> > >>          list_for_each_entry(cfile, &tcon->openFileList, tlist) {
> > >>                  if (delayed_work_pending(&cfile->deferred)) {
> > >>                          if (cancel_delayed_work(&cfile->deferred)) {
> > >> +                               cifs_del_deferred_close(cfile);
> > >> +
> > >>                                  tmp_list = kmalloc(sizeof(struct file_list), GFP_ATOMIC);
> > >>                                  if (tmp_list == NULL)
> > >>                                          break;
> > >> @@ -799,6 +803,8 @@ cifs_close_deferred_file_under_dentry(struct cifs_tcon *tcon, const char *path)
> > >>                  if (strstr(full_path, path)) {
> > >>                          if (delayed_work_pending(&cfile->deferred)) {
> > >>                                  if (cancel_delayed_work(&cfile->deferred)) {
> > >> +                                       cifs_del_deferred_close(cfile);
> > >> +
> > >>                                          tmp_list = kmalloc(sizeof(struct file_list), GFP_ATOMIC);
> > >>                                          if (tmp_list == NULL)
> > >>                                                  break;
> > >> --
> > >> 2.31.1
> > >>
> > >
> > >
>
>
>
> --
> Thanks,
>
> Steve

Thanks Zhang for the fix.
Looks good to me.

-- 
Regards,
Shyam




[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux