Commit 4daaeba9 authored by Trond Myklebust's avatar Trond Myklebust Committed by Anna Schumaker

NFS: Fix nfs_direct_write_reschedule_io()

The 'hdr->good_bytes' is defined as the number of bytes we expect to
read or write starting at offset hdr->io_start. In the case of a partial
read/write we may end up adjusting hdr->args.offset and hdr->args.count
to skip I/O for data that was already read/written, and so we must ensure
the calculation takes that into account.
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 8c9cb714
...@@ -824,7 +824,8 @@ static void nfs_direct_write_reschedule_io(struct nfs_pgio_header *hdr) ...@@ -824,7 +824,8 @@ static void nfs_direct_write_reschedule_io(struct nfs_pgio_header *hdr)
dreq->flags = NFS_ODIRECT_RESCHED_WRITES; dreq->flags = NFS_ODIRECT_RESCHED_WRITES;
/* fake unstable write to let common nfs resend pages */ /* fake unstable write to let common nfs resend pages */
hdr->verf.committed = NFS_UNSTABLE; hdr->verf.committed = NFS_UNSTABLE;
hdr->good_bytes = hdr->args.count; hdr->good_bytes = hdr->args.offset + hdr->args.count -
hdr->io_start;
} }
spin_unlock(&dreq->lock); spin_unlock(&dreq->lock);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment