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

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

diff -u --recursive --new-file v2.4.0-test4/linux/drivers/block/raid0.c linux/drivers/block/raid0.c
@@ -223,15 +223,15 @@
  * Of course, those facts may not be valid anymore (and surely won't...)
  * Hey guys, there's some work out there ;-)
  */
-static int raid0_make_request (request_queue_t *q, mddev_t *mddev,
-					int rw, struct buffer_head * bh)
+static int raid0_make_request (mddev_t *mddev,
+			       int rw, struct buffer_head * bh)
 {
-	int blk_in_chunk, chunksize_bits, chunk, chunk_size;
+	unsigned int sect_in_chunk, chunksize_bits, chunk, chunk_size;
 	raid0_conf_t *conf = mddev_to_conf(mddev);
 	struct raid0_hash *hash;
 	struct strip_zone *zone;
 	mdk_rdev_t *tmp_dev;
-	long block, rblock;
+	unsigned long block, rsect;
 
 	chunk_size = mddev->param.chunk_size >> 10;
 	chunksize_bits = ffz(~chunk_size);
@@ -255,17 +255,18 @@
 	} else
 		zone = hash->zone0;
     
-	blk_in_chunk = block & (chunk_size -1);
+	sect_in_chunk = bh->b_rsector & ((chunk_size<<1) -1);
 	chunk = (block - zone->zone_offset) / (zone->nb_dev << chunksize_bits);
 	tmp_dev = zone->dev[(block >> chunksize_bits) % zone->nb_dev];
-	rblock = (chunk << chunksize_bits) + blk_in_chunk + zone->dev_offset;
+	rsect = (((chunk << chunksize_bits) + zone->dev_offset)<<1)
+		+ sect_in_chunk;
  
 	/*
 	 * The new BH_Lock semantics in ll_rw_blk.c guarantee that this
 	 * is the only IO operation happening on this bh.
 	 */
 	bh->b_rdev = tmp_dev->dev;
-	bh->b_rsector = rblock << 1;
+	bh->b_rsector = rsect;
 
 	/*
 	 * Let the main block layer submit the IO and resolve recursion:

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