Since the switch to dentry cache implementation the memory is no
longer freed when a file in ramfs is deleted. Fix this.

Fixes: b283b72639 ("fs: ramfs: Switch to dentry cache implementation")

Signed-off-by: Sascha Hauer <[email protected]>
---
 fs/ramfs.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/fs/ramfs.c b/fs/ramfs.c
index 7548bdac9f..09dafe02ae 100644
--- a/fs/ramfs.c
+++ b/fs/ramfs.c
@@ -176,6 +176,28 @@ static int ramfs_symlink(struct inode *dir, struct dentry 
*dentry,
        return 0;
 }
 
+static int ramfs_unlink(struct inode *dir, struct dentry *dentry)
+{
+       struct inode *inode = d_inode(dentry);
+
+       if (inode) {
+               struct ramfs_inode *node = to_ramfs_inode(inode);
+               struct ramfs_chunk *chunk = node->data;
+
+               node->data = NULL;
+
+               while (chunk) {
+                       struct ramfs_chunk *tmp = chunk;
+
+                       chunk = chunk->next;
+
+                       ramfs_put_chunk(tmp);
+               }
+       }
+
+       return simple_unlink(dir, dentry);
+}
+
 static const char *ramfs_get_link(struct dentry *dentry, struct inode *inode)
 {
        return inode->i_link;
@@ -192,7 +214,7 @@ static const struct inode_operations 
ramfs_dir_inode_operations =
        .symlink = ramfs_symlink,
        .mkdir = ramfs_mkdir,
        .rmdir = simple_rmdir,
-       .unlink = simple_unlink,
+       .unlink = ramfs_unlink,
        .create = ramfs_create,
 };
 
-- 
2.19.0


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to