All of lore.kernel.org
 help / color / mirror / Atom feed
* master - [lib/device/bcache] Tweaks after Kabi's review
@ 2018-04-23 13:46 David Teigland
  0 siblings, 0 replies; 2+ messages in thread
From: David Teigland @ 2018-04-23 13:46 UTC (permalink / raw)
  To: lvm-devel

Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=da7e13ef88541c4ca4b067f4f47ad7b43d346501
Commit:        da7e13ef88541c4ca4b067f4f47ad7b43d346501
Parent:        acb42ec4652450f7cd73440929fd57f1487282bf
Author:        Joe Thornber <ejt@redhat.com>
AuthorDate:    Tue Jan 30 12:13:48 2018 +0000
Committer:     David Teigland <teigland@redhat.com>
CommitterDate: Fri Apr 20 11:10:45 2018 -0500

[lib/device/bcache] Tweaks after Kabi's review

---
 aclocal.m4             |  222 ++++++++++++++++++++++++++++++------------------
 configure              |   18 +++-
 include/configure.h.in |   16 +++-
 lib/Makefile.in        |    1 +
 lib/device/bcache.c    |  108 ++++++++++++++----------
 lib/device/bcache.h    |   14 +++
 6 files changed, 248 insertions(+), 131 deletions(-)

diff --git a/aclocal.m4 b/aclocal.m4
index 4ab64a8..07ea0b6 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -69,32 +69,63 @@ AC_DEFUN([AX_PYTHON_MODULE],[
     fi
 ])
 
-# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
-# serial 1 (pkg-config-0.24)
-# 
-# Copyright ?? 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
+dnl pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
+dnl serial 11 (pkg-config-0.29)
+dnl
+dnl Copyright ?? 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright ?? 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl     [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+    [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
 AC_DEFUN([PKG_PROG_PKG_CONFIG],
 [m4_pattern_forbid([^_?PKG_[A-Z_]+$])
 m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
@@ -116,18 +147,19 @@ if test -n "$PKG_CONFIG"; then
 		PKG_CONFIG=""
 	fi
 fi[]dnl
-])# PKG_PROG_PKG_CONFIG
-
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists.  Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-# only at the first occurence in configure.ac, so if the first place
-# it's called might be skipped (such as if it is within an "if", you
-# have to call PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
+])dnl PKG_PROG_PKG_CONFIG
+
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
 AC_DEFUN([PKG_CHECK_EXISTS],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 if test -n "$PKG_CONFIG" && \
@@ -137,8 +169,10 @@ m4_ifvaln([$3], [else
   $3])dnl
 fi])
 
-# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-# ---------------------------------------------
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
 m4_define([_PKG_CONFIG],
 [if test -n "$$1"; then
     pkg_cv_[]$1="$$1"
@@ -150,10 +184,11 @@ m4_define([_PKG_CONFIG],
  else
     pkg_failed=untried
 fi[]dnl
-])# _PKG_CONFIG
+])dnl _PKG_CONFIG
 
-# _PKG_SHORT_ERRORS_SUPPORTED
-# -----------------------------
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
 AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
@@ -161,19 +196,17 @@ if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
 else
         _pkg_short_errors_supported=no
 fi[]dnl
-])# _PKG_SHORT_ERRORS_SUPPORTED
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
 
 
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
 AC_DEFUN([PKG_CHECK_MODULES],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
@@ -227,16 +260,40 @@ else
         AC_MSG_RESULT([yes])
 	$3
 fi[]dnl
-])# PKG_CHECK_MODULES
-
-
-# PKG_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable pkgconfigdir as the location where a module
-# should install pkg-config .pc files. By default the directory is
-# $libdir/pkgconfig, but the default can be changed by passing
-# DIRECTORY. The user can override through the --with-pkgconfigdir
-# parameter.
+])dnl PKG_CHECK_MODULES
+
+
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
+
+
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
 AC_DEFUN([PKG_INSTALLDIR],
 [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
 m4_pushdef([pkg_description],
@@ -247,16 +304,18 @@ AC_ARG_WITH([pkgconfigdir],
 AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
 m4_popdef([pkg_default])
 m4_popdef([pkg_description])
-]) dnl PKG_INSTALLDIR
-
-
-# PKG_NOARCH_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable noarch_pkgconfigdir as the location where a
-# module should install arch-independent pkg-config .pc files. By
-# default the directory is $datadir/pkgconfig, but the default can be
-# changed by passing DIRECTORY. The user can override through the
-# --with-noarch-pkgconfigdir parameter.
+])dnl PKG_INSTALLDIR
+
+
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
 AC_DEFUN([PKG_NOARCH_INSTALLDIR],
 [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
 m4_pushdef([pkg_description],
@@ -267,13 +326,15 @@ AC_ARG_WITH([noarch-pkgconfigdir],
 AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
 m4_popdef([pkg_default])
 m4_popdef([pkg_description])
-]) dnl PKG_NOARCH_INSTALLDIR
+])dnl PKG_NOARCH_INSTALLDIR
 
 
-# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
-# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-# -------------------------------------------
-# Retrieves the value of the pkg-config variable for the given module.
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
 AC_DEFUN([PKG_CHECK_VAR],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
@@ -282,7 +343,7 @@ _PKG_CONFIG([$1], [variable="][$3]["], [$2])
 AS_VAR_COPY([$1], [pkg_cv_][$1])
 
 AS_VAR_IF([$1], [""], [$5], [$4])dnl
-])# PKG_CHECK_VAR
+])dnl PKG_CHECK_VAR
 
 # Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
