HEAD's UP: make broken due to last pipe commit / general PIPE bug

Matthew Dillon dillon at apollo.backplane.com
Mon Mar 29 01:14:37 PST 2004


    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.

					-Matt
					Matthew Dillon 
					<dillon at xxxxxxxxxxxxx>





More information about the Kernel mailing list