linux-bcachefs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kent Overstreet <kent.overstreet@linux.dev>
To: "Thomas Weißschuh" <thomas@t-8ch.de>
Cc: linux-bcachefs@vger.kernel.org, bfoster@redhat.com, sandeen@redhat.com
Subject: Re: [PATCH 10/10] bcachefs: bcachefs_metadata_version_major_minor
Date: Sun, 9 Jul 2023 14:31:22 -0400	[thread overview]
Message-ID: <20230709183122.y5qw53k43kuzxmic@moria.home.lan> (raw)
In-Reply-To: <4f717f9c-babe-467d-9b56-7e36fa5e2342@t-8ch.de>

On Sun, Jul 09, 2023 at 07:49:00PM +0200, Thomas Weißschuh wrote:
> Hi Kent,
> 
> the subject for this patch looks a bit like a placeholder, in contrast
> with the other patches of the series.
> 
> More below.
> 
> On 2023-07-09 13:15:51-0400, Kent Overstreet wrote:
> > This introduces major/minor versioning to the superblock version number.
> > Major version number changes indicate incompatible releases; we can move
> > forward to a new major version number, but not backwards. Minor version
> > numbers indicate compatible changes - these add features, but can still
> > be mounted and used by old versions.
> > 
> > With the recent patches that make it possible to roll out new btrees and
> > key types without breaking compatibility, we should be able to roll out
> > most new features without incompatible changes.
> > 
> > Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
> > ---
> >  fs/bcachefs/bcachefs.h        |  1 -
> >  fs/bcachefs/bcachefs_format.h | 46 +++++++++++++-----------
> >  fs/bcachefs/btree_io.c        |  7 ++--
> >  fs/bcachefs/journal_io.c      | 12 ++++---
> >  fs/bcachefs/recovery.c        | 66 +++++++++++++++++++++++++++--------
> >  fs/bcachefs/super-io.c        | 58 ++++++++++++++++++++----------
> >  fs/bcachefs/super-io.h        |  3 +-
> >  7 files changed, 132 insertions(+), 61 deletions(-)
> 
> > [..]
> 
> > diff --git a/fs/bcachefs/bcachefs_format.h b/fs/bcachefs/bcachefs_format.h
> > index 8a0f90a83d..8c1955b6a4 100644
> > --- a/fs/bcachefs/bcachefs_format.h
> > +++ b/fs/bcachefs/bcachefs_format.h
> > @@ -1574,28 +1574,32 @@ struct bch_sb_field_journal_seq_blacklist {
> >   * One common version number for all on disk data structures - superblock, btree
> >   * nodes, journal entries
> >   */
> > +#define BCH_VERSION_MAJOR(_v)		((__u8) ((_v) >> 10))
> 
> This "wastes" two bits of the major version that do not fit into the
> u8 value. This is problematic in two cases:
> 
> * If in the future there is a major version so high that it will
>   overflow the 8 bits it would be interpreted as major version "0" and
>   inadvertedly accepted by older/ancient implementations.
> 
> * If this logic is used in other derived projects (libblkid/util-linux)
>   it is likely that those will miss if the in-kernel logic is expanded
>   to the full ten bits.
> 
> If eight bits are supposed to be enough for the major version, why not
> split it into 8 bits major, 8 bits minor?
> Or make the major version an u16.

Minor releases are going to be much more common than major releases:
thus, I'm using 10 bits for the minor number and 6 bits for the major.

It would've been better if the version number was a u32, and then the
major and minor could've both been u16s, but alas I was not that
foresightful :)

> > +#define BCH_VERSION_MINOR(_v)		((__u8) ((_v) >> 0))
> > +#define BCH_VERSION(_major, _minor)	(((_major) << 10)|(_minor) << 0)
> 
> This changes the user-visible data format.
> For example for libblkid/util-linux parses and exposes it to users.
> 
> I don't think it's a big problem and I will adapt blkid for this format.
> 
> But I think it would be good opportunity to have some sort of official
> statement about the stability of the current (pre-mainline) superblock.
> 
> Do you expect or plan any incompatibilities?

I think it's pretty unlikely that there'll ever be a majorly
incompatible superblock change. I recently switched to a new magic UUID,
different from the one bcache uses - that and this change are the
biggest incompatibilities there have been since I implemented the
"tagged variable-length sections" scheme years ago.

If we can't fit something in the main part of the superblock, we'll just
create new tagged sections, and those are much easier from a
compatibility point of view.

  reply	other threads:[~2023-07-09 18:31 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-09 17:15 [PATCH 00/10] bcachefs - semvar, forward compatibility Kent Overstreet
2023-07-09 17:15 ` [PATCH 01/10] bcachefs: Allow for unknown btree IDs Kent Overstreet
2023-07-09 17:15 ` [PATCH 02/10] bcachefs: Allow for unknown key types Kent Overstreet
2023-07-09 17:15 ` [PATCH 03/10] bcachefs: Refactor bch_sb_field_ops handling Kent Overstreet
2023-07-09 17:15 ` [PATCH 04/10] bcachefs: Change check for invalid key types Kent Overstreet
2023-07-09 17:15 ` [PATCH 05/10] bcachefs: BCH_SB_VERSION_UPGRADE_COMPLETE() Kent Overstreet
2023-07-13 13:42   ` Brian Foster
2023-07-13 15:31     ` Kent Overstreet
2023-07-09 17:15 ` [PATCH 06/10] bcachefs: version_upgrade is now an enum Kent Overstreet
2023-07-09 17:15 ` [PATCH 07/10] bcachefs: Kill bch2_bucket_gens_read() Kent Overstreet
2023-07-09 17:15 ` [PATCH 08/10] bcachefs: Stash journal replay params in bch_fs Kent Overstreet
2023-07-09 17:15 ` [PATCH 09/10] bcachefs: Enumerate recovery passes Kent Overstreet
2023-07-09 17:15 ` [PATCH 10/10] bcachefs: bcachefs_metadata_version_major_minor Kent Overstreet
2023-07-09 17:49   ` Thomas Weißschuh
2023-07-09 18:31     ` Kent Overstreet [this message]
2023-07-09 19:29       ` Thomas Weißschuh
2023-07-09 20:08         ` Kent Overstreet

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=20230709183122.y5qw53k43kuzxmic@moria.home.lan \
    --to=kent.overstreet@linux.dev \
    --cc=bfoster@redhat.com \
    --cc=linux-bcachefs@vger.kernel.org \
    --cc=sandeen@redhat.com \
    --cc=thomas@t-8ch.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).