summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient/nfs_nfsiod.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/nfsclient/nfs_nfsiod.c')
-rw-r--r--sys/nfsclient/nfs_nfsiod.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/nfsclient/nfs_nfsiod.c b/sys/nfsclient/nfs_nfsiod.c
index d1ca197..8cbee10 100644
--- a/sys/nfsclient/nfs_nfsiod.c
+++ b/sys/nfsclient/nfs_nfsiod.c
@@ -243,10 +243,16 @@ nfssvc_iod(void *instance)
nmp->nm_bufqwant = 0;
wakeup(&nmp->nm_bufq);
}
- if (bp->b_iocmd == BIO_READ)
- (void) nfs_doio(bp->b_vp, bp, bp->b_rcred, NULL);
- else
- (void) nfs_doio(bp->b_vp, bp, bp->b_wcred, NULL);
+ if (bp->b_flags & B_DIRECT) {
+ KASSERT((bp->b_iocmd == BIO_WRITE), ("nfscvs_iod: BIO_WRITE not set"));
+ (void)nfs_doio_directwrite(bp);
+ } else {
+ if (bp->b_iocmd == BIO_READ)
+ (void) nfs_doio(bp->b_vp, bp, bp->b_rcred, NULL);
+ else
+ (void) nfs_doio(bp->b_vp, bp, bp->b_wcred, NULL);
+ }
+
/*
* If there are more than one iod on this mount, then defect
* so that the iods can be shared out fairly between the mounts
OpenPOWER on IntegriCloud