]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] md 4 of 22 - Make raid5 work for big bios
authorNeil Brown <neilb@cse.unsw.edu.au>
Tue, 18 Jun 2002 11:15:47 +0000 (04:15 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Tue, 18 Jun 2002 11:15:47 +0000 (04:15 -0700)
drivers/md/raid5.c

index 83afd1a8aac3e91621433d397dee0fd94440a7f4..8a68abc2e6c9fabb406a0ee418eddac628339bbd 100644 (file)
@@ -633,7 +633,6 @@ static void copy_data(int frombio, struct bio *bio,
                else 
                        page_offset = (signed)(sector - bio->bi_sector) * -512;
                bio_for_each_segment(bvl, bio, i) {
-                       char *ba = __bio_kmap(bio, i);
                        int len = bio_iovec_idx(bio,i)->bv_len;
                        int clen;
                        int b_offset = 0;                       
@@ -648,13 +647,16 @@ static void copy_data(int frombio, struct bio *bio,
                                clen = STRIPE_SIZE - page_offset;       
                        else clen = len;
                        
-                       if (len > 0) {
+                       if (clen > 0) {
+                               char *ba = __bio_kmap(bio, i);
                                if (frombio)
                                        memcpy(pa+page_offset, ba+b_offset, clen);
                                else
                                        memcpy(ba+b_offset, pa+page_offset, clen);
-                       }
-                       __bio_kunmap(bio, i);
+                               __bio_kunmap(bio, i);
+                       }       
+                       if (clen < len) /* hit end of page */
+                               break;
                        page_offset +=  len;
                }
        }