From: Eric Sandeen Date: Mon, 19 Jan 2004 22:29:50 +0000 (+0000) Subject: Fix a memory leak in libxfs, were not freeing X-Git-Tag: v2.7.0~145 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=014e5f6d601b14c397f53a1eb4db43b799a93a79;p=thirdparty%2Fxfsprogs-dev.git Fix a memory leak in libxfs, were not freeing allocated inode forks prototype for new libxfs_idestroy_fork --- diff --git a/include/libxfs.h b/include/libxfs.h index f61f1ef8f..a069b0b06 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -364,6 +364,7 @@ extern int libxfs_inode_alloc (xfs_trans_t **, xfs_inode_t *, mode_t, 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); diff --git a/libxfs/rdwr.c b/libxfs/rdwr.c index ed7146541..f5d8e9630 100644 --- a/libxfs/rdwr.c +++ b/libxfs/rdwr.c @@ -453,6 +453,20 @@ libxfs_iget(xfs_mount_t *mp, xfs_trans_t *tp, xfs_ino_t ino, uint lock_flags, 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) { @@ -465,7 +479,7 @@ 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; } diff --git a/libxfs/xfs.h b/libxfs/xfs.h index f960a95a0..c169ef6f9 100644 --- a/libxfs/xfs.h +++ b/libxfs/xfs.h @@ -102,6 +102,7 @@ #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