fs/ntfs3: Use kvfree to free memory allocated by kvmalloc

Message ID 667a5bc4-8cb5-47ce-a7f1-749479b25bec@paragon-software.com
State New
Headers
Series fs/ntfs3: Use kvfree to free memory allocated by kvmalloc |

Commit Message

Konstantin Komarov Jan. 16, 2024, 8:26 a.m. UTC
  Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
---
  fs/ntfs3/attrlist.c | 4 ++--
  fs/ntfs3/bitmap.c   | 4 ++--
  fs/ntfs3/frecord.c  | 4 ++--
  fs/ntfs3/super.c    | 2 +-
  4 files changed, 7 insertions(+), 7 deletions(-)
  

Comments

Linux regression tracking (Thorsten Leemhuis) Jan. 16, 2024, 10:50 a.m. UTC | #1
[/me jumps in here with something unrelated after unsuccessfully trying
to contact Konstantin in the past weeks]

On 16.01.24 09:26, Konstantin Komarov wrote:
> 
> Signed-off-by: Konstantin Komarov
> <almaz.alexandrovich@paragon-software.com>
> ---
>  fs/ntfs3/attrlist.c | 4 ++--
>  fs/ntfs3/bitmap.c   | 4 ++--
>  fs/ntfs3/frecord.c  | 4 ++--
>  fs/ntfs3/super.c    | 2 +-
>  4 files changed, 7 insertions(+), 7 deletions(-)> [...]

Hi Konstantin, glad you are still around. If you have a minute, could
you please take a look at the following bisected regression report? It
sounds there is something really wrong here:

https://bugzilla.kernel.org/show_bug.cgi?id=218180

In short:

"""
> The problem I am facing is the following:
> 1. I mount an NTFS partition via NTFS3
> 2. I create a file
> 3. I write to the file
> 4. The file is empty
> 5. I remount the partition
> 6. The file has the changes I made before the remount
>
> I can avoid the remount by doing:
> sudo sysctl vm.drop_caches=3
"""

Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)
--
Everything you wanna know about Linux kernel regression tracking:
https://linux-regtracking.leemhuis.info/about/#tldr
If I did something stupid, please tell me, as explained on that page.
  

Patch

diff --git a/fs/ntfs3/attrlist.c b/fs/ntfs3/attrlist.c
index 48e7da47c6b7..9f4bd8d26090 100644
--- a/fs/ntfs3/attrlist.c
+++ b/fs/ntfs3/attrlist.c
@@ -29,7 +29,7 @@  static inline bool al_is_valid_le(const struct 
ntfs_inode *ni,
  void al_destroy(struct ntfs_inode *ni)
  {
      run_close(&ni->attr_list.run);
-    kfree(ni->attr_list.le);
+    kvfree(ni->attr_list.le);
      ni->attr_list.le = NULL;
      ni->attr_list.size = 0;
      ni->attr_list.dirty = false;
@@ -318,7 +318,7 @@  int al_add_le(struct ntfs_inode *ni, enum ATTR_TYPE 
type, const __le16 *name,
          memcpy(ptr, al->le, off);
          memcpy(Add2Ptr(ptr, off + sz), le, old_size - off);
          le = Add2Ptr(ptr, off);
-        kfree(al->le);
+        kvfree(al->le);
          al->le = ptr;
      } else {
          memmove(Add2Ptr(le, sz), le, old_size - off);
diff --git a/fs/ntfs3/bitmap.c b/fs/ntfs3/bitmap.c
index 63f14a0232f6..845f9b22deef 100644
--- a/fs/ntfs3/bitmap.c
+++ b/fs/ntfs3/bitmap.c
@@ -124,7 +124,7 @@  void wnd_close(struct wnd_bitmap *wnd)
  {
      struct rb_node *node, *next;

-    kfree(wnd->free_bits);
+    kvfree(wnd->free_bits);
      wnd->free_bits = NULL;
      run_close(&wnd->run);

@@ -1360,7 +1360,7 @@  int wnd_extend(struct wnd_bitmap *wnd, size_t 
new_bits)
          memcpy(new_free, wnd->free_bits, wnd->nwnd * sizeof(short));
          memset(new_free + wnd->nwnd, 0,
                 (new_wnd - wnd->nwnd) * sizeof(short));
-        kfree(wnd->free_bits);
+        kvfree(wnd->free_bits);
          wnd->free_bits = new_free;
      }

diff --git a/fs/ntfs3/frecord.c b/fs/ntfs3/frecord.c
index 6ff4f70ba077..2636ab7640ac 100644
--- a/fs/ntfs3/frecord.c
+++ b/fs/ntfs3/frecord.c
@@ -778,7 +778,7 @@  static int ni_try_remove_attr_list(struct ntfs_inode 
*ni)
      run_deallocate(sbi, &ni->attr_list.run, true);
      run_close(&ni->attr_list.run);
      ni->attr_list.size = 0;
-    kfree(ni->attr_list.le);
+    kvfree(ni->attr_list.le);
      ni->attr_list.le = NULL;
      ni->attr_list.dirty = false;

@@ -927,7 +927,7 @@  int ni_create_attr_list(struct ntfs_inode *ni)
      return 0;

  out:
-    kfree(ni->attr_list.le);
+    kvfree(ni->attr_list.le);
      ni->attr_list.le = NULL;
      ni->attr_list.size = 0;
      return err;
diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c
index 65ef4b57411f..c55a29793a8d 100644
--- a/fs/ntfs3/super.c
+++ b/fs/ntfs3/super.c
@@ -625,7 +625,7 @@  static void ntfs3_free_sbi(struct ntfs_sb_info *sbi)
  {
      kfree(sbi->new_rec);
      kvfree(ntfs_put_shared(sbi->upcase));
-    kfree(sbi->def_table);
+    kvfree(sbi->def_table);
      kfree(sbi->compress.lznt);
  #ifdef CONFIG_NTFS3_LZX_XPRESS
      xpress_free_decompressor(sbi->compress.xpress);