summaryrefslogtreecommitdiffstats
path: root/sys/ufs
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2002-12-27 10:06:37 +0000
committerphk <phk@FreeBSD.org>2002-12-27 10:06:37 +0000
commitafd8ad09d78e1fa25f2cec6f0227b7fe0cc17bf3 (patch)
tree68b7cca1499b5004cab4f4e79ad67c4ea8af734e /sys/ufs
parent2078a4c77423804ba74b5d67e5690f82a3f99a51 (diff)
downloadFreeBSD-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.h2
-rw-r--r--sys/ufs/ffs/ffs_vfsops.c30
-rw-r--r--sys/ufs/ufs/ufs_inode.c6
-rw-r--r--sys/ufs/ufs/ufsmount.h3
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
OpenPOWER on IntegriCloud