From 1463976361b16c32da4f4149859180b6efee948f Mon Sep 17 00:00:00 2001 From: Jason Downs Date: Thu, 27 Jun 1996 06:48:42 +0000 Subject: Changed to match UFS changes; remove old file. --- sys/gnu/ext2fs/ext2_extern.h | 4 +- sys/gnu/ext2fs/ext2_fs.h | 21 +-- sys/gnu/ext2fs/ext2_readwrite.c | 293 ---------------------------------------- sys/gnu/ext2fs/ext2_vfsops.c | 9 +- 4 files changed, 5 insertions(+), 322 deletions(-) delete mode 100644 sys/gnu/ext2fs/ext2_readwrite.c (limited to 'sys/gnu/ext2fs') diff --git a/sys/gnu/ext2fs/ext2_extern.h b/sys/gnu/ext2fs/ext2_extern.h index 0e9b4dc8f23..634bf1284a2 100644 --- a/sys/gnu/ext2fs/ext2_extern.h +++ b/sys/gnu/ext2fs/ext2_extern.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ext2_extern.h,v 1.1 1996/06/24 03:34:54 downsj Exp $ */ +/* $OpenBSD: ext2_extern.h,v 1.2 1996/06/27 06:48:40 downsj Exp $ */ /* * modified for EXT2FS support in Lites 1.1 @@ -98,7 +98,7 @@ void mark_buffer_dirty __P((struct buf *bh)); * This macro allows the ufs code to distinguish between an EXT2 and a * non-ext2(FFS/LFS) vnode. We shouldn't need this! */ -#define IS_EXT2_VNODE(vp) (VTOI(vp)->i_dirops->dirremove == ext2_dirremove) +#define IS_EXT2_VNODE(vp) (VFSTOUFS(vp->v_mount)->um_dirops->dirremove == ext2_dirremove) #ifdef DIAGNOSTIC void ext2_checkoverlap __P((struct buf *, struct inode *)); diff --git a/sys/gnu/ext2fs/ext2_fs.h b/sys/gnu/ext2fs/ext2_fs.h index 7f186587cf1..a8d9e2eb11f 100644 --- a/sys/gnu/ext2fs/ext2_fs.h +++ b/sys/gnu/ext2fs/ext2_fs.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ext2_fs.h,v 1.2 1996/06/24 10:23:19 downsj Exp $ */ +/* $OpenBSD: ext2_fs.h,v 1.3 1996/06/27 06:48:40 downsj Exp $ */ /* * modified for EXT2FS support in Lites 1.1 @@ -37,25 +37,6 @@ #define umode_t mode_t #define loff_t off_t -/* the Linux implementation of EXT2 stores some information about - * an inode in a ext2_inode_info structure which is part of the incore - * inode in Linux - */ - -struct ext2_inode_info { - int32_t info_block_group; - int32_t info_next_alloc_block; - int32_t info_next_alloc_goal; - int32_t info_prealloc_block; - int32_t info_prealloc_count; -}; - -#define i_block_group i_e2ext->info_block_group -#define i_next_alloc_block i_e2ext->info_next_alloc_block -#define i_next_alloc_goal i_e2ext->info_next_alloc_goal -#define i_prealloc_block i_e2ext->info_prealloc_block -#define i_prealloc_count i_e2ext->info_prealloc_count - /* * The second extended filesystem constants/structures */ diff --git a/sys/gnu/ext2fs/ext2_readwrite.c b/sys/gnu/ext2fs/ext2_readwrite.c deleted file mode 100644 index efdb64c0ddf..00000000000 --- a/sys/gnu/ext2fs/ext2_readwrite.c +++ /dev/null @@ -1,293 +0,0 @@ -/* $OpenBSD: ext2_readwrite.c,v 1.1 1996/06/24 03:34:57 downsj Exp $ */ - -/* - * modified for Lites 1.1 - * - * Aug 1995, Godmar Back (gback@cs.utah.edu) - * University of Utah, Department of Computer Science - */ -/* - * Copyright (c) 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)ufs_readwrite.c 8.7 (Berkeley) 1/21/94 - */ - -#define BLKSIZE(a, b, c) blksize(a, b, c) -#define FS struct ext2_sb_info -#define I_FS i_e2fs -#define READ ext2_read -#define READ_S "ext2_read" -#define WRITE ext2_write -#define WRITE_S "ext2_write" - -/* - * Vnode op for reading. - */ -/* ARGSUSED */ -int -READ(v) - void *v; -{ - struct vop_read_args /* { - struct vnode *a_vp; - struct uio *a_uio; - int a_ioflag; - struct ucred *a_cred; - } */ *ap = v; - register struct vnode *vp; - register struct inode *ip; - register struct uio *uio; - register FS *fs; - struct buf *bp; - daddr_t lbn, nextlbn; - off_t bytesinfile; - long size, xfersize, blkoffset; - int error; - u_short mode; - - vp = ap->a_vp; - ip = VTOI(vp); - mode = ip->i_mode; - uio = ap->a_uio; - -#if DIAGNOSTIC - if (uio->uio_rw != UIO_READ) - panic("%s: mode", READ_S); - - if (vp->v_type == VLNK) { - if ((int)ip->i_size < vp->v_mount->mnt_maxsymlinklen) - panic("%s: short symlink", READ_S); - } else if (vp->v_type != VREG && vp->v_type != VDIR) - panic("%s: type %d", READ_S, vp->v_type); -#endif - fs = ip->I_FS; -#if 0 - if ((u_int64_t)uio->uio_offset > fs->fs_maxfilesize) - return (EFBIG); -#endif - - for (error = 0, bp = NULL; uio->uio_resid > 0; bp = NULL) { - if ((bytesinfile = ip->i_size - uio->uio_offset) <= 0) - break; - lbn = lblkno(fs, uio->uio_offset); - nextlbn = lbn + 1; - size = BLKSIZE(fs, ip, lbn); - blkoffset = blkoff(fs, uio->uio_offset); - xfersize = fs->s_frag_size - blkoffset; - if (uio->uio_resid < xfersize) - xfersize = uio->uio_resid; - if (bytesinfile < xfersize) - xfersize = bytesinfile; - - if (lblktosize(fs, nextlbn) > ip->i_size) - error = bread(vp, lbn, size, NOCRED, &bp); - else if (doclusterread) - error = cluster_read(vp, - ip->i_size, lbn, size, NOCRED, &bp); - else if (lbn - 1 == vp->v_lastr) { - int nextsize = BLKSIZE(fs, ip, nextlbn); - error = breadn(vp, lbn, - size, &nextlbn, &nextsize, 1, NOCRED, &bp); - } else - error = bread(vp, lbn, size, NOCRED, &bp); - if (error) { - brelse(bp); - bp = NULL; - break; - } - vp->v_lastr = lbn; - - /* - * We should only get non-zero b_resid when an I/O error - * has occurred, which should cause us to break above. - * However, if the short read did not cause an error, - * then we want to ensure that we do not uiomove bad - * or uninitialized data. - */ - size -= bp->b_resid; - if (size < xfersize) { - if (size == 0) - break; - xfersize = size; - } - error = uiomove((char *)bp->b_data + blkoffset, (int)xfersize, - uio); - if (error) - break; - brelse(bp); - } - if (bp != NULL) - brelse(bp); - ip->i_flag |= IN_ACCESS; - return (error); -} - -/* - * Vnode op for writing. - */ -int -WRITE(v) - void *v; -{ - struct vop_write_args /* { - struct vnode *a_vp; - struct uio *a_uio; - int a_ioflag; - struct ucred *a_cred; - } */ *ap = v; - register struct vnode *vp; - register struct uio *uio; - register struct inode *ip; - register FS *fs; - struct buf *bp; - struct proc *p; - daddr_t lbn; - off_t osize; - int blkoffset, error, flags, ioflag, resid, size, xfersize; - - ioflag = ap->a_ioflag; - uio = ap->a_uio; - vp = ap->a_vp; - ip = VTOI(vp); - -#if DIAGNOSTIC - if (uio->uio_rw != UIO_WRITE) - panic("%s: mode", WRITE_S); -#endif - - switch (vp->v_type) { - case VREG: - if (ioflag & IO_APPEND) - uio->uio_offset = ip->i_size; - if ((ip->i_flags & APPEND) && uio->uio_offset != ip->i_size) - return (EPERM); - /* FALLTHROUGH */ - case VLNK: - break; - case VDIR: - if ((ioflag & IO_SYNC) == 0) - panic("%s: nonsync dir write", WRITE_S); - break; - default: - panic("%s: type", WRITE_S); - } - - fs = ip->I_FS; -#if 0 - if (uio->uio_offset < 0 || - (u_int64_t)uio->uio_offset + uio->uio_resid > fs->fs_maxfilesize) -#else - if (uio->uio_offset < 0) -#endif - return (EFBIG); - /* - * Maybe this should be above the vnode op call, but so long as - * file servers have no limits, I don't think it matters. - */ - p = uio->uio_procp; - if (vp->v_type == VREG && p && - uio->uio_offset + uio->uio_resid > - p->p_rlimit[RLIMIT_FSIZE].rlim_cur) { - psignal(p, SIGXFSZ); - return (EFBIG); - } - - resid = uio->uio_resid; - osize = ip->i_size; - flags = ioflag & IO_SYNC ? B_SYNC : 0; - - for (error = 0; uio->uio_resid > 0;) { - lbn = lblkno(fs, uio->uio_offset); - blkoffset = blkoff(fs, uio->uio_offset); - xfersize = fs->s_frag_size - blkoffset; - if (uio->uio_resid < xfersize) - xfersize = uio->uio_resid; - - if (fs->s_frag_size > xfersize) - flags |= B_CLRBUF; - else - flags &= ~B_CLRBUF; - - error = ext2_balloc(ip, - lbn, blkoffset + xfersize, ap->a_cred, &bp, flags); - - if (error) - break; - if (uio->uio_offset + xfersize > ip->i_size) { - ip->i_size = uio->uio_offset + xfersize; - vnode_pager_setsize(vp, (u_long)ip->i_size); - } - (void)vnode_pager_uncache(vp); - - size = BLKSIZE(fs, ip, lbn) - bp->b_resid; - if (size < xfersize) - xfersize = size; - - error = - uiomove((char *)bp->b_data + blkoffset, (int)xfersize, uio); - - if (ioflag & IO_SYNC) - (void)bwrite(bp); - else if (xfersize + blkoffset == fs->s_frag_size) { - if (doclusterwrite) - cluster_write(bp, ip->i_size); - else - bawrite(bp); - } else - bdwrite(bp); - - if (error || xfersize == 0) - break; - ip->i_flag |= IN_CHANGE | IN_UPDATE; - } - /* - * If we successfully wrote any data, and we are not the superuser - * we clear the setuid and setgid bits as a precaution against - * tampering. - */ - if (resid > uio->uio_resid && ap->a_cred && ap->a_cred->cr_uid != 0) - ip->i_mode &= ~(ISUID | ISGID); - if (error) { - if (ioflag & IO_UNIT) { - (void)VOP_TRUNCATE(vp, osize, - ioflag & IO_SYNC, ap->a_cred, uio->uio_procp); - uio->uio_offset -= resid - uio->uio_resid; - uio->uio_resid = resid; - } - } else if (resid > uio->uio_resid && (ioflag & IO_SYNC)) { - struct timespec ts; - TIMEVAL_TO_TIMESPEC(&time, &ts); - - error = VOP_UPDATE(vp, &ts, &ts, 1); - } - return (error); -} diff --git a/sys/gnu/ext2fs/ext2_vfsops.c b/sys/gnu/ext2fs/ext2_vfsops.c index 825e70e0446..6223c32b3bb 100644 --- a/sys/gnu/ext2fs/ext2_vfsops.c +++ b/sys/gnu/ext2fs/ext2_vfsops.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ext2_vfsops.c,v 1.2 1996/06/24 10:23:21 downsj Exp $ */ +/* $OpenBSD: ext2_vfsops.c,v 1.3 1996/06/27 06:48:41 downsj Exp $ */ /* * modified for EXT2FS support in Lites 1.1 @@ -640,6 +640,7 @@ ext2_mountfs(devvp, mp, p) ump->um_nindir = EXT2_ADDR_PER_BLOCK(fs); ump->um_bptrtodb = fs->s_es->s_log_block_size + 1; ump->um_seqinc = EXT2_FRAGS_PER_BLOCK(fs); + ump->um_dirops = &ext2fs_dirops; for (i = 0; i < MAXQUOTAS; i++) ump->um_quotas[i] = NULLVP; devvp->v_specflags |= SI_MOUNTEDON; @@ -886,7 +887,6 @@ ext2_vget(mp, ino, vpp) { register struct ext2_sb_info *fs; register struct inode *ip; - register struct ext2_inode_info *e2ip; struct ufsmount *ump; struct buf *bp; struct vnode *vp; @@ -926,17 +926,12 @@ restart: type = ump->um_devvp->v_tag == VT_MFS ? M_MFSNODE : M_FFSNODE; /* XXX */ MALLOC(ip, struct inode *, sizeof(struct inode), type, M_WAITOK); bzero((caddr_t)ip, sizeof(struct inode)); - MALLOC(e2ip, struct ext2_inode_info *, sizeof(struct ext2_inode_info), - type, M_WAITOK); - bzero((caddr_t)e2ip, sizeof(struct ext2_inode_info)); vp->v_data = ip; ip->i_vnode = vp; ip->i_e2fs = fs = ump->um_e2fs; ip->i_dev = dev; ip->i_number = ino; - ip->i_dirops = &ext2fs_dirops; - ip->i_e2ext = e2ip; #if QUOTA for (i = 0; i < MAXQUOTAS; i++) ip->i_dquot[i] = NODQUOT; -- cgit v1.2.3