]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_scrub: move to mallinfo2 when available
authorDarrick J. Wong <djwong@kernel.org>
Wed, 18 May 2022 02:48:07 +0000 (22:48 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Wed, 18 May 2022 02:48:07 +0000 (22:48 -0400)
Starting with glibc 2.35, the mallinfo library call has finally been
upgraded to return 64-bit memory usage quantities.  Migrate to the new
call, since it also warns about mallinfo being deprecated.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
configure.ac
include/builddefs.in
m4/package_libcdev.m4
scrub/Makefile
scrub/xfs_scrub.c

index e24fb0c8934e77c2ec947e403d22f26c3fcbf274..b87cf403ac9aa362d860147526dec9c18a38bdf1 100644 (file)
@@ -192,6 +192,7 @@ AC_HAVE_STATFS_FLAGS
 AC_HAVE_MAP_SYNC
 AC_HAVE_DEVMAPPER
 AC_HAVE_MALLINFO
+AC_HAVE_MALLINFO2
 AC_PACKAGE_WANT_ATTRIBUTES_H
 AC_HAVE_LIBATTR
 if test "$enable_scrub" = "yes"; then
index 626db210cc04313a4b553007307510d8e3768849..e0a2f3cbc954b062db85afb1be21d8d7707cdbe5 100644 (file)
@@ -115,6 +115,7 @@ HAVE_STATFS_FLAGS = @have_statfs_flags@
 HAVE_MAP_SYNC = @have_map_sync@
 HAVE_DEVMAPPER = @have_devmapper@
 HAVE_MALLINFO = @have_mallinfo@
+HAVE_MALLINFO2 = @have_mallinfo2@
 HAVE_LIBATTR = @have_libattr@
 HAVE_LIBICU = @have_libicu@
 HAVE_OPENAT = @have_openat@
index adab9bb9773a857da82c103f009706a0d4f8043a..8d05dc40b58d94e911bb3c824e57bd3147057aba 100644 (file)
@@ -367,6 +367,24 @@ AC_DEFUN([AC_HAVE_MALLINFO],
     AC_SUBST(have_mallinfo)
   ])
 
+#
+# Check if we have a mallinfo2 libc call
+#
+AC_DEFUN([AC_HAVE_MALLINFO2],
+  [ AC_MSG_CHECKING([for mallinfo2 ])
+    AC_TRY_COMPILE([
+#include <malloc.h>
+    ], [
+         struct mallinfo2 test;
+
+         test.arena = 0; test.hblkhd = 0; test.uordblks = 0; test.fordblks = 0;
+         test = mallinfo2();
+    ], have_mallinfo2=yes
+       AC_MSG_RESULT(yes),
+       AC_MSG_RESULT(no))
+    AC_SUBST(have_mallinfo2)
+  ])
+
 #
 # Check if we have a openat call
 #
index 74492fb6141d3541bba26abbec5390b941e25d8f..aba14ed231007797a7d8ed839fd76fd23a9ee774 100644 (file)
@@ -77,6 +77,10 @@ ifeq ($(HAVE_MALLINFO),yes)
 LCFLAGS += -DHAVE_MALLINFO
 endif
 
+ifeq ($(HAVE_MALLINFO2),yes)
+LCFLAGS += -DHAVE_MALLINFO2
+endif
+
 ifeq ($(HAVE_SYNCFS),yes)
 LCFLAGS += -DHAVE_SYNCFS
 endif
index 41839c2642c688cb2d8dbcfb97b95eebd1bfcc96..7a0411b0cc86d8768192d241721d0e5d6954717f 100644 (file)
@@ -282,6 +282,34 @@ phase_start(
        return error;
 }
 
+static inline unsigned long long
+kbytes(unsigned long long x)
+{
+       return (x + 1023) / 1024;
+}
+
+static void
+report_mem_usage(
+       const char                      *phase,
+       const struct phase_rusage       *pi)
+{
+#if defined(HAVE_MALLINFO2) || defined(HAVE_MALLINFO)
+# ifdef HAVE_MALLINFO2
+       struct mallinfo2                mall_now = mallinfo2();
+# else
+       struct mallinfo                 mall_now = mallinfo();
+# endif
+       fprintf(stdout, _("%sMemory used: %lluk/%lluk (%lluk/%lluk), "),
+               phase,
+               kbytes(mall_now.arena), kbytes(mall_now.hblkhd),
+               kbytes(mall_now.uordblks), kbytes(mall_now.fordblks));
+#else
+       fprintf(stdout, _("%sMemory used: %lluk, "),
+               phase,
+               kbytes(((char *) sbrk(0)) - ((char *) pi->brk_start)));
+#endif
+}
+
 /* Report usage stats. */
 static int
 phase_end(
@@ -289,9 +317,6 @@ phase_end(
        unsigned int            phase)
 {
        struct rusage           ruse_now;
-#ifdef HAVE_MALLINFO
-       struct mallinfo         mall_now;
-#endif
        struct timeval          time_now;
        char                    phasebuf[DESCR_BUFSZ];
        double                  dt;
@@ -323,21 +348,7 @@ phase_end(
        else
                phasebuf[0] = 0;
 
-#define kbytes(x)      (((unsigned long)(x) + 1023) / 1024)
-#ifdef HAVE_MALLINFO
-
-       mall_now = mallinfo();
-       fprintf(stdout, _("%sMemory used: %luk/%luk (%luk/%luk), "),
-               phasebuf,
-               kbytes(mall_now.arena), kbytes(mall_now.hblkhd),
-               kbytes(mall_now.uordblks), kbytes(mall_now.fordblks));
-#else
-       fprintf(stdout, _("%sMemory used: %luk, "),
-               phasebuf,
-               (unsigned long) kbytes(((char *) sbrk(0)) -
-                                      ((char *) pi->brk_start)));
-#endif
-#undef kbytes
+       report_mem_usage(phasebuf, pi);
 
        fprintf(stdout, _("time: %5.2f/%5.2f/%5.2fs\n"),
                timeval_subtract(&time_now, &pi->time),