extern void libxfs_trans_inode_alloc_buf (xfs_trans_t *, xfs_buf_t *);
extern void libxfs_idata_realloc (xfs_inode_t *, int, int);
+extern void libxfs_idestroy_fork (xfs_inode_t *, int);
extern int libxfs_iread (xfs_mount_t *, xfs_trans_t *, xfs_ino_t,
xfs_inode_t **, xfs_daddr_t);
extern void libxfs_ichgtime (xfs_inode_t *, int);
return 0;
}
+void
+libxfs_idestroy(xfs_inode_t *ip)
+{
+ switch (ip->i_d.di_mode & S_IFMT) {
+ case S_IFREG:
+ case S_IFDIR:
+ case S_IFLNK:
+ libxfs_idestroy_fork(ip, XFS_DATA_FORK);
+ break;
+ }
+ if (ip->i_afp)
+ libxfs_idestroy_fork(ip, XFS_ATTR_FORK);
+}
+
void
libxfs_iput(xfs_inode_t *ip, uint lock_flags)
{
if (ip->i_itemp)
libxfs_zone_free(xfs_ili_zone, ip->i_itemp);
ip->i_itemp = NULL;
-
+ libxfs_idestroy(ip);
libxfs_zone_free(xfs_inode_zone, ip);
ip = NULL;
}
#define xfs_iread libxfs_iread
#define xfs_ialloc libxfs_ialloc
#define xfs_idata_realloc libxfs_idata_realloc
+#define xfs_idestroy_fork libxfs_idestroy_fork
#define xfs_itobp libxfs_itobp
#define xfs_ichgtime libxfs_ichgtime
#define xfs_bmapi libxfs_bmapi