unifdef -DLFS_READWRITE ulfs_readwrite.c
This commit is contained in:
parent
0e1db64433
commit
c3875562ca
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: lfs_vnops.c,v 1.323 2019/01/01 10:06:55 hannken Exp $ */
|
||||
/* $NetBSD: lfs_vnops.c,v 1.324 2019/06/20 00:49:11 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
|
||||
|
@ -125,7 +125,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.323 2019/01/01 10:06:55 hannken Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.324 2019/06/20 00:49:11 christos Exp $");
|
||||
|
||||
#ifdef _KERNEL_OPT
|
||||
#include "opt_compat_netbsd.h"
|
||||
|
@ -350,9 +350,7 @@ const struct vnodeopv_entry_desc lfs_fifoop_entries[] = {
|
|||
const struct vnodeopv_desc lfs_fifoop_opv_desc =
|
||||
{ &lfs_fifoop_p, lfs_fifoop_entries };
|
||||
|
||||
#define LFS_READWRITE
|
||||
#include <ufs/lfs/ulfs_readwrite.c>
|
||||
#undef LFS_READWRITE
|
||||
|
||||
/*
|
||||
* Allocate a new inode.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: ulfs_readwrite.c,v 1.24 2017/06/10 05:29:36 maya Exp $ */
|
||||
/* $NetBSD: ulfs_readwrite.c,v 1.25 2019/06/20 00:49:11 christos Exp $ */
|
||||
/* from NetBSD: ufs_readwrite.c,v 1.120 2015/04/12 22:48:38 riastradh Exp */
|
||||
|
||||
/*-
|
||||
|
@ -33,9 +33,8 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(1, "$NetBSD: ulfs_readwrite.c,v 1.24 2017/06/10 05:29:36 maya Exp $");
|
||||
__KERNEL_RCSID(1, "$NetBSD: ulfs_readwrite.c,v 1.25 2019/06/20 00:49:11 christos Exp $");
|
||||
|
||||
#ifdef LFS_READWRITE
|
||||
#define FS struct lfs
|
||||
#define I_FS i_lfs
|
||||
#define READ lfs_read
|
||||
|
@ -46,17 +45,6 @@ __KERNEL_RCSID(1, "$NetBSD: ulfs_readwrite.c,v 1.24 2017/06/10 05:29:36 maya Exp
|
|||
#define BUFWR lfs_bufwr
|
||||
#define fs_sb_getbsize(fs) lfs_sb_getbsize(fs)
|
||||
#define fs_bmask lfs_bmask
|
||||
#else
|
||||
#define FS struct fs
|
||||
#define I_FS i_fs
|
||||
#define READ ffs_read
|
||||
#define READ_S "ffs_read"
|
||||
#define WRITE ffs_write
|
||||
#define WRITE_S "ffs_write"
|
||||
#define BUFRD ffs_bufrd
|
||||
#define BUFWR ffs_bufwr
|
||||
#define fs_sb_getbsize(fs) (fs)->fs_bsize
|
||||
#endif
|
||||
|
||||
static int ulfs_post_read_update(struct vnode *, int, int);
|
||||
static int ulfs_post_write_update(struct vnode *, struct uio *, int,
|
||||
|
@ -95,20 +83,14 @@ READ(void *v)
|
|||
/* XXX Eliminate me by refusing directory reads from userland. */
|
||||
if (vp->v_type == VDIR)
|
||||
return BUFRD(vp, uio, ioflag, ap->a_cred);
|
||||
#ifdef LFS_READWRITE
|
||||
/* XXX Eliminate me by using ufs_bufio in lfs. */
|
||||
if (vp->v_type == VREG && ip->i_number == LFS_IFILE_INUM)
|
||||
return BUFRD(vp, uio, ioflag, ap->a_cred);
|
||||
#endif
|
||||
if ((u_int64_t)uio->uio_offset > fs->um_maxfilesize)
|
||||
return (EFBIG);
|
||||
if (uio->uio_resid == 0)
|
||||
return (0);
|
||||
|
||||
#ifndef LFS_READWRITE
|
||||
if ((ip->i_flags & (SF_SNAPSHOT | SF_SNAPINVAL)) == SF_SNAPSHOT)
|
||||
return ffs_snapshot_read(vp, uio, ioflag);
|
||||
#endif /* !LFS_READWRITE */
|
||||
|
||||
if (uio->uio_offset >= ip->i_size)
|
||||
goto out;
|
||||
|
@ -167,9 +149,6 @@ BUFRD(struct vnode *vp, struct uio *uio, int ioflag, kauth_cred_t cred)
|
|||
if (uio->uio_resid == 0)
|
||||
return 0;
|
||||
|
||||
#ifndef LFS_READWRITE
|
||||
KASSERT(!ISSET(ip->i_flags, (SF_SNAPSHOT | SF_SNAPINVAL)));
|
||||
#endif
|
||||
|
||||
if (uio->uio_offset >= ip->i_size)
|
||||
goto out;
|
||||
|
@ -283,12 +262,10 @@ WRITE(void *v)
|
|||
if (uio->uio_offset < 0 ||
|
||||
(u_int64_t)uio->uio_offset + uio->uio_resid > fs->um_maxfilesize)
|
||||
return (EFBIG);
|
||||
#ifdef LFS_READWRITE
|
||||
/* Disallow writes to the Ifile, even if noschg flag is removed */
|
||||
/* XXX can this go away when the Ifile is no longer in the namespace? */
|
||||
if (vp == fs->lfs_ivnode)
|
||||
return (EPERM);
|
||||
#endif
|
||||
if (uio->uio_resid == 0)
|
||||
return (0);
|
||||
|
||||
|
@ -301,11 +278,9 @@ WRITE(void *v)
|
|||
|
||||
KASSERT(vp->v_type == VREG);
|
||||
|
||||
#ifdef LFS_READWRITE
|
||||
async = true;
|
||||
lfs_availwait(fs, lfs_btofsb(fs, uio->uio_resid));
|
||||
lfs_check(vp, LFS_UNUSED_LBN, 0);
|
||||
#endif /* !LFS_READWRITE */
|
||||
|
||||
preallocoff = round_page(lfs_blkroundup(fs, MAX(osize, uio->uio_offset)));
|
||||
aflag = ioflag & IO_SYNC ? B_SYNC : 0;
|
||||
|
@ -420,18 +395,7 @@ WRITE(void *v)
|
|||
* XXXUBC simplistic async flushing.
|
||||
*/
|
||||
|
||||
#ifndef LFS_READWRITE
|
||||
if (!async && oldoff >> 16 != uio->uio_offset >> 16) {
|
||||
mutex_enter(vp->v_interlock);
|
||||
error = VOP_PUTPAGES(vp, (oldoff >> 16) << 16,
|
||||
(uio->uio_offset >> 16) << 16,
|
||||
PGO_CLEANIT | PGO_LAZY);
|
||||
if (error)
|
||||
break;
|
||||
}
|
||||
#else
|
||||
__USE(async);
|
||||
#endif
|
||||
}
|
||||
if (error == 0 && ioflag & IO_SYNC) {
|
||||
mutex_enter(vp->v_interlock);
|
||||
|
@ -462,9 +426,7 @@ BUFWR(struct vnode *vp, struct uio *uio, int ioflag, kauth_cred_t cred)
|
|||
daddr_t lbn;
|
||||
int extended=0;
|
||||
int error;
|
||||
#ifdef LFS_READWRITE
|
||||
bool need_unreserve = false;
|
||||
#endif
|
||||
|
||||
KASSERT(ISSET(ioflag, IO_NODELOCKED));
|
||||
KASSERT(VOP_ISLOCKED(vp) == LK_EXCLUSIVE);
|
||||
|
@ -481,9 +443,7 @@ BUFWR(struct vnode *vp, struct uio *uio, int ioflag, kauth_cred_t cred)
|
|||
uio->uio_resid > fs->um_maxfilesize ||
|
||||
uio->uio_offset > (fs->um_maxfilesize - uio->uio_resid))
|
||||
return EFBIG;
|
||||
#ifdef LFS_READWRITE
|
||||
KASSERT(vp != fs->lfs_ivnode);
|
||||
#endif
|
||||
if (uio->uio_resid == 0)
|
||||
return 0;
|
||||
|
||||
|
@ -494,10 +454,8 @@ BUFWR(struct vnode *vp, struct uio *uio, int ioflag, kauth_cred_t cred)
|
|||
|
||||
KASSERT(vp->v_type != VREG);
|
||||
|
||||
#ifdef LFS_READWRITE
|
||||
lfs_availwait(fs, lfs_btofsb(fs, uio->uio_resid));
|
||||
lfs_check(vp, LFS_UNUSED_LBN, 0);
|
||||
#endif /* !LFS_READWRITE */
|
||||
|
||||
/* XXX Should never have pages cached here. */
|
||||
KASSERT(vp->v_uobj.uo_npages == 0);
|
||||
|
@ -510,13 +468,11 @@ BUFWR(struct vnode *vp, struct uio *uio, int ioflag, kauth_cred_t cred)
|
|||
else
|
||||
flags &= ~B_CLRBUF;
|
||||
|
||||
#ifdef LFS_READWRITE
|
||||
error = lfs_reserve(fs, vp, NULL,
|
||||
lfs_btofsb(fs, (ULFS_NIADDR + 1) << lfs_sb_getbshift(fs)));
|
||||
if (error)
|
||||
break;
|
||||
need_unreserve = true;
|
||||
#endif
|
||||
error = lfs_balloc(vp, uio->uio_offset, xfersize, cred, flags,
|
||||
&bp);
|
||||
|
||||
|
@ -543,28 +499,17 @@ BUFWR(struct vnode *vp, struct uio *uio, int ioflag, kauth_cred_t cred)
|
|||
brelse(bp, BC_INVAL);
|
||||
break;
|
||||
}
|
||||
#ifdef LFS_READWRITE
|
||||
(void)VOP_BWRITE(bp->b_vp, bp);
|
||||
lfs_reserve(fs, vp, NULL,
|
||||
-lfs_btofsb(fs, (ULFS_NIADDR + 1) << lfs_sb_getbshift(fs)));
|
||||
need_unreserve = false;
|
||||
#else
|
||||
if (ioflag & IO_SYNC)
|
||||
(void)bwrite(bp);
|
||||
else if (xfersize + blkoffset == fs->fs_bsize)
|
||||
bawrite(bp);
|
||||
else
|
||||
bdwrite(bp);
|
||||
#endif
|
||||
if (error || xfersize == 0)
|
||||
break;
|
||||
}
|
||||
#ifdef LFS_READWRITE
|
||||
if (need_unreserve) {
|
||||
lfs_reserve(fs, vp, NULL,
|
||||
-lfs_btofsb(fs, (ULFS_NIADDR + 1) << lfs_sb_getbshift(fs)));
|
||||
}
|
||||
#endif
|
||||
|
||||
error = ulfs_post_write_update(vp, uio, ioflag, cred, osize, resid,
|
||||
extended, error);
|
||||
|
|
Loading…
Reference in New Issue