All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Layton <jlayton@redhat.com>
To: NeilBrown <neilb@suse.com>, linux-fsdevel@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, akpm@linux-foundation.org,
	tytso@mit.edu, jack@suse.cz, willy@infradead.org,
	viro@zeniv.linux.org.uk
Subject: Re: [PATCH v2 07/17] fs: new infrastructure for writeback error handling and reporting
Date: Wed, 12 Apr 2017 19:01:57 -0400	[thread overview]
Message-ID: <1492038117.19286.6.camel@redhat.com> (raw)
In-Reply-To: <87inm9uw8b.fsf@notabene.neil.brown.name>

On Thu, 2017-04-13 at 07:55 +1000, NeilBrown wrote:
> On Wed, Apr 12 2017, Jeff Layton wrote:
> 
> 
> > +void __filemap_set_wb_error(struct address_space *mapping, int err)
> 
> I was really hoping that this would be
> 
>   void __set_wb_error(wb_err_t *wb_err, int err)
> 
> so
> 
> Then nfs_context_set_write_error could become
> 
> static void nfs_context_set_write_error(struct nfs_open_context *ctx, int error)
> {
> 	__set_wb_error(&ctx->wb_err, error);
> }
> 
> and filemap_set_sb_error() would be:
> 
> static inline void filemap_set_wb_error(struct address_space *mapping, int err)
> {
> 	/* Optimize for the common case of no error */
> 	if (unlikely(err))
> 		__set_wb_error(&mapping->f_wb_err, err);
> }
> 
> Similarly we would have
>   wb_err_t sample_wb_error(wb_err_t *wb_err)
>   {
>    ...
>   }
> 
> and
> 
> wb_err_t filemap_sample_wb_error(struct address_space *mapping)
> {
>   return sample_wb_error(&mapping->f_wb_err);
> }
> 
> so nfs_file_fsync_commit() could have
>   ret = sample_wb_error(&ctx->wb_err);
> in place of
> 	ret = xchg(&ctx->error, 0);
> 
> int filemap_report_wb_error(struct file *file)
> 
> would become
> 
> int filemap_report_wb_error(struct file *file, wb_err_t *err)
> 
> or something.
> 
> The address space is just one (obvious) place where the wb error can be
> stored.  The filesystem might have a different place with finer
> granularity (nfs already does).
> 
> 

I think it'd be much simpler to adapt NFS over to use the new
infrastructure (I have a draft patch for that already). You'd lose the
ability to track a different error for each nfs_open_context, but I'm
not sure how valuable that is anyway. I'll need to think about that
one...

> > +wb_err_t filemap_sample_wb_error(struct address_space *mapping)
> > +{
> > +	wb_err_t old = READ_ONCE(mapping->wb_err);
> > +	wb_err_t new = old;
> > +
> > +	/*
> > +	 * For the common case of no errors ever having been set, we can skip
> > +	 * marking the SEEN bit. Once an error has been set, the value will
> > +	 * never go back to zero.
> > +	 */
> > +	if (old != 0) {
> > +		new |= WB_ERR_SEEN;
> > +		if (old != new)
> > +			cmpxchg(&mapping->wb_err, old, new);
> > +	}
> > +	return new;
> > +}
> 
> I do like how the use of cmpxchg work out here - no looping!
> 

Me too. :)
-- 
Jeff Layton <jlayton@redhat.com>

  reply	other threads:[~2017-04-12 23:02 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-12 12:05 [PATCH v2 00/17] fs: introduce new writeback error reporting and convert existing API as a wrapper around it Jeff Layton
2017-04-12 12:05 ` [PATCH v2 01/17] mm: drop "wait" parameter from write_one_page Jeff Layton
2017-04-12 12:15   ` Jan Kara
2017-04-12 14:27   ` Matthew Wilcox
2017-04-12 14:34     ` Jeff Layton
2017-04-12 15:12     ` Dave Kleikamp
2017-04-12 12:05 ` [PATCH v2 02/17] mm: fix mapping_set_error call in me_pagecache_dirty Jeff Layton
2017-04-12 12:16   ` Jan Kara
2017-04-12 14:28   ` Matthew Wilcox
2017-04-12 12:06 ` [PATCH v2 03/17] buffer: use mapping_set_error instead of setting the flag Jeff Layton
2017-04-12 12:17   ` Jan Kara
2017-04-12 14:29   ` Matthew Wilcox
2017-04-12 12:06 ` [PATCH v2 04/17] ext2: don't test/clear AS_EIO flag Jeff Layton
2017-04-12 12:29   ` Jan Kara
2017-04-12 12:30     ` Jeff Layton
2017-04-12 12:06 ` [PATCH v2 05/17] orangefs: don't call filemap_write_and_wait from fsync Jeff Layton
2017-04-12 12:06 ` [PATCH v2 06/17] mm: doc comment for scary spot in write_one_page Jeff Layton
2017-04-12 13:01   ` Jeff Layton
2017-04-12 14:38     ` Matthew Wilcox
2017-04-12 15:52       ` Jeff Layton
2017-04-12 21:36         ` NeilBrown
2017-04-12 22:55           ` Jeff Layton
2017-04-12 12:06 ` [PATCH v2 07/17] fs: new infrastructure for writeback error handling and reporting Jeff Layton
2017-04-12 18:42   ` Jeff Layton
2017-04-12 21:55     ` NeilBrown
2017-04-12 23:01       ` Jeff Layton [this message]
2017-04-17 22:53         ` NeilBrown
2017-04-12 12:06 ` [PATCH v2 08/17] fs: retrofit old error reporting API onto new infrastructure Jeff Layton
2017-04-12 22:14   ` NeilBrown
2017-04-12 22:41     ` Jeff Layton
2017-04-17 22:56       ` NeilBrown
2017-04-21 12:46         ` Jeff Layton
2017-04-23 22:38           ` NeilBrown
2017-04-24 11:50             ` Jeff Layton
2017-04-17 15:17     ` Jeff Layton
2017-04-12 12:06 ` [PATCH v2 09/17] mm: remove AS_EIO and AS_ENOSPC flags Jeff Layton
2017-04-12 12:06 ` [PATCH v2 10/17] dax: set errors in mapping when writeback fails Jeff Layton
2017-04-12 12:06 ` [PATCH v2 11/17] nilfs2: set the mapping error when calling SetPageError on writeback Jeff Layton
2017-04-12 12:06 ` [PATCH v2 12/17] mm: ensure that we set mapping error if writeout() fails Jeff Layton
2017-04-12 12:06 ` [PATCH v2 13/17] mm: don't TestClearPageError in __filemap_fdatawait_range Jeff Layton
2017-04-12 12:06 ` [PATCH v2 14/17] 9p: set mapping error when writeback fails in launder_page Jeff Layton
2017-04-12 12:06 ` [PATCH v2 15/17] fuse: set mapping error in writepage_locked when it fails Jeff Layton
2017-04-12 12:06 ` [PATCH v2 16/17] cifs: set mapping error when page writeback fails in writepage or launder_pages Jeff Layton
2017-04-12 12:06 ` [PATCH v2 17/17] cifs: remove some unneeded mapping_set_error calls Jeff Layton

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:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

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

  git send-email \
    --in-reply-to=1492038117.19286.6.camel@redhat.com \
    --to=jlayton@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=neilb@suse.com \
    --cc=tytso@mit.edu \
    --cc=viro@zeniv.linux.org.uk \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.