lkml.org 
[lkml]   [1996]   [Oct]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRFC: New kernel proc interface
    I have been working on a new set of generic file operations
    and helper functions for the proc filesystem. I am presenting
    it here so that folks more knowledgable than I may offer their
    comments and critiques. I look forward to your rave reviews. :-)

    I will try let the source speak for itself, but comment on
    why certain design decisions were made.

    The original reason for starting on this path was that there
    are a multitude of very similar, but definitely distinct proc
    file operations code. I wanted eliminate most of them and make
    "generic" file operations usable by most of the kernel. I
    thought that a few small changes to some of the existing code
    would do the trick. I was rather naive about the proc code at
    the time... (There is still plenty for me to learn.)

    I brought the idea up in the mailing list and a problem with the
    current implementations was brought to my attention by Keith
    Owens. It seems that when a user program performs mutliple reads
    on proc files (large /proc/net files for example), the user
    program must use great care since the kernel tables from which
    the proc output is generated may change between reads. Also,
    the current proc routines are only allowed to write out one
    page (4K) of data at a time. Any proc routine with more than 4K
    of data had to be called multiple times by the proc code. The
    kernel tables could not remain locked between the seperate calls
    to the proc routines and could still return inconsistent
    information, even if a user program tried to swallow all the
    data in one read.

    The problems described above are easily solved by allowing the
    proc routines to write out all their data in one shot, and
    caching that data for the user programs.

    After much deliberation (and some prodding), I abandoned my
    original plans for a simple fix and went out and wrote some
    real code. The following patch should apply cleanly to 2.1.6.
    It includes the proc_generic_file_operations code (in
    fs/proc/generic.c) and related patches, as well as a proc
    interface, using the new code, to sbpcd.c (my original
    inspiration for delving into proc) and replacement code for
    net/ipv4/ip_masq.c's proc routine (Keith Owens' suggestion).
    The latter two are for demonstration only, nothing more.

    Rob
    (rriggs@tesser.com)

    begin 644 /tmp/proc_generic-2.1.6.diff
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
    ;6F0U!PAY+,6>%#FE*!LB%BO5/XW#<JR\6@``
    `
    end

    \
     
     \ /
      Last update: 2005-03-22 13:38    [W:0.049 / U:33.140 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site