diff options
Diffstat (limited to 'sys/nfsclient/nfs_nfsiod.c')
-rw-r--r-- | sys/nfsclient/nfs_nfsiod.c | 14 |
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 |