]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
linux: Allocate aligned payload for nvme_get_telemetry_log
authorLiang Yan <ckgppl_yan@sina.cn>
Mon, 18 Mar 2024 01:46:12 +0000 (09:46 +0800)
committerDaniel Wagner <wagi@monom.org>
Tue, 9 Apr 2024 12:34:54 +0000 (14:34 +0200)
Use nvme_realloc to allocate alighed payload for
nvme_get_telemetry_log.
Fix a compilation warning in tree.c also.

Signed-off-by: Liang Yan <ckgppl_yan@sina.cn>
src/nvme/linux.c
src/nvme/private.h
src/nvme/tree.c
src/nvme/util.c
src/nvme/util.h

index 2751fe6db6a2eed994fa9462f660ecc0cdf8a7f5..25196fd54f1dc14730635eb0aa45481401cc716d 100644 (file)
@@ -186,7 +186,7 @@ int nvme_get_telemetry_log(int fd, bool create, bool ctrl, bool rae, size_t max_
 
        *size = 0;
 
-       log = malloc(xfer);
+       log = __nvme_alloc(xfer);
        if (!log) {
                errno = ENOMEM;
                return -1;
@@ -239,7 +239,7 @@ int nvme_get_telemetry_log(int fd, bool create, bool ctrl, bool rae, size_t max_
        }
 
        *size = (dalb + 1) * xfer;
-       tmp = realloc(log, *size);
+       tmp = __nvme_realloc(log, *size);
        if (!tmp) {
                errno = ENOMEM;
                return -1;
index 71d560650b4d50ec856988b052deb192af467371..dec3d8509bc9344dd220bffca7a4f201f40376fb 100644 (file)
@@ -189,6 +189,8 @@ nvme_ctrl_t __nvme_lookup_ctrl(nvme_subsystem_t s, const char *transport,
 
 void *__nvme_alloc(size_t len);
 
+void *__nvme_realloc(void *p, size_t len);
+
 #if (LOG_FUNCNAME == 1)
 #define __nvme_log_func __func__
 #else
index fdba81a370b3721f78b00dcfd403b79ec9f5ca34..59387bf872b3b2d78e1a71e228c309a82913c3ef 100644 (file)
@@ -1870,7 +1870,7 @@ static nvme_ctrl_t nvme_ctrl_alloc(nvme_root_t r, nvme_subsystem_t s,
 {
        nvme_ctrl_t c, p;
        _cleanup_free_ char *addr = NULL, *address = NULL;
-       char *a, *e;
+       char *a = NULL, *e = NULL;
        _cleanup_free_ char *transport = NULL;
        char *traddr = NULL, *trsvcid = NULL;
        char *host_traddr = NULL, *host_iface = NULL;
index f091da70cecdfbb355af664e5d0d66341af17b75..f0f798d0e61f1245d3775d780f63ef51714e9fd6 100644 (file)
@@ -12,6 +12,7 @@
 #include <stdbool.h>
 #include <string.h>
 #include <errno.h>
+#include <malloc.h>
 
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -1135,3 +1136,17 @@ void *__nvme_alloc(size_t len)
        memset(p, 0, _len);
        return p;
 }
+
+void *__nvme_realloc(void *p, size_t len)
+{
+       size_t old_len = malloc_usable_size(p);
+
+       void *result = __nvme_alloc(len);
+
+       if (p) {
+               memcpy(result, p, min(old_len, len));
+               free(p);
+       }
+
+       return result;
+}
index cfbfdb92107f523fe6a7fdfc12c9cde0dde92a8f..71fea9f434110e1f04782fbda7112c852cb31ae0 100644 (file)
@@ -558,6 +558,8 @@ char *kv_keymatch(const char *kv, const char *key);
  */
 char *startswith(const char *s, const char *prefix);
 
+#define min(x, y) ((x) > (y) ? (y) : (x))
+
 #define __round_mask(val, mult) ((__typeof__(val))((mult)-1))
 
 /**