NFS: nfs_set_pgio_error sometimes misses errors
Subsystems (2)
PATCH 1/1 NFS: nfs_set_pgio_error sometimes misses errors
We should ensure that we always set the pgio_header's error field if a READ or WRITE RPC call returns an error. The current code depends on 'hdr->good_bytes' always being initialised to a large value, which is not always done correctly by callers.
When this happens, applications may end up missing important errors.
Signed-off-by Trond Myklebust <[email protected]>
--- fs/nfs/pagelist.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/nfs/pagelist.c +2 -2
@@ -77,8 +77,8 @@ EXPORT_SYMBOL_GPL(nfs_pgheader_init);void nfs_set_pgio_error (struct nfs_pgio_header *hdr,int error,loff_t pos) {spin_lock (&hdr->lock); -if (pos < hdr->io_start + hdr->good_bytes) { -set_bit (NFS_IOHDR_ERROR , &hdr->flags); +if (!test_and_set_bit (NFS_IOHDR_ERROR , &hdr->flags) + || pos < hdr->io_start + hdr->good_bytes) {clear_bit (NFS_IOHDR_EOF , &hdr->flags); hdr->good_bytes = pos - hdr->io_start; hdr->error = error;
Signature · 1 line
2.4.3