Update to mdadm-3.2.3

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
This commit is contained in:
Jes Sorensen 2011-12-30 17:42:20 +01:00
parent 82fbb33bf7
commit 09420a0c0f
19 changed files with 41 additions and 1194 deletions

View File

@ -1,20 +0,0 @@
--- mdadm-3.2.1/udev-md-raid.rules.udev 2011-03-27 22:31:20.000000000 -0400
+++ mdadm-3.2.1/udev-md-raid.rules 2011-03-28 10:14:26.047232843 -0400
@@ -2,11 +2,13 @@
SUBSYSTEM!="block", GOTO="md_end"
+# In Fedora we handle the raid components in 65-md-incremental.rules so that
+# we can do things like honor anaconda command line options and such
# handle potential components of arrays
-ENV{ID_FS_TYPE}=="linux_raid_member", ACTION=="remove", RUN+="/sbin/mdadm -If $name --path $env{ID_PATH}"
-ENV{ID_FS_TYPE}=="linux_raid_member", ACTION=="add", RUN+="/sbin/mdadm --incremental $env{DEVNAME}"
-ENV{ID_FS_TYPE}=="isw_raid_member", ACTION=="remove", RUN+="/sbin/mdadm -If $name --path $env{ID_PATH}"
-ENV{ID_FS_TYPE}=="isw_raid_member", ACTION=="add", RUN+="/sbin/mdadm --incremental $env{DEVNAME}"
+#ENV{ID_FS_TYPE}=="linux_raid_member", ACTION=="remove", RUN+="/sbin/mdadm -If $name --path $env{ID_PATH}"
+#ENV{ID_FS_TYPE}=="linux_raid_member", ACTION=="add", RUN+="/sbin/mdadm --incremental $env{DEVNAME}"
+#ENV{ID_FS_TYPE}=="isw_raid_member", ACTION=="remove", RUN+="/sbin/mdadm -If $name --path $env{ID_PATH}"
+#ENV{ID_FS_TYPE}=="isw_raid_member", ACTION=="add", RUN+="/sbin/mdadm --incremental $env{DEVNAME}"
# handle md arrays
ACTION!="add|change", GOTO="md_end"

View File

@ -1,24 +0,0 @@
--- a/util.c
+++ b/util.c
@@ -146,16 +146,16 @@ int get_linux_version()
{
struct utsname name;
char *cp;
- int a,b,c;
+ int a = 0, b = 0,c = 0;
if (uname(&name) <0)
return -1;
cp = name.release;
a = strtoul(cp, &cp, 10);
- if (*cp != '.') return -1;
- b = strtoul(cp+1, &cp, 10);
- if (*cp != '.') return -1;
- c = strtoul(cp+1, NULL, 10);
+ if (*cp == '.')
+ b = strtoul(cp+1, &cp, 10);
+ if (*cp == '.')
+ c = strtoul(cp+1, &cp, 10);
return (a*1000000)+(b*1000)+c;
}

View File

@ -1,163 +0,0 @@
From 11b391ece9fa284a151362537af093aa44883696 Mon Sep 17 00:00:00 2001
From: NeilBrown <neilb@suse.de>
Date: Thu, 8 Sep 2011 13:05:31 +1000
Subject: [PATCH 2/3] Discourage large devices from being added to 0.90
arrays.
0.90 arrays can only use up to 4TB per device. So when a larger
device is added, complain a bit. Still allow it if --force is given
as there could be a valid use.
Signed-off-by: NeilBrown <neilb@suse.de>
---
Grow.c | 2 +-
Incremental.c | 8 ++++----
Manage.c | 29 +++++++++++++++++++++++++----
mdadm.c | 3 ++-
mdadm.h | 2 +-
5 files changed, 33 insertions(+), 11 deletions(-)
diff --git a/Grow.c b/Grow.c
index 1aab113..048351d 100644
--- a/Grow.c
+++ b/Grow.c
@@ -1893,7 +1893,7 @@ static int reshape_array(char *container, int fd, char *devname,
*/
if (devlist)
Manage_subdevs(devname, fd, devlist, !quiet,
- 0,NULL);
+ 0,NULL, 0);
if (reshape.backup_blocks == 0) {
/* No restriping needed, but we might need to impose
diff --git a/Incremental.c b/Incremental.c
index 09cdd9b..791ad85 100644
--- a/Incremental.c
+++ b/Incremental.c
@@ -1035,7 +1035,7 @@ static int array_try_spare(char *devname, int *dfdp, struct dev_policy *pol,
close(dfd);
*dfdp = -1;
rv = Manage_subdevs(chosen->sys_name, mdfd, &devlist,
- -1, 0, NULL);
+ -1, 0, NULL, 0);
close(mdfd);
}
if (verbose > 0) {
@@ -1666,15 +1666,15 @@ int IncrementalRemove(char *devname, char *id_path, int verbose)
if (subfd >= 0) {
Manage_subdevs(memb->dev, subfd,
&devlist, verbose, 0,
- NULL);
+ NULL, 0);
close(subfd);
}
}
free_mdstat(mdstat);
} else
- Manage_subdevs(ent->dev, mdfd, &devlist, verbose, 0, NULL);
+ Manage_subdevs(ent->dev, mdfd, &devlist, verbose, 0, NULL, 0);
devlist.disposition = 'r';
- rv = Manage_subdevs(ent->dev, mdfd, &devlist, verbose, 0, NULL);
+ rv = Manage_subdevs(ent->dev, mdfd, &devlist, verbose, 0, NULL, 0);
close(mdfd);
free_mdstat(ent);
return rv;
diff --git a/Manage.c b/Manage.c
index 66d6978..1b2b75a 100644
--- a/Manage.c
+++ b/Manage.c
@@ -371,7 +371,7 @@ int Manage_resize(char *devname, int fd, long long size, int raid_disks)
int Manage_subdevs(char *devname, int fd,
struct mddev_dev *devlist, int verbose, int test,
- char *update)
+ char *update, int force)
{
/* do something to each dev.
* devmode can be
@@ -632,6 +632,27 @@ int Manage_subdevs(char *devname, int fd,
continue;
}
+ if (tst->ss->validate_geometry(
+ tst, array.level, array.layout,
+ array.raid_disks, NULL,
+ ldsize >> 9, NULL, NULL, 0) == 0) {
+ if (!force) {
+ fprintf(stderr, Name
+ ": %s is larger than %s can "
+ "effectively use.\n"
+ " Add --force is you "
+ "really wan to add this device.\n",
+ add_dev, devname);
+ close(tfd);
+ return 1;
+ }
+ fprintf(stderr, Name
+ ": %s is larger than %s can "
+ "effectively use.\n"
+ " Adding anyway as --force "
+ "was given.\n",
+ add_dev, devname);
+ }
if (!tst->ss->external &&
array.major_version == 0 &&
md_get_version(fd)%100 < 2) {
@@ -1188,9 +1209,9 @@ int move_spare(char *from_devname, char *to_devname, dev_t devid)
sprintf(devname, "%d:%d", major(devid), minor(devid));
devlist.disposition = 'r';
- if (Manage_subdevs(from_devname, fd2, &devlist, -1, 0, NULL) == 0) {
+ if (Manage_subdevs(from_devname, fd2, &devlist, -1, 0, NULL, 0) == 0) {
devlist.disposition = 'a';
- if (Manage_subdevs(to_devname, fd1, &devlist, -1, 0, NULL) == 0) {
+ if (Manage_subdevs(to_devname, fd1, &devlist, -1, 0, NULL, 0) == 0) {
/* make sure manager is aware of changes */
ping_manager(to_devname);
ping_manager(from_devname);
@@ -1198,7 +1219,7 @@ int move_spare(char *from_devname, char *to_devname, dev_t devid)
close(fd2);
return 1;
}
- else Manage_subdevs(from_devname, fd2, &devlist, -1, 0, NULL);
+ else Manage_subdevs(from_devname, fd2, &devlist, -1, 0, NULL, 0);
}
close(fd1);
close(fd2);
diff --git a/mdadm.c b/mdadm.c
index fb51051..4b817ab 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -609,6 +609,7 @@ int main(int argc, char *argv[])
case O(ASSEMBLE,Force): /* force assembly */
case O(MISC,'f'): /* force zero */
case O(MISC,Force): /* force zero */
+ case O(MANAGE,Force): /* add device which is too large */
force=1;
continue;
@@ -1202,7 +1203,7 @@ int main(int argc, char *argv[])
if (!rv && devs_found>1)
rv = Manage_subdevs(devlist->devname, mdfd,
devlist->next, verbose-quiet, test,
- update);
+ update, force);
if (!rv && readonly < 0)
rv = Manage_ro(devlist->devname, mdfd, readonly);
if (!rv && runstop)
diff --git a/mdadm.h b/mdadm.h
index 8bd0077..d616966 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -1010,7 +1010,7 @@ extern int Manage_runstop(char *devname, int fd, int runstop, int quiet);
extern int Manage_resize(char *devname, int fd, long long size, int raid_disks);
extern int Manage_subdevs(char *devname, int fd,
struct mddev_dev *devlist, int verbose, int test,
- char *update);
+ char *update, int force);
extern int autodetect(void);
extern int Grow_Add_device(char *devname, int fd, char *newdev);
extern int Grow_addbitmap(char *devname, int fd, char *file, int chunk, int delay, int write_behind, int force);
--
1.7.6.4

