DragonFly kernel List (threaded) for 2004-03
HEAD's UP: make broken due to last pipe commit / general PIPE bug
I messed up the sf_buf interface when I imported Alan Cox's
PIPE code. I hope to commit the fixes tomorrow morning. Please
be aware that the codebase is going to be a bit unstable until then.
Basically, FreeBSD-5 redid the sf_buf code to not do the crufty
unwiring / vm_page_free()ing in sf_buf_free() but to instead do
it in a separate sendfile-specific routine.
When I adapted AC's uiomove_fromphys() code, though, I added a page
wiring but I didn't adapt our sf_buf_free() code so there is a
wired page leak in it, plus it tries to free the underlying page
if m->object is NULL which is what is breaking the PIPE code and
thus the make.
The fix is easy, but I also have to test to make sure I haven't broken
sendfile() in fixing PIPE. I am going to bring sf_buf's inline with
FreeBSD-5 but adapting sendfile() is slightly more involved due to
the mbuf_ext changes (which I am not going to import right now).
It's actually pretty funny... even though the pages are getting ripped
out from under GCC it must be throwing away the buffer anyway because
GCC isn't actually crashing, it's just throwing garbled data into the
pipe. And the rest of the system seems to be working... but it's just
pure luck that things aren't blowing up right and left.