diff options
author | phk <phk@FreeBSD.org> | 2002-12-27 10:06:37 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2002-12-27 10:06:37 +0000 |
commit | afd8ad09d78e1fa25f2cec6f0227b7fe0cc17bf3 (patch) | |
tree | 68b7cca1499b5004cab4f4e79ad67c4ea8af734e /sys/ufs | |
parent | 2078a4c77423804ba74b5d67e5690f82a3f99a51 (diff) | |
download | FreeBSD-src-afd8ad09d78e1fa25f2cec6f0227b7fe0cc17bf3.zip FreeBSD-src-afd8ad09d78e1fa25f2cec6f0227b7fe0cc17bf3.tar.gz |
Make ffs_mountfs() static.
Remove the malloctype from the ufs mount structure, instead add a callback
to the storage method for freeing inodes: UFS_IFREE().
Add vfs_ifree() method function which frees an inode.
Unvariablelize the malloc type used for allocating inodes.
Diffstat (limited to 'sys/ufs')
-rw-r--r-- | sys/ufs/ffs/ffs_extern.h | 2 | ||||
-rw-r--r-- | sys/ufs/ffs/ffs_vfsops.c | 30 | ||||
-rw-r--r-- | sys/ufs/ufs/ufs_inode.c | 6 | ||||
-rw-r--r-- | sys/ufs/ufs/ufsmount.h | 3 |
4 files changed, 24 insertions, 17 deletions
diff --git a/sys/ufs/ffs/ffs_extern.h b/sys/ufs/ffs/ffs_extern.h index b16a09d..89c460e 100644 --- a/sys/ufs/ffs/ffs_extern.h +++ b/sys/ufs/ffs/ffs_extern.h @@ -72,8 +72,6 @@ int ffs_freefile(struct fs *, struct vnode *, ino_t, int ); int ffs_isblock(struct fs *, u_char *, ufs1_daddr_t); void ffs_load_inode(struct buf *, struct inode *, struct malloc_type *, struct fs *, ino_t); -int ffs_mountfs(struct vnode *, struct mount *, struct thread *, - struct malloc_type *); int ffs_mountroot(void); vfs_mount_t ffs_mount; int ffs_reallocblks(struct vop_reallocblks_args *); diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c index be0326e..fa155f8 100644 --- a/sys/ufs/ffs/ffs_vfsops.c +++ b/sys/ufs/ffs/ffs_vfsops.c @@ -71,9 +71,11 @@ static MALLOC_DEFINE(M_FFSNODE, "FFS node", "FFS vnode private part"); static int ffs_sbupdate(struct ufsmount *, int); int ffs_reload(struct mount *,struct ucred *,struct thread *); +static int ffs_mountfs(struct vnode *, struct mount *, struct thread *); static void ffs_oldfscompat_read(struct fs *, struct ufsmount *, ufs2_daddr_t); static void ffs_oldfscompat_write(struct fs *, struct ufsmount *); +static void ffs_ifree(struct ufsmount *ump, struct inode *ip); static vfs_init_t ffs_init; static vfs_uninit_t ffs_uninit; static vfs_extattrctl_t ffs_extattrctl; @@ -159,7 +161,7 @@ ffs_mount(mp, path, data, ndp, td) return (error); } - if ((error = ffs_mountfs(rootvp, mp, td, M_FFSNODE)) != 0) + if ((error = ffs_mountfs(rootvp, mp, td)) != 0) return (error); (void)VFS_STATFS(mp, &mp->mnt_stat, td); return (0); @@ -350,7 +352,7 @@ ffs_mount(mp, path, data, ndp, td) * the mount point is discarded by the upper level code. * Note that vfs_mount() populates f_mntonname for us. */ - if ((error = ffs_mountfs(devvp, mp, td, M_FFSNODE)) != 0) { + if ((error = ffs_mountfs(devvp, mp, td)) != 0) { vrele(devvp); return (error); } @@ -538,12 +540,11 @@ static int sblock_try[] = SBLOCKSEARCH; /* * Common code for mount and mountroot */ -int -ffs_mountfs(devvp, mp, td, malloctype) +static int +ffs_mountfs(devvp, mp, td) struct vnode *devvp; struct mount *mp; struct thread *td; - struct malloc_type *malloctype; { struct ufsmount *ump; struct buf *bp; @@ -674,7 +675,6 @@ ffs_mountfs(devvp, mp, td, malloctype) fs->fs_pendinginodes = 0; } ump = malloc(sizeof *ump, M_UFSMNT, M_WAITOK | M_ZERO); - ump->um_malloctype = malloctype; ump->um_fs = malloc((u_long)fs->fs_sbsize, M_UFSMNT, M_WAITOK); if (fs->fs_magic == FS_UFS1_MAGIC) { @@ -689,6 +689,7 @@ ffs_mountfs(devvp, mp, td, malloctype) ump->um_update = ffs_update; ump->um_valloc = ffs_valloc; ump->um_vfree = ffs_vfree; + ump->um_ifree = ffs_ifree; bcopy(bp->b_data, ump->um_fs, (u_int)fs->fs_sbsize); if (fs->fs_sbsize < SBLOCKSIZE) bp->b_flags |= B_INVAL | B_NOCACHE; @@ -1236,13 +1237,13 @@ ffs_vget(mp, ino, flags, vpp) * dereferences vp->v_data (as well it should). */ MALLOC(ip, struct inode *, sizeof(struct inode), - ump->um_malloctype, M_WAITOK); + M_FFSNODE, M_WAITOK); /* Allocate a new vnode/inode. */ error = getnewvnode("ufs", mp, ffs_vnodeop_p, &vp); if (error) { *vpp = NULL; - FREE(ip, ump->um_malloctype); + FREE(ip, M_FFSNODE); return (error); } bzero((caddr_t)ip, sizeof(struct inode)); @@ -1302,7 +1303,7 @@ ffs_vget(mp, ino, flags, vpp) *vpp = NULL; return (error); } - ffs_load_inode(bp, ip, ump->um_malloctype, fs, ino); + ffs_load_inode(bp, ip, M_FFSNODE, fs, ino); if (DOINGSOFTDEP(vp)) softdep_load_inodeblock(ip); else @@ -1516,3 +1517,14 @@ ffs_extattrctl(struct mount *mp, int cmd, struct vnode *filename_vp, attrname, td)); #endif } + +static void +ffs_ifree(struct ufsmount *ump, struct inode *ip) +{ + + if (ump->um_fstype == UFS1) + FREE(ip->i_din1, M_FFSNODE); + else + FREE(ip->i_din2, M_FFSNODE); + FREE(ip, M_FFSNODE); +} diff --git a/sys/ufs/ufs/ufs_inode.c b/sys/ufs/ufs/ufs_inode.c index 57babdd..6e60f7e 100644 --- a/sys/ufs/ufs/ufs_inode.c +++ b/sys/ufs/ufs/ufs_inode.c @@ -183,11 +183,7 @@ ufs_reclaim(ap) if (ip->i_dirhash != NULL) ufsdirhash_free(ip); #endif - if (ump->um_fstype == UFS1) - FREE(ip->i_din1, ump->um_malloctype); - else - FREE(ip->i_din2, ump->um_malloctype); - FREE(vp->v_data, ump->um_malloctype); + UFS_IFREE(ump, ip); vp->v_data = 0; return (0); } diff --git a/sys/ufs/ufs/ufsmount.h b/sys/ufs/ufs/ufsmount.h index 99d6078..30391fd 100644 --- a/sys/ufs/ufs/ufsmount.h +++ b/sys/ufs/ufs/ufsmount.h @@ -77,13 +77,13 @@ struct ufsmount { time_t um_itime[MAXQUOTAS]; /* inode quota time limit */ char um_qflags[MAXQUOTAS]; /* quota specific flags */ int64_t um_savedmaxfilesize; /* XXX - limit maxfilesize */ - struct malloc_type *um_malloctype; /* The inodes malloctype */ int (*um_balloc)(struct vnode *, off_t, int, struct ucred *, int, struct buf **); int (*um_blkatoff)(struct vnode *, off_t, char **, struct buf **); int (*um_truncate)(struct vnode *, off_t, int, struct ucred *, struct thread *); int (*um_update)(struct vnode *, int); int (*um_valloc)(struct vnode *, int, struct ucred *, struct vnode **); int (*um_vfree)(struct vnode *, ino_t, int); + void (*um_ifree)(struct ufsmount *, struct inode *); }; #define UFS_BALLOC(aa, bb, cc, dd, ee, ff) VFSTOUFS((aa)->v_mount)->um_balloc(aa, bb, cc, dd, ee, ff) @@ -92,6 +92,7 @@ struct ufsmount { #define UFS_UPDATE(aa, bb) VFSTOUFS((aa)->v_mount)->um_update(aa, bb) #define UFS_VALLOC(aa, bb, cc, dd) VFSTOUFS((aa)->v_mount)->um_valloc(aa, bb, cc, dd) #define UFS_VFREE(aa, bb, cc) VFSTOUFS((aa)->v_mount)->um_vfree(aa, bb, cc) +#define UFS_IFREE(aa, bb) ((aa)->um_ifree(aa, bb)) /* * Filesystem types |