From: "J. Bruce Fields" <bfields@fieldses.org>
To: NeilBrown <neilb@suse.de>
Cc: Miklos Szeredi <miklos@szeredi.hu>,
Al Viro <viro@zeniv.linux.org.uk>,
Christoph Hellwig <hch@infradead.org>,
Josef Bacik <josef@toxicpanda.com>,
Chuck Lever <chuck.lever@oracle.com>, Chris Mason <clm@fb.com>,
David Sterba <dsterba@suse.com>,
linux-fsdevel@vger.kernel.org,
Linux NFS list <linux-nfs@vger.kernel.org>,
Btrfs BTRFS <linux-btrfs@vger.kernel.org>
Subject: Re: A Third perspective on BTRFS nfsd subvol dev/inode number issues.
Date: Mon, 2 Aug 2021 18:14:34 -0400 [thread overview]
Message-ID: <20210802221434.GG6890@fieldses.org> (raw)
In-Reply-To: <162794157037.32159.9608382458264702109@noble.neil.brown.name>
On Tue, Aug 03, 2021 at 07:59:30AM +1000, NeilBrown wrote:
> On Tue, 03 Aug 2021, J. Bruce Fields wrote:
> > On Tue, Aug 03, 2021 at 07:10:44AM +1000, NeilBrown wrote:
> > > On Mon, 02 Aug 2021, J. Bruce Fields wrote:
> > > > On Mon, Aug 02, 2021 at 02:18:29PM +1000, NeilBrown wrote:
> > > > > For btrfs, the "location" is root.objectid ++ file.objectid. I think
> > > > > the inode should become (file.objectid ^ swab64(root.objectid)). This
> > > > > will provide numbers that are unique until you get very large subvols,
> > > > > and very many subvols.
> > > >
> > > > If you snapshot a filesystem, I'd expect, at least by default, that
> > > > inodes in the snapshot to stay the same as in the snapshotted
> > > > filesystem.
> > >
> > > As I said: we need to challenge and revise user-space (and meat-space)
> > > expectations.
> >
> > The example that came to mind is people that export a snapshot, then
> > replace it with an updated snapshot, and expect that to be transparent
> > to clients.
> >
> > Our client will error out with ESTALE if it notices an inode number
> > changed out from under it.
>
> Will it?
See fs/nfs/inode.c:nfs_check_inode_attributes():
if (nfsi->fileid != fattr->fileid) {
/* Is this perhaps the mounted-on fileid? */
if ((fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID) &&
nfsi->fileid == fattr->mounted_on_fileid)
return 0;
return -ESTALE;
}
--b.
> If the inode number changed, then the filehandle would change.
> Unless the filesystem were exported with subtreecheck, the old filehandle
> would continue to work (unless the old snapshot was deleted). File-name
> lookups from the root would find new files...
>
> "replace with an updated snapshot" is no different from "replace with an
> updated directory tree". If you delete the old tree, then
> currently-open files will break. If you don't you get a reasonably
> clean transition.
>
> >
> > I don't know if there are other such cases. It seems like surprising
> > behavior to me, though.
>
> If you refuse to risk breaking anything, then you cannot make progress.
> Providing people can choose when things break, and have advanced
> warning, they often cope remarkable well.
>
> Thanks,
> NeilBrown
>
>
> >
> > --b.
> >
> > > In btrfs, you DO NOT snapshot a FILESYSTEM. Rather, you effectively
> > > create a 'reflink' for a subtree (only works on subtrees that have been
> > > correctly created with the poorly named "btrfs subvolume" command).
> > >
> > > As with any reflink, the original has the same inode number that it did
> > > before, the new version has a different inode number (though in current
> > > BTRFS, half of the inode number is hidden from user-space, so it looks
> > > like the inode number hasn't changed).
> >
> >
next prev parent reply other threads:[~2021-08-02 22:14 UTC|newest]
Thread overview: 123+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-27 22:37 [PATCH/RFC 00/11] expose btrfs subvols in mount table correctly NeilBrown
2021-07-27 22:37 ` [PATCH 07/11] exportfs: Allow filehandle lookup to cross internal mount points NeilBrown
2021-07-28 10:13 ` Amir Goldstein
2021-07-29 0:28 ` NeilBrown
2021-07-29 5:27 ` Amir Goldstein
2021-08-06 7:52 ` Miklos Szeredi
2021-08-06 8:08 ` Amir Goldstein
2021-08-06 8:18 ` Miklos Szeredi
2021-07-28 19:17 ` J. Bruce Fields
2021-07-28 22:25 ` NeilBrown
2021-07-27 22:37 ` [PATCH 04/11] VFS: export lookup_mnt() NeilBrown
2021-07-30 0:31 ` Al Viro
2021-07-30 5:33 ` NeilBrown
2021-07-27 22:37 ` [PATCH 01/11] VFS: show correct dev num in mountinfo NeilBrown
2021-07-30 0:25 ` Al Viro
2021-07-30 5:28 ` NeilBrown
2021-07-30 5:54 ` Miklos Szeredi
2021-07-30 6:13 ` NeilBrown
2021-07-30 7:18 ` Miklos Szeredi
2021-07-30 7:33 ` NeilBrown
2021-07-30 7:59 ` Miklos Szeredi
2021-08-02 4:18 ` A Third perspective on BTRFS nfsd subvol dev/inode number issues NeilBrown
2021-08-02 5:25 ` Al Viro
2021-08-02 5:40 ` NeilBrown
2021-08-02 7:54 ` Amir Goldstein
2021-08-02 13:53 ` Josef Bacik
2021-08-03 22:29 ` Qu Wenruo
2021-08-02 14:47 ` Frank Filz
2021-08-02 21:24 ` NeilBrown
2021-08-02 7:15 ` Martin Steigerwald
2021-08-02 21:40 ` NeilBrown
2021-08-02 12:39 ` J. Bruce Fields
2021-08-02 20:32 ` Patrick Goetz
2021-08-02 20:41 ` J. Bruce Fields
2021-08-02 21:10 ` NeilBrown
2021-08-02 21:50 ` J. Bruce Fields
2021-08-02 21:59 ` NeilBrown
2021-08-02 22:14 ` J. Bruce Fields [this message]
2021-08-02 22:36 ` NeilBrown
2021-08-03 0:15 ` J. Bruce Fields
2021-07-27 22:37 ` [PATCH 03/11] VFS: pass lookup_flags into follow_down() NeilBrown
2021-07-27 22:37 ` [PATCH 11/11] btrfs: use automount to bind-mount all subvol roots NeilBrown
2021-07-28 8:37 ` kernel test robot
2021-07-28 8:37 ` [RFC PATCH] btrfs: btrfs_mountpoint_expiry_timeout can be static kernel test robot
2021-07-28 13:12 ` [PATCH 11/11] btrfs: use automount to bind-mount all subvol roots Christian Brauner
2021-07-29 0:43 ` NeilBrown
2021-07-29 14:38 ` Christian Brauner
2021-07-27 22:37 ` [PATCH 06/11] nfsd: include a vfsmount in struct svc_fh NeilBrown
2021-07-27 22:37 ` [PATCH 10/11] btrfs: introduce mapping function from location to inum NeilBrown
2021-07-27 22:37 ` [PATCH 02/11] VFS: allow d_automount to create in-place bind-mount NeilBrown
2021-07-27 22:37 ` [PATCH 09/11] nfsd: Allow filehandle lookup to cross internal mount points NeilBrown
2021-07-28 19:15 ` J. Bruce Fields
2021-07-28 22:29 ` NeilBrown
2021-07-30 0:42 ` Al Viro
2021-07-30 5:43 ` NeilBrown
2021-07-27 22:37 ` [PATCH 08/11] nfsd: change get_parent_attributes() to nfsd_get_mounted_on() NeilBrown
2021-07-27 22:37 ` [PATCH 05/11] VFS: new function: mount_is_internal() NeilBrown
2021-07-28 2:16 ` Al Viro
2021-07-28 3:32 ` NeilBrown
2021-07-30 0:34 ` Al Viro
2021-07-28 2:19 ` [PATCH/RFC 00/11] expose btrfs subvols in mount table correctly Al Viro
2021-07-28 4:58 ` Wang Yugui
2021-07-28 6:04 ` Wang Yugui
2021-07-28 7:01 ` NeilBrown
2021-07-28 12:26 ` Neal Gompa
2021-07-28 19:14 ` J. Bruce Fields
2021-07-29 1:29 ` Zygo Blaxell
2021-07-29 1:43 ` NeilBrown
2021-07-29 23:20 ` Zygo Blaxell
2021-07-28 22:50 ` NeilBrown
2021-07-29 2:37 ` Zygo Blaxell
2021-07-29 3:36 ` NeilBrown
2021-07-29 23:20 ` Zygo Blaxell
2021-07-30 2:36 ` NeilBrown
2021-07-30 5:25 ` Qu Wenruo
2021-07-30 5:31 ` Qu Wenruo
2021-07-30 5:53 ` Amir Goldstein
2021-07-30 6:00 ` NeilBrown
2021-07-30 6:09 ` Qu Wenruo
2021-07-30 5:58 ` NeilBrown
2021-07-30 6:23 ` Qu Wenruo
2021-07-30 6:53 ` NeilBrown
2021-07-30 7:09 ` Qu Wenruo
2021-07-30 18:15 ` Zygo Blaxell
2021-07-30 15:17 ` J. Bruce Fields
2021-07-30 15:48 ` Josef Bacik
2021-07-30 16:25 ` Forza
2021-07-30 17:43 ` Zygo Blaxell
2021-07-30 5:28 ` Amir Goldstein
2021-07-28 13:43 ` g.btrfs
2021-07-29 1:39 ` NeilBrown
2021-07-29 9:28 ` Graham Cobb
2021-07-28 7:06 ` NeilBrown
2021-07-28 9:36 ` Wang Yugui
2021-07-28 19:35 ` J. Bruce Fields
2021-07-28 21:30 ` Josef Bacik
2021-07-30 0:13 ` Al Viro
2021-07-30 6:08 ` NeilBrown
2021-08-13 1:45 ` [PATCH] VFS/BTRFS/NFSD: provide more unique inode number for btrfs export NeilBrown
2021-08-13 14:55 ` Josef Bacik
2021-08-15 7:39 ` Goffredo Baroncelli
2021-08-15 19:35 ` Roman Mamedov
2021-08-15 21:03 ` Goffredo Baroncelli
2021-08-15 21:53 ` NeilBrown
2021-08-17 19:34 ` Goffredo Baroncelli
2021-08-17 21:39 ` NeilBrown
2021-08-18 17:24 ` Goffredo Baroncelli
2021-08-15 22:17 ` NeilBrown
2021-08-19 8:01 ` Amir Goldstein
2021-08-20 3:21 ` NeilBrown
2021-08-20 6:23 ` Amir Goldstein
2021-08-23 4:05 ` [PATCH v2] BTRFS/NFSD: " NeilBrown
2021-08-18 14:54 ` [PATCH] VFS/BTRFS/NFSD: " Wang Yugui
2021-08-18 21:46 ` NeilBrown
2021-08-19 2:19 ` Zygo Blaxell
2021-08-20 2:54 ` NeilBrown
2021-08-22 19:29 ` Zygo Blaxell
2021-08-23 5:51 ` NeilBrown
2021-08-23 23:22 ` NeilBrown
2021-08-25 2:06 ` Zygo Blaxell
2021-08-23 0:57 ` Wang Yugui
2021-08-02 9:11 A Third perspective on BTRFS nfsd subvol dev/inode number issues Forza
2021-08-02 21:50 ` NeilBrown
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=20210802221434.GG6890@fieldses.org \
--to=bfields@fieldses.org \
--cc=chuck.lever@oracle.com \
--cc=clm@fb.com \
--cc=dsterba@suse.com \
--cc=hch@infradead.org \
--cc=josef@toxicpanda.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=miklos@szeredi.hu \
--cc=neilb@suse.de \
--cc=viro@zeniv.linux.org.uk \
/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).