diff --git a/fs/ramfs.c b/fs/ramfs.c index 7548bda..09dafe0 100644 --- a/fs/ramfs.c +++ b/fs/ramfs.c @@ -176,6 +176,28 @@ 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 @@ .symlink = ramfs_symlink, .mkdir = ramfs_mkdir, .rmdir = simple_rmdir, - .unlink = simple_unlink, + .unlink = ramfs_unlink, .create = ramfs_create, };