2022-05-14 14:33:55

by Trond Myklebust

[permalink] [raw]
Subject: [PATCH v3 0/5] Ensure mapping errors are reported only once

From: Trond Myklebust <[email protected]>

The expectation since Linux 4.13 has been that EIO errors are always
reported in fsync(), whether or not they were detected and reported
earlier.
On the other hand, ENOSPC errors are reported as soon as detected, and
should only be reported once.

--
v3: minor correctness fixes

Trond Myklebust (5):
NFS: Do not report EINTR/ERESTARTSYS as mapping errors
NFS: fsync() should report filesystem errors over EINTR/ERESTARTSYS
NFS: Don't report ENOSPC write errors twice
NFS: Do not report flush errors in nfs_write_end()
NFS: Don't report errors from nfs_pageio_complete() more than once

fs/nfs/file.c | 50 +++++++++++++++++++++-----------------------------
fs/nfs/write.c | 11 ++---------
2 files changed, 23 insertions(+), 38 deletions(-)

--
2.36.1



2022-05-14 23:03:27

by Trond Myklebust

[permalink] [raw]
Subject: [PATCH v3 1/5] NFS: Do not report EINTR/ERESTARTSYS as mapping errors

From: Trond Myklebust <[email protected]>

If the attempt to flush data was interrupted due to a local signal, then
just requeue the writes back for I/O.

Fixes: 6fbda89b257f ("NFS: Replace custom error reporting mechanism with generic one")
Signed-off-by: Trond Myklebust <[email protected]>
---
fs/nfs/write.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index a8eb348947a6..ce4cc4222422 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -1441,7 +1441,7 @@ static void nfs_async_write_error(struct list_head *head, int error)
while (!list_empty(head)) {
req = nfs_list_entry(head->next);
nfs_list_remove_request(req);
- if (nfs_error_is_fatal(error))
+ if (nfs_error_is_fatal_on_server(error))
nfs_write_error(req, error);
else
nfs_redirty_request(req);
--
2.36.1