* [PATCH] imsm: FIX: mdmon crash during 2 raid0 arrays expansion
@ 2011-01-31 12:48 Adam Kwolek
2011-01-31 23:27 ` NeilBrown
0 siblings, 1 reply; 2+ messages in thread
From: Adam Kwolek @ 2011-01-31 12:48 UTC (permalink / raw)
To: neilb; +Cc: linux-raid, dan.j.williams, ed.ciechanowski, wojciech.neubauer
When expansion is run on 2 raid0 arrays in container no update
is sent to mdmon because mdmon is off (mdadm performs update)
Memory size for first reshaped array is allocated to satisfy memory
requirements for expanded maps.
Memory for second device is allocated using old disks number, as in metadata
there is no information about this array reshape.
When mdmon initiates second array reshape it overwrites internal structures
and crashes). There is no place to keep expanded maps.
To avoid this situation during loading metadata, allocated memory should be performed
using the maximum used disks number in particular container.
Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
---
super-intel.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/super-intel.c b/super-intel.c
index 3e163ec..8c9e67f 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -2483,6 +2483,7 @@ static int parse_raid_devices(struct intel_super *super)
int i;
struct imsm_dev *dev_new;
size_t len, len_migr;
+ size_t len max_len = 0;
size_t space_needed = 0;
struct imsm_super *mpb = super->anchor;
@@ -2498,7 +2499,9 @@ static int parse_raid_devices(struct intel_super *super)
dv = malloc(sizeof(*dv));
if (!dv)
return 1;
- dev_new = malloc(len_migr);
+ if (max_len < len_migr)
+ max_len = len_migr;
+ dev_new = malloc(max_len);
if (!dev_new) {
free(dv);
return 1;
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] imsm: FIX: mdmon crash during 2 raid0 arrays expansion
2011-01-31 12:48 [PATCH] imsm: FIX: mdmon crash during 2 raid0 arrays expansion Adam Kwolek
@ 2011-01-31 23:27 ` NeilBrown
0 siblings, 0 replies; 2+ messages in thread
From: NeilBrown @ 2011-01-31 23:27 UTC (permalink / raw)
To: Adam Kwolek
Cc: linux-raid, dan.j.williams, ed.ciechanowski, wojciech.neubauer
On Mon, 31 Jan 2011 13:48:16 +0100 Adam Kwolek <adam.kwolek@intel.com> wrote:
> When expansion is run on 2 raid0 arrays in container no update
> is sent to mdmon because mdmon is off (mdadm performs update)
> Memory size for first reshaped array is allocated to satisfy memory
> requirements for expanded maps.
> Memory for second device is allocated using old disks number, as in metadata
> there is no information about this array reshape.
> When mdmon initiates second array reshape it overwrites internal structures
> and crashes). There is no place to keep expanded maps.
> To avoid this situation during loading metadata, allocated memory should be performed
> using the maximum used disks number in particular container.
Applied, thanks.
NeilBrown
>
> Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
> ---
>
> super-intel.c | 5 ++++-
> 1 files changed, 4 insertions(+), 1 deletions(-)
>
> diff --git a/super-intel.c b/super-intel.c
> index 3e163ec..8c9e67f 100644
> --- a/super-intel.c
> +++ b/super-intel.c
> @@ -2483,6 +2483,7 @@ static int parse_raid_devices(struct intel_super *super)
> int i;
> struct imsm_dev *dev_new;
> size_t len, len_migr;
> + size_t len max_len = 0;
> size_t space_needed = 0;
> struct imsm_super *mpb = super->anchor;
>
> @@ -2498,7 +2499,9 @@ static int parse_raid_devices(struct intel_super *super)
> dv = malloc(sizeof(*dv));
> if (!dv)
> return 1;
> - dev_new = malloc(len_migr);
> + if (max_len < len_migr)
> + max_len = len_migr;
> + dev_new = malloc(max_len);
> if (!dev_new) {
> free(dv);
> return 1;
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-01-31 23:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-31 12:48 [PATCH] imsm: FIX: mdmon crash during 2 raid0 arrays expansion Adam Kwolek
2011-01-31 23:27 ` NeilBrown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).