vserver 1.9.3
[linux-2.6.git] / drivers / md / raid0.c
index 5f4b8bf..ae45ae9 100644 (file)
@@ -40,6 +40,31 @@ static void raid0_unplug(request_queue_t *q)
        }
 }
 
+static int raid0_issue_flush(request_queue_t *q, struct gendisk *disk,
+                            sector_t *error_sector)
+{
+       mddev_t *mddev = q->queuedata;
+       raid0_conf_t *conf = mddev_to_conf(mddev);
+       mdk_rdev_t **devlist = conf->strip_zone[0].dev;
+       int i, ret = 0;
+
+       for (i=0; i<mddev->raid_disks; i++) {
+               struct block_device *bdev = devlist[i]->bdev;
+               request_queue_t *r_queue = bdev_get_queue(bdev);
+
+               if (!r_queue->issue_flush_fn) {
+                       ret = -EOPNOTSUPP;
+                       break;
+               }
+
+               ret =r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector);
+               if (ret)
+                       break;
+       }
+       return ret;
+}
+
+
 static int create_strip_zones (mddev_t *mddev)
 {
        int i, c, j;
@@ -137,7 +162,7 @@ static int create_strip_zones (mddev_t *mddev)
 
                if (rdev1->bdev->bd_disk->queue->merge_bvec_fn &&
                    mddev->queue->max_sectors > (PAGE_SIZE>>9))
-                       mddev->queue->max_sectors = (PAGE_SIZE>>9);
+                       blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9);
 
                if (!smallest || (rdev1->size <smallest->size))
                        smallest = rdev1;
@@ -219,6 +244,8 @@ static int create_strip_zones (mddev_t *mddev)
 
        mddev->queue->unplug_fn = raid0_unplug;
 
+       mddev->queue->issue_flush_fn = raid0_issue_flush;
+
        printk("raid0: done.\n");
        return 0;
  abort: