• James Bottomley's avatar
    [SCSI] sd: fix array cache flushing bug causing performance problems · 39c60a09
    James Bottomley authored
    Some arrays synchronize their full non volatile cache when the sd driver sends
    a SYNCHRONIZE CACHE command.  Unfortunately, they can have Terrabytes of this
    and we send a SYNCHRONIZE CACHE for every barrier if an array reports it has a
    writeback cache.  This leads to massive slowdowns on journalled filesystems.
    
    The fix is to allow userspace to turn off the writeback cache setting as a
    temporary measure (i.e. without doing the MODE SELECT to write it back to the
    device), so even though the device reported it has a writeback cache, the
    user, knowing that the cache is non volatile and all they care about is
    filesystem correctness, can turn that bit off in the kernel and avoid the
    performance ruinous (and safety irrelevant) SYNCHRONIZE CACHE commands.
    
    The way you do this is add a 'temporary' prefix when performing the usual
    cache setting operations, so
    
    echo temporary write through > /sys/class/scsi_disk/<disk>/cache_type
    Reported-by: default avatarRic Wheeler <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: default avatarJames Bottomley <[email protected]>
    39c60a09
sd.h 4.51 KB