patch-2.4.0-test5 linux/drivers/block/raid5.c

Next file: linux/drivers/block/xor.c
Previous file: linux/drivers/block/raid1.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test4/linux/drivers/block/raid5.c linux/drivers/block/raid5.c
@@ -264,7 +264,7 @@
 		}
 		bh->b_size = b_size;
 		atomic_set(&bh->b_count, 0);
-		set_bh_page(bh, page, 0);
+		bh->b_page = page;
 		put_free_buffer(sh, bh);
 	}
 	return 0;
@@ -597,7 +597,7 @@
 
 static void raid5_end_request (struct buffer_head * bh, int uptodate)
 {
-	struct stripe_head *sh = bh->b_dev_id;
+ 	struct stripe_head *sh = bh->b_private;
 	raid5_conf_t *conf = sh->raid_conf;
 	int disks = conf->raid_disks, i;
 	unsigned long flags;
@@ -1263,7 +1263,7 @@
 			bh->b_dev = bh->b_rdev = conf->disks[i].dev;
 			q = blk_get_queue(bh->b_rdev);
 			generic_make_request(q, READ, bh);
-			drive_stat_acct(bh->b_rdev, READ, -bh->b_size/512, 0);
+			md_sync_acct(bh->b_rdev, bh->b_size/512);
 			atomic_dec(&sh->bh_old[i]->b_count);
 		}
 		PRINTK("handle_stripe_sync() %lu, phase READ_OLD, pending %d buffers\n", sh->sector, md_atomic_read(&sh->nr_pending));
@@ -1293,7 +1293,7 @@
 				bh->b_dev = bh->b_rdev = conf->spare->dev;
 				q = blk_get_queue(bh->b_rdev);
 				generic_make_request(q, WRITERAW, bh);
-				drive_stat_acct(bh->b_rdev, WRITE, -bh->b_size/512, 0);
+				md_sync_acct(bh->b_rdev, bh->b_size/512);
 				atomic_dec(&bh->b_count);
 		PRINTK("handle_stripe_sync() %lu, phase WRITE, pending %d buffers\n", sh->sector, md_atomic_read(&sh->nr_pending));
 			}
@@ -1320,7 +1320,7 @@
 		bh->b_dev = bh->b_rdev = conf->disks[pd_idx].dev;
 		q = blk_get_queue(bh->b_rdev);
 		generic_make_request(q, WRITERAW, bh);
-		drive_stat_acct(bh->b_rdev, WRITE, -bh->b_size/512, 0);
+		md_sync_acct(bh->b_rdev, bh->b_size/512);
 		atomic_dec(&bh->b_count);
 		PRINTK("handle_stripe_sync() %lu phase WRITE, pending %d buffers\n",
 			sh->sector, md_atomic_read(&sh->nr_pending));
@@ -1488,7 +1488,7 @@
 }
 
 
-static int raid5_make_request (request_queue_t *q, mddev_t *mddev, int rw, struct buffer_head * bh)
+static int raid5_make_request (mddev_t *mddev, int rw, struct buffer_head * bh)
 {
 	raid5_conf_t *conf = (raid5_conf_t *) mddev->private;
 	const unsigned int raid_disks = conf->raid_disks;
@@ -2391,6 +2391,12 @@
 	err = register_md_personality (RAID5, &raid5_personality);
 	if (err)
 		return err;
+
+	/*
+	 * pick a XOR routine, runtime.
+	 */
+	calibrate_xor_block();
+
 	return 0;
 }
 

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)