mirror of
https://github.com/opnsense/src.git
synced 2026-06-08 16:22:46 -04:00
Add type arg to ffs_mountfs and avoid examining v_tag to find out
if MFS is getting a free ride. Use generic ufs_reclaim().
This commit is contained in:
parent
f5118257b4
commit
0be6b890f9
3 changed files with 17 additions and 35 deletions
|
|
@ -31,7 +31,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ffs_extern.h 8.6 (Berkeley) 3/30/95
|
||||
* $Id: ffs_extern.h,v 1.16 1997/08/16 19:16:19 wollman Exp $
|
||||
* $Id: ffs_extern.h,v 1.17 1997/09/27 13:40:05 kato Exp $
|
||||
*/
|
||||
|
||||
#ifndef _UFS_FFS_EXTERN_H
|
||||
|
|
@ -75,12 +75,12 @@ int ffs_fhtovp __P((struct mount *, struct fid *, struct sockaddr *,
|
|||
int ffs_flushfiles __P((struct mount *, int, struct proc *));
|
||||
void ffs_fragacct __P((struct fs *, int, int32_t [], int));
|
||||
int ffs_isblock __P((struct fs *, u_char *, ufs_daddr_t));
|
||||
int ffs_mountfs __P((struct vnode *, struct mount *, struct proc *));
|
||||
int ffs_mountfs __P((struct vnode *, struct mount *, struct proc *,
|
||||
struct malloc_type *));
|
||||
int ffs_mountroot __P((void));
|
||||
int ffs_reallocblks __P((struct vop_reallocblks_args *));
|
||||
int ffs_realloccg __P((struct inode *,
|
||||
ufs_daddr_t, ufs_daddr_t, int, int, struct ucred *, struct buf **));
|
||||
int ffs_reclaim __P((struct vop_reclaim_args *));
|
||||
void ffs_setblock __P((struct fs *, u_char *, ufs_daddr_t));
|
||||
int ffs_statfs __P((struct mount *, struct statfs *, struct proc *));
|
||||
int ffs_sync __P((struct mount *, int, struct ucred *, struct proc *));
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ffs_vfsops.c 8.31 (Berkeley) 5/20/95
|
||||
* $Id: ffs_vfsops.c,v 1.55 1997/09/07 16:20:59 bde Exp $
|
||||
* $Id: ffs_vfsops.c,v 1.56 1997/09/27 13:40:08 kato Exp $
|
||||
*/
|
||||
|
||||
#include "opt_quota.h"
|
||||
|
|
@ -160,7 +160,7 @@ ffs_mount( mp, path, data, ndp, p)
|
|||
mp->mnt_flag |= MNT_NOCLUSTERR;
|
||||
if (bdevsw[major(rootdev)]->d_flags & D_NOCLUSTERW)
|
||||
mp->mnt_flag |= MNT_NOCLUSTERW;
|
||||
if( ( err = ffs_mountfs(rootvp, mp, p)) != 0) {
|
||||
if( ( err = ffs_mountfs(rootvp, mp, p, M_FFSNODE)) != 0) {
|
||||
/* fs specific cleanup (if any)*/
|
||||
goto error_1;
|
||||
}
|
||||
|
|
@ -308,7 +308,7 @@ ffs_mount( mp, path, data, ndp, p)
|
|||
&size); /* real size*/
|
||||
bzero( mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
|
||||
|
||||
err = ffs_mountfs(devvp, mp, p);
|
||||
err = ffs_mountfs(devvp, mp, p, M_FFSNODE);
|
||||
}
|
||||
if (err) {
|
||||
goto error_2;
|
||||
|
|
@ -476,10 +476,11 @@ loop:
|
|||
* Common code for mount and mountroot
|
||||
*/
|
||||
int
|
||||
ffs_mountfs(devvp, mp, p)
|
||||
ffs_mountfs(devvp, mp, p, malloctype)
|
||||
register struct vnode *devvp;
|
||||
struct mount *mp;
|
||||
struct proc *p;
|
||||
struct malloc_type *malloctype;
|
||||
{
|
||||
register struct ufsmount *ump;
|
||||
struct buf *bp;
|
||||
|
|
@ -549,6 +550,7 @@ ffs_mountfs(devvp, mp, p)
|
|||
}
|
||||
ump = malloc(sizeof *ump, M_UFSMNT, M_WAITOK);
|
||||
bzero((caddr_t)ump, sizeof *ump);
|
||||
ump->um_malloctype = malloctype;
|
||||
ump->um_fs = malloc((u_long)fs->fs_sbsize, M_UFSMNT,
|
||||
M_WAITOK);
|
||||
bcopy(bp->b_data, ump->um_fs, (u_int)fs->fs_sbsize);
|
||||
|
|
@ -916,7 +918,7 @@ ffs_vget(mp, ino, vpp)
|
|||
struct buf *bp;
|
||||
struct vnode *vp;
|
||||
dev_t dev;
|
||||
int type, error;
|
||||
int error;
|
||||
|
||||
ump = VFSTOUFS(mp);
|
||||
dev = ump->um_dev;
|
||||
|
|
@ -945,8 +947,8 @@ restart:
|
|||
* which will cause a panic because ffs_sync() blindly
|
||||
* dereferences vp->v_data (as well it should).
|
||||
*/
|
||||
type = ump->um_devvp->v_tag == VT_MFS ? M_MFSNODE : M_FFSNODE; /* XXX */
|
||||
MALLOC(ip, struct inode *, sizeof(struct inode), type, M_WAITOK);
|
||||
MALLOC(ip, struct inode *, sizeof(struct inode),
|
||||
ump->um_malloctype, M_WAITOK);
|
||||
|
||||
/* Allocate a new vnode/inode. */
|
||||
error = getnewvnode(VT_UFS, mp, ffs_vnodeop_p, &vp);
|
||||
|
|
@ -955,7 +957,7 @@ restart:
|
|||
wakeup(&ffs_inode_hash_lock);
|
||||
ffs_inode_hash_lock = 0;
|
||||
*vpp = NULL;
|
||||
FREE(ip, type);
|
||||
FREE(ip, ump->um_malloctype);
|
||||
return (error);
|
||||
}
|
||||
bzero((caddr_t)ip, sizeof(struct inode));
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ffs_vnops.c 8.15 (Berkeley) 5/14/95
|
||||
* $Id: ffs_vnops.c,v 1.29 1997/09/14 02:58:05 peter Exp $
|
||||
* $Id: ffs_vnops.c,v 1.30 1997/09/27 13:40:10 kato Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
|
|
@ -102,7 +102,7 @@ static struct vnodeopv_entry_desc ffs_vnodeop_entries[] = {
|
|||
{ &vop_readlink_desc, (vop_t *)ufs_readlink }, /* readlink */
|
||||
{ &vop_abortop_desc, (vop_t *)ufs_abortop }, /* abortop */
|
||||
{ &vop_inactive_desc, (vop_t *)ufs_inactive }, /* inactive */
|
||||
{ &vop_reclaim_desc, (vop_t *)ffs_reclaim }, /* reclaim */
|
||||
{ &vop_reclaim_desc, (vop_t *)ufs_reclaim }, /* reclaim */
|
||||
{ &vop_lock_desc, (vop_t *)ufs_lock }, /* lock */
|
||||
{ &vop_unlock_desc, (vop_t *)ufs_unlock }, /* unlock */
|
||||
{ &vop_bmap_desc, (vop_t *)ufs_bmap }, /* bmap */
|
||||
|
|
@ -157,7 +157,7 @@ static struct vnodeopv_entry_desc ffs_specop_entries[] = {
|
|||
{ &vop_readlink_desc, (vop_t *)spec_readlink }, /* readlink */
|
||||
{ &vop_abortop_desc, (vop_t *)spec_abortop }, /* abortop */
|
||||
{ &vop_inactive_desc, (vop_t *)ufs_inactive }, /* inactive */
|
||||
{ &vop_reclaim_desc, (vop_t *)ffs_reclaim }, /* reclaim */
|
||||
{ &vop_reclaim_desc, (vop_t *)ufs_reclaim }, /* reclaim */
|
||||
{ &vop_lock_desc, (vop_t *)ufs_lock }, /* lock */
|
||||
{ &vop_unlock_desc, (vop_t *)ufs_unlock }, /* unlock */
|
||||
{ &vop_bmap_desc, (vop_t *)spec_bmap }, /* bmap */
|
||||
|
|
@ -212,7 +212,7 @@ static struct vnodeopv_entry_desc ffs_fifoop_entries[] = {
|
|||
{ &vop_readlink_desc, (vop_t *)fifo_readlink }, /* readlink */
|
||||
{ &vop_abortop_desc, (vop_t *)fifo_abortop }, /* abortop */
|
||||
{ &vop_inactive_desc, (vop_t *)ufs_inactive }, /* inactive */
|
||||
{ &vop_reclaim_desc, (vop_t *)ffs_reclaim }, /* reclaim */
|
||||
{ &vop_reclaim_desc, (vop_t *)ufs_reclaim }, /* reclaim */
|
||||
{ &vop_lock_desc, (vop_t *)ufs_lock }, /* lock */
|
||||
{ &vop_unlock_desc, (vop_t *)ufs_unlock }, /* unlock */
|
||||
{ &vop_bmap_desc, (vop_t *)fifo_bmap }, /* bmap */
|
||||
|
|
@ -321,23 +321,3 @@ loop:
|
|||
return (VOP_UPDATE(ap->a_vp, &tv, &tv, ap->a_waitfor == MNT_WAIT));
|
||||
}
|
||||
|
||||
/*
|
||||
* Reclaim an inode so that it can be used for other purposes.
|
||||
*/
|
||||
int
|
||||
ffs_reclaim(ap)
|
||||
struct vop_reclaim_args /* {
|
||||
struct vnode *a_vp;
|
||||
struct proc *a_p;
|
||||
} */ *ap;
|
||||
{
|
||||
register struct vnode *vp = ap->a_vp;
|
||||
int error;
|
||||
|
||||
if (error = ufs_reclaim(vp, ap->a_p))
|
||||
return (error);
|
||||
FREE(vp->v_data, VFSTOUFS(vp->v_mount)->um_devvp->v_tag == VT_MFS ?
|
||||
M_MFSNODE : M_FFSNODE);
|
||||
vp->v_data = NULL;
|
||||
return (0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue