Compare commits
10 Commits
zfs-0.6.5.
...
zfs-0.6.5-
Author | SHA1 | Date |
---|---|---|
Tony Hutter | 2bc71fa976 | |
Tony Hutter | 5a20d4283c | |
alaviss | bf04e4d442 | |
DHE | 5e6057b574 | |
loli10K | 94d353a0bf | |
Tony Hutter | e9fc1bd5e6 | |
Tony Hutter | b88f4d7ba7 | |
Brian Behlendorf | 3e297b90f5 | |
Justin Lecher | 709f25e248 | |
Olaf Faaland | cd2209b75e |
2
META
2
META
|
@ -1,7 +1,7 @@
|
||||||
Meta: 1
|
Meta: 1
|
||||||
Name: zfs
|
Name: zfs
|
||||||
Branch: 1.0
|
Branch: 1.0
|
||||||
Version: 0.6.5.10
|
Version: 0.6.5.11
|
||||||
Release: 1
|
Release: 1
|
||||||
Release-Tags: relext
|
Release-Tags: relext
|
||||||
License: CDDL
|
License: CDDL
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
include $(top_srcdir)/config/Rules.am
|
include $(top_srcdir)/config/Rules.am
|
||||||
|
|
||||||
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
|
# -Wnoformat-truncation to get rid of compiler warning for unchecked
|
||||||
|
# truncating snprintfs on gcc 7.1.1.
|
||||||
|
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(NO_FORMAT_TRUNCATION)
|
||||||
|
|
||||||
DEFAULT_INCLUDES += \
|
DEFAULT_INCLUDES += \
|
||||||
-I$(top_srcdir)/include \
|
-I$(top_srcdir)/include \
|
||||||
|
|
|
@ -69,7 +69,7 @@ AC_DEFUN([ZFS_AC_KERNEL_BIO_BI_OPF], [
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_HAVE_BIO_SET_OP_ATTRS], [
|
AC_DEFUN([ZFS_AC_KERNEL_HAVE_BIO_SET_OP_ATTRS], [
|
||||||
AC_MSG_CHECKING([whether bio_set_op_attrs is available])
|
AC_MSG_CHECKING([whether bio_set_op_attrs is available])
|
||||||
ZFS_LINUX_TRY_COMPILE([
|
ZFS_LINUX_TRY_COMPILE([
|
||||||
#include <linux/blk_types.h>
|
#include <linux/bio.h>
|
||||||
],[
|
],[
|
||||||
struct bio *bio __attribute__ ((unused)) = NULL;
|
struct bio *bio __attribute__ ((unused)) = NULL;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
dnl #
|
||||||
|
dnl # glibc 2.25
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS], [
|
||||||
|
AC_MSG_CHECKING([makedev() is declared in sys/sysmacros.h])
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[
|
||||||
|
#include <sys/sysmacros.h>
|
||||||
|
],[
|
||||||
|
int k;
|
||||||
|
k = makedev(0,0);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_MAKEDEV_IN_SYSMACROS, 1,
|
||||||
|
[makedev() is declared in sys/sysmacros.h])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # glibc X < Y < 2.25
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV], [
|
||||||
|
AC_MSG_CHECKING([makedev() is declared in sys/mkdev.h])
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[
|
||||||
|
#include <sys/mkdev.h>
|
||||||
|
],[
|
||||||
|
int k;
|
||||||
|
k = makedev(0,0);
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_MAKEDEV_IN_MKDEV, 1,
|
||||||
|
[makedev() is declared in sys/mkdev.h])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
])
|
|
@ -0,0 +1,22 @@
|
||||||
|
dnl #
|
||||||
|
dnl # Check if gcc supports -Wno-format-truncation option.
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_NO_FORMAT_TRUNCATION], [
|
||||||
|
AC_MSG_CHECKING([for -Wno-format-truncation support])
|
||||||
|
|
||||||
|
saved_flags="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS -Wno-format-truncation"
|
||||||
|
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
|
||||||
|
[
|
||||||
|
NO_FORMAT_TRUNCATION=-Wno-format-truncation
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
],
|
||||||
|
[
|
||||||
|
NO_FORMAT_TRUNCATION=
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
])
|
||||||
|
|
||||||
|
CFLAGS="$saved_flags"
|
||||||
|
AC_SUBST([NO_FORMAT_TRUNCATION])
|
||||||
|
])
|
|
@ -13,6 +13,9 @@ AC_DEFUN([ZFS_AC_CONFIG_USER], [
|
||||||
ZFS_AC_CONFIG_USER_LIBBLKID
|
ZFS_AC_CONFIG_USER_LIBBLKID
|
||||||
ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN
|
ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN
|
||||||
ZFS_AC_CONFIG_USER_RUNSTATEDIR
|
ZFS_AC_CONFIG_USER_RUNSTATEDIR
|
||||||
|
ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS
|
||||||
|
ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV
|
||||||
|
ZFS_AC_CONFIG_USER_NO_FORMAT_TRUNCATION
|
||||||
dnl #
|
dnl #
|
||||||
dnl # Checks for library functions
|
dnl # Checks for library functions
|
||||||
AC_CHECK_FUNCS([mlockall])
|
AC_CHECK_FUNCS([mlockall])
|
||||||
|
|
|
@ -46,11 +46,6 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef VERIFY
|
|
||||||
#undef VERIFY
|
|
||||||
#endif
|
|
||||||
#define VERIFY verify
|
|
||||||
|
|
||||||
typedef struct libzfs_fru {
|
typedef struct libzfs_fru {
|
||||||
char *zf_device;
|
char *zf_device;
|
||||||
char *zf_fru;
|
char *zf_fru;
|
||||||
|
|
|
@ -64,7 +64,6 @@ typedef struct zfs_mntopts {
|
||||||
|
|
||||||
typedef struct zfs_sb {
|
typedef struct zfs_sb {
|
||||||
struct super_block *z_sb; /* generic super_block */
|
struct super_block *z_sb; /* generic super_block */
|
||||||
struct backing_dev_info z_bdi; /* generic backing dev info */
|
|
||||||
struct zfs_sb *z_parent; /* parent fs */
|
struct zfs_sb *z_parent; /* parent fs */
|
||||||
objset_t *z_os; /* objset reference */
|
objset_t *z_os; /* objset reference */
|
||||||
zfs_mntopts_t *z_mntopts; /* passed mount options */
|
zfs_mntopts_t *z_mntopts; /* passed mount options */
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <sys/mnttab.h>
|
#include <sys/mnttab.h>
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <sys/sysmacros.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
|
|
@ -31,69 +31,66 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdarg.h>
|
||||||
#ifndef __assert_c99
|
|
||||||
static inline void
|
|
||||||
__assert_c99(const char *expr, const char *file, int line, const char *func)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "%s:%i: %s: Assertion `%s` failed.\n",
|
|
||||||
file, line, func, expr);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
#endif /* __assert_c99 */
|
|
||||||
|
|
||||||
#ifndef verify
|
|
||||||
#if defined(__STDC__)
|
|
||||||
#if __STDC_VERSION__ - 0 >= 199901L
|
|
||||||
#define verify(EX) (void)((EX) || \
|
|
||||||
(__assert_c99(#EX, __FILE__, __LINE__, __func__), 0))
|
|
||||||
#else
|
|
||||||
#define verify(EX) (void)((EX) || (__assert(#EX, __FILE__, __LINE__), 0))
|
|
||||||
#endif /* __STDC_VERSION__ - 0 >= 199901L */
|
|
||||||
#else
|
|
||||||
#define verify(EX) (void)((EX) || (_assert("EX", __FILE__, __LINE__), 0))
|
|
||||||
#endif /* __STDC__ */
|
|
||||||
#endif /* verify */
|
|
||||||
|
|
||||||
#undef VERIFY
|
|
||||||
#undef ASSERT
|
|
||||||
|
|
||||||
#define VERIFY verify
|
|
||||||
#define ASSERT assert
|
|
||||||
|
|
||||||
extern void __assert(const char *, const char *, int);
|
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
assfail(const char *buf, const char *file, int line)
|
libspl_assert(const char *buf, const char *file, const char *func, int line)
|
||||||
{
|
{
|
||||||
__assert(buf, file, line);
|
fprintf(stderr, "%s\n", buf);
|
||||||
return (0);
|
fprintf(stderr, "ASSERT at %s:%d:%s()", file, line, func);
|
||||||
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* BEGIN CSTYLED */
|
/* printf version of libspl_assert */
|
||||||
#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE) do { \
|
static inline void
|
||||||
const TYPE __left = (TYPE)(LEFT); \
|
libspl_assertf(const char *file, const char *func, int line, char *format, ...)
|
||||||
const TYPE __right = (TYPE)(RIGHT); \
|
{
|
||||||
if (!(__left OP __right)) { \
|
va_list args;
|
||||||
char *__buf = alloca(256); \
|
|
||||||
(void) snprintf(__buf, 256, "%s %s %s (0x%llx %s 0x%llx)", \
|
va_start(args, format);
|
||||||
#LEFT, #OP, #RIGHT, \
|
vfprintf(stderr, format, args);
|
||||||
(u_longlong_t)__left, #OP, (u_longlong_t)__right); \
|
fprintf(stderr, "\n");
|
||||||
assfail(__buf, __FILE__, __LINE__); \
|
fprintf(stderr, "ASSERT at %s:%d:%s()", file, line, func);
|
||||||
} \
|
va_end(args);
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef verify
|
||||||
|
#undef verify
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define VERIFY(cond) \
|
||||||
|
(void) ((!(cond)) && \
|
||||||
|
libspl_assert(#cond, __FILE__, __FUNCTION__, __LINE__))
|
||||||
|
#define verify(cond) \
|
||||||
|
(void) ((!(cond)) && \
|
||||||
|
libspl_assert(#cond, __FILE__, __FUNCTION__, __LINE__))
|
||||||
|
|
||||||
|
#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE) \
|
||||||
|
do { \
|
||||||
|
const TYPE __left = (TYPE)(LEFT); \
|
||||||
|
const TYPE __right = (TYPE)(RIGHT); \
|
||||||
|
if (!(__left OP __right)) \
|
||||||
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
|
"%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT); \
|
||||||
} while (0)
|
} while (0)
|
||||||
/* END CSTYLED */
|
|
||||||
|
|
||||||
#define VERIFY3S(x, y, z) VERIFY3_IMPL(x, y, z, int64_t)
|
#define VERIFY3S(x, y, z) VERIFY3_IMPL(x, y, z, int64_t)
|
||||||
#define VERIFY3U(x, y, z) VERIFY3_IMPL(x, y, z, uint64_t)
|
#define VERIFY3U(x, y, z) VERIFY3_IMPL(x, y, z, uint64_t)
|
||||||
#define VERIFY3P(x, y, z) VERIFY3_IMPL(x, y, z, uintptr_t)
|
#define VERIFY3P(x, y, z) VERIFY3_IMPL(x, y, z, uintptr_t)
|
||||||
#define VERIFY0(x) VERIFY3_IMPL(x, ==, 0, uint64_t)
|
#define VERIFY0(x) VERIFY3_IMPL(x, ==, 0, uint64_t)
|
||||||
|
|
||||||
|
#ifdef assert
|
||||||
|
#undef assert
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef NDEBUG
|
#ifdef NDEBUG
|
||||||
#define ASSERT3S(x, y, z) ((void)0)
|
#define ASSERT3S(x, y, z) ((void)0)
|
||||||
#define ASSERT3U(x, y, z) ((void)0)
|
#define ASSERT3U(x, y, z) ((void)0)
|
||||||
#define ASSERT3P(x, y, z) ((void)0)
|
#define ASSERT3P(x, y, z) ((void)0)
|
||||||
#define ASSERT0(x) ((void)0)
|
#define ASSERT0(x) ((void)0)
|
||||||
|
#define ASSERT(x) ((void)0)
|
||||||
|
#define assert(x) ((void)0)
|
||||||
#define ASSERTV(x)
|
#define ASSERTV(x)
|
||||||
#define IMPLY(A, B) ((void)0)
|
#define IMPLY(A, B) ((void)0)
|
||||||
#define EQUIV(A, B) ((void)0)
|
#define EQUIV(A, B) ((void)0)
|
||||||
|
@ -102,13 +99,17 @@ assfail(const char *buf, const char *file, int line)
|
||||||
#define ASSERT3U(x, y, z) VERIFY3U(x, y, z)
|
#define ASSERT3U(x, y, z) VERIFY3U(x, y, z)
|
||||||
#define ASSERT3P(x, y, z) VERIFY3P(x, y, z)
|
#define ASSERT3P(x, y, z) VERIFY3P(x, y, z)
|
||||||
#define ASSERT0(x) VERIFY0(x)
|
#define ASSERT0(x) VERIFY0(x)
|
||||||
|
#define ASSERT(x) VERIFY(x)
|
||||||
|
#define assert(x) VERIFY(x)
|
||||||
#define ASSERTV(x) x
|
#define ASSERTV(x) x
|
||||||
#define IMPLY(A, B) \
|
#define IMPLY(A, B) \
|
||||||
((void)(((!(A)) || (B)) || \
|
((void)(((!(A)) || (B)) || \
|
||||||
assfail("(" #A ") implies (" #B ")", __FILE__, __LINE__)))
|
libspl_assert("(" #A ") implies (" #B ")", \
|
||||||
|
__FILE__, __FUNCTION__, __LINE__)))
|
||||||
#define EQUIV(A, B) \
|
#define EQUIV(A, B) \
|
||||||
((void)((!!(A) == !!(B)) || \
|
((void)((!!(A) == !!(B)) || \
|
||||||
assfail("(" #A ") is equivalent to (" #B ")", __FILE__, __LINE__)))
|
libspl_assert("(" #A ") is equivalent to (" #B ")", \
|
||||||
|
__FILE__, __FUNCTION__, __LINE__)))
|
||||||
|
|
||||||
#endif /* NDEBUG */
|
#endif /* NDEBUG */
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,6 @@
|
||||||
|
|
||||||
#define makedevice(maj, min) makedev(maj, min)
|
#define makedevice(maj, min) makedev(maj, min)
|
||||||
#define _sysconf(a) sysconf(a)
|
#define _sysconf(a) sysconf(a)
|
||||||
#define __NORETURN __attribute__((noreturn))
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compatibility macros/typedefs needed for Solaris -> Linux port
|
* Compatibility macros/typedefs needed for Solaris -> Linux port
|
||||||
|
|
|
@ -27,6 +27,12 @@
|
||||||
#ifndef _LIBSPL_SYS_TYPES_H
|
#ifndef _LIBSPL_SYS_TYPES_H
|
||||||
#define _LIBSPL_SYS_TYPES_H
|
#define _LIBSPL_SYS_TYPES_H
|
||||||
|
|
||||||
|
#if defined(HAVE_MAKEDEV_IN_SYSMACROS)
|
||||||
|
#include <sys/sysmacros.h>
|
||||||
|
#elif defined(HAVE_MAKEDEV_IN_MKDEV)
|
||||||
|
#include <sys/mkdev.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <sys/isa_defs.h>
|
#include <sys/isa_defs.h>
|
||||||
#include <sys/feature_tests.h>
|
#include <sys/feature_tests.h>
|
||||||
#include_next <sys/types.h>
|
#include_next <sys/types.h>
|
||||||
|
|
|
@ -3315,8 +3315,9 @@ zfs_check_snap_cb(zfs_handle_t *zhp, void *arg)
|
||||||
char name[ZFS_MAXNAMELEN];
|
char name[ZFS_MAXNAMELEN];
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
(void) snprintf(name, sizeof (name),
|
if (snprintf(name, sizeof (name), "%s@%s", zhp->zfs_name,
|
||||||
"%s@%s", zhp->zfs_name, dd->snapname);
|
dd->snapname) >= sizeof (name))
|
||||||
|
return (EINVAL);
|
||||||
|
|
||||||
if (lzc_exists(name))
|
if (lzc_exists(name))
|
||||||
verify(nvlist_add_boolean(dd->nvl, name) == 0);
|
verify(nvlist_add_boolean(dd->nvl, name) == 0);
|
||||||
|
@ -3534,8 +3535,9 @@ zfs_snapshot_cb(zfs_handle_t *zhp, void *arg)
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
if (zfs_prop_get_int(zhp, ZFS_PROP_INCONSISTENT) == 0) {
|
if (zfs_prop_get_int(zhp, ZFS_PROP_INCONSISTENT) == 0) {
|
||||||
(void) snprintf(name, sizeof (name),
|
if (snprintf(name, sizeof (name), "%s@%s", zfs_get_name(zhp),
|
||||||
"%s@%s", zfs_get_name(zhp), sd->sd_snapname);
|
sd->sd_snapname) >= sizeof (name))
|
||||||
|
return (EINVAL);
|
||||||
|
|
||||||
fnvlist_add_boolean(sd->sd_nvl, name);
|
fnvlist_add_boolean(sd->sd_nvl, name);
|
||||||
|
|
||||||
|
@ -4257,8 +4259,9 @@ zfs_hold_one(zfs_handle_t *zhp, void *arg)
|
||||||
char name[ZFS_MAXNAMELEN];
|
char name[ZFS_MAXNAMELEN];
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
(void) snprintf(name, sizeof (name),
|
if (snprintf(name, sizeof (name), "%s@%s", zhp->zfs_name,
|
||||||
"%s@%s", zhp->zfs_name, ha->snapname);
|
ha->snapname) >= sizeof (name))
|
||||||
|
return (EINVAL);
|
||||||
|
|
||||||
if (lzc_exists(name))
|
if (lzc_exists(name))
|
||||||
fnvlist_add_string(ha->nvl, name, ha->tag);
|
fnvlist_add_string(ha->nvl, name, ha->tag);
|
||||||
|
@ -4377,8 +4380,11 @@ zfs_release_one(zfs_handle_t *zhp, void *arg)
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
nvlist_t *existing_holds;
|
nvlist_t *existing_holds;
|
||||||
|
|
||||||
(void) snprintf(name, sizeof (name),
|
if (snprintf(name, sizeof (name), "%s@%s", zhp->zfs_name,
|
||||||
"%s@%s", zhp->zfs_name, ha->snapname);
|
ha->snapname) >= sizeof (name)) {
|
||||||
|
ha->error = EINVAL;
|
||||||
|
rv = EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
if (lzc_get_holds(name, &existing_holds) != 0) {
|
if (lzc_get_holds(name, &existing_holds) != 0) {
|
||||||
ha->error = ENOENT;
|
ha->error = ENOENT;
|
||||||
|
|
|
@ -204,8 +204,11 @@ zfs_iter_bookmarks(zfs_handle_t *zhp, zfs_iter_f func, void *data)
|
||||||
bmark_name = nvpair_name(pair);
|
bmark_name = nvpair_name(pair);
|
||||||
bmark_props = fnvpair_value_nvlist(pair);
|
bmark_props = fnvpair_value_nvlist(pair);
|
||||||
|
|
||||||
(void) snprintf(name, sizeof (name), "%s#%s", zhp->zfs_name,
|
if (snprintf(name, sizeof (name), "%s#%s", zhp->zfs_name,
|
||||||
bmark_name);
|
bmark_name) >= sizeof (name)) {
|
||||||
|
err = EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
nzhp = make_bookmark_handle(zhp, name, bmark_props);
|
nzhp = make_bookmark_handle(zhp, name, bmark_props);
|
||||||
if (nzhp == NULL)
|
if (nzhp == NULL)
|
||||||
|
|
|
@ -1487,9 +1487,13 @@ zfs_send(zfs_handle_t *zhp, const char *fromsnap, const char *tosnap,
|
||||||
drr_versioninfo, DMU_COMPOUNDSTREAM);
|
drr_versioninfo, DMU_COMPOUNDSTREAM);
|
||||||
DMU_SET_FEATUREFLAGS(drr.drr_u.drr_begin.
|
DMU_SET_FEATUREFLAGS(drr.drr_u.drr_begin.
|
||||||
drr_versioninfo, featureflags);
|
drr_versioninfo, featureflags);
|
||||||
(void) snprintf(drr.drr_u.drr_begin.drr_toname,
|
if (snprintf(drr.drr_u.drr_begin.drr_toname,
|
||||||
sizeof (drr.drr_u.drr_begin.drr_toname),
|
sizeof (drr.drr_u.drr_begin.drr_toname),
|
||||||
"%s@%s", zhp->zfs_name, tosnap);
|
"%s@%s", zhp->zfs_name, tosnap) >=
|
||||||
|
sizeof (drr.drr_u.drr_begin.drr_toname)) {
|
||||||
|
err = EINVAL;
|
||||||
|
goto stderr_out;
|
||||||
|
}
|
||||||
drr.drr_payloadlen = buflen;
|
drr.drr_payloadlen = buflen;
|
||||||
err = cksum_and_write(&drr, sizeof (drr), &zc, outfd);
|
err = cksum_and_write(&drr, sizeof (drr), &zc, outfd);
|
||||||
|
|
||||||
|
|
|
@ -883,7 +883,12 @@ Default value: \fB10\fR.
|
||||||
Minimum asynchronous write I/Os active to each device.
|
Minimum asynchronous write I/Os active to each device.
|
||||||
See the section "ZFS I/O SCHEDULER".
|
See the section "ZFS I/O SCHEDULER".
|
||||||
.sp
|
.sp
|
||||||
Default value: \fB1\fR.
|
Lower values are associated with better latency on rotational media but poorer
|
||||||
|
resilver performance. The default value of 2 was chosen as a compromise. A
|
||||||
|
value of 3 has been shown to improve resilver performance further at a cost of
|
||||||
|
further increasing latency.
|
||||||
|
.sp
|
||||||
|
Default value: \fB2\fR.
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
.sp
|
.sp
|
||||||
|
|
|
@ -146,7 +146,7 @@ uint32_t zfs_vdev_sync_write_min_active = 10;
|
||||||
uint32_t zfs_vdev_sync_write_max_active = 10;
|
uint32_t zfs_vdev_sync_write_max_active = 10;
|
||||||
uint32_t zfs_vdev_async_read_min_active = 1;
|
uint32_t zfs_vdev_async_read_min_active = 1;
|
||||||
uint32_t zfs_vdev_async_read_max_active = 3;
|
uint32_t zfs_vdev_async_read_max_active = 3;
|
||||||
uint32_t zfs_vdev_async_write_min_active = 1;
|
uint32_t zfs_vdev_async_write_min_active = 2;
|
||||||
uint32_t zfs_vdev_async_write_max_active = 10;
|
uint32_t zfs_vdev_async_write_max_active = 10;
|
||||||
uint32_t zfs_vdev_scrub_min_active = 1;
|
uint32_t zfs_vdev_scrub_min_active = 1;
|
||||||
uint32_t zfs_vdev_scrub_max_active = 2;
|
uint32_t zfs_vdev_scrub_max_active = 2;
|
||||||
|
|
|
@ -1403,8 +1403,6 @@ zfs_domount(struct super_block *sb, zfs_mntopts_t *zmo, int silent)
|
||||||
sb->s_time_gran = 1;
|
sb->s_time_gran = 1;
|
||||||
sb->s_blocksize = recordsize;
|
sb->s_blocksize = recordsize;
|
||||||
sb->s_blocksize_bits = ilog2(recordsize);
|
sb->s_blocksize_bits = ilog2(recordsize);
|
||||||
zsb->z_bdi.ra_pages = 0;
|
|
||||||
sb->s_bdi = &zsb->z_bdi;
|
|
||||||
|
|
||||||
error = -zpl_bdi_setup(sb, "zfs");
|
error = -zpl_bdi_setup(sb, "zfs");
|
||||||
if (error)
|
if (error)
|
||||||
|
|
|
@ -3472,7 +3472,7 @@ zbookmark_is_before(const dnode_phys_t *dnp, const zbookmark_phys_t *zb1,
|
||||||
|
|
||||||
if (zb1->zb_object == DMU_META_DNODE_OBJECT) {
|
if (zb1->zb_object == DMU_META_DNODE_OBJECT) {
|
||||||
uint64_t nextobj = zb1nextL0 *
|
uint64_t nextobj = zb1nextL0 *
|
||||||
(dnp->dn_datablkszsec << SPA_MINBLOCKSHIFT) >> DNODE_SHIFT;
|
(dnp->dn_datablkszsec << (SPA_MINBLOCKSHIFT - DNODE_SHIFT));
|
||||||
return (nextobj <= zb2thisobj);
|
return (nextobj <= zb2thisobj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1615,14 +1615,12 @@ zvol_rename_minors_impl(const char *oldname, const char *newname)
|
||||||
{
|
{
|
||||||
zvol_state_t *zv, *zv_next;
|
zvol_state_t *zv, *zv_next;
|
||||||
int oldnamelen, newnamelen;
|
int oldnamelen, newnamelen;
|
||||||
char *name;
|
|
||||||
|
|
||||||
if (zvol_inhibit_dev)
|
if (zvol_inhibit_dev)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
oldnamelen = strlen(oldname);
|
oldnamelen = strlen(oldname);
|
||||||
newnamelen = strlen(newname);
|
newnamelen = strlen(newname);
|
||||||
name = kmem_alloc(MAXNAMELEN, KM_SLEEP);
|
|
||||||
|
|
||||||
mutex_enter(&zvol_state_lock);
|
mutex_enter(&zvol_state_lock);
|
||||||
|
|
||||||
|
@ -1638,16 +1636,15 @@ zvol_rename_minors_impl(const char *oldname, const char *newname)
|
||||||
} else if (strncmp(zv->zv_name, oldname, oldnamelen) == 0 &&
|
} else if (strncmp(zv->zv_name, oldname, oldnamelen) == 0 &&
|
||||||
(zv->zv_name[oldnamelen] == '/' ||
|
(zv->zv_name[oldnamelen] == '/' ||
|
||||||
zv->zv_name[oldnamelen] == '@')) {
|
zv->zv_name[oldnamelen] == '@')) {
|
||||||
snprintf(name, MAXNAMELEN, "%s%c%s", newname,
|
char *name = kmem_asprintf("%s%c%s", newname,
|
||||||
zv->zv_name[oldnamelen],
|
zv->zv_name[oldnamelen],
|
||||||
zv->zv_name + oldnamelen + 1);
|
zv->zv_name + oldnamelen + 1);
|
||||||
zvol_rename_minor(zv, name);
|
zvol_rename_minor(zv, name);
|
||||||
|
kmem_free(name, strlen(name + 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_exit(&zvol_state_lock);
|
mutex_exit(&zvol_state_lock);
|
||||||
|
|
||||||
kmem_free(name, MAXNAMELEN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct zvol_snapdev_cb_arg {
|
typedef struct zvol_snapdev_cb_arg {
|
||||||
|
|
|
@ -186,6 +186,16 @@ chmod u+x ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/*/*/*
|
||||||
rm -rf $RPM_BUILD_ROOT
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jul 10 2017 Tony Hutter <hutter2@llnl.gov> - 0.6.5.11-1
|
||||||
|
- Linux 4.12 compat: super_setup_bdi_name() - add missing code zfsonlinux/zfs#6089 zfsonlinux/zfs#6324
|
||||||
|
- Musl libc fixes zfsonlinux/zfs#6310
|
||||||
|
- Increase zfs_vdev_async_write_min_active to 2 zfsonlinux/zfs#5926
|
||||||
|
- Fix int overflow in zbookmark_is_before()- Fix RHEL 7.4 bio_set_op_attrs build error zfsonlinux/zfs#6234 zfsonlinux/zfs#6271
|
||||||
|
- Fix RHEL 7.4 bio_set_op_attrs build error zfsonlinux/zfs#6253 zfsonlinux/zfs#6271
|
||||||
|
- GCC 7.1 fixes zfsonlinux/zfs#6253
|
||||||
|
- Remove complicated libspl assert wrappers zfsonlinux/zfs#4449
|
||||||
|
- Compatibilty with glibc-2.23 zfsonlinux/zfs#6132
|
||||||
|
- glibc 2.5 compat: use correct header for makedev() et al. zfsonlinux/zfs#5945
|
||||||
* Mon Jun 12 2017 Tony Hutter <hutter2@llnl.gov> - 0.6.5.10-1
|
* Mon Jun 12 2017 Tony Hutter <hutter2@llnl.gov> - 0.6.5.10-1
|
||||||
- OpenZFS 8005 - poor performance of 1MB writes on certain RAID-Z configurations zfsonlinux/zfs#5931
|
- OpenZFS 8005 - poor performance of 1MB writes on certain RAID-Z configurations zfsonlinux/zfs#5931
|
||||||
- Add MS_MANDLOCK mount failure message zfsonlinux/zfs#4729 zfsonlinux/zfs#6199
|
- Add MS_MANDLOCK mount failure message zfsonlinux/zfs#4729 zfsonlinux/zfs#6199
|
||||||
|
|
|
@ -328,6 +328,16 @@ exit 0
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jul 10 2017 Tony Hutter <hutter2@llnl.gov> - 0.6.5.11-1
|
||||||
|
- Linux 4.12 compat: super_setup_bdi_name() - add missing code zfsonlinux/zfs#6089 zfsonlinux/zfs#6324
|
||||||
|
- Musl libc fixes zfsonlinux/zfs#6310
|
||||||
|
- Increase zfs_vdev_async_write_min_active to 2 zfsonlinux/zfs#5926
|
||||||
|
- Fix int overflow in zbookmark_is_before()- Fix RHEL 7.4 bio_set_op_attrs build error zfsonlinux/zfs#6234 zfsonlinux/zfs#6271
|
||||||
|
- Fix RHEL 7.4 bio_set_op_attrs build error zfsonlinux/zfs#6253 zfsonlinux/zfs#6271
|
||||||
|
- GCC 7.1 fixes zfsonlinux/zfs#6253
|
||||||
|
- Remove complicated libspl assert wrappers zfsonlinux/zfs#4449
|
||||||
|
- Compatibilty with glibc-2.23 zfsonlinux/zfs#6132
|
||||||
|
- glibc 2.5 compat: use correct header for makedev() et al. zfsonlinux/zfs#5945
|
||||||
* Mon Jun 12 2017 Tony Hutter <hutter2@llnl.gov> - 0.6.5.10-1
|
* Mon Jun 12 2017 Tony Hutter <hutter2@llnl.gov> - 0.6.5.10-1
|
||||||
- OpenZFS 8005 - poor performance of 1MB writes on certain RAID-Z configurations zfsonlinux/zfs#5931
|
- OpenZFS 8005 - poor performance of 1MB writes on certain RAID-Z configurations zfsonlinux/zfs#5931
|
||||||
- Add MS_MANDLOCK mount failure message zfsonlinux/zfs#4729 zfsonlinux/zfs#6199
|
- Add MS_MANDLOCK mount failure message zfsonlinux/zfs#4729 zfsonlinux/zfs#6199
|
||||||
|
|
Loading…
Reference in New Issue