• Andrew Morton's avatar
    [PATCH] Simplify proc/devices and fix early termination regression · 692c0509
    Andrew Morton authored
    Repair /proc/devices early-termination regression.
    
    2.6.16 broke /proc/devices.  An application often gets an
    EOF before the end of data is reached, if that application
    uses a series of short read(2)s to access the data.  I have
    used read buffers of varying sizes with varying degrees
    of unsuccess (larger sizes get further into the data than
    smaller sizes, following a simple pattern).  It appears
    that the only safe way to get the data is to use a single
    read buffer larger than all the data in /proc/devices.
    
    The following example demonstates the problem:
    
        # dd if=/proc/devices bs=1
        Character devices:
          1 mem
        27+0 records in
        27+0 records out
    
    This patch is a backport of the fix recently accepted to
    Linus's tree:
    
        commit 68eef3b4
        [PATCH] Simplify proc/devices and fix early termination regression
    
    It replaces the complex, state-machine algorithm introduced
    in 2.6.16 with a simple algorithm, modeled on the implementation
    of /proc/interrupts.
    
    [akpm@osdl.org: cleanups, simplifications]
    Signed-off-by: default avatarJoe Korty <joe.korty@ccur.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    692c0509
genhd.c 16.6 KB