• Andrew Morton's avatar
    [PATCH] (workaround): avoid raid1 crash during resync with qlogic controllers · 61179b28
    Andrew Morton authored
    qlogic's 16k maximum I/O size bites again.  Neil says:
    
     The problems we fixed were all to do with normal IO.  This one is resync
     IO.
    
     The problem here is that raid1 always does resync in RESYNC_BLOCK_SIZE
     (=64k) IOs and if the device doesn't cope - tough.
    
     The simple fix is to #define RESYNC_BLOCK_SIZE to PAGE_SIZE in md/raid1.c
    
     The better fix is to rewrite the raid1 resync code to use bio_add_page.
    
     This means we have to build the read request and the write requests at the
     same time, and then when a bio_add_page fails, we back-out the last page
     from the bios that have one too many, and then do the read followed by the
     writes.
    
     I have some code the nearly does this, but I haven't got it actually
     working yet and I am on leave until mid January.
    
     I would recommend doing
    
     fs/drivers/md/raid1.c:
     -#define RESYNC_BLOCK_SIZE (64*1024)
     +#define RESYNC_BLOCK_SIZE PAGE_SIZE
    
     for now.
    61179b28
raid1.c 29.6 KB