From: Jan Blunck <jblunck@suse.de>
To: Theodore Tso <tytso@mit.edu>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
Bharata B Rao <bharata@linux.vnet.ibm.com>
Subject: Re: [RFC 12/26] ext2 white-out support
Date: Tue, 31 Jul 2007 09:44:36 +0200 [thread overview]
Message-ID: <20070731074436.GE5101@hasse.suse.de> (raw)
In-Reply-To: <20070731034515.GD25876@thunk.org>
On Mon, Jul 30, Theodore Tso wrote:
> On Mon, Jul 30, 2007 at 06:13:35PM +0200, Jan Blunck wrote:
> > Introduce white-out support to ext2.
> >
> > Known Bugs:
> > - Needs a reserved inode number for white-outs
>
> You picked different reserved inodes for the ext2 and ext3
> filesystems. That's good for a NACK right there. The codepoints
> (i.e., reserved inode numbers, feature bit masks, etc.) for ext2,
> ext3, and ext4 MUST not overlap. After all, someone might use tune2fs
> -j to convert an ext2 filesystem to ext3, and is it's REALLY BAD that
> you're using a reserved inode of 7 for ext2, and 9 for ext3.
Ouch, right.
> Also, I note that you have created a new INCOMPAT feature flag support
> for whiteouts. That's really unfortunate; we try to avoid introducing
> incompatible feature flags unless absolutely necessary; note that even
> adding a COMPAT feature flag means that you need a new version of
> e2fsprogs if you want e2fsck to be willing to touch that filesystem.
>
> So --- if you're looking for a way to add whiteout support to
> ext2/ext3 without needing a feature bit, here's how. We allocate a
> new inode flag in struct ext3_inode.i_flags:
>
> #define EXT2_WHTOUT_FL 0x00040000
>
> We also allocate a new field in the ext2 superblock to store the
> "whiteout inode". (Please coordinate with me so it's a superblock
> field not in use by ext3/ext4, and so it's reserved so that no one
> else uses it.) The superblock field, call it s_whtout_ino, stores the
> inode number for the "white out inode".
>
> When you create a new whiteout file, the code checks sb->s_whtout_ino,
> and if it is zero, it allocates a new inode, and creates it as a
> zero-length regular file (i_mode |= S_IFREG) with the EXT2_WHTOUT_FL
> flag set in the inode, and then store the inode number in
> sb->s_whtout_ino. If sb->s_whtout_ino is non-zero, you must read in
> the inode and make sure that the EXT2_WHTOUT_FL is set. If it is not,
> then allocate a new whiteout inode as described previously. Then link
> the inode into the directory as before.
>
> When reading an inode, if the EXT2_WHTOUT_FL flag is set, then set the
> in-memory mode of the inode to be S_IFWHT.
>
> That's pretty much about it. For cleanliness sake, it would be good
> if ext2_delete_inode clears sb->s_whtout_ino if the last whiteout link
> has been deleted, but it's strictly speaking not necessary. If you do
> it this way, the filesystem is completely backwards compatible; the
> whiteout files will just appear to links to a normal zero-lenth file.
Ok, this is pretty similar to the way I implemented this for tmpfs. The
problem is that the union mount code is explicitly checking if the filesystem
is supporting whiteout. I used to use a new filesystem flag (FS_WHITEOUT) for
this but thought that disk filesystem like ext2/3/4 will have problem with
that if you mount an old image. So I guess I still need a feature flag.
> I wouldn't bother with setting the directory type field to be DT_WHT,
> given that they will never be returned to userspace anyway.
At the moment I still rely on this for the current readdir implementation.
Viro already said that he doesn't want to see this (the readdir changes) in
the kernel but in userspace.
Thanks,
Jan
next prev parent reply other threads:[~2007-07-31 7:44 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-30 16:13 [RFC 00/26] VFS based Union Mount (V2) Jan Blunck
2007-07-30 16:13 ` [RFC 01/26] [PATCH 14/18] shmem: convert to using splice instead of sendfile() Jan Blunck
2007-07-30 16:13 ` [RFC 02/26] VFS: Export dput_path() and path_to_nameidata() Jan Blunck
2007-07-30 16:13 ` [RFC 03/26] VFS: Make lookup_hash() return a struct path Jan Blunck
2007-07-30 16:13 ` [RFC 04/26] VFS: Make lookup_create() " Jan Blunck
2007-07-30 16:13 ` [RFC 05/26] VFS: cache_lookup() cleanup Jan Blunck
2007-07-30 16:13 ` [RFC 06/26] VFS: Make real_lookup() return a struct path Jan Blunck
2007-07-30 16:13 ` [RFC 07/26] VFS: Introduce dput() variante that maintains a kill-list Jan Blunck
2007-07-30 16:13 ` [RFC 08/26] VFS: Export lives_below_in_same_fs() Jan Blunck
2007-07-30 16:13 ` [RFC 09/26] linux/stat.h: Add the filetype white-out Jan Blunck
2007-07-30 16:13 ` [RFC 10/26] VFS white-out handling Jan Blunck
2007-07-30 16:13 ` [RFC 11/26] tmpfs white-out support Jan Blunck
2007-08-01 15:13 ` Hugh Dickins
2007-08-02 2:48 ` Matt Mackall
2007-07-30 16:13 ` [RFC 12/26] ext2 " Jan Blunck
2007-07-31 3:45 ` Theodore Tso
2007-07-31 7:44 ` Jan Blunck [this message]
2007-07-31 8:32 ` Andreas Dilger
2007-07-31 9:08 ` Jan Blunck
2007-07-31 10:53 ` Theodore Tso
2007-08-02 19:31 ` Pavel Machek
2007-07-31 16:36 ` Josef Sipek
2007-07-31 17:00 ` Jan Blunck
2007-07-31 17:11 ` Josef Sipek
2007-08-01 15:23 ` Dave Kleikamp
2007-08-01 18:44 ` Josef Sipek
2007-08-01 19:10 ` Dave Kleikamp
2007-08-01 19:33 ` Josef Sipek
2007-08-01 19:52 ` Dave Kleikamp
2007-08-01 22:06 ` Erez Zadok
2007-08-02 12:05 ` Jan Blunck
2007-08-02 11:55 ` Jan Blunck
2007-08-02 17:50 ` Jörn Engel
2007-08-02 5:24 ` Ph. Marek
2007-08-02 12:12 ` Jan Blunck
2007-08-02 10:26 ` Jan Blunck
2007-08-01 10:00 ` Hans-Peter Jansen
2007-08-01 11:43 ` Josef Sipek
2007-08-01 18:01 ` Jan Engelhardt
2007-07-31 17:03 ` Mark Williamson
2007-07-31 17:16 ` Josef Sipek
2007-08-01 17:58 ` Jan Engelhardt
2007-08-01 18:03 ` Josef Sipek
2007-07-30 16:13 ` [RFC 13/26] ext3 whiteout support Jan Blunck
2007-07-30 16:13 ` [RFC 14/26] union-mount: Documentation Jan Blunck
2007-07-30 16:13 ` [RFC 15/26] union-mount: Add union-mount mount flag Jan Blunck
2007-07-30 16:13 ` [RFC 16/26] union-mount: Introduce union_mount structure Jan Blunck
2007-08-06 5:57 ` Bharata B Rao
2007-07-30 16:13 ` [RFC 17/26] union-mount: Drive the union cache via dcache Jan Blunck
2007-07-30 16:13 ` [RFC 18/26] union-mount: Changes to the namespace handling Jan Blunck
2007-08-08 10:10 ` Bharata B Rao
2007-07-30 16:13 ` [RFC 19/26] union-mount: Make lookup work for union-mounted file systems Jan Blunck
2007-08-09 5:42 ` Bharata B Rao
2007-07-30 16:13 ` [RFC 20/26] union-mount: Simple union-mount readdir implementation Jan Blunck
2007-08-06 11:08 ` Bharata B Rao
2007-07-30 16:13 ` [RFC 21/26] union-mount: in-kernel file copy between union mounted filesystems Jan Blunck
2007-07-30 16:13 ` [RFC 22/26] union-mount: white-out changes for copy-on-open Jan Blunck
2007-07-30 16:13 ` [RFC 23/26] union-mount: copyup on rename Jan Blunck
2007-07-30 16:13 ` [RFC 24/26] union-mount: dont report EROFS for union mounts Jan Blunck
2007-07-30 16:13 ` [RFC 25/26] union-mount: Debug Infrastructure Jan Blunck
2007-07-30 16:13 ` [RFC 26/26] union-mount: Debug code Jan Blunck
2007-07-30 18:23 ` [RFC 00/26] VFS based Union Mount (V2) Al Boldi
2007-08-02 6:49 ` Bharata B Rao
2007-08-02 10:17 ` Jan Blunck
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=20070731074436.GE5101@hasse.suse.de \
--to=jblunck@suse.de \
--cc=bharata@linux.vnet.ibm.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tytso@mit.edu \
/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).