diff options
author | kib <kib@FreeBSD.org> | 2016-11-29 08:20:55 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2016-11-29 08:20:55 +0000 |
commit | b646b68fbb596474a247384def9dad376176ada6 (patch) | |
tree | 498b089b0fb2910f4b137effa83e9f9b91b22138 /sys/fs/nfsclient/nfs_clvnops.c | |
parent | fc5be6d0299c1ec11afb2bc30478b614ab25f964 (diff) | |
download | FreeBSD-src-b646b68fbb596474a247384def9dad376176ada6.zip FreeBSD-src-b646b68fbb596474a247384def9dad376176ada6.tar.gz |
MFC r308980:
Use buffer pager for NFS.
MFC note: really do not, by default.
Diffstat (limited to 'sys/fs/nfsclient/nfs_clvnops.c')
-rw-r--r-- | sys/fs/nfsclient/nfs_clvnops.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c index 00adee1..11de5c2 100644 --- a/sys/fs/nfsclient/nfs_clvnops.c +++ b/sys/fs/nfsclient/nfs_clvnops.c @@ -2569,13 +2569,20 @@ ncl_commit(struct vnode *vp, u_quad_t offset, int cnt, struct ucred *cred, static int nfs_strategy(struct vop_strategy_args *ap) { - struct buf *bp = ap->a_bp; + struct buf *bp; + struct vnode *vp; struct ucred *cr; + bp = ap->a_bp; + vp = ap->a_vp; + KASSERT(bp->b_vp == vp, ("missing b_getvp")); KASSERT(!(bp->b_flags & B_DONE), ("nfs_strategy: buffer %p unexpectedly marked B_DONE", bp)); BUF_ASSERT_HELD(bp); + if (vp->v_type == VREG && bp->b_blkno == bp->b_lblkno) + bp->b_blkno = bp->b_lblkno * (vp->v_bufobj.bo_bsize / + DEV_BSIZE); if (bp->b_iocmd == BIO_READ) cr = bp->b_rcred; else @@ -2587,8 +2594,8 @@ nfs_strategy(struct vop_strategy_args *ap) * otherwise just do it ourselves. */ if ((bp->b_flags & B_ASYNC) == 0 || - ncl_asyncio(VFSTONFS(ap->a_vp->v_mount), bp, NOCRED, curthread)) - (void) ncl_doio(ap->a_vp, bp, cr, curthread, 1); + ncl_asyncio(VFSTONFS(vp->v_mount), bp, NOCRED, curthread)) + (void) ncl_doio(vp, bp, cr, curthread, 1); return (0); } |