All of
 help / color / mirror / Atom feed
From: "chenxiaosong (A)" <>
To: Trond Myklebust <>,
	"" <>,
	"" <>
Cc: "" <>,
	"" <>,
	"" <>
Subject: Re: [PATCH v2 3/5] NFS: Don't report ENOSPC write errors twice
Date: Tue, 12 Apr 2022 21:29:31 +0800	[thread overview]
Message-ID: <> (raw)
In-Reply-To: <>

在 2022/4/12 21:13, chenxiaosong (A) 写道:
> 在 2022/4/12 20:16, Trond Myklebust 写道:
>> I understand all that. The point you appear to be missing is that this
>> is in fact in agreement with the documented behaviour in the write(2)
>> and fsync(2) manpages. These errors are supposed to be reported once,
>> even if they were caused by a write to a different file descriptor.
>> In fact, even with your change, if you make the second 'dd' call fsync
>> (by adding a conv=fsync), I would expect it to report the exact same
>> ENOSPC error, and that would be correct behaviour!
>> So my patches are more concerned with the fact that we appear to be
>> reporting the same error more than once, rather than the fact that
>> we're reporting them in the second attempt at I/O. As far as I'm
>> concerned, that is the main change that is needed to meet the behaviour
>> that is documented in the manpages.
> After merging my patchset, when make the second 'dd' call fsync (by 
> adding a conv=fsync), it can report ENOSPC error by calling fsync() 
> syscall.
> And when make the second 'dd' sync write (by adding a oflag=sync), it 
> can report ENOSPC error too:
> ```c
> write
>    ksys_write
>      vfs_write
>        new_sync_write
>          call_write_iter
>            nfs_file_write
>              generic_write_sync
>                vfs_fsync_range
>                  nfs_file_fsync
> ```

On other filesystem, wb error is only cleared when doing fsync() or sync 
write(), it should not clear the wb error when doing async write(). Your 
patch will clear the wb error when doing async write().

And my patchset mainly fix following problem:

filemap_sample_wb_err() always return 0 if old writeback error
have not been consumed. filemap_check_wb_err() will return the old error
even if there is no new writeback error between filemap_sample_wb_err() and

   since = filemap_sample_wb_err() = 0
       if (!(old & ERRSEQ_SEEN)) // nobody see the error
         return 0;
   nfs_wb_all // no new error
   error = filemap_check_wb_err(..., since) != 0 // unexpected error

  reply	other threads:[~2022-04-12 13:29 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-11 21:33 [PATCH v2 0/5] Ensure mapping errors are reported only once trondmy
2022-04-11 21:33 ` [PATCH v2 1/5] NFS: Do not report EINTR/ERESTARTSYS as mapping errors trondmy
2022-04-11 21:33   ` [PATCH v2 2/5] NFS: fsync() should report filesystem errors over EINTR/ERESTARTSYS trondmy
2022-04-11 21:33     ` [PATCH v2 3/5] NFS: Don't report ENOSPC write errors twice trondmy
2022-04-11 21:33       ` [PATCH v2 4/5] NFS: Do not report flush errors in nfs_write_end() trondmy
2022-04-11 21:33         ` [PATCH v2 5/5] NFS: Don't report errors from nfs_pageio_complete() more than once trondmy
2022-04-12  6:24       ` [PATCH v2 3/5] NFS: Don't report ENOSPC write errors twice chenxiaosong (A)
2022-04-12 12:16         ` Trond Myklebust
2022-04-12 13:13           ` chenxiaosong (A)
2022-04-12 13:29             ` chenxiaosong (A) [this message]
2022-04-12 14:25               ` chenxiaosong (A)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \ \ \ \ \ \
    --subject='Re: [PATCH v2 3/5] NFS: Don'\''t report ENOSPC write errors twice' \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.