On Mon, Jan 16, 2012 at 07:37:19PM +0100, Manuel Bouyer wrote:
 > > > The fisrt change is to the buffer cache.
 > > 
 > > My first reaction is that I don't think it's a good idea to make major
 > > changes to the buffer cache at this stage in a release cycle. It's not
 > > exactly the most robust or stable code we have in the system.
 > 
 > On the other hand, changing the kernel ABI in the release branch
 > is not a good idea either, given the state of the module subsystem ...

Indeed. But that isn't really the question. The question is really
whether we're past the date for brand-new feature proposals for
netbsd-6... or at least ones that involve invasive changes.

releng and/or core will need to rule on that but I don't think it's a
good idea.

The buffer cache code is ratty, poorly structured, and full of races
that may or may not have visible consequences. Any change to it could
turn out to be unexpectedly disruptive, and we don't at this point
have time to clean up if the changes turn out to make a mess.
(Especially since the person who'd likely have to do the cleanup,
namely me, is already oversubscribed right up to the branch deadline
on other stuff. Which, not to put too fine a point on it, includes
sorting out a previous mess.)

 > I wouldn't call this a major change. The alternative way (adding a b_type
 > member to struct buf) is even less intrusive; if the alternative (*2())
 > functions are not used it'll always be 0.

Changing the way the buffer cache is indexed is semantically intrusive
even if it's not physically intrusive. While I think adding a type
field to modify the block number is a good idea, for various reasons,
it needs to be thought through, and it hasn't been yet and there isn't
time to thrash it out fully before the branch deadline. Furthermore,
there's the existing question of indexing by physical vs. virtual
block numbers; that is not in any way a resolved issue and what you're
proposing interacts directly with it, and this too needs to be thought
through and there isn't time before the branch deadline.

Meanwhile, adding a whole set of extra functions instead of doing
things properly with a massedit is highly undesirable; not only is it
ugly but it leaves us unable to tidy the extra functions away in HEAD
after branching, which is bad... unless we want to vastly complicate
any pullup that goes near the buffer cache, which would be worse.

(Note that adding a flag instead of a type field is even worse; it has
all the same drawbacks, plus we'd be likely to want to rip it out and
replace it with the type field; plus on top of that race conditions
involving the flags are one of the primary things I'm worried about
disrupting.)

 > > (Also, you're aware that it isn't used for file data blocks, right?)
 > 
 > It depends on what you call "file data". Directory data blocks ends
 > there AFAIK, as do symlink data blocks when the link's target doesn't
 > fit in the inode.

Right. So, should extended attribute blocks go in the old buffer cache
or should they be managed by uvm? This is another question we likely
don't have time to address properly by the branch deadline.

-- 
David A. Holland
dholl...@netbsd.org

Reply via email to