yaffs_endian_config() allocates a buffer (dev->tn_swap_buffer) for the
purpose of converting tnodes between little-endian and big-endian byte
orders when necessary. This buffer is never released. Add a new
function, yaffs_endian_deinit(), which is a cleanup counterpart of
yaffs_endian_config(). Call the new function upon deinitialization so
that dev->tn_swap_buffer gets released.
Signed-off-by: Michał Kępień <
michal@isc.org>
---
yaffs_endian.c | 5 +++++
yaffs_endian.h | 1 +
yaffs_guts.c | 1 +
3 files changed, 7 insertions(+)
diff --git a/yaffs_endian.c b/yaffs_endian.c
index 6103f4e..2870d6c 100644
--- a/yaffs_endian.c
+++ b/yaffs_endian.c
@@ -103,3 +103,8 @@ void yaffs_endian_config(struct yaffs_dev *dev)
if (dev->swap_endian)
dev->tn_swap_buffer = kmalloc(dev->tnode_size, GFP_NOFS);
}
+
+void yaffs_endian_deinit(struct yaffs_dev *dev) {
+ if (dev->swap_endian)
+ kfree(dev->tn_swap_buffer);
+}
diff --git a/yaffs_endian.h b/yaffs_endian.h
index 8c27189..068f10d 100644
--- a/yaffs_endian.h
+++ b/yaffs_endian.h
@@ -50,5 +50,6 @@ void yaffs_do_endian_oh(struct yaffs_dev *dev, struct yaffs_obj_hdr *oh);
void yaffs_do_endian_packed_tags2(struct yaffs_dev *dev,
struct yaffs_packed_tags2_tags_only *ptt);
void yaffs_endian_config(struct yaffs_dev *dev);
+void yaffs_endian_deinit(struct yaffs_dev *dev);
#endif
diff --git a/yaffs_guts.c b/yaffs_guts.c
index 3e33916..6fba922 100644
--- a/yaffs_guts.c
+++ b/yaffs_guts.c
@@ -4814,6 +4814,7 @@ void yaffs_deinitialise(struct yaffs_dev *dev)
yaffs_deinit_tnodes_and_objs(dev);
yaffs_summary_deinit(dev);
yaffs_cache_deinit(dev);
+ yaffs_endian_deinit(dev);
kfree(dev->gc_cleanup_list);
--
2.33.0