summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/ufs/ffs/ffs_vfsops.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
index f6b7e08..e29cdb6 100644
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -65,9 +65,10 @@
#include <ufs/ffs/ffs_extern.h>
#include <vm/vm.h>
+#include <vm/uma.h>
#include <vm/vm_page.h>
-static MALLOC_DEFINE(M_FFSNODE, "FFS node", "FFS vnode private part");
+uma_zone_t uma_inode, uma_ufs1, uma_ufs2;
static int ffs_sbupdate(struct ufsmount *, int);
int ffs_reload(struct mount *,struct ucred *,struct thread *);
@@ -152,6 +153,17 @@ ffs_mount(mp, path, data, ndp, td)
int error, flags;
mode_t accessmode;
+ if (uma_inode == NULL) {
+ uma_inode = uma_zcreate("FFS inode",
+ sizeof(struct inode), NULL, NULL, NULL, NULL,
+ UMA_ALIGN_PTR, 0);
+ uma_ufs1 = uma_zcreate("FFS1 dinode",
+ sizeof(struct ufs1_dinode), NULL, NULL, NULL, NULL,
+ UMA_ALIGN_PTR, 0);
+ uma_ufs2 = uma_zcreate("FFS2 dinode",
+ sizeof(struct ufs2_dinode), NULL, NULL, NULL, NULL,
+ UMA_ALIGN_PTR, 0);
+ }
/*
* Use NULL path to indicate we are mounting the root filesystem.
*/
@@ -1236,14 +1248,13 @@ ffs_vget(mp, ino, flags, vpp)
* which will cause a panic because ffs_sync() blindly
* dereferences vp->v_data (as well it should).
*/
- MALLOC(ip, struct inode *, sizeof(struct inode),
- M_FFSNODE, M_WAITOK);
+ ip = uma_zalloc(uma_inode, M_WAITOK);
/* Allocate a new vnode/inode. */
error = getnewvnode("ufs", mp, ffs_vnodeop_p, &vp);
if (error) {
*vpp = NULL;
- FREE(ip, M_FFSNODE);
+ uma_zfree(uma_inode, ip);
return (error);
}
bzero((caddr_t)ip, sizeof(struct inode));
@@ -1304,11 +1315,9 @@ ffs_vget(mp, ino, flags, vpp)
return (error);
}
if (ip->i_ump->um_fstype == UFS1)
- MALLOC(ip->i_din1, struct ufs1_dinode *,
- sizeof(struct ufs1_dinode), M_FFSNODE, M_WAITOK);
+ ip->i_din1 = uma_zalloc(uma_ufs1, M_WAITOK);
else
- MALLOC(ip->i_din2, struct ufs2_dinode *,
- sizeof(struct ufs2_dinode), M_FFSNODE, M_WAITOK);
+ ip->i_din2 = uma_zalloc(uma_ufs2, M_WAITOK);
ffs_load_inode(bp, ip, fs, ino);
if (DOINGSOFTDEP(vp))
softdep_load_inodeblock(ip);
@@ -1529,8 +1538,8 @@ ffs_ifree(struct ufsmount *ump, struct inode *ip)
{
if (ump->um_fstype == UFS1)
- FREE(ip->i_din1, M_FFSNODE);
+ uma_zfree(uma_ufs1, ip->i_din1);
else
- FREE(ip->i_din2, M_FFSNODE);
- FREE(ip, M_FFSNODE);
+ uma_zfree(uma_ufs2, ip->i_din1);
+ uma_zfree(uma_inode, ip);
}
OpenPOWER on IntegriCloud