All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: Dave Chinner <david@fromorbit.com>
Cc: Christoph Hellwig <hch@lst.de>,
	"Darrick J . Wong" <darrick.wong@oracle.com>,
	Damien Le Moal <Damien.LeMoal@wdc.com>,
	Andreas Gruenbacher <agruenba@redhat.com>,
	linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 11/12] iomap: move the xfs writeback code to iomap.c
Date: Fri, 28 Jun 2019 07:33:20 +0200	[thread overview]
Message-ID: <20190628053320.GA26902@lst.de> (raw)
In-Reply-To: <20190628004542.GJ7777@dread.disaster.area>

On Fri, Jun 28, 2019 at 10:45:42AM +1000, Dave Chinner wrote:
> You've already mentioned two new users you want to add. I don't even
> have zone capable hardware here to test one of the users you are
> indicating will use this code, and I suspect that very few people
> do.  That's a non-trivial increase in testing requirements for
> filesystem developers and distro QA departments who will want to
> change and/or validate this code path.

Why do you assume you have to test it?  Back when we shared
generic_file_read with everyone you also didn't test odd change to
it with every possible fs.  If you change iomap.c, you'll test it
with XFS, and Cc other maintainers so that they get a chance to
also test it and comment on it, just like we do with other shared
code in the kernel.

> Indeed, integrating gfs2 into the existing generic iomap code has
> required quite a bit of munging and adding new code paths and so on.
> That's mostly been straight forward because it's just been adding
> flags and conditional code to the existing paths. The way we
> regularly rewrite sections of the XFS writeback code is a very
> different sort of modification, and one that will be much harder to
> do if we have to make those changes to generic code.

As the person who has done a lot of the recent rewriting of the
writeback code I disagree.  Most of it has been do divorce is from
leftovers of the buffer_head based sinle page at a time design from
stone age.  Very little is about XFS itself, most of it has been
about not being stupid in a fairly generic way.  And every since
I got rid of buffer heads xfs_aops.c has been intimately tied
into the iomap infrastructure, and I'd rather keep those details in
one place.  I.e. with this series now XFS doesn't even need to know
about the details of the iomap_page structure and the uptodate
bits.  If for example I'd want to add sub-page dirty bits (which I
don't if I can avoid it) I can handle this entirely in iomap now
instead of spreading around iomap, xfs and duplicating the thing
in every copy of the XFS code that would otherwise show up.

> i.e. shared code is good if it's simple and doesn't have a lot of
> external dependencies that restrict the type and scope of
> modifications that can be made easily. Shared code that is complex
> and comes from code that was tightly integrated with a specific
> subsystem architecture is going to carry all those architectural
> foilbles into the new "generic" code. Once it gets sufficient
> users it's going to end up with the same "we can't change this code"
> problems that we had with the existing IO path, and we'll go back to
> implementing our own writeback path....

From the high level POV I agree with your stance.  But the point is
that the writeback code is not tightly integrated with xfs, and that
is why I don't want it in XFS.  It is on other other hand very
tightly integrated with the iomap buffer read and write into pagecache
code, which is why I want to keep it together with that.

> I've been planning on taking it even closer to the extent tree to
> give us lockless, modification range coherent extent map caching in
> this path (e.g. write() can add new delalloc extents without
> invalidating cached writeback maps).  This patchset re-introduces
> the iomap abstraction over the bmbt - an abstraction we removed some
> time ago - and that makes these sorts of improvements much harder
> and more complex to implement....

FYI, I had an earlier but not quite optimal implementation of lockless
extent lookups using rcu updates in the btree.  And at least for that
scheme all the details stay 100% in XFS in the split code, as the
abstraction between iomap and xfs is very clear and allows for that.

WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de>
To: Dave Chinner <david@fromorbit.com>
Cc: Christoph Hellwig <hch@lst.de>,
	"Darrick J . Wong" <darrick.wong@oracle.com>,
	Damien Le Moal <Damien.LeMoal@wdc.com>,
	Andreas Gruenbacher <agruenba@redhat.com>,
	linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 11/12] iomap: move the xfs writeback code to iomap.c
Date: Fri, 28 Jun 2019 07:33:20 +0200	[thread overview]
Message-ID: <20190628053320.GA26902@lst.de> (raw)
In-Reply-To: <20190628004542.GJ7777@dread.disaster.area>

On Fri, Jun 28, 2019 at 10:45:42AM +1000, Dave Chinner wrote:
> You've already mentioned two new users you want to add. I don't even
> have zone capable hardware here to test one of the users you are
> indicating will use this code, and I suspect that very few people
> do.  That's a non-trivial increase in testing requirements for
> filesystem developers and distro QA departments who will want to
> change and/or validate this code path.

Why do you assume you have to test it?  Back when we shared
generic_file_read with everyone you also didn't test odd change to
it with every possible fs.  If you change iomap.c, you'll test it
with XFS, and Cc other maintainers so that they get a chance to
also test it and comment on it, just like we do with other shared
code in the kernel.

> Indeed, integrating gfs2 into the existing generic iomap code has
> required quite a bit of munging and adding new code paths and so on.
> That's mostly been straight forward because it's just been adding
> flags and conditional code to the existing paths. The way we
> regularly rewrite sections of the XFS writeback code is a very
> different sort of modification, and one that will be much harder to
> do if we have to make those changes to generic code.

As the person who has done a lot of the recent rewriting of the
writeback code I disagree.  Most of it has been do divorce is from
leftovers of the buffer_head based sinle page at a time design from
stone age.  Very little is about XFS itself, most of it has been
about not being stupid in a fairly generic way.  And every since
I got rid of buffer heads xfs_aops.c has been intimately tied
into the iomap infrastructure, and I'd rather keep those details in
one place.  I.e. with this series now XFS doesn't even need to know
about the details of the iomap_page structure and the uptodate
bits.  If for example I'd want to add sub-page dirty bits (which I
don't if I can avoid it) I can handle this entirely in iomap now
instead of spreading around iomap, xfs and duplicating the thing
in every copy of the XFS code that would otherwise show up.

> i.e. shared code is good if it's simple and doesn't have a lot of
> external dependencies that restrict the type and scope of
> modifications that can be made easily. Shared code that is complex
> and comes from code that was tightly integrated with a specific
> subsystem architecture is going to carry all those architectural
> foilbles into the new "generic" code. Once it gets sufficient
> users it's going to end up with the same "we can't change this code"
> problems that we had with the existing IO path, and we'll go back to
> implementing our own writeback path....

>From the high level POV I agree with your stance.  But the point is
that the writeback code is not tightly integrated with xfs, and that
is why I don't want it in XFS.  It is on other other hand very
tightly integrated with the iomap buffer read and write into pagecache
code, which is why I want to keep it together with that.

> I've been planning on taking it even closer to the extent tree to
> give us lockless, modification range coherent extent map caching in
> this path (e.g. write() can add new delalloc extents without
> invalidating cached writeback maps).  This patchset re-introduces
> the iomap abstraction over the bmbt - an abstraction we removed some
> time ago - and that makes these sorts of improvements much harder
> and more complex to implement....

