From 09420a0c0fa0a61a51088956ca77c694a70218a9 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Fri, 30 Dec 2011 17:42:20 +0100 Subject: [PATCH] Update to mdadm-3.2.3 Signed-off-by: Jes Sorensen --- mdadm-3.1.3-udev.patch | 20 -- mdadm-3.2.1-version.patch | 24 --- ...-devices-from-being-added-to-0.90-ar.patch | 163 ---------------- ...-handle-in-child-process-during-resh.patch | 84 --------- ...onent-size-checks-in-validate_super0.patch | 76 -------- mdadm-3.2.2-Fix-serious-memory-leak.patch | 113 ----------- ...fuse-to-grow-a-0.90-array-beyond-2TB.patch | 77 -------- ...-race-for-starting-container-devices.patch | 88 --------- mdadm-3.2.2-attributes.patch | 41 ---- mdadm-3.2.2-fixbuild.patch | 26 --- mdadm-3.2.2-hold-lock-during-assemble.patch | 45 ----- mdadm-3.2.2-man.patch | 178 ------------------ mdadm-3.2.2-no-sysfs-launch-container.patch | 26 --- mdadm-3.2.2-readd.patch | 26 --- ...-resync-does-not-continue-after-auto.patch | 56 ------ ...-fix-overflow-when-checking-max-size.patch | 29 --- mdadm-3.2.2-writemostly.patch | 87 --------- mdadm-3.2.3-udev.patch | 32 ++++ mdadm.spec | 44 +---- 19 files changed, 41 insertions(+), 1194 deletions(-) delete mode 100644 mdadm-3.1.3-udev.patch delete mode 100644 mdadm-3.2.1-version.patch delete mode 100644 mdadm-3.2.2-Discourage-large-devices-from-being-added-to-0.90-ar.patch delete mode 100644 mdadm-3.2.2-FIX-Close-unused-handle-in-child-process-during-resh.patch delete mode 100644 mdadm-3.2.2-Fix-component-size-checks-in-validate_super0.patch delete mode 100644 mdadm-3.2.2-Fix-serious-memory-leak.patch delete mode 100644 mdadm-3.2.2-Grow-refuse-to-grow-a-0.90-array-beyond-2TB.patch delete mode 100644 mdadm-3.2.2-Remove-race-for-starting-container-devices.patch delete mode 100644 mdadm-3.2.2-attributes.patch delete mode 100644 mdadm-3.2.2-fixbuild.patch delete mode 100644 mdadm-3.2.2-hold-lock-during-assemble.patch delete mode 100644 mdadm-3.2.2-man.patch delete mode 100644 mdadm-3.2.2-no-sysfs-launch-container.patch delete mode 100644 mdadm-3.2.2-readd.patch delete mode 100644 mdadm-3.2.2-resync-does-not-continue-after-auto.patch delete mode 100644 mdadm-3.2.2-super0-fix-overflow-when-checking-max-size.patch delete mode 100644 mdadm-3.2.2-writemostly.patch create mode 100644 mdadm-3.2.3-udev.patch diff --git a/mdadm-3.1.3-udev.patch b/mdadm-3.1.3-udev.patch deleted file mode 100644 index 61b47c4..0000000 --- a/mdadm-3.1.3-udev.patch +++ /dev/null @@ -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" diff --git a/mdadm-3.2.1-version.patch b/mdadm-3.2.1-version.patch deleted file mode 100644 index 2a935e9..0000000 --- a/mdadm-3.2.1-version.patch +++ /dev/null @@ -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; - } diff --git a/mdadm-3.2.2-Discourage-large-devices-from-being-added-to-0.90-ar.patch b/mdadm-3.2.2-Discourage-large-devices-from-being-added-to-0.90-ar.patch deleted file mode 100644 index b3884e1..0000000 --- a/mdadm-3.2.2-Discourage-large-devices-from-being-added-to-0.90-ar.patch +++ /dev/null @@ -1,163 +0,0 @@ -From 11b391ece9fa284a151362537af093aa44883696 Mon Sep 17 00:00:00 2001 -From: NeilBrown -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 ---- - 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 - diff --git a/mdadm-3.2.2-FIX-Close-unused-handle-in-child-process-during-resh.patch b/mdadm-3.2.2-FIX-Close-unused-handle-in-child-process-during-resh.patch deleted file mode 100644 index 127b076..0000000 --- a/mdadm-3.2.2-FIX-Close-unused-handle-in-child-process-during-resh.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 9ad6f6e65a535f77f180e87393043a8ffcfb30d8 Mon Sep 17 00:00:00 2001 -From: Adam Kwolek -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 -Signed-off-by: NeilBrown ---- - 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 - diff --git a/mdadm-3.2.2-Fix-component-size-checks-in-validate_super0.patch b/mdadm-3.2.2-Fix-component-size-checks-in-validate_super0.patch deleted file mode 100644 index 5206d40..0000000 --- a/mdadm-3.2.2-Fix-component-size-checks-in-validate_super0.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 01619b481883926f13da2b1b88f3125359a6a08b Mon Sep 17 00:00:00 2001 -From: NeilBrown -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 ---- - 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 - diff --git a/mdadm-3.2.2-Fix-serious-memory-leak.patch b/mdadm-3.2.2-Fix-serious-memory-leak.patch deleted file mode 100644 index 4b4137d..0000000 --- a/mdadm-3.2.2-Fix-serious-memory-leak.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 758be4f1c9cda8eefb2fd241835521462196e16c Mon Sep 17 00:00:00 2001 -From: Lukasz Dorau -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 -Signed-off-by: NeilBrown ---- - 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 - diff --git a/mdadm-3.2.2-Grow-refuse-to-grow-a-0.90-array-beyond-2TB.patch b/mdadm-3.2.2-Grow-refuse-to-grow-a-0.90-array-beyond-2TB.patch deleted file mode 100644 index 4785af9..0000000 --- a/mdadm-3.2.2-Grow-refuse-to-grow-a-0.90-array-beyond-2TB.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 20a4675688e0384a1b4eac61b05f60fbf7747df9 Mon Sep 17 00:00:00 2001 -From: NeilBrown -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 ---- - 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 - diff --git a/mdadm-3.2.2-Remove-race-for-starting-container-devices.patch b/mdadm-3.2.2-Remove-race-for-starting-container-devices.patch deleted file mode 100644 index dffffeb..0000000 --- a/mdadm-3.2.2-Remove-race-for-starting-container-devices.patch +++ /dev/null @@ -1,88 +0,0 @@ -commit 5fc8cff3a4177dfbab594947283117620b4b8c9c -Author: Jes Sorensen -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 - Signed-off-by: NeilBrown - ---- - 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< 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; diff --git a/mdadm-3.2.2-hold-lock-during-assemble.patch b/mdadm-3.2.2-hold-lock-during-assemble.patch deleted file mode 100644 index f9aa8ce..0000000 --- a/mdadm-3.2.2-hold-lock-during-assemble.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 2eebfb2ed16c7c73fc46c3575160fa47c5fa51c5 Mon Sep 17 00:00:00 2001 -From: Jes Sorensen -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 ---- - 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 - diff --git a/mdadm-3.2.2-man.patch b/mdadm-3.2.2-man.patch deleted file mode 100644 index 48eb243..0000000 --- a/mdadm-3.2.2-man.patch +++ /dev/null @@ -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 ) - 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 diff --git a/mdadm-3.2.2-no-sysfs-launch-container.patch b/mdadm-3.2.2-no-sysfs-launch-container.patch deleted file mode 100644 index 42ac3d9..0000000 --- a/mdadm-3.2.2-no-sysfs-launch-container.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 91d610e0cb5a22685c6cc1d31b0ff3d4539a6c99 Mon Sep 17 00:00:00 2001 -From: Jes Sorensen -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 ---- - 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 - diff --git a/mdadm-3.2.2-readd.patch b/mdadm-3.2.2-readd.patch deleted file mode 100644 index 1aa3f43..0000000 --- a/mdadm-3.2.2-readd.patch +++ /dev/null @@ -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< -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 -Signed-off-by: NeilBrown ---- - 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); diff --git a/mdadm-3.2.2-super0-fix-overflow-when-checking-max-size.patch b/mdadm-3.2.2-super0-fix-overflow-when-checking-max-size.patch deleted file mode 100644 index 5839509..0000000 --- a/mdadm-3.2.2-super0-fix-overflow-when-checking-max-size.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 9c8c121881769c9ce77fd7d981608c976aac8b5b Mon Sep 17 00:00:00 2001 -From: NeilBrown -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 ---- - 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 - diff --git a/mdadm-3.2.2-writemostly.patch b/mdadm-3.2.2-writemostly.patch deleted file mode 100644 index 3025fc5..0000000 --- a/mdadm-3.2.2-writemostly.patch +++ /dev/null @@ -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<reshape_position = info->reshape_progress; -+ else if (strcmp(update, "writemostly")==0) -+ sb->state |= (1<state &= ~(1<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<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; diff --git a/mdadm-3.2.3-udev.patch b/mdadm-3.2.3-udev.patch new file mode 100644 index 0000000..167c4de --- /dev/null +++ b/mdadm-3.2.3-udev.patch @@ -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" diff --git a/mdadm.spec b/mdadm.spec index 5012ede..858b868 100644 --- a/mdadm.spec +++ b/mdadm.spec @@ -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 - 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 - 3.2.2-15 - Backport upstream fix for memory leak that can prevent migration to RAID5 from completing.