• W
    [PATCH] readahead: backoff on I/O error · 76d42bd9
    Wu Fengguang 提交于
    Backoff readahead size exponentially on I/O error.
    
    Michael Tokarev <mjt@tls.msk.ru> described the problem as:
    
    [QUOTE]
    Suppose there's a CD-rom with a scratch/etc, one sector is unreadable.
    In order to "fix" it, one have to read it and write to another CD-rom,
    or something.. or just ignore the error (if it's just a skip in a video
    stream).  Let's assume the unreadable block is number U.
    
    But current behavior is just insane.  An application requests block
    number N, which is before U. Kernel tries to read-ahead blocks N..U.
    Cdrom drive tries to read it, re-read it.. for some time.  Finally,
    when all the N..U-1 blocks are read, kernel returns block number N
    (as requested) to an application, successefully.
    
    Now an app requests block number N+1, and kernel tries to read
    blocks N+1..U+1.  Retrying again as in previous step.
    
    And so on, up to when an app requests block number U-1.  And when,
    finally, it requests block U, it receives read error.
    
    So, kernel currentry tries to re-read the same failing block as
    many times as the current readahead value (256 (times?) by default).
    
    This whole process already killed my cdrom drive (I posted about it
    to LKML several months ago) - literally, the drive has fried, and
    does not work anymore.  Ofcourse that problem was a bug in firmware
    (or whatever) of the drive *too*, but.. main problem with that is
    current readahead logic as described above.
    [/QUOTE]
    
    Which was confirmed by Jens Axboe <axboe@suse.de>:
    
    [QUOTE]
    For ide-cd, it tends do only end the first part of the request on a
    medium error. So you may see a lot of repeats :/
    [/QUOTE]
    
    With this patch, retries are expected to be reduced from, say, 256, to 5.
    
    [akpm@osdl.org: cleanups]
    Signed-off-by: NWu Fengguang <wfg@mail.ustc.edu.cn>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    76d42bd9
filemap.c 63.1 KB