• Andries E. Brouwer's avatar
    [PATCH] try more sd.c MODE SENSE modes · e91004e8
    Andries E. Brouwer authored
    In sd.c we call MODE SENSE (6) in order to find out whether the
    device is write protected. The info we need is in byte 2, the
    header of the MODE SENSE answer, but in the request we have to
    specify (i) what page(s) we want, and (ii) how many bytes we want.
    
    Long ago we asked for 12 bytes from page 1 (Daniel Roche, 1.3.35).
    Matthew Dharm made this 8 bytes from page 3F (all pages), patch-2.4.0-test8.
    In patch-2.4.10 the 8 was increased to 255.
    
    I found on the one hand devices that only react to page 0
    (the vendor page), and return an error for page 3F.
    And on the other hand devices that are unable to handle requests
    for more bytes than they actually have.
    
    So, it seems that the cautious way to ask for MODE SENSE data is
    to first ask for the header only, see how much is available,
    and then ask for everything.
    
    The patch below first separates out the MODE SENSE call,
    and then tries it three times: on all pages (3F), only the first
    four bytes; on the vendor page (0), only the first four bytes;
    on all pages (3F), 255 bytes.
    
    This should be at least as robust as our current code.
    I tried it on 8 SCSI devices (of which 2 fail under 2.5.33)
    and found no problems.
    e91004e8
sd.c 41.2 KB