mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-21 18:27:22 +00:00
nfsclient: eliminate ncl_writebp()
Use plain bufwrite() instead. ncl_writebp() evolved to mostly repeat bufwrite() code with some ommisions, most notably runningbufspace accounting. Reviewed by: imp, markj, rmacklem Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D43249
This commit is contained in:
parent
47ec00d9d6
commit
656d2e83d9
|
@ -111,7 +111,6 @@ int ncl_readdirrpc(struct vnode *, struct uio *, struct ucred *,
|
|||
struct thread *);
|
||||
int ncl_readdirplusrpc(struct vnode *, struct uio *, struct ucred *,
|
||||
struct thread *);
|
||||
int ncl_writebp(struct buf *, int, struct thread *);
|
||||
int ncl_commit(struct vnode *, u_quad_t, int, struct ucred *, struct thread *);
|
||||
void ncl_clearcommit(struct mount *);
|
||||
int ncl_fsinfo(struct nfsmount *, struct vnode *, struct ucred *,
|
||||
|
|
|
@ -1312,7 +1312,7 @@ ncl_write(struct vop_write_args *ap)
|
|||
}
|
||||
} else if ((n + on) == biosize || (ioflag & IO_ASYNC) != 0) {
|
||||
bp->b_flags |= B_ASYNC;
|
||||
(void) ncl_writebp(bp, 0, NULL);
|
||||
(void) bwrite(bp);
|
||||
} else {
|
||||
bdwrite(bp);
|
||||
}
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
#include <nfs/nfs_lock.h>
|
||||
|
||||
extern struct vop_vector newnfs_vnodeops;
|
||||
extern struct buf_ops buf_ops_newnfs;
|
||||
MALLOC_DECLARE(M_NEWNFSREQ);
|
||||
|
||||
uma_zone_t newnfsnode_zone;
|
||||
|
@ -130,7 +129,6 @@ ncl_nget(struct mount *mntp, u_int8_t *fhp, int fhsize, struct nfsnode **npp,
|
|||
}
|
||||
vp = nvp;
|
||||
KASSERT(vp->v_bufobj.bo_bsize != 0, ("ncl_nget: bo_bsize == 0"));
|
||||
vp->v_bufobj.bo_ops = &buf_ops_newnfs;
|
||||
vp->v_data = np;
|
||||
np->n_vnode = vp;
|
||||
/*
|
||||
|
|
|
@ -77,7 +77,6 @@ extern u_int32_t newnfs_true, newnfs_false, newnfs_xdrneg1;
|
|||
extern struct vop_vector newnfs_vnodeops;
|
||||
extern struct vop_vector newnfs_fifoops;
|
||||
extern uma_zone_t newnfsnode_zone;
|
||||
extern struct buf_ops buf_ops_newnfs;
|
||||
extern uma_zone_t ncl_pbuf_zone;
|
||||
extern short nfsv4_cbport;
|
||||
extern int nfscl_enablecallb;
|
||||
|
@ -235,7 +234,6 @@ nfscl_nget(struct mount *mntp, struct vnode *dvp, struct nfsfh *nfhp,
|
|||
}
|
||||
vp = nvp;
|
||||
KASSERT(vp->v_bufobj.bo_bsize != 0, ("nfscl_nget: bo_bsize == 0"));
|
||||
vp->v_bufobj.bo_ops = &buf_ops_newnfs;
|
||||
vp->v_data = np;
|
||||
np->n_vnode = vp;
|
||||
/*
|
||||
|
|
|
@ -2925,7 +2925,7 @@ ncl_flush(struct vnode *vp, int waitfor, struct thread *td,
|
|||
* A b_flags == (B_DELWRI | B_NEEDCOMMIT) block has been written to the
|
||||
* server, but has not been committed to stable storage on the server
|
||||
* yet. On the first pass, the byte range is worked out and the commit
|
||||
* rpc is done. On the second pass, ncl_writebp() is called to do the
|
||||
* rpc is done. On the second pass, bwrite() is called to do the
|
||||
* job.
|
||||
*/
|
||||
again:
|
||||
|
@ -3438,54 +3438,6 @@ nfs_print(struct vop_print_args *ap)
|
|||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is the "real" nfs::bwrite(struct buf*).
|
||||
* We set B_CACHE if this is a VMIO buffer.
|
||||
*/
|
||||
int
|
||||
ncl_writebp(struct buf *bp, int force __unused, struct thread *td)
|
||||
{
|
||||
int oldflags, rtval;
|
||||
|
||||
if (bp->b_flags & B_INVAL) {
|
||||
brelse(bp);
|
||||
return (0);
|
||||
}
|
||||
|
||||
oldflags = bp->b_flags;
|
||||
bp->b_flags |= B_CACHE;
|
||||
|
||||
/*
|
||||
* Undirty the bp. We will redirty it later if the I/O fails.
|
||||
*/
|
||||
bundirty(bp);
|
||||
bp->b_flags &= ~B_DONE;
|
||||
bp->b_ioflags &= ~BIO_ERROR;
|
||||
bp->b_iocmd = BIO_WRITE;
|
||||
|
||||
bufobj_wref(bp->b_bufobj);
|
||||
curthread->td_ru.ru_oublock++;
|
||||
|
||||
/*
|
||||
* Note: to avoid loopback deadlocks, we do not
|
||||
* assign b_runningbufspace.
|
||||
*/
|
||||
vfs_busy_pages(bp, 1);
|
||||
|
||||
BUF_KERNPROC(bp);
|
||||
bp->b_iooffset = dbtob(bp->b_blkno);
|
||||
bstrategy(bp);
|
||||
|
||||
if ((oldflags & B_ASYNC) != 0)
|
||||
return (0);
|
||||
|
||||
rtval = bufwait(bp);
|
||||
if (oldflags & B_DELWRI)
|
||||
reassignbuf(bp);
|
||||
brelse(bp);
|
||||
return (rtval);
|
||||
}
|
||||
|
||||
/*
|
||||
* nfs special file access vnode op.
|
||||
* Essentially just get vattr and then imitate iaccess() since the device is
|
||||
|
@ -3602,26 +3554,6 @@ nfsfifo_close(struct vop_close_args *ap)
|
|||
return (fifo_specops.vop_close(ap));
|
||||
}
|
||||
|
||||
/*
|
||||
* Just call ncl_writebp() with the force argument set to 1.
|
||||
*
|
||||
* NOTE: B_DONE may or may not be set in a_bp on call.
|
||||
*/
|
||||
static int
|
||||
nfs_bwrite(struct buf *bp)
|
||||
{
|
||||
|
||||
return (ncl_writebp(bp, 1, curthread));
|
||||
}
|
||||
|
||||
struct buf_ops buf_ops_newnfs = {
|
||||
.bop_name = "buf_ops_nfs",
|
||||
.bop_write = nfs_bwrite,
|
||||
.bop_strategy = bufstrategy,
|
||||
.bop_sync = bufsync,
|
||||
.bop_bdflush = bufbdflush,
|
||||
};
|
||||
|
||||
static int
|
||||
nfs_getacl(struct vop_getacl_args *ap)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue