DragonFly BSD
DragonFly kernel List (threaded) for 2004-03
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

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

From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Mon, 29 Mar 2004 01:14:26 -0800 (PST)

    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.

					Matthew Dillon 

[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]