]> sourceware.org Git - lvm2.git/commitdiff
Replace alloca with dm_malloc in _aligned_io.
authorAlasdair Kergon <agk@redhat.com>
Wed, 22 Sep 2010 22:31:45 +0000 (22:31 +0000)
committerAlasdair Kergon <agk@redhat.com>
Wed, 22 Sep 2010 22:31:45 +0000 (22:31 +0000)
(This section of code dates from 2.4 and could be written more efficiently nowadays.)

WHATS_NEW
lib/device/dev-io.c

index 77ca105d5592801ec2729fd51c3c7b0beb791bc2..4bbeb0a118c3b8fe9385b4a9eb848d91d1bf0e57 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.74 - 
 =====================================
+  Replace alloca with dm_malloc in _aligned_io.
   Fix partial mode operations for lvm1 metadata format.
   Track recursive filter iteration to avoid refreshing while in use. (2.02.56)
   Revert to old glibc vsnprintf behaviour in emit_to_buffer() to catch overflow.
index 8c7cf38ce84e61c0469a1a342c6933f6c36073b1..f4d6648c50729ec1571ac2a1775fa4129aafcee6 100644 (file)
@@ -164,10 +164,11 @@ static void _widen_region(unsigned int block_size, struct device_area *region,
 static int _aligned_io(struct device_area *where, void *buffer,
                       int should_write)
 {
-       void *bounce;
+       void *bounce, *bounce_buf;
        unsigned int block_size = 0;
        uintptr_t mask;
        struct device_area widened;
+       int r = 0;
 
        if (!(where->dev->flags & DEV_REGULAR) &&
            !_get_block_size(where->dev, &block_size))
@@ -185,8 +186,8 @@ static int _aligned_io(struct device_area *where, void *buffer,
                return _io(where, buffer, should_write);
 
        /* Allocate a bounce buffer with an extra block */
-       if (!(bounce = alloca((size_t) widened.size + block_size))) {
-               log_error("Bounce buffer alloca failed");
+       if (!(bounce_buf = bounce = dm_malloc((size_t) widened.size + block_size))) {
+               log_error("Bounce buffer malloc failed");
                return 0;
        }
 
@@ -199,7 +200,7 @@ static int _aligned_io(struct device_area *where, void *buffer,
        /* channel the io through the bounce buffer */
        if (!_io(&widened, bounce, 0)) {
                if (!should_write)
-                       return_0;
+                       goto_out;
                /* FIXME pre-extend the file */
                memset(bounce, '\n', widened.size);
        }
@@ -209,13 +210,18 @@ static int _aligned_io(struct device_area *where, void *buffer,
                       (size_t) where->size);
 
                /* ... then we write */
-               return _io(&widened, bounce, 1);
+               r = _io(&widened, bounce, 1);
+               goto_out;
        }
 
        memcpy(buffer, bounce + (where->start - widened.start),
               (size_t) where->size);
 
-       return 1;
+       r = 1;
+
+out:
+       dm_free(bounce_buf);
+       return r;
 }
 
 static int _dev_get_size_file(const struct device *dev, uint64_t *size)
This page took 0.041268 seconds and 5 git commands to generate.