diff options
author | Peter Rajnoha <prajnoha@redhat.com> | 2011-08-29 13:37:36 +0000 |
---|---|---|
committer | Peter Rajnoha <prajnoha@redhat.com> | 2011-08-29 13:37:36 +0000 |
commit | d35188058be01bd29128dcf1f5b79220fbcb135b (patch) | |
tree | 3266486483756631c78900afb86efa12c1e18556 | |
parent | 11bfaa1df8a1cae26a891c128f9bbaf8116c9453 (diff) | |
download | lvm2-d35188058be01bd29128dcf1f5b79220fbcb135b.tar.gz lvm2-d35188058be01bd29128dcf1f5b79220fbcb135b.tar.xz lvm2-d35188058be01bd29128dcf1f5b79220fbcb135b.zip |
Directly allocate buffer memory in a pvck scan instead of using a mempool.
There's a very high memory usage when calling _pv_analyse_mda_raw (e.g. while
executing pvck) that can end up with "out of memory".
_pv_analyse_mda_raw scans for metadata in the MDA, iteratively increasing the
size to scan with SECTOR_SIZE until we find a probable config section or we're
at the edge of the metadata area. However, when using a memory pool, we're also
iteratively chasing for bigger and bigger mempool chunk which can't be found
and so we're always allocating a new one, consuming more and more memory...
This patch just changes the mempool to direct memory allocation in this
problematic part of the code.
-rw-r--r-- | WHATS_NEW | 1 | ||||
-rw-r--r-- | lib/format_text/format-text.c | 6 |
2 files changed, 4 insertions, 3 deletions
@@ -1,5 +1,6 @@ Version 2.02.89 - ================================== + Directly allocate buffer memory in a pvck scan instead of using a mempool. Add configure --with-thin for (unimplemented) segtypes "thin" and "thin_pool". Fix raid shared lib segtype registration (2.02.87). diff --git a/lib/format_text/format-text.c b/lib/format_text/format-text.c index 4a025b22..513ac96a 100644 --- a/lib/format_text/format-text.c +++ b/lib/format_text/format-text.c @@ -226,7 +226,7 @@ static int _pv_analyze_mda_raw (const struct format_type * fmt, * "maybe_config_section" returning true when there's no valid * metadata in a sector (sectors with all nulls). */ - if (!(buf = dm_pool_alloc(fmt->cmd->mem, size + size2))) + if (!(buf = dm_malloc(size + size2))) goto_out; if (!dev_read_circular(area->dev, offset, size, @@ -261,14 +261,14 @@ static int _pv_analyze_mda_raw (const struct format_type * fmt, size += SECTOR_SIZE; } } - dm_pool_free(fmt->cmd->mem, buf); + dm_free(buf); buf = NULL; } r = 1; out: if (buf) - dm_pool_free(fmt->cmd->mem, buf); + dm_free(buf); if (!dev_close(area->dev)) stack; return r; |