@@ -536,5 +597,4 @@ AC_DEFUN([AM_RUN_LOG],
    echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
    (exit $ac_status); }])
 
-
 m4_include([acinclude.m4])
diff --git a/configure b/configure
index 5409f68..7f41249 100755
--- a/configure
+++ b/configure
@@ -886,6 +886,7 @@ infodir
 docdir
 oldincludedir
 includedir
+runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -1101,6 +1102,7 @@ datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE}'
@@ -1353,6 +1355,15 @@ do
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1490,7 +1501,7 @@ fi
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
+		libdir localedir mandir runstatedir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1643,6 +1654,7 @@ Fine tuning of the installation directories:
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
@@ -12967,7 +12979,7 @@ if ${am_cv_pathless_PYTHON+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-	for am_cv_pathless_PYTHON in python python2 python3 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7  python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
+	for am_cv_pathless_PYTHON in python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7  python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
 	  test "$am_cv_pathless_PYTHON" = none && break
 	  prog="import sys
 # split strings by '.' and convert to numeric.  Append some zeros
@@ -13535,7 +13547,7 @@ if ${am_cv_pathless_PYTHON+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-	for am_cv_pathless_PYTHON in python python2 python3 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7  python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
+	for am_cv_pathless_PYTHON in python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7  python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
 	  test "$am_cv_pathless_PYTHON" = none && break
 	  prog="import sys
 # split strings by '.' and convert to numeric.  Append some zeros
diff --git a/include/configure.h.in b/include/configure.h.in
index be2f660..a4c93d6 100644
--- a/include/configure.h.in
+++ b/include/configure.h.in
@@ -347,9 +347,6 @@
 /* Define to 1 if the system has the type `ptrdiff_t'. */
 #undef HAVE_PTRDIFF_T
 
-/* Define to 1 if the compiler has the `__builtin_clz` builtin. */
-#undef HAVE___BUILTIN_CLZ
-
 /* Define to 1 if you have the <readline/history.h> header file. */
 #undef HAVE_READLINE_HISTORY_H
 
@@ -478,9 +475,16 @@
 /* Define to 1 if you have the `strtoull' function. */
 #undef HAVE_STRTOULL
 
+/* Define to 1 if `st_blocks' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BLOCKS
+
 /* Define to 1 if `st_rdev' is a member of `struct stat'. */
 #undef HAVE_STRUCT_STAT_ST_RDEV
 
+/* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use
+   `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */
+#undef HAVE_ST_BLOCKS
+
 /* Define to 1 if you have the <syslog.h> header file. */
 #undef HAVE_SYSLOG_H
 
@@ -552,6 +556,9 @@
 /* Define to 1 if you have the <sys/utsname.h> header file. */
 #undef HAVE_SYS_UTSNAME_H
 
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#undef HAVE_SYS_VFS_H
+
 /* Define to 1 if you have the <sys/wait.h> header file. */
 #undef HAVE_SYS_WAIT_H
 
@@ -591,6 +598,9 @@
 /* Define to 1 if the system has the type `_Bool'. */
 #undef HAVE__BOOL
 
+/* Define to 1 if the system has the `__builtin_clz' built-in function */
+#undef HAVE___BUILTIN_CLZ
+
 /* Internalization package */
 #undef INTL_PACKAGE
 
diff --git a/lib/Makefile.in b/lib/Makefile.in
index 1fdaca8..bd68edc 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -55,6 +55,7 @@ SOURCES =\
 	config/config.c \
 	datastruct/btree.c \
 	datastruct/str_list.c \
+	device/bcache.c \
 	device/dev-cache.c \
 	device/dev-ext.c \
 	device/dev-io.c \
diff --git a/lib/device/bcache.c b/lib/device/bcache.c
index 1be626c..3b8cf78 100644
--- a/lib/device/bcache.c
+++ b/lib/device/bcache.c
@@ -1,3 +1,17 @@
+/*
+ * Copyright (C) 2018 Red Hat, Inc. All rights reserved.
+ *
+ * This file is part of LVM2.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License v.2.1.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
 #define _GNU_SOURCE
 
 #include <errno.h>
@@ -22,6 +36,11 @@
 
 //----------------------------------------------------------------
 
+static void log_sys_warn(const char *syscall)
+{
+	log_warn("%s failed: %s", syscall, strerror(errno));
+}
+
 // Assumes the list is not empty.
 static inline struct dm_list *_list_pop(struct dm_list *head)
 {
@@ -49,14 +68,14 @@ struct cb_set {
 static struct cb_set *_cb_set_create(unsigned nr)
 {
 	int i;
-	struct cb_set *cbs = malloc(sizeof(*cbs));
+	struct cb_set *cbs = dm_malloc(sizeof(*cbs));
 
 	if (!cbs)
 		return NULL;
 
-	cbs->vec = malloc(nr * sizeof(*cbs->vec));
+	cbs->vec = dm_malloc(nr * sizeof(*cbs->vec));
 	if (!cbs->vec) {
-		free(cbs);
+		dm_free(cbs);
 		return NULL;
 	}
 
@@ -69,17 +88,18 @@ static struct cb_set *_cb_set_create(unsigned nr)
 	return cbs;
 }
 
-static bool _cb_set_destroy(struct cb_set *cbs)
+static void _cb_set_destroy(struct cb_set *cbs)
 {
+	// We know this is always called after a wait_all.  So there should
+	// never be in flight IO.
 	if (!dm_list_empty(&cbs->allocated)) {
-		// FIXME: I think we should propogate this up.
+		// bail out
 		log_error("async io still in flight");
-		return false;
+		return;
 	}
 
-	free(cbs->vec);
-	free(cbs);
-	return 0;
+	dm_free(cbs->vec);
+	dm_free(cbs);
 }
 
 static struct control_block *_cb_alloc(struct cb_set *cbs, void *context)
@@ -123,7 +143,7 @@ struct io_engine {
 static struct io_engine *_engine_create(unsigned max_io)
 {
 	int r;
-	struct io_engine *e = malloc(sizeof(*e));
+	struct io_engine *e = dm_malloc(sizeof(*e));
 
 	if (!e)
 		return NULL;
@@ -138,7 +158,7 @@ static struct io_engine *_engine_create(unsigned max_io)
 	e->cbs = _cb_set_create(max_io);
 	if (!e->cbs) {
 		log_warn("couldn't create control block set");
-		free(e);
+		dm_free(e);
 		return NULL;
 	}
 
@@ -149,7 +169,7 @@ static void _engine_destroy(struct io_engine *e)
 {
 	_cb_set_destroy(e->cbs);
 	io_destroy(e->aio_context);
-	free(e);
+	dm_free(e);
 }
 
 static bool _engine_issue(struct io_engine *e, int fd, enum dir d,
@@ -160,13 +180,13 @@ static bool _engine_issue(struct io_engine *e, int fd, enum dir d,
 	struct control_block *cb;
 
 	if (((uint64_t) data) & (PAGE_SIZE - 1)) {
-		log_err("misaligned data buffer");
+		log_warn("misaligned data buffer");
 		return false;
 	}
 
 	cb = _cb_alloc(e->cbs, context);
 	if (!cb) {
-		log_err("couldn't allocate control block");
+		log_warn("couldn't allocate control block");
 		return false;
 	}
 
@@ -181,7 +201,7 @@ static bool _engine_issue(struct io_engine *e, int fd, enum dir d,
 	cb_array[0] = &cb->cb;
 	r = io_submit(e->aio_context, 1, cb_array);
 	if (r < 0) {
-		log_sys_error("io_submit", "");
+		log_sys_warn("io_submit");
 		_cb_free(e->cbs, cb);
 		return false;
 	}
@@ -201,7 +221,7 @@ static bool _engine_wait(struct io_engine *e, complete_fn fn)
 	memset(&event, 0, sizeof(event));
 	r = io_getevents(e->aio_context, 1, MAX_IO, event, NULL);
 	if (r < 0) {
-		log_sys_error("io_getevents", "");
+		log_sys_warn("io_getevents");
 		return false;
 	}
 
@@ -217,7 +237,7 @@ static bool _engine_wait(struct io_engine *e, complete_fn fn)
 			fn(cb->context, (int) ev->res);
 
 		else {
-			log_err("short io");
+			log_warn("short io");
 			fn(cb->context, -ENODATA);
 		}
 
@@ -341,7 +361,7 @@ static void _hash_insert(struct block *b)
 	dm_list_add_h(b->cache->buckets + h, &b->hash);
 }
 
-static void _hash_remove(struct block *b)
+static inline void _hash_remove(struct block *b)
 {
 	dm_list_del(&b->hash);
 }
@@ -363,30 +383,30 @@ static unsigned _calc_nr_buckets(unsigned nr_blocks)
 	return r;
 }
 
-static int _hash_table_init(struct bcache *cache, unsigned nr_entries)
+static bool _hash_table_init(struct bcache *cache, unsigned nr_entries)
 {
 	unsigned i;
 
 	cache->nr_buckets = _calc_nr_buckets(nr_entries);
 	cache->hash_mask = cache->nr_buckets - 1;
-	cache->buckets = malloc(cache->nr_buckets * sizeof(*cache->buckets));
+	cache->buckets = dm_malloc(cache->nr_buckets * sizeof(*cache->buckets));
 	if (!cache->buckets)
-		return -ENOMEM;
+		return false;
 
 	for (i = 0; i < cache->nr_buckets; i++)
 		dm_list_init(cache->buckets + i);
 
-	return 0;
+	return true;
 }
 
 static void _hash_table_exit(struct bcache *cache)
 {
-	free(cache->buckets);
+	dm_free(cache->buckets);
 }
 
 //----------------------------------------------------------------
 
-static int _init_free_list(struct bcache *cache, unsigned count)
+static bool _init_free_list(struct bcache *cache, unsigned count)
 {
 	unsigned i;
 	size_t block_size = cache->block_sectors << SECTOR_SHIFT;
@@ -395,13 +415,13 @@ static int _init_free_list(struct bcache *cache, unsigned count)
 
 	/* Allocate the data for each block.  We page align the data. */
 	if (!data)
-		return -ENOMEM;
+		return false;
 
 	cache->raw_data = data;
-	cache->raw_blocks = malloc(count * sizeof(*cache->raw_blocks));
+	cache->raw_blocks = dm_malloc(count * sizeof(*cache->raw_blocks));
 
 	if (!cache->raw_blocks)
-		free(cache->raw_data);
+		dm_free(cache->raw_data);
 
 	for (i = 0; i < count; i++) {
 		struct block *b = cache->raw_blocks + i;
@@ -410,13 +430,13 @@ static int _init_free_list(struct bcache *cache, unsigned count)
 		dm_list_add(&cache->free, &b->list);
 	}
 
-	return 0;
+	return true;
 }
 
 static void _exit_free_list(struct bcache *cache)
 {
-	free(cache->raw_data);
-	free(cache->raw_blocks);
+	dm_free(cache->raw_data);
+	dm_free(cache->raw_blocks);
 }
 
 static struct block *_alloc_block(struct bcache *cache)
@@ -519,7 +539,7 @@ static void _complete_io(void *context, int err)
 	}
 }
 
