2024-01-16 08:34:57

by Konstantin Komarov

[permalink] [raw]
Subject: [PATCH] fs/ntfs3: Use kvfree to free memory allocated by kvmalloc


Signed-off-by: Konstantin Komarov <[email protected]>
---
 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(-)

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);
--
2.34.1



2024-01-16 10:50:28

by Thorsten Leemhuis

[permalink] [raw]
Subject: Re: [PATCH] fs/ntfs3: Use kvfree to free memory allocated by kvmalloc

[/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
> <[email protected]>
> ---
>  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.