1. 23 Dec, 2010 1 commit
    • James Bottomley's avatar
      [SCSI] fix medium error problems with some arrays which can cause data corruption · a8733c7b
      James Bottomley authored
      Our current handling of medium error assumes that data is returned up
      to the bad sector.  This assumption holds good for all disk devices,
      all DIF arrays and most ordinary arrays.  However, an LSI array engine
      was recently discovered which reports a medium error without returning
      any data.  This means that when we report good data up to the medium
      error, we've reported junk originally in the buffer as good.  Worse,
      if the read consists of requested data plus a readahead, and the error
      occurs in readahead, we'll just strip off the readahead and report
      junk up to userspace as good data with no error.
      
      The fix for this is to have the error position computation take into
      account the amount of data returned by the driver using the scsi
      residual data.  Unfortunately, not every driver fills in this data,
      but for those who don't, it's set to zero, which means we'll think a
      full set of data was transferred and the behaviour will be identical
      to the prior behaviour of the code (believe the buffer up to the error
      sector).  All modern drivers seem to set the residual, so that should
      fix up the LSI failure/corruption case.
      Reported-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
      Cc: Stable Tree <stable@kernel.org>
      Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
      a8733c7b
  2. 21 Dec, 2010 39 commits