mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
[lib/device/bcache] Tweaks after Kabi's review
This commit is contained in:
parent
acb42ec465
commit
da7e13ef88
210
aclocal.m4
vendored
210
aclocal.m4
vendored
@ -69,32 +69,63 @@ AC_DEFUN([AX_PYTHON_MODULE],[
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
|
dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
|
||||||
# serial 1 (pkg-config-0.24)
|
dnl serial 11 (pkg-config-0.29)
|
||||||
#
|
dnl
|
||||||
# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
|
dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
|
||||||
#
|
dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
|
||||||
# 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 This program is free software; you can redistribute it and/or modify
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
dnl it under the terms of the GNU General Public License as published by
|
||||||
# (at your option) any later version.
|
dnl the Free Software Foundation; either version 2 of the License, or
|
||||||
#
|
dnl (at your option) any later version.
|
||||||
# This program is distributed in the hope that it will be useful, but
|
dnl
|
||||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
dnl This program is distributed in the hope that it will be useful, but
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# General Public License for more details.
|
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
#
|
dnl General Public License for more details.
|
||||||
# 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 You should have received a copy of the GNU General Public License
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
dnl along with this program; if not, write to the Free Software
|
||||||
#
|
dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
# As a special exception to the GNU General Public License, if you
|
dnl 02111-1307, USA.
|
||||||
# distribute this file as part of a program that contains a
|
dnl
|
||||||
# configuration script generated by Autoconf, you may include it under
|
dnl As a special exception to the GNU General Public License, if you
|
||||||
# the same distribution terms that you use for the rest of that program.
|
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.
|
||||||
|
|
||||||
# PKG_PROG_PKG_CONFIG([MIN-VERSION])
|
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],
|
AC_DEFUN([PKG_PROG_PKG_CONFIG],
|
||||||
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
|
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
|
||||||
m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
|
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=""
|
PKG_CONFIG=""
|
||||||
fi
|
fi
|
||||||
fi[]dnl
|
fi[]dnl
|
||||||
])# PKG_PROG_PKG_CONFIG
|
])dnl PKG_PROG_PKG_CONFIG
|
||||||
|
|
||||||
# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||||
#
|
dnl -------------------------------------------------------------------
|
||||||
# Check to see whether a particular set of modules exists. Similar
|
dnl Since: 0.18
|
||||||
# to PKG_CHECK_MODULES(), but does not set variables or print errors.
|
dnl
|
||||||
#
|
dnl Check to see whether a particular set of modules exists. Similar to
|
||||||
# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
|
dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
|
||||||
# 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 Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
|
||||||
# have to call PKG_CHECK_EXISTS manually
|
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_DEFUN([PKG_CHECK_EXISTS],
|
||||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||||
if test -n "$PKG_CONFIG" && \
|
if test -n "$PKG_CONFIG" && \
|
||||||
@ -137,8 +169,10 @@ m4_ifvaln([$3], [else
|
|||||||
$3])dnl
|
$3])dnl
|
||||||
fi])
|
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],
|
m4_define([_PKG_CONFIG],
|
||||||
[if test -n "$$1"; then
|
[if test -n "$$1"; then
|
||||||
pkg_cv_[]$1="$$1"
|
pkg_cv_[]$1="$$1"
|
||||||
@ -150,10 +184,11 @@ m4_define([_PKG_CONFIG],
|
|||||||
else
|
else
|
||||||
pkg_failed=untried
|
pkg_failed=untried
|
||||||
fi[]dnl
|
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_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
|
||||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
|
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
|
||||||
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
|
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
|
||||||
@ -161,19 +196,17 @@ if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
|
|||||||
else
|
else
|
||||||
_pkg_short_errors_supported=no
|
_pkg_short_errors_supported=no
|
||||||
fi[]dnl
|
fi[]dnl
|
||||||
])# _PKG_SHORT_ERRORS_SUPPORTED
|
])dnl _PKG_SHORT_ERRORS_SUPPORTED
|
||||||
|
|
||||||
|
|
||||||
# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
|
dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
|
||||||
# [ACTION-IF-NOT-FOUND])
|
dnl [ACTION-IF-NOT-FOUND])
|
||||||
#
|
dnl --------------------------------------------------------------
|
||||||
#
|
dnl Since: 0.4.0
|
||||||
# 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 Note that if there is a possibility the first call to
|
||||||
# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
|
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_DEFUN([PKG_CHECK_MODULES],
|
||||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||||
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding 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])
|
AC_MSG_RESULT([yes])
|
||||||
$3
|
$3
|
||||||
fi[]dnl
|
fi[]dnl
|
||||||
])# PKG_CHECK_MODULES
|
])dnl PKG_CHECK_MODULES
|
||||||
|
|
||||||
|
|
||||||
# PKG_INSTALLDIR(DIRECTORY)
|
dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
|
||||||
# -------------------------
|
dnl [ACTION-IF-NOT-FOUND])
|
||||||
# Substitutes the variable pkgconfigdir as the location where a module
|
dnl ---------------------------------------------------------------------
|
||||||
# should install pkg-config .pc files. By default the directory is
|
dnl Since: 0.29
|
||||||
# $libdir/pkgconfig, but the default can be changed by passing
|
dnl
|
||||||
# DIRECTORY. The user can override through the --with-pkgconfigdir
|
dnl Checks for existence of MODULES and gathers its build flags with
|
||||||
# parameter.
|
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],
|
AC_DEFUN([PKG_INSTALLDIR],
|
||||||
[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
|
[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
|
||||||
m4_pushdef([pkg_description],
|
m4_pushdef([pkg_description],
|
||||||
@ -247,16 +304,18 @@ AC_ARG_WITH([pkgconfigdir],
|
|||||||
AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
|
AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
|
||||||
m4_popdef([pkg_default])
|
m4_popdef([pkg_default])
|
||||||
m4_popdef([pkg_description])
|
m4_popdef([pkg_description])
|
||||||
]) dnl PKG_INSTALLDIR
|
])dnl PKG_INSTALLDIR
|
||||||
|
|
||||||
|
|
||||||
# PKG_NOARCH_INSTALLDIR(DIRECTORY)
|
dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
|
||||||
# -------------------------
|
dnl --------------------------------
|
||||||
# Substitutes the variable noarch_pkgconfigdir as the location where a
|
dnl Since: 0.27
|
||||||
# module should install arch-independent pkg-config .pc files. By
|
dnl
|
||||||
# default the directory is $datadir/pkgconfig, but the default can be
|
dnl Substitutes the variable noarch_pkgconfigdir as the location where a
|
||||||
# changed by passing DIRECTORY. The user can override through the
|
dnl module should install arch-independent pkg-config .pc files. By
|
||||||
# --with-noarch-pkgconfigdir parameter.
|
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],
|
AC_DEFUN([PKG_NOARCH_INSTALLDIR],
|
||||||
[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
|
[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
|
||||||
m4_pushdef([pkg_description],
|
m4_pushdef([pkg_description],
|
||||||
@ -267,13 +326,15 @@ AC_ARG_WITH([noarch-pkgconfigdir],
|
|||||||
AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
|
AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
|
||||||
m4_popdef([pkg_default])
|
m4_popdef([pkg_default])
|
||||||
m4_popdef([pkg_description])
|
m4_popdef([pkg_description])
|
||||||
]) dnl PKG_NOARCH_INSTALLDIR
|
])dnl PKG_NOARCH_INSTALLDIR
|
||||||
|
|
||||||
|
|
||||||
# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
|
dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
|
||||||
# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||||
# -------------------------------------------
|
dnl -------------------------------------------
|
||||||
# Retrieves the value of the pkg-config variable for the given module.
|
dnl Since: 0.28
|
||||||
|
dnl
|
||||||
|
dnl Retrieves the value of the pkg-config variable for the given module.
|
||||||
AC_DEFUN([PKG_CHECK_VAR],
|
AC_DEFUN([PKG_CHECK_VAR],
|
||||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||||
AC_ARG_VAR([$1], [value of $3 for $2, overriding 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_COPY([$1], [pkg_cv_][$1])
|
||||||
|
|
||||||
AS_VAR_IF([$1], [""], [$5], [$4])dnl
|
AS_VAR_IF([$1], [""], [$5], [$4])dnl
|
||||||
])# PKG_CHECK_VAR
|
])dnl PKG_CHECK_VAR
|
||||||
|
|
||||||
# Copyright (C) 1999-2014 Free Software Foundation, Inc.
|
# 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
|
echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
|
||||||
(exit $ac_status); }])
|
(exit $ac_status); }])
|
||||||
|
|
||||||
|
|
||||||
m4_include([acinclude.m4])
|
m4_include([acinclude.m4])
|
||||||
|
18
configure
vendored
18
configure
vendored
@ -886,6 +886,7 @@ infodir
|
|||||||
docdir
|
docdir
|
||||||
oldincludedir
|
oldincludedir
|
||||||
includedir
|
includedir
|
||||||
|
runstatedir
|
||||||
localstatedir
|
localstatedir
|
||||||
sharedstatedir
|
sharedstatedir
|
||||||
sysconfdir
|
sysconfdir
|
||||||
@ -1101,6 +1102,7 @@ datadir='${datarootdir}'
|
|||||||
sysconfdir='${prefix}/etc'
|
sysconfdir='${prefix}/etc'
|
||||||
sharedstatedir='${prefix}/com'
|
sharedstatedir='${prefix}/com'
|
||||||
localstatedir='${prefix}/var'
|
localstatedir='${prefix}/var'
|
||||||
|
runstatedir='${localstatedir}/run'
|
||||||
includedir='${prefix}/include'
|
includedir='${prefix}/include'
|
||||||
oldincludedir='/usr/include'
|
oldincludedir='/usr/include'
|
||||||
docdir='${datarootdir}/doc/${PACKAGE}'
|
docdir='${datarootdir}/doc/${PACKAGE}'
|
||||||
@ -1353,6 +1355,15 @@ do
|
|||||||
| -silent | --silent | --silen | --sile | --sil)
|
| -silent | --silent | --silen | --sile | --sil)
|
||||||
silent=yes ;;
|
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)
|
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
|
||||||
ac_prev=sbindir ;;
|
ac_prev=sbindir ;;
|
||||||
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
|
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
|
||||||
@ -1490,7 +1501,7 @@ fi
|
|||||||
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
|
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
|
||||||
datadir sysconfdir sharedstatedir localstatedir includedir \
|
datadir sysconfdir sharedstatedir localstatedir includedir \
|
||||||
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
|
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
|
||||||
libdir localedir mandir
|
libdir localedir mandir runstatedir
|
||||||
do
|
do
|
||||||
eval ac_val=\$$ac_var
|
eval ac_val=\$$ac_var
|
||||||
# Remove trailing slashes.
|
# Remove trailing slashes.
|
||||||
@ -1643,6 +1654,7 @@ Fine tuning of the installation directories:
|
|||||||
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
|
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
|
||||||
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
|
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
|
||||||
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
|
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
|
||||||
|
--runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
|
||||||
--libdir=DIR object code libraries [EPREFIX/lib]
|
--libdir=DIR object code libraries [EPREFIX/lib]
|
||||||
--includedir=DIR C header files [PREFIX/include]
|
--includedir=DIR C header files [PREFIX/include]
|
||||||
--oldincludedir=DIR C header files for non-gcc [/usr/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
|
$as_echo_n "(cached) " >&6
|
||||||
else
|
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
|
test "$am_cv_pathless_PYTHON" = none && break
|
||||||
prog="import sys
|
prog="import sys
|
||||||
# split strings by '.' and convert to numeric. Append some zeros
|
# 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
|
$as_echo_n "(cached) " >&6
|
||||||
else
|
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
|
test "$am_cv_pathless_PYTHON" = none && break
|
||||||
prog="import sys
|
prog="import sys
|
||||||
# split strings by '.' and convert to numeric. Append some zeros
|
# split strings by '.' and convert to numeric. Append some zeros
|
||||||
|
@ -347,9 +347,6 @@
|
|||||||
/* Define to 1 if the system has the type `ptrdiff_t'. */
|
/* Define to 1 if the system has the type `ptrdiff_t'. */
|
||||||
#undef HAVE_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. */
|
/* Define to 1 if you have the <readline/history.h> header file. */
|
||||||
#undef HAVE_READLINE_HISTORY_H
|
#undef HAVE_READLINE_HISTORY_H
|
||||||
|
|
||||||
@ -478,9 +475,16 @@
|
|||||||
/* Define to 1 if you have the `strtoull' function. */
|
/* Define to 1 if you have the `strtoull' function. */
|
||||||
#undef HAVE_STRTOULL
|
#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'. */
|
/* Define to 1 if `st_rdev' is a member of `struct stat'. */
|
||||||
#undef HAVE_STRUCT_STAT_ST_RDEV
|
#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. */
|
/* Define to 1 if you have the <syslog.h> header file. */
|
||||||
#undef HAVE_SYSLOG_H
|
#undef HAVE_SYSLOG_H
|
||||||
|
|
||||||
@ -552,6 +556,9 @@
|
|||||||
/* Define to 1 if you have the <sys/utsname.h> header file. */
|
/* Define to 1 if you have the <sys/utsname.h> header file. */
|
||||||
#undef HAVE_SYS_UTSNAME_H
|
#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. */
|
/* Define to 1 if you have the <sys/wait.h> header file. */
|
||||||
#undef HAVE_SYS_WAIT_H
|
#undef HAVE_SYS_WAIT_H
|
||||||
|
|
||||||
@ -591,6 +598,9 @@
|
|||||||
/* Define to 1 if the system has the type `_Bool'. */
|
/* Define to 1 if the system has the type `_Bool'. */
|
||||||
#undef HAVE__BOOL
|
#undef HAVE__BOOL
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the `__builtin_clz' built-in function */
|
||||||
|
#undef HAVE___BUILTIN_CLZ
|
||||||
|
|
||||||
/* Internalization package */
|
/* Internalization package */
|
||||||
#undef INTL_PACKAGE
|
#undef INTL_PACKAGE
|
||||||
|
|
||||||
|
@ -55,6 +55,7 @@ SOURCES =\
|
|||||||
config/config.c \
|
config/config.c \
|
||||||
datastruct/btree.c \
|
datastruct/btree.c \
|
||||||
datastruct/str_list.c \
|
datastruct/str_list.c \
|
||||||
|
device/bcache.c \
|
||||||
device/dev-cache.c \
|
device/dev-cache.c \
|
||||||
device/dev-ext.c \
|
device/dev-ext.c \
|
||||||
device/dev-io.c \
|
device/dev-io.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
|
#define _GNU_SOURCE
|
||||||
|
|
||||||
#include <errno.h>
|
#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.
|
// Assumes the list is not empty.
|
||||||
static inline struct dm_list *_list_pop(struct dm_list *head)
|
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)
|
static struct cb_set *_cb_set_create(unsigned nr)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
struct cb_set *cbs = malloc(sizeof(*cbs));
|
struct cb_set *cbs = dm_malloc(sizeof(*cbs));
|
||||||
|
|
||||||
if (!cbs)
|
if (!cbs)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
cbs->vec = malloc(nr * sizeof(*cbs->vec));
|
cbs->vec = dm_malloc(nr * sizeof(*cbs->vec));
|
||||||
if (!cbs->vec) {
|
if (!cbs->vec) {
|
||||||
free(cbs);
|
dm_free(cbs);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,17 +88,18 @@ static struct cb_set *_cb_set_create(unsigned nr)
|
|||||||
return cbs;
|
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)) {
|
if (!dm_list_empty(&cbs->allocated)) {
|
||||||
// FIXME: I think we should propogate this up.
|
// bail out
|
||||||
log_error("async io still in flight");
|
log_error("async io still in flight");
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(cbs->vec);
|
dm_free(cbs->vec);
|
||||||
free(cbs);
|
dm_free(cbs);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct control_block *_cb_alloc(struct cb_set *cbs, void *context)
|
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)
|
static struct io_engine *_engine_create(unsigned max_io)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
struct io_engine *e = malloc(sizeof(*e));
|
struct io_engine *e = dm_malloc(sizeof(*e));
|
||||||
|
|
||||||
if (!e)
|
if (!e)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -138,7 +158,7 @@ static struct io_engine *_engine_create(unsigned max_io)
|
|||||||
e->cbs = _cb_set_create(max_io);
|
e->cbs = _cb_set_create(max_io);
|
||||||
if (!e->cbs) {
|
if (!e->cbs) {
|
||||||
log_warn("couldn't create control block set");
|
log_warn("couldn't create control block set");
|
||||||
free(e);
|
dm_free(e);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,7 +169,7 @@ static void _engine_destroy(struct io_engine *e)
|
|||||||
{
|
{
|
||||||
_cb_set_destroy(e->cbs);
|
_cb_set_destroy(e->cbs);
|
||||||
io_destroy(e->aio_context);
|
io_destroy(e->aio_context);
|
||||||
free(e);
|
dm_free(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool _engine_issue(struct io_engine *e, int fd, enum dir d,
|
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;
|
struct control_block *cb;
|
||||||
|
|
||||||
if (((uint64_t) data) & (PAGE_SIZE - 1)) {
|
if (((uint64_t) data) & (PAGE_SIZE - 1)) {
|
||||||
log_err("misaligned data buffer");
|
log_warn("misaligned data buffer");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
cb = _cb_alloc(e->cbs, context);
|
cb = _cb_alloc(e->cbs, context);
|
||||||
if (!cb) {
|
if (!cb) {
|
||||||
log_err("couldn't allocate control block");
|
log_warn("couldn't allocate control block");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,7 +201,7 @@ static bool _engine_issue(struct io_engine *e, int fd, enum dir d,
|
|||||||
cb_array[0] = &cb->cb;
|
cb_array[0] = &cb->cb;
|
||||||
r = io_submit(e->aio_context, 1, cb_array);
|
r = io_submit(e->aio_context, 1, cb_array);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_sys_error("io_submit", "");
|
log_sys_warn("io_submit");
|
||||||
_cb_free(e->cbs, cb);
|
_cb_free(e->cbs, cb);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -201,7 +221,7 @@ static bool _engine_wait(struct io_engine *e, complete_fn fn)
|
|||||||
memset(&event, 0, sizeof(event));
|
memset(&event, 0, sizeof(event));
|
||||||
r = io_getevents(e->aio_context, 1, MAX_IO, event, NULL);
|
r = io_getevents(e->aio_context, 1, MAX_IO, event, NULL);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_sys_error("io_getevents", "");
|
log_sys_warn("io_getevents");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,7 +237,7 @@ static bool _engine_wait(struct io_engine *e, complete_fn fn)
|
|||||||
fn(cb->context, (int) ev->res);
|
fn(cb->context, (int) ev->res);
|
||||||
|
|
||||||
else {
|
else {
|
||||||
log_err("short io");
|
log_warn("short io");
|
||||||
fn(cb->context, -ENODATA);
|
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);
|
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);
|
dm_list_del(&b->hash);
|
||||||
}
|
}
|
||||||
@ -363,30 +383,30 @@ static unsigned _calc_nr_buckets(unsigned nr_blocks)
|
|||||||
return r;
|
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;
|
unsigned i;
|
||||||
|
|
||||||
cache->nr_buckets = _calc_nr_buckets(nr_entries);
|
cache->nr_buckets = _calc_nr_buckets(nr_entries);
|
||||||
cache->hash_mask = cache->nr_buckets - 1;
|
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)
|
if (!cache->buckets)
|
||||||
return -ENOMEM;
|
return false;
|
||||||
|
|
||||||
for (i = 0; i < cache->nr_buckets; i++)
|
for (i = 0; i < cache->nr_buckets; i++)
|
||||||
dm_list_init(cache->buckets + i);
|
dm_list_init(cache->buckets + i);
|
||||||
|
|
||||||
return 0;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _hash_table_exit(struct bcache *cache)
|
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;
|
unsigned i;
|
||||||
size_t block_size = cache->block_sectors << SECTOR_SHIFT;
|
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. */
|
/* Allocate the data for each block. We page align the data. */
|
||||||
if (!data)
|
if (!data)
|
||||||
return -ENOMEM;
|
return false;
|
||||||
|
|
||||||
cache->raw_data = data;
|
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)
|
if (!cache->raw_blocks)
|
||||||
free(cache->raw_data);
|
dm_free(cache->raw_data);
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
struct block *b = cache->raw_blocks + 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);
|
dm_list_add(&cache->free, &b->list);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _exit_free_list(struct bcache *cache)
|
static void _exit_free_list(struct bcache *cache)
|
||||||
{
|
{
|
||||||
free(cache->raw_data);
|
dm_free(cache->raw_data);
|
||||||
free(cache->raw_blocks);
|
dm_free(cache->raw_blocks);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct block *_alloc_block(struct bcache *cache)
|
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);
|
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
|
// FIXME: this is insufficient. We need to also catch a read
|
||||||
// lock of a write locked block. Ref count needs to distinguish.
|
// lock of a write locked block. Ref count needs to distinguish.
|
||||||
if (b->ref_count && (flags & (GF_DIRTY | GF_ZERO))) {
|
if (b->ref_count && (flags & (GF_DIRTY | GF_ZERO))) {
|
||||||
log_err("concurrent write lock attempted");
|
log_warn("concurrent write lock attempted");
|
||||||
return NULL;
|
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)
|
struct bcache *bcache_create(sector_t block_sectors, unsigned nr_cache_blocks)
|
||||||
{
|
{
|
||||||
int r;
|
|
||||||
struct bcache *cache;
|
struct bcache *cache;
|
||||||
|
|
||||||
cache = malloc(sizeof(*cache));
|
cache = dm_malloc(sizeof(*cache));
|
||||||
if (!cache)
|
if (!cache)
|
||||||
return NULL;
|
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);
|
cache->engine = _engine_create(nr_cache_blocks < 1024u ? nr_cache_blocks : 1024u);
|
||||||
if (!cache->engine) {
|
if (!cache->engine) {
|
||||||
free(cache);
|
dm_free(cache);
|
||||||
return NULL;
|
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->clean);
|
||||||
dm_list_init(&cache->io_pending);
|
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);
|
_engine_destroy(cache->engine);
|
||||||
free(cache);
|
dm_free(cache);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
cache->read_hits = 0;
|
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->write_misses = 0;
|
||||||
cache->prefetches = 0;
|
cache->prefetches = 0;
|
||||||
|
|
||||||
r = _init_free_list(cache, nr_cache_blocks);
|
if (!_init_free_list(cache, nr_cache_blocks)) {
|
||||||
if (r) {
|
|
||||||
_engine_destroy(cache->engine);
|
_engine_destroy(cache->engine);
|
||||||
_hash_table_exit(cache);
|
_hash_table_exit(cache);
|
||||||
free(cache);
|
dm_free(cache);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return cache;
|
return cache;
|
||||||
@ -757,14 +777,14 @@ struct bcache *bcache_create(sector_t block_sectors, unsigned nr_cache_blocks)
|
|||||||
void bcache_destroy(struct bcache *cache)
|
void bcache_destroy(struct bcache *cache)
|
||||||
{
|
{
|
||||||
if (cache->nr_locked)
|
if (cache->nr_locked)
|
||||||
log_warn("some blocks are still locked\n");
|
log_warn("some blocks are still locked");
|
||||||
|
|
||||||
bcache_flush(cache);
|
bcache_flush(cache);
|
||||||
_wait_all(cache);
|
_wait_all(cache);
|
||||||
_exit_free_list(cache);
|
_exit_free_list(cache);
|
||||||
_hash_table_exit(cache);
|
_hash_table_exit(cache);
|
||||||
_engine_destroy(cache->engine);
|
_engine_destroy(cache->engine);
|
||||||
free(cache);
|
dm_free(cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bcache_prefetch(struct bcache *cache, int fd, block_address index)
|
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;
|
*result = NULL;
|
||||||
log_err("couldn't get block");
|
log_warn("couldn't get block");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bcache_put(struct block *b)
|
void bcache_put(struct block *b)
|
||||||
{
|
{
|
||||||
if (!b->ref_count) {
|
if (!b->ref_count) {
|
||||||
log_err("ref count on bcache block already zero");
|
log_warn("ref count on bcache block already zero");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
#ifndef BCACHE_H
|
||||||
#define BCACHE_H
|
#define BCACHE_H
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user