X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/40941f94f7c8522f65f9ebc425a300d40412bc16..8fce4520de1f257819b16f9253fa28dcdae743f4:/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..3b53b5c 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 @@ -56,8 +76,8 @@ iso9660_fill_inode(struct v_inode* inode, struct iso_drecache* dir, int ino) if (dir->xattr_len) { struct iso_xattr* xattr = (struct iso_xattr*)valloc(ISO9660_BLKSZ); // Only bring in single FU, as we only care about the attributes. - errno = - dev->read(dev, xattr, ISO9660_BLKSZ * inode->lb_addr, ISO9660_BLKSZ); + errno = dev->ops.read( + dev, xattr, ISO9660_BLKSZ * inode->lb_addr, ISO9660_BLKSZ); if (errno < 0) { return EIO; }