raid1.c (3fa841d7e7266f6fcc1b3885b905f5153ba897d8) raid1.c (1ef04fefe2241087d9db7e9615c3f11b516e36cf)
1/*
2 * raid1.c : Multiple Devices driver for Linux
3 *
4 * Copyright (C) 1999, 2000, 2001 Ingo Molnar, Red Hat
5 *
6 * Copyright (C) 1996, 1997, 1998 Ingo Molnar, Miguel de Icaza, Gadi Oxman
7 *
8 * RAID-1 management functions.

--- 840 unchanged lines hidden (view full) ---

849
850 read_bio = bio_clone(bio, GFP_NOIO);
851
852 r1_bio->bios[rdisk] = read_bio;
853
854 read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset;
855 read_bio->bi_bdev = mirror->rdev->bdev;
856 read_bio->bi_end_io = raid1_end_read_request;
1/*
2 * raid1.c : Multiple Devices driver for Linux
3 *
4 * Copyright (C) 1999, 2000, 2001 Ingo Molnar, Red Hat
5 *
6 * Copyright (C) 1996, 1997, 1998 Ingo Molnar, Miguel de Icaza, Gadi Oxman
7 *
8 * RAID-1 management functions.

--- 840 unchanged lines hidden (view full) ---

849
850 read_bio = bio_clone(bio, GFP_NOIO);
851
852 r1_bio->bios[rdisk] = read_bio;
853
854 read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset;
855 read_bio->bi_bdev = mirror->rdev->bdev;
856 read_bio->bi_end_io = raid1_end_read_request;
857 read_bio->bi_rw = READ | do_sync;
857 read_bio->bi_rw = READ | (do_sync << BIO_RW_SYNCIO);
858 read_bio->bi_private = r1_bio;
859
860 generic_make_request(read_bio);
861 return 0;
862 }
863
864 /*
865 * WRITE:

--- 75 unchanged lines hidden (view full) ---

941 continue;
942
943 mbio = bio_clone(bio, GFP_NOIO);
944 r1_bio->bios[i] = mbio;
945
946 mbio->bi_sector = r1_bio->sector + conf->mirrors[i].rdev->data_offset;
947 mbio->bi_bdev = conf->mirrors[i].rdev->bdev;
948 mbio->bi_end_io = raid1_end_write_request;
858 read_bio->bi_private = r1_bio;
859
860 generic_make_request(read_bio);
861 return 0;
862 }
863
864 /*
865 * WRITE:

--- 75 unchanged lines hidden (view full) ---

941 continue;
942
943 mbio = bio_clone(bio, GFP_NOIO);
944 r1_bio->bios[i] = mbio;
945
946 mbio->bi_sector = r1_bio->sector + conf->mirrors[i].rdev->data_offset;
947 mbio->bi_bdev = conf->mirrors[i].rdev->bdev;
948 mbio->bi_end_io = raid1_end_write_request;
949 mbio->bi_rw = WRITE | do_barriers | do_sync;
949 mbio->bi_rw = WRITE | (do_barriers << BIO_RW_BARRIER) |
950 (do_sync << BIO_RW_SYNCIO);
950 mbio->bi_private = r1_bio;
951
952 if (behind_pages) {
953 struct bio_vec *bvec;
954 int j;
955
956 /* Yes, I really want the '__' version so that
957 * we clear any unused pointer in the io_vec, rather

--- 663 unchanged lines hidden (view full) ---

1621 * this might be a write-behind device */
1622 __bio_for_each_segment(bvec, bio, j, 0)
1623 bvec->bv_page = bio_iovec_idx(r1_bio->bios[i], j)->bv_page;
1624 bio_put(r1_bio->bios[i]);
1625 bio->bi_sector = r1_bio->sector +
1626 conf->mirrors[i].rdev->data_offset;
1627 bio->bi_bdev = conf->mirrors[i].rdev->bdev;
1628 bio->bi_end_io = raid1_end_write_request;
951 mbio->bi_private = r1_bio;
952
953 if (behind_pages) {
954 struct bio_vec *bvec;
955 int j;
956
957 /* Yes, I really want the '__' version so that
958 * we clear any unused pointer in the io_vec, rather

--- 663 unchanged lines hidden (view full) ---

1622 * this might be a write-behind device */
1623 __bio_for_each_segment(bvec, bio, j, 0)
1624 bvec->bv_page = bio_iovec_idx(r1_bio->bios[i], j)->bv_page;
1625 bio_put(r1_bio->bios[i]);
1626 bio->bi_sector = r1_bio->sector +
1627 conf->mirrors[i].rdev->data_offset;
1628 bio->bi_bdev = conf->mirrors[i].rdev->bdev;
1629 bio->bi_end_io = raid1_end_write_request;
1629 bio->bi_rw = WRITE | do_sync;
1630 bio->bi_rw = WRITE |
1631 (do_sync << BIO_RW_SYNCIO);
1630 bio->bi_private = r1_bio;
1631 r1_bio->bios[i] = bio;
1632 generic_make_request(bio);
1633 }
1634 } else {
1635 int disk;
1636
1637 /* we got a read error. Maybe the drive is bad. Maybe just

--- 32 unchanged lines hidden (view full) ---

1670 if (printk_ratelimit())
1671 printk(KERN_ERR "raid1: %s: redirecting sector %llu to"
1672 " another mirror\n",
1673 bdevname(rdev->bdev,b),
1674 (unsigned long long)r1_bio->sector);
1675 bio->bi_sector = r1_bio->sector + rdev->data_offset;
1676 bio->bi_bdev = rdev->bdev;
1677 bio->bi_end_io = raid1_end_read_request;
1632 bio->bi_private = r1_bio;
1633 r1_bio->bios[i] = bio;
1634 generic_make_request(bio);
1635 }
1636 } else {
1637 int disk;
1638
1639 /* we got a read error. Maybe the drive is bad. Maybe just

--- 32 unchanged lines hidden (view full) ---

1672 if (printk_ratelimit())
1673 printk(KERN_ERR "raid1: %s: redirecting sector %llu to"
1674 " another mirror\n",
1675 bdevname(rdev->bdev,b),
1676 (unsigned long long)r1_bio->sector);
1677 bio->bi_sector = r1_bio->sector + rdev->data_offset;
1678 bio->bi_bdev = rdev->bdev;
1679 bio->bi_end_io = raid1_end_read_request;
1678 bio->bi_rw = READ | do_sync;
1680 bio->bi_rw = READ | (do_sync << BIO_RW_SYNCIO);
1679 bio->bi_private = r1_bio;
1680 unplug = 1;
1681 generic_make_request(bio);
1682 }
1683 }
1684 }
1685 if (unplug)
1686 unplug_slaves(mddev);

--- 628 unchanged lines hidden ---
1681 bio->bi_private = r1_bio;
1682 unplug = 1;
1683 generic_make_request(bio);
1684 }
1685 }
1686 }
1687 if (unplug)
1688 unplug_slaves(mddev);

--- 628 unchanged lines hidden ---