X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/40941f94f7c8522f65f9ebc425a300d40412bc16..45e1f8b055043e54be35462852ab6649d634da7c:/lunaix-os/kernel/fs/iso9660/inode.c diff --git a/lunaix-os/kernel/fs/iso9660/inode.c b/lunaix-os/kernel/fs/iso9660/inode.c index e564910..fa3337b 100644 --- a/lunaix-os/kernel/fs/iso9660/inode.c +++ b/lunaix-os/kernel/fs/iso9660/inode.c @@ -1,9 +1,12 @@ #include #include #include +#include #include #include +extern struct cake_pile* drec_cache_pile; + static struct v_inode_ops iso_inode_ops = { .dir_lookup = iso9660_dir_lookup, .open = iso9660_open, @@ -17,10 +20,27 @@ static struct v_file_ops iso_file_ops = { .close = iso9660_close, .seek = iso9660_seek, .readdir = iso9660_readdir }; +void +iso9660_inode_destruct(struct v_inode* inode) +{ + struct iso_inode* isoino = inode->data; + + struct iso_drecache *pos, *n; + llist_for_each(pos, n, &isoino->drecaches, caches) + { + cake_release(drec_cache_pile, pos); + } + + vfree(isoino); +} + void iso9660_init_inode(struct v_superblock* vsb, struct v_inode* inode) { - inode->data = vzalloc(sizeof(struct iso_inode)); + struct iso_inode* isoino = vzalloc(sizeof(struct iso_inode)); + llist_init_head(&isoino->drecaches); + inode->data = isoino; + inode->destruct = iso9660_inode_destruct; } int