View File

@ -1,84 +0,0 @@
From 9ad6f6e65a535f77f180e87393043a8ffcfb30d8 Mon Sep 17 00:00:00 2001
From: Adam Kwolek <adam.kwolek@intel.com>
Date: Wed, 26 Oct 2011 18:16:55 +0200
Subject: [PATCH] FIX: Close unused handle in child process during reshape
restart
When array reshape (e.g. raid0->raid5 migration) is restarted during
array assembly, file system placed on this array cannot be mounted until
reshape is finished due to "busy" error.
This is caused when reshape is executed on array for external metadata
and array handle is cloned /forked/ to child process environment but not
closed.
Handle can't be closed before executing Grow_continue() because it is
used later in code.
Close unused handle in child process /reshape_container()/.
It is similar to close fd handle in reshape_array() before calling
manage_reshape()/child_monitor() in Grow.c:2290.
Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
---
Grow.c | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/Grow.c b/Grow.c
index 0e4dd10..93a69fd 100644
--- a/Grow.c
+++ b/Grow.c
@@ -1350,6 +1350,7 @@ static int reshape_array(char *container, int fd, char *devname,
char *backup_file, int quiet, int forked,
int restart);
static int reshape_container(char *container, char *devname,
+ int mdfd,
struct supertype *st,
struct mdinfo *info,
int force,
@@ -1768,7 +1769,7 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
* number of devices (On-Line Capacity Expansion) must be
* performed at the level of the container
*/
- rv = reshape_container(container, devname, st, &info,
+ rv = reshape_container(container, devname, -1, st, &info,
force, backup_file, quiet, 0);
frozen = 0;
} else {
@@ -2403,7 +2404,10 @@ release:
return 1;
}
+/* mdfd handle is passed to be closed in child process (after fork).
+ */
int reshape_container(char *container, char *devname,
+ int mdfd,
struct supertype *st,
struct mdinfo *info,
int force,
@@ -2446,6 +2450,11 @@ int reshape_container(char *container, char *devname,
break;
}
+ /* close unused handle in child process
+ */
+ if (mdfd > -1)
+ close(mdfd);
+
while(1) {
/* For each member array with reshape_active,
* we need to perform the reshape.
@@ -3571,7 +3580,7 @@
return 1;
st->ss->load_container(st, cfd, container);
close(cfd);
- return reshape_container(container, NULL,
+ return reshape_container(container, NULL, mdfd,
st, info, 0, backup_file,
0, 1);
}
--
1.7.7.3

View File

@ -1,76 +0,0 @@
From 01619b481883926f13da2b1b88f3125359a6a08b Mon Sep 17 00:00:00 2001
From: NeilBrown <neilb@suse.de>
Date: Thu, 8 Sep 2011 12:20:36 +1000
Subject: [PATCH 1/3] Fix component size checks in validate_super0.
A 0.90 array can use at most 4TB of each device - 2TB between
2.6.39 and 3.1 due to a kernel bug.
The test for this in validate_super0 is very wrong. 'size' is sectors
and the number it is compared against is just confusing.
So fix it all up and correct the spelling of terabytes and remove
a second redundant test on 'size'.
Signed-off-by: NeilBrown <neilb@suse.de>
---
super0.c | 14 ++++++++++----
util.c | 2 +-
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/super0.c b/super0.c
index 4a165f9..62c4ff0 100644
--- a/super0.c
+++ b/super0.c
@@ -1115,6 +1115,13 @@ static int validate_geometry0(struct supertype *st, int level,
{
unsigned long long ldsize;
int fd;
+ unsigned int tbmax = 4;
+
+ /* prior to linux 3.1, a but limits usable device size to 2TB.
+ * It was introduced in 2.6.29, but we won't worry about that detail
+ */
+ if (get_linux_version() < 3001000)
+ tbmax = 2;
if (level == LEVEL_CONTAINER) {
if (verbose)
@@ -1127,9 +1134,10 @@ static int validate_geometry0(struct supertype *st, int level,
MD_SB_DISKS);
return 0;
}
- if (size > (0x7fffffffULL<<9)) {
+ if (size >= tbmax * 1024*1024*1024*2ULL) {
if (verbose)
- fprintf(stderr, Name ": 0.90 metadata supports at most 2 terrabytes per device\n");
+ fprintf(stderr, Name ": 0.90 metadata supports at most "
+ "%d terabytes per device\n", tbmax);
return 0;
}
if (chunk && *chunk == UnSet)
@@ -1154,8 +1162,6 @@ static int validate_geometry0(struct supertype *st, int level,
if (ldsize < MD_RESERVED_SECTORS * 512)
return 0;
- if (size > (0x7fffffffULL<<9))
- return 0;
*freesize = MD_NEW_SIZE_SECTORS(ldsize >> 9);
return 1;
}
diff --git a/util.c b/util.c
index e68d55f..0ea7e0d 100644
--- a/util.c
+++ b/util.c
@@ -640,7 +640,7 @@ char *human_size(long long bytes)
* We allow upto 2048Megabytes before converting to
* gigabytes, as that shows more precision and isn't
* too large a number.
- * Terrabytes are not yet handled.
+ * Terabytes are not yet handled.
*/
if (bytes < 5000*1024)
--
1.7.6.4

View File

@ -1,113 +0,0 @@
From 758be4f1c9cda8eefb2fd241835521462196e16c Mon Sep 17 00:00:00 2001
From: Lukasz Dorau <lukasz.dorau@intel.com>
Date: Mon, 19 Sep 2011 13:26:05 +1000
Subject: [PATCH] Fix serious memory leak
During reshape function restore_stripes is called periodically
and every time the buffer stripe_buf (of size raid_disks*chunk_size)
is allocated but is not freed. It happens also upon successful completion.
In case of huge arrays it can lead to the seizure of the entire
system memory (even of the order of gigabytes).
Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
---
restripe.c | 50 +++++++++++++++++++++++++++++++++-----------------
1 files changed, 33 insertions(+), 17 deletions(-)
diff --git a/restripe.c b/restripe.c
index 9c83e2e..00e7a82 100644
--- a/restripe.c
+++ b/restripe.c
@@ -687,6 +687,7 @@ int restore_stripes(int *dest, unsigned long long *offsets,
char **stripes = malloc(raid_disks * sizeof(char*));
char **blocks = malloc(raid_disks * sizeof(char*));
int i;
+ int rv;
int data_disks = raid_disks - (level == 0 ? 0 : level <= 5 ? 1 : 2);
@@ -704,11 +705,8 @@ int restore_stripes(int *dest, unsigned long long *offsets,
if (stripe_buf == NULL || stripes == NULL || blocks == NULL
|| zero == NULL) {
- free(stripe_buf);
- free(stripes);
- free(blocks);
- free(zero);
- return -2;
+ rv = -2;
+ goto abort;
}
for (i = 0; i < raid_disks; i++)
stripes[i] = stripe_buf + i * chunk_size;
@@ -717,20 +715,26 @@ int restore_stripes(int *dest, unsigned long long *offsets,
unsigned long long offset;
int disk, qdisk;
int syndrome_disks;
- if (length < len)
- return -3;
+ if (length < len) {
+ rv = -3;
+ goto abort;
+ }
for (i = 0; i < data_disks; i++) {
int disk = geo_map(i, start/chunk_size/data_disks,
raid_disks, level, layout);
if (src_buf == NULL) {
/* read from file */
- if (lseek64(source,
- read_offset, 0) != (off64_t)read_offset)
- return -1;
+ if (lseek64(source, read_offset, 0) !=
+ (off64_t)read_offset) {
+ rv = -1;
+ goto abort;
+ }
if (read(source,
stripes[disk],
- chunk_size) != chunk_size)
- return -1;
+ chunk_size) != chunk_size) {
+ rv = -1;
+ goto abort;
+ }
} else {
/* read from input buffer */
memcpy(stripes[disk],
@@ -782,15 +786,27 @@ int restore_stripes(int *dest, unsigned long long *offsets,
}
for (i=0; i < raid_disks ; i++)
if (dest[i] >= 0) {
- if (lseek64(dest[i], offsets[i]+offset, 0) < 0)
- return -1;
- if (write(dest[i], stripes[i], chunk_size) != chunk_size)
- return -1;
+ if (lseek64(dest[i],
+ offsets[i]+offset, 0) < 0) {
+ rv = -1;
+ goto abort;
+ }
+ if (write(dest[i], stripes[i],
+ chunk_size) != chunk_size) {
+ rv = -1;
+ goto abort;
+ }
}
length -= len;
start += len;
}
- return 0;
+ rv = 0;
+
+abort:
+ free(stripe_buf);
+ free(stripes);
+ free(blocks);
+ return rv;
}
#ifdef MAIN
--
1.7.7.3

View File

@ -1,77 +0,0 @@
From 20a4675688e0384a1b4eac61b05f60fbf7747df9 Mon Sep 17 00:00:00 2001
From: NeilBrown <neilb@suse.de>
Date: Thu, 8 Sep 2011 13:08:51 +1000
Subject: [PATCH 3/3] Grow: refuse to grow a 0.90 array beyond 2TB
A kernel bug makes handling for arrays using more than 2TB per device
incorrect, and the kernel doesn't stop an array from growing beyond
any limit.
This is fixed in 3.1
So prior to 3.1, make sure not to ask for an array to grow bigger than
2TB per device.
Signed-off-by: NeilBrown <neilb@suse.de>
---
Grow.c | 37 ++++++++++++++++++++++++++++++++++---
1 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/Grow.c b/Grow.c
index 048351d..17d14b6 100644
--- a/Grow.c
+++ b/Grow.c
@@ -1446,6 +1446,7 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
/* ========= set size =============== */
if (size >= 0 && (size == 0 || size != array.size)) {
long long orig_size = get_component_size(fd)/2;
+ long long min_csize;
struct mdinfo *mdi;
if (orig_size == 0)
@@ -1461,10 +1462,40 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
/* Update the size of each member device in case
* they have been resized. This will never reduce
* below the current used-size. The "size" attribute
- * understand '0' to mean 'max'.
+ * understands '0' to mean 'max'.
*/
- for (mdi = sra->devs; mdi; mdi = mdi->next)
- sysfs_set_num(sra, mdi, "size", size);
+ min_csize = 0;
+ for (mdi = sra->devs; mdi; mdi = mdi->next) {
+ if (sysfs_set_num(sra, mdi, "size", size) < 0)
+ break;
+ if (array.not_persistent == 0 &&
+ array.major_version == 0 &&
+ get_linux_version() < 3001000) {
+ /* Dangerous to allow size to exceed 2TB */
+ unsigned long long csize;
+ if (sysfs_get_ll(sra, mdi, "size", &csize) == 0) {
+ if (csize >= 2ULL*1024*1024*1024)
+ csize = 2ULL*1024*1024*1024;
+ if ((min_csize == 0 || (min_csize
+ > (long long)csize)))
+ min_csize = csize;
+ }
+ }
+ }
+ if (min_csize && size > min_csize) {
+ fprintf(stderr, Name ": Cannot safely make this array "
+ "use more than 2TB per device on this kernel.\n");
+ rv = 1;
+ goto release;
+ }
+ if (min_csize && size == 0) {
+ /* Don't let the kernel choose a size - it will get
+ * it wrong
+ */
+ fprintf(stderr, Name ": Limited v0.90 array to "
+ "2TB per device\n");
+ size = min_csize;
+ }
array.size = size;
if (array.size != size) {
--
1.7.6.4

View File

@ -1,88 +0,0 @@
commit 5fc8cff3a4177dfbab594947283117620b4b8c9c
Author: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat Oct 22 11:29:47 2011 +1100
Remove race for starting container devices.
This moves the lock handling out of Incremental_container() and relies
on the caller holding the lock. This prevents conflict with a
follow-on mdadm comment which may try and launch the device in
parallel.
This involves replacing a call to "Incremental" with an
unrolled version with just the case that calls Incremental_container
and so needs a call to ->load_container.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
---
Incremental.c | 22 ++++++++++++----------
1 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/Incremental.c b/Incremental.c
index 14184da..9fa6800 100644
--- a/Incremental.c
+++ b/Incremental.c
@@ -138,9 +138,15 @@
rv = st->ss->load_container(st, dfd, NULL);
close(dfd);
- if (!rv && st->ss->container_content)
- return Incremental_container(st, devname, homehost,
- verbose, runstop, autof);
+ if (!rv && st->ss->container_content) {
+ if (map_lock(&map))
+ fprintf(stderr, Name ": failed to get "
+ "exclusive lock on mapfile\n");
+ rv = Incremental_container(st, devname, homehost,
+ verbose, runstop, autof);
+ map_unlock(&map);
+ return rv;
+ }
fprintf(stderr, Name ": %s is not part of an md array.\n",
devname);
@@ -438,7 +444,6 @@
if (info.array.level == LEVEL_CONTAINER) {
int devnum = devnum; /* defined and used iff ->external */
/* Try to assemble within the container */
- map_unlock(&map);
sysfs_uevent(&info, "change");
if (verbose >= 0)
fprintf(stderr, Name
@@ -447,10 +452,14 @@
wait_for(chosen_name, mdfd);
if (st->ss->external)
devnum = fd2devnum(mdfd);
+ if (st->ss->load_container)
+ rv = st->ss->load_container(st, mdfd, NULL);
close(mdfd);
sysfs_free(sra);
- rv = Incremental(chosen_name, verbose, runstop,
- NULL, homehost, require_homehost, autof);
+ if (!rv)
+ rv = Incremental_container(st, chosen_name, homehost,
+ verbose, runstop, autof);
+ map_unlock(&map);
if (rv == 1)
/* Don't fail the whole -I if a subarray didn't
* have enough devices to start yet
@@ -1460,9 +1469,6 @@
trustworthy = FOREIGN;
list = st->ss->container_content(st, NULL);
- if (map_lock(&map))
- fprintf(stderr, Name ": failed to get exclusive lock on "
- "mapfile\n");
/* do not assemble arrays that might have bad blocks */
if (list->array.state & (1<<MD_SB_BBM_ERRORS)) {
fprintf(stderr, Name ": BBM log found in metadata. "
@@ -1600,7 +1606,6 @@
close(sfd);
}
domain_free(domains);
- map_unlock(&map);
return 0;
}

View File

@ -1,41 +0,0 @@
diff -up mdadm-3.2.2/super-intel.c.attributes mdadm-3.2.2/super-intel.c
--- mdadm-3.2.2/super-intel.c.attributes 2011-08-31 15:50:02.919229255 -0400
+++ mdadm-3.2.2/super-intel.c 2011-08-31 15:51:58.560231484 -0400
@@ -74,14 +74,18 @@
/* Define all supported attributes that have to be accepted by mdadm
*/
-#define MPB_ATTRIB_SUPPORTED MPB_ATTRIB_CHECKSUM_VERIFY | \
+#define MPB_ATTRIB_SUPPORTED (MPB_ATTRIB_CHECKSUM_VERIFY | \
MPB_ATTRIB_2TB | \
MPB_ATTRIB_2TB_DISK | \
MPB_ATTRIB_RAID0 | \
MPB_ATTRIB_RAID1 | \
MPB_ATTRIB_RAID10 | \
MPB_ATTRIB_RAID5 | \
- MPB_ATTRIB_EXP_STRIPE_SIZE
+ MPB_ATTRIB_EXP_STRIPE_SIZE)
+
+/* Define attributes that are unused but not harmful */
+#define MPB_ATTRIB_IGNORED (MPB_ATTRIB_NEVER_USE | \
+ MPB_ATTRIB_NEVER_USE2)
#define MPB_SECTOR_CNT 2210
#define IMSM_RESERVED_SECTORS 4096
@@ -1141,11 +1145,14 @@ void examine_migr_rec_imsm(struct intel_
static int imsm_check_attributes(__u32 attributes)
{
int ret_val = 1;
- __u32 not_supported = (MPB_ATTRIB_SUPPORTED)^0xffffffff;
+ __u32 not_supported = MPB_ATTRIB_SUPPORTED^0xffffffff;
+
+ not_supported &= ~MPB_ATTRIB_IGNORED;
not_supported &= attributes;
if (not_supported) {
- fprintf(stderr, Name "(IMSM): Unsupported attributes : %x\n", not_supported);
+ fprintf(stderr, Name "(IMSM): Unsupported attributes : %x\n",
+ (unsigned)__le32_to_cpu(not_supported));
if (not_supported & MPB_ATTRIB_CHECKSUM_VERIFY) {
dprintf("\t\tMPB_ATTRIB_CHECKSUM_VERIFY \n");
not_supported ^= MPB_ATTRIB_CHECKSUM_VERIFY;

View File

@ -1,26 +0,0 @@
--- a/super-intel.c
+++ b/super-intel.c
@@ -2326,7 +2326,9 @@ static void getinfo_super_imsm_volume(st
dprintf("IMSM: General Migration checkpoint : %llu "
"(%llu) -> read reshape progress : %llu\n",
- units, blocks_per_unit, info->reshape_progress);
+ (unsigned long long)units,
+ (unsigned long long)blocks_per_unit,
+ info->reshape_progress);
used_disks = imsm_num_data_members(dev, 1);
if (used_disks > 0) {
@@ -8661,7 +8663,11 @@ static int imsm_reshape_super(struct sup
dprintf("imsm: info: Volume operation\n");
/* find requested device */
while (dev) {
- imsm_find_array_minor_by_subdev(dev->index, st->container_dev, &devnum);
+ if (imsm_find_array_minor_by_subdev(dev->index,
+ st->container_dev, &devnum) < 0) {
+ dprintf("imsm: cannot find array\n");
+ goto exit_imsm_reshape_super;
+ }
if (devnum == geo.dev_id)
break;
dev = dev->next;

View File

@ -1,45 +0,0 @@
From 2eebfb2ed16c7c73fc46c3575160fa47c5fa51c5 Mon Sep 17 00:00:00 2001
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 17 Oct 2011 22:09:17 +0200
Subject: [PATCH 3/3] Hold the map lock while performing Assemble to avoid
races with udev
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
mdadm.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/mdadm.c b/mdadm.c
index e01beec..7fa8feb 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -1257,6 +1257,7 @@ int main(int argc, char *argv[])
} else {
struct mddev_ident *a, *array_list = conf_get_ident(NULL);
struct mddev_dev *devlist = conf_get_devs();
+ struct map_ent *map = NULL;
int cnt = 0;
int failures, successes;
if (devlist == NULL) {
@@ -1276,6 +1277,10 @@ int main(int argc, char *argv[])
if (a->autof == 0)
a->autof = autof;
}
+ if (map_lock(&map))
+ fprintf(stderr, Name " %s: failed to get "
+ "exclusive lock on mapfile\n",
+ __func__);
do {
failures = 0;
successes = 0;
@@ -1366,6 +1371,7 @@ int main(int argc, char *argv[])
fprintf(stderr, Name ": No arrays found in config file\n");
rv = 1;
}
+ map_unlock(&map);
}
break;
case BUILD:
--
1.7.6.4

View File

@ -1,178 +0,0 @@
--- mdadm-3.2.2/mdadm.8.in.man 2011-06-17 01:15:50.000000000 -0400
+++ mdadm-3.2.2/mdadm.8.in 2011-07-14 20:18:49.240997107 -0400
@@ -336,7 +336,7 @@ It can easily be moved between hosts wit
recovery operation can be checkpointed and restarted. The different
sub-versions store the superblock at different locations on the
device, either at the end (for 1.0), at the start (for 1.1) or 4K from
-the start (for 1.2). "1" is equivalent to "1.0".
+the start (for 1.2). "1" is equivalent to "1.2".
'if '{DEFAULT_METADATA}'1.2' "default" is equivalent to "1.2".
.IP ddf
Use the "Industry Standard" DDF (Disk Data Format) format defined by
@@ -706,7 +706,7 @@ facts the operator knows.
When an array is resized to a larger size with
.B "\-\-grow \-\-size="
the new space is normally resynced in that same way that the whole
-array is resynced at creation. From Linux version 2.6.40,
+array is resynced at creation. From Linux version 3.0,
.B \-\-assume\-clean
can be used with that command to avoid the automatic resync.
@@ -811,6 +811,11 @@ number, and there is no entry in /dev fo
non-standard name. Names that are not in 'standard' format are only
allowed in "/dev/md/".
+This is meaningful with
+.B \-\-create
+or
+.BR \-\-build .
+
.ig XX
.\".TP
.\".BR \-\-symlink = no
@@ -835,6 +840,28 @@ allowed in "/dev/md/".
.\"
.XX
+.TP
+.BR \-a ", " "\-\-add"
+This option can be used in Grow mode in two cases.
+
+If the target array is a Linear array, then
+.B \-\-add
+can be used to add one or more devices to the array. They
+are simply catenated on to the end of the array. Once added, the
+devices cannot be removed.
+
+If the
+.B \-\-raid\-disks
+option is being used to increase the number of devices in an array,
+then
+.B \-\-add
+can be used to add some extra devices to be included in the array.
+In most cases this is not needed as the extra devices can be added as
+spares first, and then the number of raid-disks can be changed.
+However for RAID0, it is not possible to add spares. So to increase
+the number of devices in a RAID0, it is necessary to set the new
+number of devices, and to add the new devices, in the same command.
+
.SH For assemble:
.TP
@@ -912,28 +939,6 @@ not as reliable as you would like.
See this option under Create and Build options.
.TP
-.BR \-a ", " "\-\-add"
-This option can be used in Grow mode in two cases.
-
-If the target array is a Linear array, then
-.B \-\-add
-can be used to add one or more devices to the array. They
-are simply catenated on to the end of the array. Once added, the
-devices cannot be removed.
-
-If the
-.B \-\-raid\-disks
-option is being used to increase the number of devices in an array,
-then
-.B \-\-add
-can be used to add some extra devices to be included in the array.
-In most cases this is not needed as the extra devices can be added as
-spares first, and then the number of raid-disks can be changed.
-However for RAID0, it is not possible to add spares. So to increase
-the number of devices in a RAID0, it is necessary to set the new
-number of devices, and to add the new devices, in the same command.
-
-.TP
.BR \-b ", " \-\-bitmap=
Specify the bitmap file that was given when the array was created. If
an array has an
@@ -1491,7 +1496,7 @@ the first device given is the md device.
In the second usage example, all devices listed are treated as md
devices and assembly is attempted.
In the third (where no devices are listed) all md devices that are
-listed in the configuration file are assembled. If not arrays are
+listed in the configuration file are assembled. If no arrays are
described by the configuration file, then any arrays that
can be found on unused devices will be assembled.
@@ -1600,7 +1605,7 @@ and no devices are listed,
will first attempt to assemble all the arrays listed in the config
file.
-In no array at listed in the config (other than those marked
+If no arrays are listed in the config (other than those marked
.BR <ignore> )
it will look through the available devices for possible arrays and
will try to assemble anything that it finds. Arrays which are tagged
@@ -2200,11 +2205,11 @@ change the "size" attribute for RAID1, R
.IP \(bu 4
increase or decrease the "raid\-devices" attribute of RAID0, RAID1, RAID4,
RAID5, and RAID6.
-.IP \bu 4
+.IP \(bu 4
change the chunk-size and layout of RAID0, RAID4, RAID5 and RAID6.
-.IP \bu 4
+.IP \(bu 4
convert between RAID1 and RAID5, between RAID5 and RAID6, between
-RAID0, RAID5, and RAID5, and between RAID0 and RAID10 (in the near-2 mode).
+RAID0, RAID4, and RAID5, and between RAID0 and RAID10 (in the near-2 mode).
.IP \(bu 4
add a write-intent bitmap to any array which supports these bitmaps, or
remove a write-intent bitmap from such an array.
@@ -2250,7 +2255,7 @@ space to start being used. If the size
are synchronised.
Note that when an array changes size, any filesystem that may be
-stored in the array will not automatically grow for shrink to use or
+stored in the array will not automatically grow or shrink to use or
vacate the space. The
filesystem will need to be explicitly told to use the extra space
after growing, or to reduce its size
@@ -2259,7 +2264,7 @@ to shrinking the array.
Also the size of an array cannot be changed while it has an active
bitmap. If an array has a bitmap, it must be removed before the size
-can be changed. Once the change it complete a new bitmap can be created.
+can be changed. Once the change is complete a new bitmap can be created.
.SS RAID\-DEVICES CHANGES
@@ -2435,8 +2440,8 @@ must match one of the names or patterns
line.
.IP +
-Does the device have a valid md superblock. If a specific metadata
-version is request with
+Does the device have a valid md superblock? If a specific metadata
+version is requested with
.B \-\-metadata
or
.B \-e
@@ -2467,6 +2472,7 @@ is not able to positively identify the a
current host, the device will be rejected.
..
+.PP
.I mdadm
keeps a list of arrays that it has partially assembled in
.B /var/run/mdadm/map
@@ -2639,7 +2645,7 @@ can be started.
Any devices which are components of /dev/md4 will be marked as faulty
and then remove from the array.
-.B " mdadm --grow /dev/md4 --level=6 --backup-file=/root/backup-md4
+.B " mdadm --grow /dev/md4 --level=6 --backup-file=/root/backup-md4"
.br
The array
.B /dev/md4
@@ -2787,7 +2793,7 @@ configuration file at all.
For further information on mdadm usage, MD and the various levels of
RAID, see:
.IP
-.B http://linux\-raid.osdl.org/
+.B http://raid.wiki.kernel.org/
.PP
(based upon Jakob \(/Ostergaard's Software\-RAID.HOWTO)
.\".PP

View File

@ -1,26 +0,0 @@
From 91d610e0cb5a22685c6cc1d31b0ff3d4539a6c99 Mon Sep 17 00:00:00 2001
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Thu, 13 Oct 2011 19:46:52 +0200
Subject: [PATCH 2/3] Don't tell sysfs to launch the container as we are doing
it ourselves
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
Incremental.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/Incremental.c b/Incremental.c
index 9fa6800..55a4589 100644
--- a/Incremental.c
+++ b/Incremental.c
@@ -446,7 +446,6 @@ int Incremental(char *devname, int verbose, int runstop,
if (info.array.level == LEVEL_CONTAINER) {
int devnum = devnum; /* defined and used iff ->external */
/* Try to assemble within the container */
- sysfs_uevent(&info, "change");
if (verbose >= 0)
fprintf(stderr, Name
": container %s now has %d devices\n",
--
1.7.6.4

View File

@ -1,26 +0,0 @@
--- mdadm-3.2.2/util.c.readd 2011-06-17 01:15:50.000000000 -0400
+++ mdadm-3.2.2/util.c 2011-07-18 14:43:40.776150946 -0400
@@ -364,19 +364,21 @@ int enough_fd(int fd)
struct mdu_disk_info_s disk;
int avail_disks = 0;
int i;
+ int raid_disks;
char *avail;
if (ioctl(fd, GET_ARRAY_INFO, &array) != 0 ||
array.raid_disks <= 0)
return 0;
avail = calloc(array.raid_disks, 1);
- for (i=0; i < 1024 && array.nr_disks > 0; i++) {
+ raid_disks = array.raid_disks;
+ for (i=0; i < 1024 && raid_disks > 0; i++) {
disk.number = i;
if (ioctl(fd, GET_DISK_INFO, &disk) != 0)
continue;
if (disk.major == 0 && disk.minor == 0)
continue;
- array.nr_disks--;
+ raid_disks--;
if (! (disk.state & (1<<MD_DISK_SYNC)))
continue;

View File

@ -1,56 +0,0 @@
From b601104eb4a4733a838fb86e9e279fed14ce9d3f Mon Sep 17 00:00:00 2001
From: Lukasz Dorau <lukasz.dorau@intel.com>
Date: Mon, 10 Oct 2011 09:16:40 +1100
Subject: [PATCH] imsm: fix: stopped resync does not continue after
auto-assemblation
Resync stopped with "mdadm -Ss" command does not continue
after issuing "mdadm -As" command.
Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
---
mdadm.conf.5 | 5 ++++-
super-intel.c | 3 ++-
2 files changed, 6 insertions(+), 2 deletions(-)
--- mdadm-3.2.2/mdadm.conf.5.orig 2011-10-18 14:35:24.254923974 +0200
+++ mdadm-3.2.2/mdadm.conf.5 2011-10-18 14:35:36.231924727 +0200
@@ -439,7 +439,7 @@
of domains of all devices in that array. A spare can be automatically
moved from one array to another if the set of the destination array's
.I domains
-contains all the
+ppcontains all the
.I domains
of the new disk or if both arrays have the same
.IR spare-group .
@@ -463,6 +463,7 @@
.B path=
file glob matching anything from
.B /dev/disk/by-path
+.TP
.B type=
either
.B disk
@@ -471,6 +472,8 @@
.TP
.B action=
include, re-add, spare, spare-same-slot, or force-spare
+.B auto=
+yes, no, or homehost.
.P
The
--- mdadm-3.2.2/super-intel.c.orig 2011-10-18 14:34:24.000000000 +0200
+++ mdadm-3.2.2/super-intel.c 2011-10-18 14:36:23.356925467 +0200
@@ -2223,7 +2223,8 @@
info->custom_array_size = __le32_to_cpu(dev->size_high);
info->custom_array_size <<= 32;
info->custom_array_size |= __le32_to_cpu(dev->size_low);
- if (prev_map && map->map_state == prev_map->map_state) {
+ if (prev_map && map->map_state == prev_map->map_state &&
+ (migr_type(dev) == MIGR_GEN_MIGR)) {
info->reshape_active = 1;
info->new_level = get_imsm_raid_level(map);
info->new_layout = imsm_level_to_layout(info->new_level);

View File

@ -1,29 +0,0 @@
From 9c8c121881769c9ce77fd7d981608c976aac8b5b Mon Sep 17 00:00:00 2001
From: NeilBrown <neilb@suse.de>
Date: Thu, 20 Oct 2011 13:14:26 +1100
Subject: [PATCH] super0: fix overflow when checking max size.
We need to force multiplication to use ULL before they
get to big, else it overflows. So move the "2ULL" to the start.
Signed-off-by: NeilBrown <neilb@suse.de>
---
super0.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/super0.c b/super0.c
index 3061ecf..f3d0c07 100644
--- a/super0.c
+++ b/super0.c
@@ -1142,7 +1142,7 @@ static int validate_geometry0(struct supertype *st, int level,
MD_SB_DISKS);
return 0;
}
- if (size >= tbmax * 1024*1024*1024*2ULL) {
+ if (size >= tbmax * 2ULL*1024*1024*1024) {
if (verbose)
fprintf(stderr, Name ": 0.90 metadata supports at most "
"%d terabytes per device\n", tbmax);
--
1.7.6.4

View File

@ -1,87 +0,0 @@
diff -up mdadm-3.2.2/Manage.c.writemostly mdadm-3.2.2/Manage.c
--- mdadm-3.2.2/Manage.c.writemostly 2011-06-13 22:50:01.000000000 -0400
+++ mdadm-3.2.2/Manage.c 2011-07-27 14:12:18.629889841 -0400
@@ -741,11 +741,24 @@ int Manage_subdevs(char *devname, int fd
remove_partitions(tfd);
close(tfd);
tfd = -1;
- if (update) {
+ if (update || dv->writemostly > 0) {
int rv = -1;
tfd = dev_open(dv->devname, O_RDWR);
+ if (tfd < 0) {
+ fprintf(stderr, Name ": failed to open %s for"
+ " superblock update during re-add\n", dv->devname);
+ return 1;
+ }
- if (tfd >= 0)
+ if (dv->writemostly == 1)
+ rv = st->ss->update_super(
+ st, NULL, "writemostly",
+ devname, verbose, 0, NULL);
+ if (dv->writemostly == 2)
+ rv = st->ss->update_super(
+ st, NULL, "readwrite",
+ devname, verbose, 0, NULL);
+ if (update)
rv = st->ss->update_super(
st, NULL, update,
devname, verbose, 0, NULL);
diff -up mdadm-3.2.2/mdadm.h.writemostly mdadm-3.2.2/mdadm.h
--- mdadm-3.2.2/mdadm.h.writemostly 2011-07-27 14:12:28.800779575 -0400
+++ mdadm-3.2.2/mdadm.h 2011-07-27 14:04:34.669932148 -0400
@@ -646,6 +646,8 @@ extern struct superswitch {
* linear-grow-new - add a new device to a linear array, but don't
* change the size: so superblock still matches
* linear-grow-update - now change the size of the array.
+ * writemostly - set the WriteMostly1 bit in the superblock devflags
+ * readwrite - clear the WriteMostly1 bit in the superblock devflags
*/
int (*update_super)(struct supertype *st, struct mdinfo *info,
char *update,
diff -up mdadm-3.2.2/super0.c.writemostly mdadm-3.2.2/super0.c
--- mdadm-3.2.2/super0.c.writemostly 2011-06-17 01:15:50.000000000 -0400
+++ mdadm-3.2.2/super0.c 2011-07-27 14:12:18.655889559 -0400
@@ -570,6 +570,10 @@ static int update_super0(struct supertyp
sb->state &= ~(1<<MD_SB_BITMAP_PRESENT);
} else if (strcmp(update, "_reshape_progress")==0)
sb->reshape_position = info->reshape_progress;
+ else if (strcmp(update, "writemostly")==0)
+ sb->state |= (1<<MD_DISK_WRITEMOSTLY);
+ else if (strcmp(update, "readwrite")==0)
+ sb->state &= ~(1<<MD_DISK_WRITEMOSTLY);
else
rv = -1;
@@ -688,6 +692,8 @@ static int add_to_super0(struct supertyp
dk->minor = dinfo->minor;
dk->raid_disk = dinfo->raid_disk;
dk->state = dinfo->state;
+ /* In case our source disk was writemostly, don't copy that bit */
+ dk->state &= ~(1<<MD_DISK_WRITEMOSTLY);
sb->this_disk = sb->disks[dinfo->number];
sb->sb_csum = calc_sb0_csum(sb);
diff -up mdadm-3.2.2/super1.c.writemostly mdadm-3.2.2/super1.c
--- mdadm-3.2.2/super1.c.writemostly 2011-06-17 01:15:50.000000000 -0400
+++ mdadm-3.2.2/super1.c 2011-07-27 14:12:18.656889548 -0400
@@ -803,6 +803,10 @@ static int update_super1(struct supertyp
__le64_to_cpu(sb->data_size));
} else if (strcmp(update, "_reshape_progress")==0)
sb->reshape_position = __cpu_to_le64(info->reshape_progress);
+ else if (strcmp(update, "writemostly")==0)
+ sb->devflags |= WriteMostly1;
+ else if (strcmp(update, "readwrite")==0)
+ sb->devflags &= ~WriteMostly1;
else
rv = -1;
@@ -923,6 +927,7 @@ static int add_to_super1(struct supertyp
sb->max_dev = __cpu_to_le32(dk->number+1);
sb->dev_number = __cpu_to_le32(dk->number);
+ sb->devflags = 0; /* don't copy another disks flags */
sb->sb_csum = calc_sb_1_csum(sb);
dip = (struct devinfo **)&st->info;

32
mdadm-3.2.3-udev.patch Normal file
View File

@ -0,0 +1,32 @@
--- mdadm-3.2.3/udev-md-raid.rules.udev 2011-12-15 05:13:08.000000000 +0100
+++ mdadm-3.2.3/udev-md-raid.rules 2011-12-28 17:18:02.753053345 +0100
@@ -2,19 +2,21 @@
SUBSYSTEM!="block", GOTO="md_end"
+# In Fedora we handle the raid components in 65-md-incremental.rules so that
+# we can do things like honor anaconda command line options and such
# handle potential components of arrays (the ones supported by md)
-ENV{ID_FS_TYPE}=="ddf_raid_member|isw_raid_member|linux_raid_member", GOTO="md_inc"
-GOTO="md_inc_skip"
-
-LABEL="md_inc"
+#ENV{ID_FS_TYPE}=="ddf_raid_member|isw_raid_member|linux_raid_member", GOTO="md_inc"
+#GOTO="md_inc_skip"
+#
+#LABEL="md_inc"
# remember you can limit what gets auto/incrementally assembled by
# mdadm.conf(5)'s 'AUTO' and selectively whitelist using 'ARRAY'
-ACTION=="add", RUN+="/sbin/mdadm --incremental $tempnode"
-ACTION=="remove", ENV{ID_PATH}=="?*", RUN+="/sbin/mdadm -If $name --path $env{ID_PATH}"
-ACTION=="remove", ENV{ID_PATH}!="?*", RUN+="/sbin/mdadm -If $name"
+#ACTION=="add", RUN+="/sbin/mdadm --incremental $tempnode"
+#ACTION=="remove", ENV{ID_PATH}=="?*", RUN+="/sbin/mdadm -If $name --path $env{ID_PATH}"
+#ACTION=="remove", ENV{ID_PATH}!="?*", RUN+="/sbin/mdadm -If $name"
-LABEL="md_inc_skip"
+#LABEL="md_inc_skip"
# handle md arrays
ACTION!="add|change", GOTO="md_end"

View File

@ -1,7 +1,7 @@
Summary: The mdadm program controls Linux md devices (software RAID arrays)
Name: mdadm
Version: 3.2.2
Release: 15%{?dist}
Version: 3.2.3
Release: 1%{?dist}
Source: http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-%{version}.tar.bz2
Source1: mdmonitor.init
Source2: raid-check
@ -11,23 +11,7 @@ Source5: mdadm-cron
Source6: mdmonitor.service
Source7: mdmonitor-takeover.service
Source8: mdadm.conf
Patch0: mdadm-3.2.2-man.patch
Patch1: mdadm-3.2.1-version.patch
Patch2: mdadm-3.2.2-fixbuild.patch
Patch3: mdadm-3.2.2-readd.patch
Patch4: mdadm-3.2.2-writemostly.patch
Patch5: mdadm-3.2.2-attributes.patch
Patch6: mdadm-3.2.2-resync-does-not-continue-after-auto.patch
Patch7: mdadm-3.2.2-Remove-race-for-starting-container-devices.patch
Patch8: mdadm-3.2.2-no-sysfs-launch-container.patch
Patch9: mdadm-3.2.2-hold-lock-during-assemble.patch
Patch10: mdadm-3.2.2-Fix-component-size-checks-in-validate_super0.patch
Patch11: mdadm-3.2.2-Discourage-large-devices-from-being-added-to-0.90-ar.patch
Patch12: mdadm-3.2.2-Grow-refuse-to-grow-a-0.90-array-beyond-2TB.patch
Patch13: mdadm-3.2.2-super0-fix-overflow-when-checking-max-size.patch
Patch14: mdadm-3.2.2-Fix-serious-memory-leak.patch
Patch15: mdadm-3.2.2-FIX-Close-unused-handle-in-child-process-during-resh.patch
Patch19: mdadm-3.1.3-udev.patch
Patch19: mdadm-3.2.3-udev.patch
Patch20: mdadm-2.5.2-static.patch
URL: http://www.kernel.org/pub/linux/utils/raid/mdadm/
License: GPLv2+
@ -61,22 +45,6 @@ is not used as the system init process.
%prep
%setup -q
%patch0 -p1 -b .man
%patch1 -p1 -b .version
%patch2 -p1 -b .build
%patch3 -p1 -b .readd
%patch4 -p1 -b .writemostly
%patch5 -p1 -b .attributes
%patch6 -p1 -b .resync
%patch7 -p1 -b .container
%patch8 -p1 -b .sysfs
%patch9 -p1 -b .assemble
%patch10 -p1 -b .component
%patch11 -p1 -b .discourage
%patch12 -p1 -b .grow
%patch13 -p1 -b .overflow
%patch14 -p1 -b .memleak
%patch15 -p1 -b .reshape
%patch19 -p1 -b .udev
%patch20 -p1 -b .static
@ -151,6 +119,12 @@ fi
%{_initrddir}/*
%changelog
* Wed Jan 4 2012 Jes Sorensen <Jes.Sorensen@redhat.com> - 3.2.3-1
- Update to upstream 3.2.3
- Resolves: bz770110 (rawhide) bz771413 (f16) bz759014 (rawhide)
- Resolves: bz759015 (f16) bz759035 (rawhide) bz759036 (f16)
- Resolves: bz771608 (f15) bz759016 (f15) bz759039 (f15)
* Mon Nov 21 2011 Jes Sorensen <Jes.Sorensen@redhat.com> - 3.2.2-15
- Backport upstream fix for memory leak that can prevent migration to
RAID5 from completing.