]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.fixes/0016-md-centralize-array_sectors-modifications.patch
Move xen patchset to new version's subdir.
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.fixes / 0016-md-centralize-array_sectors-modifications.patch
diff --git a/src/patches/suse-2.6.27.31/patches.fixes/0016-md-centralize-array_sectors-modifications.patch b/src/patches/suse-2.6.27.31/patches.fixes/0016-md-centralize-array_sectors-modifications.patch
new file mode 100644 (file)
index 0000000..bc04158
--- /dev/null
@@ -0,0 +1,119 @@
+From 1f403624bde3c678a166984b1e6a727a0ce06f2b Mon Sep 17 00:00:00 2001
+From: Dan Williams <dan.j.williams@intel.com>
+Date: Tue, 31 Mar 2009 14:59:03 +1100
+Subject: [PATCH] md: centralize ->array_sectors modifications
+
+Get personalities out of the business of directly modifying
+->array_sectors.  Lays groundwork to introduce policy on when
+->array_sectors can be modified.
+
+Reviewed-by: Andre Noll <maan@systemlinux.org>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Acked-by: NeilBrown <neilb@suse.de>
+---
+ drivers/md/linear.c     |    4 ++--
+ drivers/md/md.c         |    6 ++++++
+ drivers/md/raid1.c      |    2 +-
+ drivers/md/raid10.c     |    2 +-
+ drivers/md/raid5.c      |    8 +++++---
+ include/linux/raid/md.h |    1 +
+ 6 files changed, 16 insertions(+), 7 deletions(-)
+
+--- linux-2.6.27-SLE11_BRANCH.orig/drivers/md/linear.c
++++ linux-2.6.27-SLE11_BRANCH/drivers/md/linear.c
+@@ -270,7 +270,7 @@ static int linear_run (mddev_t *mddev)
+       if (!conf)
+               return 1;
+       mddev->private = conf;
+-      mddev->array_sectors = linear_size(mddev, 0, 0);
++      md_set_array_sectors(mddev, linear_size(mddev, 0, 0));
+       blk_queue_merge_bvec(mddev->queue, linear_mergeable_bvec);
+       mddev->queue->unplug_fn = linear_unplug;
+@@ -304,7 +304,7 @@ static int linear_add(mddev_t *mddev, md
+       newconf->prev = mddev_to_conf(mddev);
+       mddev->private = newconf;
+       mddev->raid_disks++;
+-      mddev->array_sectors = linear_size(mddev, 0, 0);
++      md_set_array_sectors(mddev, linear_size(mddev, 0, 0));
+       set_capacity(mddev->gendisk, mddev->array_sectors);
+       return 0;
+ }
+--- linux-2.6.27-SLE11_BRANCH.orig/drivers/md/md.c
++++ linux-2.6.27-SLE11_BRANCH/drivers/md/md.c
+@@ -4662,6 +4662,12 @@ static int set_array_info(mddev_t * mdde
+       return 0;
+ }
++void md_set_array_sectors(mddev_t *mddev, sector_t array_sectors)
++{
++      mddev->array_sectors = array_sectors;
++}
++EXPORT_SYMBOL(md_set_array_sectors);
++
+ static int update_size(mddev_t *mddev, sector_t num_sectors)
+ {
+       mdk_rdev_t * rdev;
+--- linux-2.6.27-SLE11_BRANCH.orig/drivers/md/raid1.c
++++ linux-2.6.27-SLE11_BRANCH/drivers/md/raid1.c
+@@ -2115,7 +2115,7 @@ static int raid1_resize(mddev_t *mddev, 
+        * any io in the removed space completes, but it hardly seems
+        * worth it.
+        */
+-      mddev->array_sectors = raid1_size(mddev, sectors, 0);
++      md_set_array_sectors(mddev, raid1_size(mddev, sectors, 0));
+       set_capacity(mddev->gendisk, mddev->array_sectors);
+       mddev->changed = 1;
+       if (mddev->array_sectors / 2 > mddev->size &&
+--- linux-2.6.27-SLE11_BRANCH.orig/drivers/md/raid10.c
++++ linux-2.6.27-SLE11_BRANCH/drivers/md/raid10.c
+@@ -2186,7 +2186,7 @@ static int run(mddev_t *mddev)
+       /*
+        * Ok, everything is just fine now
+        */
+-      mddev->array_sectors = raid10_size(mddev, 0, 0);
++      md_set_array_sectors(mddev, raid10_size(mddev, 0, 0));
+       mddev->resync_max_sectors = mddev->array_sectors;
+       mddev->queue->unplug_fn = raid10_unplug;
+--- linux-2.6.27-SLE11_BRANCH.orig/drivers/md/raid5.c
++++ linux-2.6.27-SLE11_BRANCH/drivers/md/raid5.c
+@@ -4437,7 +4437,7 @@ static int run(mddev_t *mddev)
+       mddev->queue->backing_dev_info.congested_data = mddev;
+       mddev->queue->backing_dev_info.congested_fn = raid5_congested;
+-      mddev->array_sectors = raid5_size(mddev, 0, 0);
++      md_set_array_sectors(mddev, raid5_size(mddev, 0, 0));
+       blk_queue_merge_bvec(mddev->queue, raid5_mergeable_bvec);
+@@ -4658,7 +4658,8 @@ static int raid5_resize(mddev_t *mddev, 
+        * worth it.
+        */
+       sectors &= ~((sector_t)mddev->chunk_size/512 - 1);
+-      mddev->array_sectors = raid5_size(mddev, sectors, mddev->raid_disks);
++      md_set_array_sectors(mddev, raid5_size(mddev, sectors,
++                                             mddev->raid_disks));
+       set_capacity(mddev->gendisk, mddev->array_sectors);
+       mddev->changed = 1;
+       if (sectors/2  > mddev->size && mddev->recovery_cp == MaxSector) {
+@@ -4797,7 +4798,8 @@ static void end_reshape(raid5_conf_t *co
+       if (!test_bit(MD_RECOVERY_INTR, &conf->mddev->recovery)) {
+               mddev_t *mddev = conf->mddev;
+-              mddev->array_sectors = raid5_size(mddev, 0, conf->raid_disks);
++              md_set_array_sectors(mddev, raid5_size(mddev, 0,
++                                                     conf->raid_disks));
+               set_capacity(mddev->gendisk, mddev->array_sectors);
+               mddev->changed = 1;
+               conf->previous_raid_disks = conf->raid_disks;
+--- linux-2.6.27-SLE11_BRANCH.orig/include/linux/raid/md.h
++++ linux-2.6.27-SLE11_BRANCH/include/linux/raid/md.h
+@@ -97,6 +97,7 @@ extern void md_do_sync(mddev_t *mddev);
+ extern void md_new_event(mddev_t *mddev);
+ extern int md_allow_write(mddev_t *mddev);
+ extern void md_wait_for_blocked_rdev(mdk_rdev_t *rdev, mddev_t *mddev);
++extern void md_set_array_sectors(mddev_t *mddev, sector_t array_sectors);
+ #endif /* CONFIG_MD */
+ #endif