summaryrefslogtreecommitdiffstats
path: root/sys/fs/nfsclient/nfs_clvnops.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2016-11-29 08:20:55 +0000
committerkib <kib@FreeBSD.org>2016-11-29 08:20:55 +0000
commitb646b68fbb596474a247384def9dad376176ada6 (patch)
tree498b089b0fb2910f4b137effa83e9f9b91b22138 /sys/fs/nfsclient/nfs_clvnops.c
parentfc5be6d0299c1ec11afb2bc30478b614ab25f964 (diff)
downloadFreeBSD-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.c13
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);
}
OpenPOWER on IntegriCloud