-static int _wait_io(struct bcache *cache)
+static bool _wait_io(struct bcache *cache)
 {
 	return _engine_wait(cache->engine, _complete_io);
 }
@@ -646,7 +666,7 @@ static struct block *_lookup_or_read_block(struct bcache *cache,
 		// FIXME: this is insufficient.  We need to also catch a read
 		// lock of a write locked block.  Ref count needs to distinguish.
 		if (b->ref_count && (flags & (GF_DIRTY | GF_ZERO))) {
-			log_err("concurrent write lock attempted");
+			log_warn("concurrent write lock attempted");
 			return NULL;
 		}
 
@@ -706,10 +726,9 @@ static void _preemptive_writeback(struct bcache *cache)
  *--------------------------------------------------------------*/
 struct bcache *bcache_create(sector_t block_sectors, unsigned nr_cache_blocks)
 {
-	int r;
 	struct bcache *cache;
 
-	cache = malloc(sizeof(*cache));
+	cache = dm_malloc(sizeof(*cache));
 	if (!cache)
 		return NULL;
 
@@ -718,7 +737,7 @@ struct bcache *bcache_create(sector_t block_sectors, unsigned nr_cache_blocks)
 
 	cache->engine = _engine_create(nr_cache_blocks < 1024u ? nr_cache_blocks : 1024u);
 	if (!cache->engine) {
-		free(cache);
+		dm_free(cache);
 		return NULL;
 	}
 
@@ -732,9 +751,10 @@ struct bcache *bcache_create(sector_t block_sectors, unsigned nr_cache_blocks)
 	dm_list_init(&cache->clean);
 	dm_list_init(&cache->io_pending);
 
-	if (_hash_table_init(cache, nr_cache_blocks)) {
+	if (!_hash_table_init(cache, nr_cache_blocks)) {
 		_engine_destroy(cache->engine);
-		free(cache);
+		dm_free(cache);
+		return NULL;
 	}
 
 	cache->read_hits = 0;
@@ -744,11 +764,11 @@ struct bcache *bcache_create(sector_t block_sectors, unsigned nr_cache_blocks)
 	cache->write_misses = 0;
 	cache->prefetches = 0;
 
-	r = _init_free_list(cache, nr_cache_blocks);
-	if (r) {
+	if (!_init_free_list(cache, nr_cache_blocks)) {
 		_engine_destroy(cache->engine);
 		_hash_table_exit(cache);
-		free(cache);
+		dm_free(cache);
+		return NULL;
 	}
 
 	return cache;
@@ -757,14 +777,14 @@ struct bcache *bcache_create(sector_t block_sectors, unsigned nr_cache_blocks)
 void bcache_destroy(struct bcache *cache)
 {
 	if (cache->nr_locked)
-		log_warn("some blocks are still locked\n");
+		log_warn("some blocks are still locked");
 
 	bcache_flush(cache);
 	_wait_all(cache);
 	_exit_free_list(cache);
 	_hash_table_exit(cache);
 	_engine_destroy(cache->engine);
-	free(cache);
+	dm_free(cache);
 }
 
 void bcache_prefetch(struct bcache *cache, int fd, block_address index)
@@ -794,14 +814,14 @@ bool bcache_get(struct bcache *cache, int fd, block_address index,
 	}
 
 	*result = NULL;
-	log_err("couldn't get block");
+	log_warn("couldn't get block");
 	return false;
 }
 
 void bcache_put(struct block *b)
 {
 	if (!b->ref_count) {
-		log_err("ref count on bcache block already zero");
+		log_warn("ref count on bcache block already zero");
 		return;
 	}
 
diff --git a/lib/device/bcache.h b/lib/device/bcache.h
index 1f4262e..3227744 100644
--- a/lib/device/bcache.h
+++ b/lib/device/bcache.h
@@ -1,3 +1,17 @@
+/*
+ * Copyright (C) 2018 Red Hat, Inc. All rights reserved.
+ *
+ * This file is part of LVM2.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License v.2.1.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
 #ifndef BCACHE_H
 #define BCACHE_H
 



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* master - [lib/device/bcache] Tweaks after Kabi's review
@ 2018-04-23 13:50 David Teigland
  0 siblings, 0 replies; 2+ messages in thread
From: David Teigland @ 2018-04-23 13:50 UTC (permalink / raw)
  To: lvm-devel

Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=da7e13ef88541c4ca4b067f4f47ad7b43d346501
Commit:        da7e13ef88541c4ca4b067f4f47ad7b43d346501
Parent:        acb42ec4652450f7cd73440929fd57f1487282bf
Author:        Joe Thornber <ejt@redhat.com>
AuthorDate:    Tue Jan 30 12:13:48 2018 +0000
Committer:     David Teigland <teigland@redhat.com>
CommitterDate: Fri Apr 20 11:10:45 2018 -0500

[lib/device/bcache] Tweaks after Kabi's review

---
 aclocal.m4             |  222 ++++++++++++++++++++++++++++++------------------
 configure              |   18 +++-
 include/configure.h.in |   16 +++-
 lib/Makefile.in        |    1 +
 lib/device/bcache.c    |  108 ++++++++++++++----------
 lib/device/bcache.h    |   14 +++
 6 files changed, 248 insertions(+), 131 deletions(-)

diff --git a/aclocal.m4 b/aclocal.m4
index 4ab64a8..07ea0b6 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -69,32 +69,63 @@ AC_DEFUN([AX_PYTHON_MODULE],[
     fi
 ])
 
-# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
-# serial 1 (pkg-config-0.24)
-# 
-# Copyright ?? 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
+dnl pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
+dnl serial 11 (pkg-config-0.29)
+dnl
+dnl Copyright ?? 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright ?? 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl     [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+    [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
 AC_DEFUN([PKG_PROG_PKG_CONFIG],
 [m4_pattern_forbid([^_?PKG_[A-Z_]+$])
 m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
@@ -116,18 +147,19 @@ if test -n "$PKG_CONFIG"; then
 		PKG_CONFIG=""
 	fi
 fi[]dnl
-])# PKG_PROG_PKG_CONFIG
-
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists.  Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-# only at the first occurence in configure.ac, so if the first place
-# it's called might be skipped (such as if it is within an "if", you
-# have to call PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
+])dnl PKG_PROG_PKG_CONFIG
+
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
 AC_DEFUN([PKG_CHECK_EXISTS],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 if test -n "$PKG_CONFIG" && \
@@ -137,8 +169,10 @@ m4_ifvaln([$3], [else
   $3])dnl
 fi])
 
-# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-# ---------------------------------------------
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
 m4_define([_PKG_CONFIG],
 [if test -n "$$1"; then
     pkg_cv_[]$1="$$1"
@@ -150,10 +184,11 @@ m4_define([_PKG_CONFIG],
  else
     pkg_failed=untried
 fi[]dnl
-])# _PKG_CONFIG
+])dnl _PKG_CONFIG
 
-# _PKG_SHORT_ERRORS_SUPPORTED
-# -----------------------------
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
 AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
@@ -161,19 +196,17 @@ if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
 else
         _pkg_short_errors_supported=no
 fi[]dnl
-])# _PKG_SHORT_ERRORS_SUPPORTED
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
 
 
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
 AC_DEFUN([PKG_CHECK_MODULES],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
@@ -227,16 +260,40 @@ else
         AC_MSG_RESULT([yes])
 	$3
 fi[]dnl
-])# PKG_CHECK_MODULES
-
-
-# PKG_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable pkgconfigdir as the location where a module
-# should install pkg-config .pc files. By default the directory is
-# $libdir/pkgconfig, but the default can be changed by passing
-# DIRECTORY. The user can override through the --with-pkgconfigdir
-# parameter.
+])dnl PKG_CHECK_MODULES
+
+
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
+
+
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
 AC_DEFUN([PKG_INSTALLDIR],
 [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
 m4_pushdef([pkg_description],
@@ -247,16 +304,18 @@ AC_ARG_WITH([pkgconfigdir],
 AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
 m4_popdef([pkg_default])
 m4_popdef([pkg_description])
-]) dnl PKG_INSTALLDIR
-
-
-# PKG_NOARCH_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable noarch_pkgconfigdir as the location where a
-# module should install arch-independent pkg-config .pc files. By
-# default the directory is $datadir/pkgconfig, but the default can be
-# changed by passing DIRECTORY. The user can override through the
-# --with-noarch-pkgconfigdir parameter.
+])dnl PKG_INSTALLDIR
+
+
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
 AC_DEFUN([PKG_NOARCH_INSTALLDIR],
 [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
 m4_pushdef([pkg_description],
@@ -267,13 +326,15 @@ AC_ARG_WITH([noarch-pkgconfigdir],
 AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
 m4_popdef([pkg_default])
 m4_popdef([pkg_description])
-]) dnl PKG_NOARCH_INSTALLDIR
+])dnl PKG_NOARCH_INSTALLDIR
 
 
-# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
-# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-# -------------------------------------------
-# Retrieves the value of the pkg-config variable for the given module.
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
 AC_DEFUN([PKG_CHECK_VAR],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
@@ -282,7 +343,7 @@ _PKG_CONFIG([$1], [variable="][$3]["], [$2])
 AS_VAR_COPY([$1], [pkg_cv_][$1])
 
 AS_VAR_IF([$1], [""], [$5], [$4])dnl
-])# PKG_CHECK_VAR
+])dnl PKG_CHECK_VAR
 
 # Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
@@ -536,5 +597,4 @@ AC_DEFUN([AM_RUN_LOG],
    echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
    (exit $ac_status); }])
 
-
 m4_include([acinclude.m4])
diff --git a/configure b/configure
index 5409f68..7f41249 100755
--- a/configure
+++ b/configure
@@ -886,6 +886,7 @@ infodir
 docdir
 oldincludedir
 includedir
+runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -1101,6 +1102,7 @@ datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE}'
@@ -1353,6 +1355,15 @@ do
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1490,7 +1501,7 @@ fi
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
+		libdir localedir mandir runstatedir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1643,6 +1654,7 @@ Fine tuning of the installation directories:
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
@@ -12967,7 +12979,7 @@ if ${am_cv_pathless_PYTHON+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-	for am_cv_pathless_PYTHON in python python2 python3 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7  python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
+	for am_cv_pathless_PYTHON in python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7  python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
 	  test "$am_cv_pathless_PYTHON" = none && break
 	  prog="import sys
 # split strings by '.' and convert to numeric.  Append some zeros
@@ -13535,7 +13547,7 @@ if ${am_cv_pathless_PYTHON+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-	for am_cv_pathless_PYTHON in python python2 python3 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7  python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
+	for am_cv_pathless_PYTHON in python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7  python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
 	  test "$am_cv_pathless_PYTHON" = none && break
 	  prog="import sys
 # split strings by '.' and convert to numeric.  Append some zeros
diff --git a/include/configure.h.in b/include/configure.h.in
index be2f660..a4c93d6 100644
--- a/include/configure.h.in
+++ b/include/configure.h.in
@@ -347,9 +347,6 @@
 /* Define to 1 if the system has the type `ptrdiff_t'. */
 #undef HAVE_PTRDIFF_T
 
-/* Define to 1 if the compiler has the `__builtin_clz` builtin. */
-#undef HAVE___BUILTIN_CLZ
-
 /* Define to 1 if you have the <readline/history.h> header file. */
 #undef HAVE_READLINE_HISTORY_H
 
@@ -478,9 +475,16 @@
 /* Define to 1 if you have the `strtoull' function. */
 #undef HAVE_STRTOULL
 
+/* Define to 1 if `st_blocks' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BLOCKS
+
 /* Define to 1 if `st_rdev' is a member of `struct stat'. */
 #undef HAVE_STRUCT_STAT_ST_RDEV
 
+/* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use
+   `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */
+#undef HAVE_ST_BLOCKS
+
 /* Define to 1 if you have the <syslog.h> header file. */
 #undef HAVE_SYSLOG_H
 
@@ -552,6 +556,9 @@
 /* Define to 1 if you have the <sys/utsname.h> header file. */
 #undef HAVE_SYS_UTSNAME_H
 
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#undef HAVE_SYS_VFS_H
+
 /* Define to 1 if you have the <sys/wait.h> header file. */
 #undef HAVE_SYS_WAIT_H
 
@@ -591,6 +598,9 @@
 /* Define to 1 if the system has the type `_Bool'. */
 #undef HAVE__BOOL
 
+/* Define to 1 if the system has the `__builtin_clz' built-in function */
+#undef HAVE___BUILTIN_CLZ
+
 /* Internalization package */
 #undef INTL_PACKAGE
 
diff --git a/lib/Makefile.in b/lib/Makefile.in
index 1fdaca8..bd68edc 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -55,6 +55,7 @@ SOURCES =\
 	config/config.c \
 	datastruct/btree.c \
 	datastruct/str_list.c \
+	device/bcache.c \
 	device/dev-cache.c \
 	device/dev-ext.c \
 	device/dev-io.c \
diff --git a/lib/device/bcache.c b/lib/device/bcache.c
index 1be626c..3b8cf78 100644
--- a/lib/device/bcache.c
+++ b/lib/device/bcache.c
@@ -1,3 +1,17 @@
+/*
+ * Copyright (C) 2018 Red Hat, Inc. All rights reserved.
+ *
+ * This file is part of LVM2.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License v.2.1.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
 #define _GNU_SOURCE
 
 #include <errno.h>
@@ -22,6 +36,11 @@
 
 //----------------------------------------------------------------
 
+static void log_sys_warn(const char *syscall)
+{
+	log_warn("%s failed: %s", syscall, strerror(errno));
+}
+
 // Assumes the list is not empty.
 static inline struct dm_list *_list_pop(struct dm_list *head)
 {
@@ -49,14 +68,14 @@ struct cb_set {
 static struct cb_set *_cb_set_create(unsigned nr)
 {
 	int i;
-	struct cb_set *cbs = malloc(sizeof(*cbs));
+	struct cb_set *cbs = dm_malloc(sizeof(*cbs));
 
 	if (!cbs)
 		return NULL;
 
-	cbs->vec = malloc(nr * sizeof(*cbs->vec));
+	cbs->vec = dm_malloc(nr * sizeof(*cbs->vec));
 	if (!cbs->vec) {
-		free(cbs);
+		dm_free(cbs);
 		return NULL;
 	}
 
@@ -69,17 +88,18 @@ static struct cb_set *_cb_set_create(unsigned nr)
 	return cbs;
 }
 
-static bool _cb_set_destroy(struct cb_set *cbs)
+static void _cb_set_destroy(struct cb_set *cbs)
 {
+	// We know this is always called after a wait_all.  So there should
+	// never be in flight IO.
 	if (!dm_list_empty(&cbs->allocated)) {
-		// FIXME: I think we should propogate this up.
+		// bail out
 		log_error("async io still in flight");
-		return false;
+		return;
 	}
 
-	free(cbs->vec);
-	free(cbs);
-	return 0;
+	dm_free(cbs->vec);
+	dm_free(cbs);
 }
 
 static struct control_block *_cb_alloc(struct cb_set *cbs, void *context)
@@ -123,7 +143,7 @@ struct io_engine {
 static struct io_engine *_engine_create(unsigned max_io)
 {
 	int r;
-	struct io_engine *e = malloc(sizeof(*e));
+	struct io_engine *e = dm_malloc(sizeof(*e));
 
 	if (!e)
 		return NULL;
@@ -138,7 +158,7 @@ static struct io_engine *_engine_create(unsigned max_io)
 	e->cbs = _cb_set_create(max_io);
 	if (!e->cbs) {
 		log_warn("couldn't create control block set");
-		free(e);
+		dm_free(e);
 		return NULL;
 	}
 
@@ -149,7 +169,7 @@ static void _engine_destroy(struct io_engine *e)
 {
 	_cb_set_destroy(e->cbs);
 	io_destroy(e->aio_context);
-	free(e);
+	dm_free(e);
 }
 
 static bool _engine_issue(struct io_engine *e, int fd, enum dir d,
@@ -160,13 +180,13 @@ static bool _engine_issue(struct io_engine *e, int fd, enum dir d,
 	struct control_block *cb;
 
 	if (((uint64_t) data) & (PAGE_SIZE - 1)) {
-		log_err("misaligned data buffer");
+		log_warn("misaligned data buffer");
 		return false;
 	}
 
 	cb = _cb_alloc(e->cbs, context);
 	if (!cb) {
-		log_err("couldn't allocate control block");
+		log_warn("couldn't allocate control block");
 		return false;
 	}
 
@@ -181,7 +201,7 @@ static bool _engine_issue(struct io_engine *e, int fd, enum dir d,
 	cb_array[0] = &cb->cb;
 	r = io_submit(e->aio_context, 1, cb_array);
 	if (r < 0) {
-		log_sys_error("io_submit", "");
+		log_sys_warn("io_submit");
 		_cb_free(e->cbs, cb);
 		return false;
 	}
@@ -201,7 +221,7 @@ static bool _engine_wait(struct io_engine *e, complete_fn fn)
 	memset(&event, 0, sizeof(event));
 	r = io_getevents(e->aio_context, 1, MAX_IO, event, NULL);
 	if (r < 0) {
-		log_sys_error("io_getevents", "");
+		log_sys_warn("io_getevents");
 		return false;
 	}
 
@@ -217,7 +237,7 @@ static bool _engine_wait(struct io_engine *e, complete_fn fn)
 			fn(cb->context, (int) ev->res);
 
 		else {
-			log_err("short io");
+			log_warn("short io");
 			fn(cb->context, -ENODATA);
 		}
 
@@ -341,7 +361,7 @@ static void _hash_insert(struct block *b)
 	dm_list_add_h(b->cache->buckets + h, &b->hash);
 }
 
-static void _hash_remove(struct block *b)
+static inline void _hash_remove(struct block *b)
 {
 	dm_list_del(&b->hash);
 }
@@ -363,30 +383,30 @@ static unsigned _calc_nr_buckets(unsigned nr_blocks)
 	return r;
 }
 
-static int _hash_table_init(struct bcache *cache, unsigned nr_entries)
+static bool _hash_table_init(struct bcache *cache, unsigned nr_entries)
 {
 	unsigned i;
 
 	cache->nr_buckets = _calc_nr_buckets(nr_entries);
 	cache->hash_mask = cache->nr_buckets - 1;
-	cache->buckets = malloc(cache->nr_buckets * sizeof(*cache->buckets));
+	cache->buckets = dm_malloc(cache->nr_buckets * sizeof(*cache->buckets));
 	if (!cache->buckets)
-		return -ENOMEM;
+		return false;
 
 	for (i = 0; i < cache->nr_buckets; i++)
 		dm_list_init(cache->buckets + i);
 
-	return 0;
+	return true;
 }
 
 static void _hash_table_exit(struct bcache *cache)
 {
-	free(cache->buckets);
+	dm_free(cache->buckets);
 }
 
 //----------------------------------------------------------------
 
-static int _init_free_list(struct bcache *cache, unsigned count)
+static bool _init_free_list(struct bcache *cache, unsigned count)
 {
 	unsigned i;
 	size_t block_size = cache->block_sectors << SECTOR_SHIFT;
@@ -395,13 +415,13 @@ static int _init_free_list(struct bcache *cache, unsigned count)
 
 	/* Allocate the data for each block.  We page align the data. */
 	if (!data)
-		return -ENOMEM;
+		return false;
 
 	cache->raw_data = data;
-	cache->raw_blocks = malloc(count * sizeof(*cache->raw_blocks));
+	cache->raw_blocks = dm_malloc(count * sizeof(*cache->raw_blocks));
 
 	if (!cache->raw_blocks)
-		free(cache->raw_data);
+		dm_free(cache->raw_data);
 
 	for (i = 0; i < count; i++) {
 		struct block *b = cache->raw_blocks + i;
@@ -410,13 +430,13 @@ static int _init_free_list(struct bcache *cache, unsigned count)
 		dm_list_add(&cache->free, &b->list);
 	}
 
-	return 0;
+	return true;
 }
 
 static void _exit_free_list(struct bcache *cache)
 {
-	free(cache->raw_data);
-	free(cache->raw_blocks);
+	dm_free(cache->raw_data);
+	dm_free(cache->raw_blocks);
 }
 
 static struct block *_alloc_block(struct bcache *cache)
@@ -519,7 +539,7 @@ static void _complete_io(void *context, int err)
 	}
 }
 
-static int _wait_io(struct bcache *cache)
+static bool _wait_io(struct bcache *cache)
 {
 	return _engine_wait(cache->engine, _complete_io);
 }
@@ -646,7 +666,7 @@ static struct block *_lookup_or_read_block(struct bcache *cache,
 		// FIXME: this is insufficient.  We need to also catch a read
 		// lock of a write locked block.  Ref count needs to distinguish.
 		if (b->ref_count && (flags & (GF_DIRTY | GF_ZERO))) {
-			log_err("concurrent write lock attempted");
+			log_warn("concurrent write lock attempted");
 			return NULL;
 		}
 
@@ -706,10 +726,9 @@ static void _preemptive_writeback(struct bcache *cache)
  *--------------------------------------------------------------*/
 struct bcache *bcache_create(sector_t block_sectors, unsigned nr_cache_blocks)
 {
-	int r;
 	struct bcache *cache;
 
-	cache = malloc(sizeof(*cache));
+	cache = dm_malloc(sizeof(*cache));
 	if (!cache)
 		return NULL;
 
@@ -718,7 +737,7 @@ struct bcache *bcache_create(sector_t block_sectors, unsigned nr_cache_blocks)
 
 	cache->engine = _engine_create(nr_cache_blocks < 1024u ? nr_cache_blocks : 1024u);
 	if (!cache->engine) {
-		free(cache);
+		dm_free(cache);
 		return NULL;
 	}
 
@@ -732,9 +751,10 @@ struct bcache *bcache_create(sector_t block_sectors, unsigned nr_cache_blocks)
 	dm_list_init(&cache->clean);
 	dm_list_init(&cache->io_pending);
 
-	if (_hash_table_init(cache, nr_cache_blocks)) {
+	if (!_hash_table_init(cache, nr_cache_blocks)) {
 		_engine_destroy(cache->engine);
-		free(cache);
+		dm_free(cache);
+		return NULL;
 	}
 
 	cache->read_hits = 0;
@@ -744,11 +764,11 @@ struct bcache *bcache_create(sector_t block_sectors, unsigned nr_cache_blocks)
 	cache->write_misses = 0;
 	cache->prefetches = 0;
 
-	r = _init_free_list(cache, nr_cache_blocks);
-	if (r) {
+	if (!_init_free_list(cache, nr_cache_blocks)) {
 		_engine_destroy(cache->engine);
 		_hash_table_exit(cache);
-		free(cache);
+		dm_free(cache);
+		return NULL;
 	}
 
 	return cache;
@@ -757,14 +777,14 @@ struct bcache *bcache_create(sector_t block_sectors, unsigned nr_cache_blocks)
 void bcache_destroy(struct bcache *cache)
 {
 	if (cache->nr_locked)
-		log_warn("some blocks are still locked\n");
+		log_warn("some blocks are still locked");
 
 	bcache_flush(cache);
 	_wait_all(cache);
 	_exit_free_list(cache);
 	_hash_table_exit(cache);
 	_engine_destroy(cache->engine);
-	free(cache);
+	dm_free(cache);
 }
 
 void bcache_prefetch(struct bcache *cache, int fd, block_address index)
@@ -794,14 +814,14 @@ bool bcache_get(struct bcache *cache, int fd, block_address index,
 	}
 
 	*result = NULL;
-	log_err("couldn't get block");
+	log_warn("couldn't get block");
 	return false;
 }
 
 void bcache_put(struct block *b)
 {
 	if (!b->ref_count) {
-		log_err("ref count on bcache block already zero");
+		log_warn("ref count on bcache block already zero");
 		return;
 	}
 
diff --git a/lib/device/bcache.h b/lib/device/bcache.h
index 1f4262e..3227744 100644
--- a/lib/device/bcache.h
+++ b/lib/device/bcache.h
@@ -1,3 +1,17 @@
+/*
+ * Copyright (C) 2018 Red Hat, Inc. All rights reserved.
+ *
+ * This file is part of LVM2.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License v.2.1.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
 #ifndef BCACHE_H
 #define BCACHE_H
 



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-04-23 13:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-23 13:46 master - [lib/device/bcache] Tweaks after Kabi's review David Teigland
2018-04-23 13:50 David Teigland

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.