diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs.h ../bsdext2fs/ext2fs.h --- /home/pluknet/tmp/ext2fs_stock/ext2fs.h 2008-02-05 00:20:39.000000000 +0300 +++ ../bsdext2fs/ext2fs.h 2008-02-05 00:40:08.000000000 +0300 @@ -30,6 +30,8 @@ * * @(#)fs.h 8.10 (Berkeley) 10/27/94 * Modified for ext2fs by Manuel Bouyer. + * + * $FreeBSD$ */ /* @@ -67,7 +69,7 @@ #ifndef _UFS_EXT2FS_EXT2FS_H_ #define _UFS_EXT2FS_EXT2FS_H_ -#include +#include /* * Each disk drive contains some number of file systems. diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_alloc.c ../bsdext2fs/ext2fs_alloc.c --- /home/pluknet/tmp/ext2fs_stock/ext2fs_alloc.c 2008-02-05 00:20:54.000000000 +0300 +++ ../bsdext2fs/ext2fs_alloc.c 2008-02-05 00:30:03.000000000 +0300 @@ -65,7 +65,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ext2fs_alloc.c,v 1.35 2007/10/08 18:01:27 ad Exp $"); +__FBSDID(0, "$FreeBSD$"); #include #include @@ -75,14 +75,13 @@ __KERNEL_RCSID(0, "$NetBSD: ext2fs_alloc #include #include #include -#include #include #include #include -#include -#include +#include +#include u_long ext2gennumber; @@ -114,7 +113,7 @@ static daddr_t ext2fs_mapsearch(struct m */ int ext2fs_alloc(struct inode *ip, daddr_t lbn, daddr_t bpref, - kauth_cred_t cred, daddr_t *bnp) + struct ucred *cred, daddr_t *bnp) { struct m_ext2fs *fs; daddr_t bno; @@ -128,8 +127,7 @@ ext2fs_alloc(struct inode *ip, daddr_t l #endif /* DIAGNOSTIC */ if (fs->e2fs.e2fs_fbcount == 0) goto nospace; - if (kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER, NULL) != 0 && - freespace(fs) <= 0) + if (cred->cr_uid != 0 && freespace(fs) <= 0) goto nospace; if (bpref >= fs->e2fs.e2fs_bcount) bpref = 0; @@ -146,7 +144,7 @@ ext2fs_alloc(struct inode *ip, daddr_t l return (0); } nospace: - ext2fs_fserr(fs, kauth_cred_geteuid(cred), "file system full"); + ext2fs_fserr(fs, cred->cr_uid, "file system full"); uprintf("\n%s: write failed, file system is full\n", fs->e2fs_fsmnt); return (ENOSPC); } @@ -167,7 +165,7 @@ nospace: * available inode is located. */ int -ext2fs_valloc(struct vnode *pvp, int mode, kauth_cred_t cred, +ext2fs_valloc(struct vnode *pvp, int mode, struct ucred *cred, struct vnode **vpp) { struct inode *pip; @@ -213,7 +211,7 @@ ext2fs_valloc(struct vnode *pvp, int mod ip->i_e2fs_gen = ext2gennumber; return (0); noinodes: - ext2fs_fserr(fs, kauth_cred_geteuid(cred), "out of inodes"); + ext2fs_fserr(fs, cred->cr_uid, "out of inodes"); uprintf("\n%s: create/symlink failed, no inodes free\n", fs->e2fs_fsmnt); return (ENOSPC); } diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_balloc.c ../bsdext2fs/ext2fs_balloc.c --- /home/pluknet/tmp/ext2fs_stock/ext2fs_balloc.c 2008-02-05 00:21:09.000000000 +0300 +++ ../bsdext2fs/ext2fs_balloc.c 2008-02-05 00:41:18.000000000 +0300 @@ -65,11 +65,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ext2fs_balloc.c,v 1.32 2007/10/08 18:01:27 ad Exp $"); - -#if defined(_KERNEL_OPT) -#include "opt_uvmhist.h" -#endif +__FBSDID(0, "$FreeBSD$"); #include #include @@ -78,15 +74,14 @@ __KERNEL_RCSID(0, "$NetBSD: ext2fs_ballo #include #include #include -#include -#include +//#include #include #include -#include -#include +#include +#include /* * Balloc defines the structure of file system storage @@ -94,8 +89,8 @@ __KERNEL_RCSID(0, "$NetBSD: ext2fs_ballo * the inode and the logical block number in a file. */ int -ext2fs_balloc(struct inode *ip, daddr_t bn, int size, - kauth_cred_t cred, struct buf **bpp, int flags) +ext2fs_balloc(struct inode *ip, daddr_t bn, int size, struct ucred *cred, + struct buf **bpp, int flags) { struct m_ext2fs *fs; daddr_t nb; @@ -109,9 +104,6 @@ ext2fs_balloc(struct inode *ip, daddr_t daddr_t *blkp, *allocblk, allociblk[NIADDR + 1]; int32_t *allocib; /* XXX ondisk32 */ int unwindidx = -1; - UVMHIST_FUNC("ext2fs_balloc"); UVMHIST_CALLED(ubchist); - - UVMHIST_LOG(ubchist, "bn 0x%x", bn,0,0,0); if (bpp != NULL) { *bpp = NULL; @@ -356,12 +348,11 @@ fail: int ext2fs_gop_alloc(struct vnode *vp, off_t off, off_t len, int flags, - kauth_cred_t cred) + struct ucred *cred) { struct inode *ip = VTOI(vp); struct m_ext2fs *fs = ip->i_e2fs; int error, delta, bshift, bsize; - UVMHIST_FUNC("ext2fs_gop_alloc"); UVMHIST_CALLED(ubchist); bshift = fs->e2fs_bshift; bsize = 1 << bshift; @@ -372,13 +363,10 @@ ext2fs_gop_alloc(struct vnode *vp, off_t while (len > 0) { bsize = min(bsize, len); - UVMHIST_LOG(ubchist, "off 0x%x len 0x%x bsize 0x%x", - off, len, bsize, 0); error = ext2fs_balloc(ip, lblkno(fs, off), bsize, cred, NULL, flags); if (error) { - UVMHIST_LOG(ubchist, "error %d", error, 0,0,0); return error; } @@ -388,15 +376,8 @@ ext2fs_gop_alloc(struct vnode *vp, off_t */ if (ext2fs_size(ip) < off + bsize) { - UVMHIST_LOG(ubchist, "old 0x%lx%8lx new 0x%lx%8lx", - /* Note that arguments are always cast to u_long. */ - ext2fs_size(ip) >> 32, - ext2fs_size(ip) & 0xffffffff, - (off + bsize) >> 32, - (off + bsize) & 0xffffffff); error = ext2fs_setsize(ip, off + bsize); if (error) { - UVMHIST_LOG(ubchist, "error %d", error, 0,0,0); return error; } } diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_bmap.c ../bsdext2fs/ext2fs_bmap.c --- /home/pluknet/tmp/ext2fs_stock/ext2fs_bmap.c 2008-02-05 00:21:19.000000000 +0300 +++ ../bsdext2fs/ext2fs_bmap.c 2008-02-05 00:31:07.000000000 +0300 @@ -70,7 +70,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ext2fs_bmap.c,v 1.23 2008/01/02 11:49:08 ad Exp $"); +__FBSDID(0, "$FreeBSD$"); #include #include @@ -86,8 +86,8 @@ __KERNEL_RCSID(0, "$NetBSD: ext2fs_bmap. #include #include #include -#include -#include +#include +#include static int ext2fs_bmaparray(struct vnode *, daddr_t, daddr_t *, struct indir *, int *, int *); diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_bswap.c ../bsdext2fs/ext2fs_bswap.c --- /home/pluknet/tmp/ext2fs_stock/ext2fs_bswap.c 2008-02-05 00:21:30.000000000 +0300 +++ ../bsdext2fs/ext2fs_bswap.c 2008-02-05 00:31:36.000000000 +0300 @@ -31,11 +31,11 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ext2fs_bswap.c,v 1.13 2007/11/17 08:34:38 tsutsui Exp $"); +__FBSDID(0, "$FreeBSD$"); #include -#include -#include +#include +#include #if defined(_KERNEL) #include diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_dinode.h ../bsdext2fs/ext2fs_dinode.h --- /home/pluknet/tmp/ext2fs_stock/ext2fs_dinode.h 2008-02-05 00:21:40.000000000 +0300 +++ ../bsdext2fs/ext2fs_dinode.h 2008-02-05 00:33:17.000000000 +0300 @@ -35,6 +35,8 @@ * * @(#)dinode.h 8.6 (Berkeley) 9/13/94 * Modified for ext2fs by Manuel Bouyer. + * + * $FreeBSD$ */ /* diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_dir.h ../bsdext2fs/ext2fs_dir.h --- /home/pluknet/tmp/ext2fs_stock/ext2fs_dir.h 2008-02-05 00:21:57.000000000 +0300 +++ ../bsdext2fs/ext2fs_dir.h 2008-02-05 00:33:10.000000000 +0300 @@ -35,6 +35,8 @@ * * @(#)dir.h 8.4 (Berkeley) 8/10/94 * Modified for ext2fs by Manuel Bouyer. + * + * $FreeBSD$ */ /* diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_extern.h ../bsdext2fs/ext2fs_extern.h --- /home/pluknet/tmp/ext2fs_stock/ext2fs_extern.h 2008-02-05 00:22:05.000000000 +0300 +++ ../bsdext2fs/ext2fs_extern.h 2008-02-05 00:33:32.000000000 +0300 @@ -30,6 +30,8 @@ * * @(#)ffs_extern.h 8.3 (Berkeley) 4/16/94 * Modified for ext2fs by Manuel Bouyer. + * + * $FreeBSD$ */ /*- @@ -83,8 +85,8 @@ struct vnode; struct mbuf; struct componentname; -extern struct pool ext2fs_inode_pool; /* memory pool for inodes */ -extern struct pool ext2fs_dinode_pool; /* memory pool for dinodes */ +extern uma_zone_t ext2fs_inode_pool; /* memory pool for inodes */ +extern uma_zone_t ext2fs_dinode_pool; /* memory pool for dinodes */ #define EXT2FS_ITIMES(ip, acc, mod, cre) \ while ((ip)->i_flag & (IN_ACCESS | IN_CHANGE | IN_UPDATE | IN_MODIFY)) \ @@ -93,20 +95,20 @@ extern struct pool ext2fs_dinode_pool; __BEGIN_DECLS /* ext2fs_alloc.c */ -int ext2fs_alloc(struct inode *, daddr_t, daddr_t , kauth_cred_t, +int ext2fs_alloc(struct inode *, daddr_t, daddr_t , struct ucred, daddr_t *); int ext2fs_realloccg(struct inode *, daddr_t, daddr_t, int, int , - kauth_cred_t, struct buf **); -int ext2fs_valloc(struct vnode *, int, kauth_cred_t, struct vnode **); + struct ucred, struct buf **); +int ext2fs_valloc(struct vnode *, int, struct ucred, struct vnode **); /* XXX ondisk32 */ daddr_t ext2fs_blkpref(struct inode *, daddr_t, int, int32_t *); void ext2fs_blkfree(struct inode *, daddr_t); int ext2fs_vfree(struct vnode *, ino_t, int); /* ext2fs_balloc.c */ -int ext2fs_balloc(struct inode *, daddr_t, int, kauth_cred_t, +int ext2fs_balloc(struct inode *, daddr_t, int, struct ucred, struct buf **, int); -int ext2fs_gop_alloc(struct vnode *, off_t, off_t, int, kauth_cred_t); +int ext2fs_gop_alloc(struct vnode *, off_t, off_t, int, struct ucred); /* ext2fs_bmap.c */ int ext2fs_bmap(void *); @@ -116,7 +118,7 @@ u_int64_t ext2fs_size(struct inode *); int ext2fs_setsize(struct inode *, u_int64_t); int ext2fs_update(struct vnode *, const struct timespec *, const struct timespec *, int); -int ext2fs_truncate(struct vnode *, off_t, int, kauth_cred_t); +int ext2fs_truncate(struct vnode *, off_t, int, struct ucred); int ext2fs_inactive(void *); /* ext2fs_lookup.c */ @@ -127,8 +129,8 @@ int ext2fs_direnter(struct inode *, stru int ext2fs_dirremove(struct vnode *, struct componentname *); int ext2fs_dirrewrite(struct inode *, struct inode *, struct componentname *); -int ext2fs_dirempty(struct inode *, ino_t, kauth_cred_t); -int ext2fs_checkpath(struct inode *, struct inode *, kauth_cred_t); +int ext2fs_dirempty(struct inode *, ino_t, struct ucred); +int ext2fs_checkpath(struct inode *, struct inode *, struct ucred); /* ext2fs_subr.c */ int ext2fs_blkatoff(struct vnode *, off_t, char **, struct buf **); @@ -138,7 +140,7 @@ void ext2fs_itimes(struct inode *, const /* ext2fs_vfsops.c */ VFS_PROTOS(ext2fs); -int ext2fs_reload(struct mount *, kauth_cred_t); +int ext2fs_reload(struct mount *, struct ucred); int ext2fs_mountfs(struct vnode *, struct mount *); int ext2fs_flushfiles(struct mount *, int); int ext2fs_sbupdate(struct ufsmount *, int); diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_inode.c ../bsdext2fs/ext2fs_inode.c --- /home/pluknet/tmp/ext2fs_stock/ext2fs_inode.c 2008-02-05 00:22:13.000000000 +0300 +++ ../bsdext2fs/ext2fs_inode.c 2008-02-05 00:33:56.000000000 +0300 @@ -65,7 +65,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ext2fs_inode.c,v 1.64 2008/01/09 16:15:23 ad Exp $"); +__FBSDID(0, "$FreeBSD$"); #include #include @@ -78,14 +78,13 @@ __KERNEL_RCSID(0, "$NetBSD: ext2fs_inode #include #include #include -#include #include #include #include -#include -#include +#include +#include extern int prtactive; @@ -242,7 +241,7 @@ ext2fs_update(struct vnode *vp, const st */ int ext2fs_truncate(struct vnode *ovp, off_t length, int ioflag, - kauth_cred_t cred) + struct ucred *cred) { daddr_t lastblock; struct inode *oip = VTOI(ovp); diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_lookup.c ../bsdext2fs/ext2fs_lookup.c --- /home/pluknet/tmp/ext2fs_stock/ext2fs_lookup.c 2008-02-05 00:22:22.000000000 +0300 +++ ../bsdext2fs/ext2fs_lookup.c 2008-02-05 00:34:30.000000000 +0300 @@ -48,7 +48,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ext2fs_lookup.c,v 1.55 2007/12/08 19:29:53 pooka Exp $"); +__FBSDID(0, "$FreeBSD$"); #include #include @@ -59,16 +59,15 @@ __KERNEL_RCSID(0, "$NetBSD: ext2fs_looku #include #include #include -#include #include #include #include #include -#include -#include -#include +#include +#include +#include extern int dirchk; @@ -131,7 +130,7 @@ ext2fs_readdir(void *v) struct vop_readdir_args /* { struct vnode *a_vp; struct uio *a_uio; - kauth_cred_t a_cred; + struct ucred *a_cred; int **a_eofflag; off_t **a_cookies; int ncookies; @@ -284,7 +283,7 @@ ext2fs_lookup(void *v) int namlen, error; struct vnode **vpp = ap->a_vpp; struct componentname *cnp = ap->a_cnp; - kauth_cred_t cred = cnp->cn_cred; + struct ucred *cred = cnp->cn_cred; int flags; int nameiop = cnp->cn_nameiop; struct ufsmount *ump = dp->i_ump; @@ -602,9 +601,9 @@ found: * implements append-only directories. */ if ((dp->i_e2fs_mode & ISVTX) && - kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER, NULL) && - kauth_cred_geteuid(cred) != dp->i_e2fs_uid && - VTOI(tdp)->i_e2fs_uid != kauth_cred_geteuid(cred)) { + cred->cr_uid != 0 && + cred->cr_uid != dp->i_e2fs_uid && + VTOI(tdp)->i_e2fs_uid != cred->cr_uid) { vput(tdp); return (EPERM); } @@ -960,7 +959,7 @@ ext2fs_dirrewrite(struct inode *dp, stru * NB: does not handle corrupted directories. */ int -ext2fs_dirempty(struct inode *ip, ino_t parentino, kauth_cred_t cred) +ext2fs_dirempty(struct inode *ip, ino_t parentino, struct ucred *cred) { off_t off; struct ext2fs_dirtemplate dbuf; @@ -1012,7 +1011,7 @@ ext2fs_dirempty(struct inode *ip, ino_t */ int ext2fs_checkpath(struct inode *source, struct inode *target, - kauth_cred_t cred) + struct ucred *cred) { struct vnode *vp; int error, rootino, namlen; diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_readwrite.c ../bsdext2fs/ext2fs_readwrite.c --- /home/pluknet/tmp/ext2fs_stock/ext2fs_readwrite.c 2008-02-05 00:22:29.000000000 +0300 +++ ../bsdext2fs/ext2fs_readwrite.c 2008-02-05 00:34:56.000000000 +0300 @@ -65,7 +65,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ext2fs_readwrite.c,v 1.50 2008/01/02 11:49:08 ad Exp $"); +__FBSDID(0, "$FreeBSD$"); #include #include @@ -79,13 +79,12 @@ __KERNEL_RCSID(0, "$NetBSD: ext2fs_readw #include #include #include -#include #include #include #include -#include -#include +#include +#include #define doclusterread 0 /* XXX underway */ @@ -102,7 +101,7 @@ ext2fs_read(void *v) struct vnode *a_vp; struct uio *a_uio; int a_ioflag; - kauth_cred_t a_cred; + struct ucred *a_cred; } */ *ap = v; struct vnode *vp; struct inode *ip; @@ -226,7 +225,7 @@ ext2fs_write(void *v) struct vnode *a_vp; struct uio *a_uio; int a_ioflag; - kauth_cred_t a_cred; + struct ucred *a_cred; } */ *ap = v; struct vnode *vp; struct uio *uio; @@ -399,8 +398,7 @@ ext2fs_write(void *v) out: ip->i_flag |= IN_CHANGE | IN_UPDATE; - if (resid > uio->uio_resid && ap->a_cred && - kauth_authorize_generic(ap->a_cred, KAUTH_GENERIC_ISSUSER, NULL)) + if (resid > uio->uio_resid && ap->a_cred && ap->a_cred->cr_uid != 0) ip->i_e2fs_mode &= ~(ISUID | ISGID); if (resid > uio->uio_resid) VN_KNOTE(vp, NOTE_WRITE | (extended ? NOTE_EXTEND : 0)); diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_subr.c ../bsdext2fs/ext2fs_subr.c --- /home/pluknet/tmp/ext2fs_stock/ext2fs_subr.c 2008-02-05 00:22:37.000000000 +0300 +++ ../bsdext2fs/ext2fs_subr.c 2008-02-05 00:35:13.000000000 +0300 @@ -65,18 +65,17 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ext2fs_subr.c,v 1.25 2007/10/08 18:01:28 ad Exp $"); +__FBSDID(0, "$FreeBSD$"); #include #include #include #include -#include -#include +#include #include -#include -#include +#include "ext2fs.h" +#include "ext2fs_extern.h" /* * Return buffer with the contents of block "offset" from the beginning of diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_vfsops.c ../bsdext2fs/ext2fs_vfsops.c --- /home/pluknet/tmp/ext2fs_stock/ext2fs_vfsops.c 2008-02-05 00:22:45.000000000 +0300 +++ ../bsdext2fs/ext2fs_vfsops.c 2008-02-05 00:35:31.000000000 +0300 @@ -65,7 +65,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.130 2008/01/30 11:47:03 ad Exp $"); +__FBSDID(0, "$FreeBSD$"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -81,17 +81,15 @@ __KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsop #include #include #include -#include +//#include #include #include #include #include #include #include -#include #include #include -#include #include #include @@ -102,9 +100,9 @@ __KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsop #include #include -#include -#include -#include +#include +#include +#include extern kmutex_t ufs_hashlock; @@ -123,32 +121,18 @@ const struct vnodeopv_desc * const ext2f }; struct vfsops ext2fs_vfsops = { - MOUNT_EXT2FS, - sizeof (struct ufs_args), - ext2fs_mount, - ufs_start, - ext2fs_unmount, - ufs_root, - ufs_quotactl, - ext2fs_statvfs, - ext2fs_sync, - ext2fs_vget, - ext2fs_fhtovp, - ext2fs_vptofh, - ext2fs_init, - ext2fs_reinit, - ext2fs_done, - ext2fs_mountroot, - (int (*)(struct mount *, struct vnode *, struct timespec *)) eopnotsupp, - vfs_stdextattrctl, - (void *)eopnotsupp, /* vfs_suspendctl */ - genfs_renamelock_enter, - genfs_renamelock_exit, - ext2fs_vnodeopv_descs, - 0, - { NULL, NULL }, + .vfs_mount = ext2fs_mount, + .vfs_unmount = ext2fs_unmount, + .vfs_quotactl = ufs_quotactl, + .vfs_statfs = ext2fs_statvfs, + .vfs_sync = ext2fs_sync, + .vfs_vget = ext2fs_vget, + .vfs_fhtovp = ext2fs_fhtovp, + .vfs_init = ext2fs_init, + .vfs_uninit = ext2fs_done, + .vfs_root = ext2fs_mountroot, }; -VFS_ATTACH(ext2fs_vfsops); +VFS_SET(ext2fs_vfsops, ext2fs, 0); static const struct genfs_ops ext2fs_genfsops = { .gop_size = genfs_size, @@ -166,19 +150,18 @@ static const struct ufs_ops ext2fs_ufsop /* * XXX Same structure as FFS inodes? Should we share a common pool? */ -struct pool ext2fs_inode_pool; -struct pool ext2fs_dinode_pool; +uma_zone_t ext2fs_inode_pool; +uma_zone_t ext2fs_dinode_pool; extern u_long ext2gennumber; void ext2fs_init(void) { - - pool_init(&ext2fs_inode_pool, sizeof(struct inode), 0, 0, 0, - "ext2fsinopl", &pool_allocator_nointr, IPL_NONE); - pool_init(&ext2fs_dinode_pool, sizeof(struct ext2fs_dinode), 0, 0, 0, - "ext2dinopl", &pool_allocator_nointr, IPL_NONE); + ext2fs_inode_pool = uma_zcreate("ext2fs node", sizeof(struct inode), + 0, 0, 0, 0, UMA_ALIGN_PTR, M_WAITOK); + ex2fs_dinode_pool = uma_zcreate("ext2fs dirent", + sizeof(struct ext2fs_dinode), 0, 0, 0, 0, UMA_ALIGN_PTR, M_WAITOK); ufs_init(); } @@ -193,8 +176,8 @@ ext2fs_done(void) { ufs_done(); - pool_destroy(&ext2fs_inode_pool); - pool_destroy(&ext2fs_dinode_pool); + uma_zdestroy(ext2fs_inode_pool); + uma_zdestroy(ext2fs_dinode_pool); } /* @@ -320,7 +303,7 @@ ext2fs_mount(struct mount *mp, const cha * If mount by non-root, then verify that user has necessary * permissions on the device. */ - if (error == 0 && kauth_authorize_generic(l->l_cred, + if (error == 0 && l->l_cred->cr_uid != 0, KAUTH_GENERIC_ISSUSER, NULL) != 0) { accessmode = VREAD; if (update ? @@ -328,7 +311,7 @@ ext2fs_mount(struct mount *mp, const cha (mp->mnt_flag & MNT_RDONLY) == 0) accessmode |= VWRITE; vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY); - error = VOP_ACCESS(devvp, accessmode, l->l_cred); + error = VOP_ACCESS(devvp, accessmode, l->l_cred->cr_uid); VOP_UNLOCK(devvp, 0); } @@ -452,7 +435,7 @@ fail: * 6) re-read inode data for all active vnodes. */ int -ext2fs_reload(struct mount *mountp, kauth_cred_t cred) +ext2fs_reload(struct mount *mountp, struct ucred *cred) { struct lwp *l = curlwp; struct vnode *vp, *mvp, *devvp; @@ -604,12 +587,12 @@ ext2fs_mountfs(struct vnode *devvp, stru dev_t dev; struct partinfo dpart; int error, i, size, ronly; - kauth_cred_t cred; + struct ucred *cred; struct proc *p; dev = devvp->v_rdev; p = l ? l->l_proc : NULL; - cred = l ? l->l_cred : NOCRED; + cred = l ? l->l_cred->cr_uid : NOCRED; /* Flush out any old buffers remaining from a previous use. */ vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY); @@ -843,7 +826,7 @@ ext2fs_statvfs(struct mount *mp, struct * Note: we are always called with the filesystem marked `MPBUSY'. */ int -ext2fs_sync(struct mount *mp, int waitfor, kauth_cred_t cred) +ext2fs_sync(struct mount *mp, int waitfor, struct ucred *cred) { struct vnode *vp, *mvp; struct inode *ip; @@ -960,13 +943,13 @@ retry: *vpp = NULL; return (error); } - ip = pool_get(&ext2fs_inode_pool, PR_WAITOK); + ip = uma_zalloc(ext2fs_inode_pool, M_WAITOK); mutex_enter(&ufs_hashlock); if ((*vpp = ufs_ihashget(dev, ino, 0)) != NULL) { mutex_exit(&ufs_hashlock); ungetnewvnode(vp); - pool_put(&ext2fs_inode_pool, ip); + uma_zfree(ext2fs_inode_pool, ip); goto retry; } @@ -1010,7 +993,7 @@ retry: return (error); } cp = (char *)bp->b_data + (ino_to_fsbo(fs, ino) * EXT2_DINODE_SIZE); - ip->i_din.e2fs_din = pool_get(&ext2fs_dinode_pool, PR_WAITOK); + ip->i_din.e2fs_din = uma_zalloc(ext2fs_dinode_pool, M_WAITOK); e2fs_iload((struct ext2fs_dinode *)cp, ip->i_din.e2fs_din); brelse(bp, 0); diff -uNp /home/pluknet/tmp/ext2fs_stock/ext2fs_vnops.c ../bsdext2fs/ext2fs_vnops.c --- /home/pluknet/tmp/ext2fs_stock/ext2fs_vnops.c 2008-02-05 00:22:54.000000000 +0300 +++ ../bsdext2fs/ext2fs_vnops.c 2008-02-05 00:35:52.000000000 +0300 @@ -70,7 +70,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.81 2008/01/25 14:32:16 ad Exp $"); +__FBSDID(0, "$FreeBSD$"); #include #include @@ -85,11 +85,9 @@ __KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops #include #include #include -#include #include -#include -#include +#include #include #include @@ -97,14 +95,14 @@ __KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops #include #include -#include -#include -#include +#include +#include +#include extern int prtactive; -static int ext2fs_chmod(struct vnode *, int, kauth_cred_t, struct lwp *); -static int ext2fs_chown(struct vnode *, uid_t, gid_t, kauth_cred_t, +static int ext2fs_chmod(struct vnode *, int, struct ucred *, struct lwp *); +static int ext2fs_chown(struct vnode *, uid_t, gid_t, struct ucred *, struct lwp *); union _qcvt { @@ -212,7 +210,7 @@ ext2fs_open(void *v) struct vop_open_args /* { struct vnode *a_vp; int a_mode; - kauth_cred_t a_cred; + struct ucred *a_cred; } */ *ap = v; /* @@ -230,7 +228,7 @@ ext2fs_access(void *v) struct vop_access_args /* { struct vnode *a_vp; int a_mode; - kauth_cred_t a_cred; + struct ucred *a_cred; } */ *ap = v; struct vnode *vp = ap->a_vp; struct inode *ip = VTOI(vp); @@ -269,7 +267,7 @@ ext2fs_getattr(void *v) struct vop_getattr_args /* { struct vnode *a_vp; struct vattr *a_vap; - kauth_cred_t a_cred; + struct ucred *a_cred; } */ *ap = v; struct vnode *vp = ap->a_vp; struct inode *ip = VTOI(vp); @@ -323,12 +321,12 @@ ext2fs_setattr(void *v) struct vop_setattr_args /* { struct vnode *a_vp; struct vattr *a_vap; - kauth_cred_t a_cred; + struct ucred *a_cred; } */ *ap = v; struct vattr *vap = ap->a_vap; struct vnode *vp = ap->a_vp; struct inode *ip = VTOI(vp); - kauth_cred_t cred = ap->a_cred; + struct ucred *cred = ap->a_cred; struct lwp *l = curlwp; int error; @@ -344,17 +342,13 @@ ext2fs_setattr(void *v) if (vap->va_flags != VNOVAL) { if (vp->v_mount->mnt_flag & MNT_RDONLY) return (EROFS); - if (kauth_cred_geteuid(cred) != ip->i_e2fs_uid && - (error = kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER, - NULL))) + if (cred->cr_uid != ip->i_e2fs_uid && + (error = suser(cred, &l->l_proc->p_acflag))) return (error); #ifdef EXT2FS_SYSTEM_FLAGS - if (kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER, - NULL) == 0) { + if (cred->cr_uid == 0) { if ((ip->i_e2fs_flags & - (EXT2_APPEND | EXT2_IMMUTABLE)) && - kauth_authorize_system(l->l_cred, - KAUTH_SYSTEM_CHSYSFLAGS, 0, NULL, NULL, NULL)) + (EXT2_APPEND | EXT2_IMMUTABLE)) && securelevel > 0) return (EPERM); ip->i_e2fs_flags &= ~(EXT2_APPEND | EXT2_IMMUTABLE); ip->i_e2fs_flags |= @@ -408,9 +402,8 @@ ext2fs_setattr(void *v) if (vap->va_atime.tv_sec != VNOVAL || vap->va_mtime.tv_sec != VNOVAL) { if (vp->v_mount->mnt_flag & MNT_RDONLY) return (EROFS); - if (kauth_cred_geteuid(cred) != ip->i_e2fs_uid && - (error = kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER, - NULL)) && + if (cred->cr_uid != ip->i_e2fs_uid && + (error = suser(cred, &l->l_proc->p_acflag)) && ((vap->va_vaflags & VA_UTIMES_NULL) == 0 || (error = VOP_ACCESS(vp, VWRITE, cred)))) return (error); @@ -439,20 +432,18 @@ ext2fs_setattr(void *v) * Inode must be locked before calling. */ static int -ext2fs_chmod(struct vnode *vp, int mode, kauth_cred_t cred, struct lwp *l) +ext2fs_chmod(struct vnode *vp, int mode, struct ucred *cred, struct lwp *l) { struct inode *ip = VTOI(vp); int error, ismember = 0; - if (kauth_cred_geteuid(cred) != ip->i_e2fs_uid && - (error = kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER, - NULL))) + if (cred->cr_uid != ip->i_e2fs_uid && + (error = suser(cred, &p->p_acflag))) return (error); - if (kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER, NULL)) { + if (cred->cr_uid) { if (vp->v_type != VDIR && (mode & S_ISTXT)) return (EFTYPE); - if ((kauth_cred_ismember_gid(cred, ip->i_e2fs_gid, &ismember) != 0 || - !ismember) && (mode & ISGID)) + if (!groupmember(ip->i_e2fs_gid, cred) && (mode & S_ISGID)) return (EPERM); } ip->i_e2fs_mode &= ~ALLPERMS; @@ -483,11 +474,10 @@ ext2fs_chown(struct vnode *vp, uid_t uid * of the file, or are not a member of the target group, * the caller must be superuser or the call fails. */ - if ((kauth_cred_geteuid(cred) != ip->i_e2fs_uid || uid != ip->i_e2fs_uid || + if ((cred->cr_uid != ip->i_e2fs_uid || uid != ip->i_e2fs_uid || (gid != ip->i_e2fs_gid && - !(kauth_cred_getegid(cred) == gid || - (kauth_cred_ismember_gid(cred, gid, &ismember) == 0 && ismember)))) && - (error = kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER, NULL))) + !(cred->cr_uid == gid || groupmember((gid_t)gid, cred)))) && + (error = suser(cred, &p->p_acflag))) return (error); ogid = ip->i_e2fs_gid; ouid = ip->i_e2fs_uid; @@ -496,11 +486,9 @@ ext2fs_chown(struct vnode *vp, uid_t uid ip->i_e2fs_uid = uid; if (ouid != uid || ogid != gid) ip->i_flag |= IN_CHANGE; - if (ouid != uid && kauth_authorize_generic(cred, - KAUTH_GENERIC_ISSUSER, NULL) != 0) + if (ouid != uid && cred->cr_uid != 0) ip->i_e2fs_mode &= ~ISUID; - if (ogid != gid && kauth_authorize_generic(cred, - KAUTH_GENERIC_ISSUSER, NULL) != 0) + if (ogid != gid && cred->cr_uid != 0) ip->i_e2fs_mode &= ~ISGID; return (0); } @@ -862,11 +850,9 @@ abortit: * otherwise the destination may not be changed (except by * root). This implements append-only directories. */ - if ((dp->i_e2fs_mode & S_ISTXT) && - kauth_authorize_generic(tcnp->cn_cred, - KAUTH_GENERIC_ISSUSER, NULL) != 0 && - kauth_cred_geteuid(tcnp->cn_cred) != dp->i_e2fs_uid && - xp->i_e2fs_uid != kauth_cred_geteuid(tcnp->cn_cred)) { + if ((dp->i_e2fs_mode & S_ISTXT) && tcnp->cn_cred->cr_uid) != 0 && + tcnp->cn_cred->cr_uid != dp->i_e2fs_uid && + xp->i_e2fs_uid != tcnp->cn_cred->cr_uid) { error = EPERM; goto bad; } @@ -1069,7 +1055,7 @@ ext2fs_mkdir(void *v) if ((error = ext2fs_valloc(dvp, dmode, cnp->cn_cred, &tvp)) != 0) goto out; ip = VTOI(tvp); - ip->i_e2fs_uid = kauth_cred_geteuid(cnp->cn_cred); + ip->i_e2fs_uid = cnp->cn_cred->cr_uid; ip->i_e2fs_gid = dp->i_e2fs_gid; ip->i_flag |= IN_ACCESS | IN_CHANGE | IN_UPDATE; ip->i_e2fs_mode = dmode; @@ -1284,7 +1270,7 @@ ext2fs_readlink(void *v) struct vop_readlink_args /* { struct vnode *a_vp; struct uio *a_uio; - kauth_cred_t a_cred; + struct ucred *a_cred; } */ *ap = v; struct vnode *vp = ap->a_vp; struct inode *ip = VTOI(vp); @@ -1323,7 +1309,7 @@ ext2fs_fsync(void *v) { struct vop_fsync_args /* { struct vnode *a_vp; - kauth_cred_t a_cred; + struct ucred *a_cred; int a_flags; off_t offlo; off_t offhi; @@ -1419,14 +1405,14 @@ ext2fs_makeinode(int mode, struct vnode } ip = VTOI(tvp); ip->i_e2fs_gid = pdir->i_e2fs_gid; - ip->i_e2fs_uid = kauth_cred_geteuid(cnp->cn_cred); + ip->i_e2fs_uid = cnp->cn_cred->cr_uid; ip->i_flag |= IN_ACCESS | IN_CHANGE | IN_UPDATE; ip->i_e2fs_mode = mode; tvp->v_type = IFTOVT(mode); /* Rest init'd in getnewvnode(). */ ip->i_e2fs_nlink = 1; - if ((ip->i_e2fs_mode & ISGID) && (kauth_cred_ismember_gid(cnp->cn_cred, - ip->i_e2fs_gid, &ismember) != 0 || !ismember) && - kauth_authorize_generic(cnp->cn_cred, KAUTH_GENERIC_ISSUSER, NULL)) + if ((ip->i_e2fs_mode & ISGID) && + !groupmember(ip->i_e2fs_gid, cnp->cn_cred) && + suser(cnp->cn_cred, NULL)) ip->i_e2fs_mode &= ~ISGID; /* @@ -1473,9 +1459,9 @@ ext2fs_reclaim(void *v) if ((error = ufs_reclaim(vp)) != 0) return (error); if (ip->i_din.e2fs_din != NULL) - pool_put(&ext2fs_dinode_pool, ip->i_din.e2fs_din); + uma_zfree(ext2fs_dinode_pool, ip->i_din.e2fs_din); genfs_node_destroy(vp); - pool_put(&ext2fs_inode_pool, vp->v_data); + uma_zfree(ext2fs_inode_pool, vp->v_data); vp->v_data = NULL; return (0); }