NFSv41: fix DIO write_io calculation
Subsystems (2)
PATCH v2 1/1 NFSv41: fix DIO write_io calculation
pnfs_within_mdsthreshold() is called inside pg_init. We need to set read_io/write_io before that. Otherwise we fail pnfs_within_mdsthreshold() and IO goes to MDS.
A simple test case:
dd if=foo of=/mnt/pnfs/bar bs=10M count=1 oflag=direct
Cc Andy Adamson <[email protected]>
Signed-off-by Peng Tao <[email protected]>
--- fs/nfs/direct.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
fs/nfs/direct.c +2 -2
@@ -463,10 +463,10 @@ static ssize_t nfs_direct_read(struct kiocb *iocb, const struct iovec *iov,if (!is_sync_kiocb (iocb)) dreq->iocb = iocb; +NFS_I (inode)->read_io +=iov_length (iov, nr_segs); result =nfs_direct_read_schedule_iovec (dreq, iov, nr_segs, pos, uio);if (!result) result =nfs_direct_wait (dreq); -NFS_I (inode)->read_io += result; out_release:nfs_direct_req_release (dreq); out:
@@ -814,6 +814,7 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,get_dreq (dreq);atomic_inc (&inode->i_dio_count); +NFS_I (dreq->inode)->write_io +=iov_length (iov, nr_segs);for (seg =0 ; seg < nr_segs; seg++) {const struct iovec *vec = &iov[seg]; result =nfs_direct_write_schedule_segment (&desc, vec, pos, uio);
@@ -825,7 +826,6 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq, pos += vec->iov_len; }nfs_pageio_complete (&desc); -NFS_I (dreq->inode)->write_io += desc.pg_bytes_written;/* * If no bytes were started, return the error, and let the
Signature · 1 line
1.7.1.262.g5ef3d