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.
next prev parent 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).