Re: [Ext2-devel] [RFC 0/13] extents and 48bit ext3

Linus Torvalds
2006-06-09T18:04:48Z

On Fri, 9 Jun 2006, Matthew Wilcox wrote:
>
> One of the costs (and I'm not disagreeing with your main point;
> I think forking ext3 to ext4 at this point is reasonable), is that
> bugfixes applied to one don't necessarily get applied to the other.

I agree. However, that tends to be less of an issue of you fork off a
stable base (which isn't always the case). Forking off something that is
being stil actively developed is a different matter entirely. I don't
think ext3 is in that situation, really.

Also, one of the issues is when there are big VFS layer changes, which
affect all filesystems. Then, a lot of people will think that it's easier
to fix up one unified filesystem than it is to fix up five separate ones,
and the fact is, that's often _not_ the case.

The unified filesystem potentially has so much crud and crap and other
issues that it ends up being much more work to understand and fix it up
than it would have been to do the same thing for five different
filesystems that didn't play a lot of games and have complex

"if this flag is set, do this code, otherwise do that code, and this
whole directory reading code btw has a static CONFIG_EXT3_INDEX thing,
so you won't even know if you caught all the interface changes when you
get a clean compile"

So I'm not a huge believer in "shared code is good code". I believe shared
code is good only if it has no conditionals.

Ie the VFS-layer kind of code that acts the SAME for everybody is the good
kind of sharing. The kind where you call into different routines that will
do different things depending on a flag (which may not even be obvious to
the caller) is usually the _bad_ kind of sharing, because that's the kind
of code that ends up working for one user and not working for another, and
trying to make it work for both may be fundamentally hard.

The

if (sb->option.extent)
.. do one thing ..
else
.. do another ..

kind of thing is exactly what leads to problems later. Even if it allows
sharing of 90% of the code (the caller of the function), it leads to
problems exactly because of things that end up not quite working because
people only tested one code-path, and it broke the other case in some
really subtle way.

Linus