FYI, I had an earlier but not quite optimal implementation of lockless
extent lookups using rcu updates in the btree.  And at least for that
scheme all the details stay 100% in XFS in the split code, as the
abstraction between iomap and xfs is very clear and allows for that.

  reply	other threads:[~2019-06-28  5:33 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-24  5:52 lift the xfs writepage code into iomap Christoph Hellwig
2019-06-24  5:52 ` [PATCH 01/12] list.h: add a list_pop helper Christoph Hellwig
2019-06-24 14:53   ` Darrick J. Wong
2019-06-24 15:51   ` Matthew Wilcox
2019-06-25 10:06     ` Christoph Hellwig
2019-06-24  5:52 ` [PATCH 02/12] xfs: simplify xfs_chain_bio Christoph Hellwig
2019-06-24 15:14   ` Darrick J. Wong
2019-06-24  5:52 ` [PATCH 03/12] xfs: fix a comment typo in xfs_submit_ioend Christoph Hellwig
2019-06-24 14:53   ` Darrick J. Wong
2019-06-24  5:52 ` [PATCH 04/12] xfs: initialize ioma->flags in xfs_bmbt_to_iomap Christoph Hellwig
2019-06-24 14:57   ` Darrick J. Wong
2019-06-25 10:07     ` Christoph Hellwig
2019-06-25 15:13       ` Darrick J. Wong
2019-06-25 15:21         ` Christoph Hellwig
2019-06-24  5:52 ` [PATCH 05/12] xfs: use a struct iomap in xfs_writepage_ctx Christoph Hellwig
2019-06-24 15:50   ` Darrick J. Wong
2019-06-24  5:52 ` [PATCH 06/12] xfs: remove XFS_TRANS_NOFS Christoph Hellwig
2019-06-24 15:58   ` Darrick J. Wong
2019-06-24 22:59   ` Dave Chinner
2019-06-25 10:12     ` Christoph Hellwig
2019-06-24  5:52 ` [PATCH 07/12] xfs: don't preallocate a transaction for file size updates Christoph Hellwig
2019-06-24 16:17   ` Darrick J. Wong
2019-06-24 23:15     ` Dave Chinner
2019-06-25 10:25       ` Christoph Hellwig
2019-06-27 22:23         ` Dave Chinner
2019-06-24  5:52 ` [PATCH 08/12] xfs: simplify xfs_ioend_can_merge Christoph Hellwig
2019-06-24 16:00   ` Darrick J. Wong
2019-06-24  5:52 ` [PATCH 09/12] xfs: refactor the ioend merging code Christoph Hellwig
2019-06-24 16:04   ` Darrick J. Wong
2019-06-24 16:06   ` Nikolay Borisov
2019-06-25 10:14     ` Christoph Hellwig
2019-06-25 12:42       ` Nikolay Borisov
2019-06-25 14:45         ` Darrick J. Wong
2019-06-24  5:52 ` [PATCH 10/12] xfs: remove the fork fields in the writepage_ctx and ioend Christoph Hellwig
2019-06-24 16:08   ` Darrick J. Wong
2019-06-24  5:52 ` [PATCH 11/12] iomap: move the xfs writeback code to iomap.c Christoph Hellwig
2019-06-24 15:46   ` Darrick J. Wong
2019-06-25 10:08     ` Christoph Hellwig
2019-06-24 23:43   ` Dave Chinner
2019-06-25 10:10     ` Christoph Hellwig
2019-06-28  0:45       ` Dave Chinner
2019-06-28  5:33         ` Christoph Hellwig [this message]
2019-06-28  5:33           ` Christoph Hellwig
2019-07-01  0:08           ` Dave Chinner
2019-07-01  6:43             ` Christoph Hellwig
2019-07-01 23:09               ` Dave Chinner
2019-06-28 22:27         ` Luis Chamberlain
2019-07-11 21:31           ` Brendan Higgins
2019-06-24  5:52 ` [PATCH 12/12] iomap: add tracing for the address space operations Christoph Hellwig
2019-06-24 23:49   ` Dave Chinner
2019-06-25 10:15     ` Christoph Hellwig
2019-06-25 14:47       ` Darrick J. Wong
2019-06-27 22:35       ` Dave Chinner

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=20190628053320.GA26902@lst.de \
    --to=hch@lst.de \
    --cc=Damien.LeMoal@wdc.com \
    --cc=agruenba@redhat.com \
    --cc=darrick.wong@oracle.com \
    --cc=david@fromorbit.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.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.