update/rebase to zfs-0.7.12 with patches from ZOL
Reorder patches, so that the upstream changeset comes last Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
This commit is contained in:
parent
2e5067b011
commit
04a710dd91
@ -1,4 +1,4 @@
|
|||||||
From 5ac80068e911d3b0935903f713c5f492d518da91 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Stoiko Ivanov <s.ivanov@proxmox.com>
|
From: Stoiko Ivanov <s.ivanov@proxmox.com>
|
||||||
Date: Mon, 29 Oct 2018 15:49:20 +0100
|
Date: Mon, 29 Oct 2018 15:49:20 +0100
|
||||||
Subject: [PATCH] Add Breaks/Replaces to zfs-initramfs
|
Subject: [PATCH] Add Breaks/Replaces to zfs-initramfs
|
||||||
@ -13,10 +13,10 @@ Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
|
|||||||
2 files changed, 4 insertions(+)
|
2 files changed, 4 insertions(+)
|
||||||
|
|
||||||
diff --git a/debian/control b/debian/control
|
diff --git a/debian/control b/debian/control
|
||||||
index 4d22ff50..a414e449 100644
|
index f33008df..d3d1034e 100644
|
||||||
--- a/debian/control
|
--- a/debian/control
|
||||||
+++ b/debian/control
|
+++ b/debian/control
|
||||||
@@ -117,6 +117,8 @@ Depends: busybox-initramfs | busybox-static | busybox,
|
@@ -116,6 +116,8 @@ Depends: busybox-initramfs | busybox-static | busybox,
|
||||||
zfs-modules | zfs-dkms,
|
zfs-modules | zfs-dkms,
|
||||||
zfsutils-linux (>= ${binary:Version}),
|
zfsutils-linux (>= ${binary:Version}),
|
||||||
${misc:Depends}
|
${misc:Depends}
|
||||||
@ -26,11 +26,11 @@ index 4d22ff50..a414e449 100644
|
|||||||
The Z file system is a pooled filesystem designed for maximum data
|
The Z file system is a pooled filesystem designed for maximum data
|
||||||
integrity, supporting data snapshots, multiple copies, and data
|
integrity, supporting data snapshots, multiple copies, and data
|
||||||
diff --git a/debian/control.in b/debian/control.in
|
diff --git a/debian/control.in b/debian/control.in
|
||||||
index 96154c5c..b9c34331 100644
|
index 0a9ceef6..09ef18cc 100644
|
||||||
--- a/debian/control.in
|
--- a/debian/control.in
|
||||||
+++ b/debian/control.in
|
+++ b/debian/control.in
|
||||||
@@ -117,6 +117,8 @@ Depends: busybox-initramfs | busybox-static | busybox,
|
@@ -100,6 +100,8 @@ Depends: busybox-initramfs | busybox-static | busybox,
|
||||||
zfs-modules | zfs-dkms,
|
initramfs-tools,
|
||||||
zfsutils-linux (>= ${binary:Version}),
|
zfsutils-linux (>= ${binary:Version}),
|
||||||
${misc:Depends}
|
${misc:Depends}
|
||||||
+Breaks: zfsutils-linux (<= 0.7.11-pve1~bpo1)
|
+Breaks: zfsutils-linux (<= 0.7.11-pve1~bpo1)
|
||||||
@ -38,6 +38,3 @@ index 96154c5c..b9c34331 100644
|
|||||||
Description: OpenZFS root filesystem capabilities for Linux - initramfs
|
Description: OpenZFS root filesystem capabilities for Linux - initramfs
|
||||||
The Z file system is a pooled filesystem designed for maximum data
|
The Z file system is a pooled filesystem designed for maximum data
|
||||||
integrity, supporting data snapshots, multiple copies, and data
|
integrity, supporting data snapshots, multiple copies, and data
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From c37a6401469cae16519db06d623d49c6f606f312 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
From: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||||
Date: Wed, 31 Oct 2018 15:37:39 +0100
|
Date: Wed, 31 Oct 2018 15:37:39 +0100
|
||||||
Subject: [PATCH] Revert "Install init scripts to support non-systemd setups.
|
Subject: [PATCH] Revert "Install init scripts to support non-systemd setups.
|
||||||
@ -11,11 +11,11 @@ systems)
|
|||||||
|
|
||||||
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
||||||
---
|
---
|
||||||
debian/rules | 8 --------
|
debian/rules | 8 --------
|
||||||
debian/zfs-zed.zfs-zed.init | 1 -
|
debian/zfs-zed.zfs-zed.init | 1 -
|
||||||
debian/zfsutils-linux.zfs-import.init | 1 -
|
debian/zfsutils-linux.zfs-import.init | 1 -
|
||||||
debian/zfsutils-linux.zfs-mount.init | 1 -
|
debian/zfsutils-linux.zfs-mount.init | 1 -
|
||||||
debian/zfsutils-linux.zfs-share.init | 1 -
|
debian/zfsutils-linux.zfs-share.init | 1 -
|
||||||
5 files changed, 12 deletions(-)
|
5 files changed, 12 deletions(-)
|
||||||
delete mode 120000 debian/zfs-zed.zfs-zed.init
|
delete mode 120000 debian/zfs-zed.zfs-zed.init
|
||||||
delete mode 120000 debian/zfsutils-linux.zfs-import.init
|
delete mode 120000 debian/zfsutils-linux.zfs-import.init
|
||||||
@ -23,10 +23,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|||||||
delete mode 120000 debian/zfsutils-linux.zfs-share.init
|
delete mode 120000 debian/zfsutils-linux.zfs-share.init
|
||||||
|
|
||||||
diff --git a/debian/rules b/debian/rules
|
diff --git a/debian/rules b/debian/rules
|
||||||
index 5fba58ff..81c301e4 100644
|
index 3ba4b99a..d6cf5a56 100755
|
||||||
--- a/debian/rules
|
--- a/debian/rules
|
||||||
+++ b/debian/rules
|
+++ b/debian/rules
|
||||||
@@ -161,14 +153,6 @@ override_dh_install:
|
@@ -117,14 +117,6 @@ override_dh_install:
|
||||||
find . -name lib*.la -delete
|
find . -name lib*.la -delete
|
||||||
dh_install --fail-missing
|
dh_install --fail-missing
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ index 5fba58ff..81c301e4 100644
|
|||||||
-
|
-
|
||||||
# ------------
|
# ------------
|
||||||
|
|
||||||
override_dh_prep-deb-files:
|
debian-copyright:
|
||||||
diff --git a/debian/zfs-zed.zfs-zed.init b/debian/zfs-zed.zfs-zed.init
|
diff --git a/debian/zfs-zed.zfs-zed.init b/debian/zfs-zed.zfs-zed.init
|
||||||
deleted file mode 120000
|
deleted file mode 120000
|
||||||
index 3f41f681..00000000
|
index 3f41f681..00000000
|
||||||
@ -73,6 +73,3 @@ index 3f069f9b..00000000
|
|||||||
@@ -1 +0,0 @@
|
@@ -1 +0,0 @@
|
||||||
-../etc/init.d/zfs-share
|
-../etc/init.d/zfs-share
|
||||||
\ No newline at end of file
|
\ No newline at end of file
|
||||||
--
|
|
||||||
2.19.1
|
|
||||||
|
|
@ -17,13 +17,8 @@ treated as a list_node_t when it is technically a multilist_node_t.
|
|||||||
|
|
||||||
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
Signed-off-by: Tom Caputi <tcaputi@datto.com>
|
Signed-off-by: Tom Caputi <tcaputi@datto.com>
|
||||||
Requires-spl: spl-0.7-release
|
Closes #7147
|
||||||
Issue #7147
|
Closes #7388
|
||||||
Issue #7388
|
|
||||||
Issue #7997
|
|
||||||
|
|
||||||
(cherry-picked from behlendorf/issue-7997 4764f6f3be90be073d2700653dff286371e52583)
|
|
||||||
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
|
|
||||||
---
|
---
|
||||||
include/sys/dmu_impl.h | 1 +
|
include/sys/dmu_impl.h | 1 +
|
||||||
include/sys/dnode.h | 4 ++++
|
include/sys/dnode.h | 4 ++++
|
@ -20,15 +20,11 @@ Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
|||||||
Reviewed by: George Wilson <george.wilson@delphix.com>
|
Reviewed by: George Wilson <george.wilson@delphix.com>
|
||||||
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
|
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
|
||||||
External-issue: DLPX-59292
|
External-issue: DLPX-59292
|
||||||
Requires-spl: spl-0.7-release
|
|
||||||
Closes #7736
|
Closes #7736
|
||||||
|
|
||||||
(cherry-picked from behlendorf/issue-7736 496657ab3bcfeb638b1786e1759980ccfcacb08e)
|
|
||||||
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
|
|
||||||
---
|
---
|
||||||
include/sys/zio.h | 4 +-
|
include/sys/zio.h | 4 +-
|
||||||
module/zfs/zio.c | 250 +++++++++++++++++++++++++++++-------------------------
|
module/zfs/zio.c | 252 +++++++++++++++++++++++++++++-------------------------
|
||||||
2 files changed, 137 insertions(+), 117 deletions(-)
|
2 files changed, 139 insertions(+), 117 deletions(-)
|
||||||
|
|
||||||
diff --git a/include/sys/zio.h b/include/sys/zio.h
|
diff --git a/include/sys/zio.h b/include/sys/zio.h
|
||||||
index 4b0eecc2..3618912c 100644
|
index 4b0eecc2..3618912c 100644
|
||||||
@ -53,7 +49,7 @@ index 4b0eecc2..3618912c 100644
|
|||||||
/*
|
/*
|
||||||
* The io_reexecute flags are distinct from io_flags because the child must
|
* The io_reexecute flags are distinct from io_flags because the child must
|
||||||
diff --git a/module/zfs/zio.c b/module/zfs/zio.c
|
diff --git a/module/zfs/zio.c b/module/zfs/zio.c
|
||||||
index 9a465e1b..b08b4747 100644
|
index 9a465e1b..dd0dfcdb 100644
|
||||||
--- a/module/zfs/zio.c
|
--- a/module/zfs/zio.c
|
||||||
+++ b/module/zfs/zio.c
|
+++ b/module/zfs/zio.c
|
||||||
@@ -75,9 +75,6 @@ uint64_t zio_buf_cache_frees[SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT];
|
@@ -75,9 +75,6 @@ uint64_t zio_buf_cache_frees[SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT];
|
||||||
@ -226,16 +222,18 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_free_bp_init(zio_t *zio)
|
zio_free_bp_init(zio_t *zio)
|
||||||
{
|
{
|
||||||
blkptr_t *bp = zio->io_bp;
|
blkptr_t *bp = zio->io_bp;
|
||||||
@@ -1472,7 +1490,7 @@ zio_free_bp_init(zio_t *zio)
|
@@ -1472,7 +1490,9 @@ zio_free_bp_init(zio_t *zio)
|
||||||
zio->io_pipeline = ZIO_DDT_FREE_PIPELINE;
|
zio->io_pipeline = ZIO_DDT_FREE_PIPELINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
- return (ZIO_PIPELINE_CONTINUE);
|
- return (ZIO_PIPELINE_CONTINUE);
|
||||||
|
+ ASSERT3P(zio->io_bp, ==, &zio->io_bp_copy);
|
||||||
|
+
|
||||||
+ return (zio);
|
+ return (zio);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1541,12 +1559,12 @@ zio_taskq_member(zio_t *zio, zio_taskq_type_t q)
|
@@ -1541,12 +1561,12 @@ zio_taskq_member(zio_t *zio, zio_taskq_type_t q)
|
||||||
return (B_FALSE);
|
return (B_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,7 +248,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1687,14 +1705,13 @@ __attribute__((always_inline))
|
@@ -1687,14 +1707,13 @@ __attribute__((always_inline))
|
||||||
static inline void
|
static inline void
|
||||||
__zio_execute(zio_t *zio)
|
__zio_execute(zio_t *zio)
|
||||||
{
|
{
|
||||||
@ -267,7 +265,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
|
|
||||||
ASSERT(!MUTEX_HELD(&zio->io_lock));
|
ASSERT(!MUTEX_HELD(&zio->io_lock));
|
||||||
ASSERT(ISP2(stage));
|
ASSERT(ISP2(stage));
|
||||||
@@ -1736,12 +1753,16 @@ __zio_execute(zio_t *zio)
|
@@ -1736,12 +1755,16 @@ __zio_execute(zio_t *zio)
|
||||||
|
|
||||||
zio->io_stage = stage;
|
zio->io_stage = stage;
|
||||||
zio->io_pipeline_trace |= zio->io_stage;
|
zio->io_pipeline_trace |= zio->io_stage;
|
||||||
@ -288,7 +286,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2215,7 +2236,7 @@ zio_gang_tree_issue(zio_t *pio, zio_gang_node_t *gn, blkptr_t *bp, abd_t *data,
|
@@ -2215,7 +2238,7 @@ zio_gang_tree_issue(zio_t *pio, zio_gang_node_t *gn, blkptr_t *bp, abd_t *data,
|
||||||
zio_nowait(zio);
|
zio_nowait(zio);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,7 +295,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_gang_assemble(zio_t *zio)
|
zio_gang_assemble(zio_t *zio)
|
||||||
{
|
{
|
||||||
blkptr_t *bp = zio->io_bp;
|
blkptr_t *bp = zio->io_bp;
|
||||||
@@ -2227,16 +2248,16 @@ zio_gang_assemble(zio_t *zio)
|
@@ -2227,16 +2250,16 @@ zio_gang_assemble(zio_t *zio)
|
||||||
|
|
||||||
zio_gang_tree_assemble(zio, bp, &zio->io_gang_tree);
|
zio_gang_tree_assemble(zio, bp, &zio->io_gang_tree);
|
||||||
|
|
||||||
@ -317,7 +315,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(BP_IS_GANG(bp) && zio->io_gang_leader == zio);
|
ASSERT(BP_IS_GANG(bp) && zio->io_gang_leader == zio);
|
||||||
@@ -2250,7 +2271,7 @@ zio_gang_issue(zio_t *zio)
|
@@ -2250,7 +2273,7 @@ zio_gang_issue(zio_t *zio)
|
||||||
|
|
||||||
zio->io_pipeline = ZIO_INTERLOCK_PIPELINE;
|
zio->io_pipeline = ZIO_INTERLOCK_PIPELINE;
|
||||||
|
|
||||||
@ -326,7 +324,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -2290,7 +2311,7 @@ zio_write_gang_done(zio_t *zio)
|
@@ -2290,7 +2313,7 @@ zio_write_gang_done(zio_t *zio)
|
||||||
abd_put(zio->io_abd);
|
abd_put(zio->io_abd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,7 +333,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_write_gang_block(zio_t *pio)
|
zio_write_gang_block(zio_t *pio)
|
||||||
{
|
{
|
||||||
spa_t *spa = pio->io_spa;
|
spa_t *spa = pio->io_spa;
|
||||||
@@ -2349,7 +2370,7 @@ zio_write_gang_block(zio_t *pio)
|
@@ -2349,7 +2372,7 @@ zio_write_gang_block(zio_t *pio)
|
||||||
}
|
}
|
||||||
|
|
||||||
pio->io_error = error;
|
pio->io_error = error;
|
||||||
@ -344,7 +342,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pio == gio) {
|
if (pio == gio) {
|
||||||
@@ -2423,7 +2444,7 @@ zio_write_gang_block(zio_t *pio)
|
@@ -2423,7 +2446,7 @@ zio_write_gang_block(zio_t *pio)
|
||||||
|
|
||||||
zio_nowait(zio);
|
zio_nowait(zio);
|
||||||
|
|
||||||
@ -353,7 +351,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2444,7 +2465,7 @@ zio_write_gang_block(zio_t *pio)
|
@@ -2444,7 +2467,7 @@ zio_write_gang_block(zio_t *pio)
|
||||||
* used for nopwrite, assuming that the salt and the checksums
|
* used for nopwrite, assuming that the salt and the checksums
|
||||||
* themselves remain secret.
|
* themselves remain secret.
|
||||||
*/
|
*/
|
||||||
@ -362,7 +360,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_nop_write(zio_t *zio)
|
zio_nop_write(zio_t *zio)
|
||||||
{
|
{
|
||||||
blkptr_t *bp = zio->io_bp;
|
blkptr_t *bp = zio->io_bp;
|
||||||
@@ -2471,7 +2492,7 @@ zio_nop_write(zio_t *zio)
|
@@ -2471,7 +2494,7 @@ zio_nop_write(zio_t *zio)
|
||||||
BP_GET_COMPRESS(bp) != BP_GET_COMPRESS(bp_orig) ||
|
BP_GET_COMPRESS(bp) != BP_GET_COMPRESS(bp_orig) ||
|
||||||
BP_GET_DEDUP(bp) != BP_GET_DEDUP(bp_orig) ||
|
BP_GET_DEDUP(bp) != BP_GET_DEDUP(bp_orig) ||
|
||||||
zp->zp_copies != BP_GET_NDVAS(bp_orig))
|
zp->zp_copies != BP_GET_NDVAS(bp_orig))
|
||||||
@ -371,7 +369,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* If the checksums match then reset the pipeline so that we
|
* If the checksums match then reset the pipeline so that we
|
||||||
@@ -2491,7 +2512,7 @@ zio_nop_write(zio_t *zio)
|
@@ -2491,7 +2514,7 @@ zio_nop_write(zio_t *zio)
|
||||||
zio->io_flags |= ZIO_FLAG_NOPWRITE;
|
zio->io_flags |= ZIO_FLAG_NOPWRITE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -380,7 +378,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2519,7 +2540,7 @@ zio_ddt_child_read_done(zio_t *zio)
|
@@ -2519,7 +2542,7 @@ zio_ddt_child_read_done(zio_t *zio)
|
||||||
mutex_exit(&pio->io_lock);
|
mutex_exit(&pio->io_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,7 +387,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_ddt_read_start(zio_t *zio)
|
zio_ddt_read_start(zio_t *zio)
|
||||||
{
|
{
|
||||||
blkptr_t *bp = zio->io_bp;
|
blkptr_t *bp = zio->io_bp;
|
||||||
@@ -2540,7 +2561,7 @@ zio_ddt_read_start(zio_t *zio)
|
@@ -2540,7 +2563,7 @@ zio_ddt_read_start(zio_t *zio)
|
||||||
zio->io_vsd = dde;
|
zio->io_vsd = dde;
|
||||||
|
|
||||||
if (ddp_self == NULL)
|
if (ddp_self == NULL)
|
||||||
@ -398,7 +396,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
|
|
||||||
for (p = 0; p < DDT_PHYS_TYPES; p++, ddp++) {
|
for (p = 0; p < DDT_PHYS_TYPES; p++, ddp++) {
|
||||||
if (ddp->ddp_phys_birth == 0 || ddp == ddp_self)
|
if (ddp->ddp_phys_birth == 0 || ddp == ddp_self)
|
||||||
@@ -2553,23 +2574,23 @@ zio_ddt_read_start(zio_t *zio)
|
@@ -2553,23 +2576,23 @@ zio_ddt_read_start(zio_t *zio)
|
||||||
zio->io_priority, ZIO_DDT_CHILD_FLAGS(zio) |
|
zio->io_priority, ZIO_DDT_CHILD_FLAGS(zio) |
|
||||||
ZIO_FLAG_DONT_PROPAGATE, &zio->io_bookmark));
|
ZIO_FLAG_DONT_PROPAGATE, &zio->io_bookmark));
|
||||||
}
|
}
|
||||||
@ -426,7 +424,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(BP_GET_DEDUP(bp));
|
ASSERT(BP_GET_DEDUP(bp));
|
||||||
@@ -2581,12 +2602,12 @@ zio_ddt_read_done(zio_t *zio)
|
@@ -2581,12 +2604,12 @@ zio_ddt_read_done(zio_t *zio)
|
||||||
ddt_entry_t *dde = zio->io_vsd;
|
ddt_entry_t *dde = zio->io_vsd;
|
||||||
if (ddt == NULL) {
|
if (ddt == NULL) {
|
||||||
ASSERT(spa_load_state(zio->io_spa) != SPA_LOAD_NONE);
|
ASSERT(spa_load_state(zio->io_spa) != SPA_LOAD_NONE);
|
||||||
@ -441,7 +439,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
if (dde->dde_repair_abd != NULL) {
|
if (dde->dde_repair_abd != NULL) {
|
||||||
abd_copy(zio->io_abd, dde->dde_repair_abd,
|
abd_copy(zio->io_abd, dde->dde_repair_abd,
|
||||||
@@ -2599,7 +2620,7 @@ zio_ddt_read_done(zio_t *zio)
|
@@ -2599,7 +2622,7 @@ zio_ddt_read_done(zio_t *zio)
|
||||||
|
|
||||||
ASSERT(zio->io_vsd == NULL);
|
ASSERT(zio->io_vsd == NULL);
|
||||||
|
|
||||||
@ -450,7 +448,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static boolean_t
|
static boolean_t
|
||||||
@@ -2780,7 +2801,7 @@ zio_ddt_ditto_write_done(zio_t *zio)
|
@@ -2780,7 +2803,7 @@ zio_ddt_ditto_write_done(zio_t *zio)
|
||||||
ddt_exit(ddt);
|
ddt_exit(ddt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -459,7 +457,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_ddt_write(zio_t *zio)
|
zio_ddt_write(zio_t *zio)
|
||||||
{
|
{
|
||||||
spa_t *spa = zio->io_spa;
|
spa_t *spa = zio->io_spa;
|
||||||
@@ -2822,7 +2843,7 @@ zio_ddt_write(zio_t *zio)
|
@@ -2822,7 +2845,7 @@ zio_ddt_write(zio_t *zio)
|
||||||
}
|
}
|
||||||
zio->io_pipeline = ZIO_WRITE_PIPELINE;
|
zio->io_pipeline = ZIO_WRITE_PIPELINE;
|
||||||
ddt_exit(ddt);
|
ddt_exit(ddt);
|
||||||
@ -468,7 +466,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
ditto_copies = ddt_ditto_copies_needed(ddt, dde, ddp);
|
ditto_copies = ddt_ditto_copies_needed(ddt, dde, ddp);
|
||||||
@@ -2848,7 +2869,7 @@ zio_ddt_write(zio_t *zio)
|
@@ -2848,7 +2871,7 @@ zio_ddt_write(zio_t *zio)
|
||||||
zio->io_bp_override = NULL;
|
zio->io_bp_override = NULL;
|
||||||
BP_ZERO(bp);
|
BP_ZERO(bp);
|
||||||
ddt_exit(ddt);
|
ddt_exit(ddt);
|
||||||
@ -477,7 +475,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
dio = zio_write(zio, spa, txg, bp, zio->io_orig_abd,
|
dio = zio_write(zio, spa, txg, bp, zio->io_orig_abd,
|
||||||
@@ -2890,12 +2911,12 @@ zio_ddt_write(zio_t *zio)
|
@@ -2890,12 +2913,12 @@ zio_ddt_write(zio_t *zio)
|
||||||
if (dio)
|
if (dio)
|
||||||
zio_nowait(dio);
|
zio_nowait(dio);
|
||||||
|
|
||||||
@ -492,7 +490,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_ddt_free(zio_t *zio)
|
zio_ddt_free(zio_t *zio)
|
||||||
{
|
{
|
||||||
spa_t *spa = zio->io_spa;
|
spa_t *spa = zio->io_spa;
|
||||||
@@ -2916,7 +2937,7 @@ zio_ddt_free(zio_t *zio)
|
@@ -2916,7 +2939,7 @@ zio_ddt_free(zio_t *zio)
|
||||||
}
|
}
|
||||||
ddt_exit(ddt);
|
ddt_exit(ddt);
|
||||||
|
|
||||||
@ -501,7 +499,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2953,7 +2974,7 @@ zio_io_to_allocate(spa_t *spa)
|
@@ -2953,7 +2976,7 @@ zio_io_to_allocate(spa_t *spa)
|
||||||
return (zio);
|
return (zio);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -510,7 +508,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_dva_throttle(zio_t *zio)
|
zio_dva_throttle(zio_t *zio)
|
||||||
{
|
{
|
||||||
spa_t *spa = zio->io_spa;
|
spa_t *spa = zio->io_spa;
|
||||||
@@ -2963,7 +2984,7 @@ zio_dva_throttle(zio_t *zio)
|
@@ -2963,7 +2986,7 @@ zio_dva_throttle(zio_t *zio)
|
||||||
!spa_normal_class(zio->io_spa)->mc_alloc_throttle_enabled ||
|
!spa_normal_class(zio->io_spa)->mc_alloc_throttle_enabled ||
|
||||||
zio->io_child_type == ZIO_CHILD_GANG ||
|
zio->io_child_type == ZIO_CHILD_GANG ||
|
||||||
zio->io_flags & ZIO_FLAG_NODATA) {
|
zio->io_flags & ZIO_FLAG_NODATA) {
|
||||||
@ -519,7 +517,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(zio->io_child_type > ZIO_CHILD_GANG);
|
ASSERT(zio->io_child_type > ZIO_CHILD_GANG);
|
||||||
@@ -2979,22 +3000,7 @@ zio_dva_throttle(zio_t *zio)
|
@@ -2979,22 +3002,7 @@ zio_dva_throttle(zio_t *zio)
|
||||||
nio = zio_io_to_allocate(zio->io_spa);
|
nio = zio_io_to_allocate(zio->io_spa);
|
||||||
mutex_exit(&spa->spa_alloc_lock);
|
mutex_exit(&spa->spa_alloc_lock);
|
||||||
|
|
||||||
@ -543,7 +541,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -3013,7 +3019,7 @@ zio_allocate_dispatch(spa_t *spa)
|
@@ -3013,7 +3021,7 @@ zio_allocate_dispatch(spa_t *spa)
|
||||||
zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, B_TRUE);
|
zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, B_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -552,7 +550,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_dva_allocate(zio_t *zio)
|
zio_dva_allocate(zio_t *zio)
|
||||||
{
|
{
|
||||||
spa_t *spa = zio->io_spa;
|
spa_t *spa = zio->io_spa;
|
||||||
@@ -3054,18 +3060,18 @@ zio_dva_allocate(zio_t *zio)
|
@@ -3054,18 +3062,18 @@ zio_dva_allocate(zio_t *zio)
|
||||||
zio->io_error = error;
|
zio->io_error = error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -575,7 +573,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_dva_claim(zio_t *zio)
|
zio_dva_claim(zio_t *zio)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
@@ -3074,7 +3080,7 @@ zio_dva_claim(zio_t *zio)
|
@@ -3074,7 +3082,7 @@ zio_dva_claim(zio_t *zio)
|
||||||
if (error)
|
if (error)
|
||||||
zio->io_error = error;
|
zio->io_error = error;
|
||||||
|
|
||||||
@ -584,7 +582,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3172,7 +3178,7 @@ zio_free_zil(spa_t *spa, uint64_t txg, blkptr_t *bp)
|
@@ -3172,7 +3180,7 @@ zio_free_zil(spa_t *spa, uint64_t txg, blkptr_t *bp)
|
||||||
* force the underlying vdev layers to call either zio_execute() or
|
* force the underlying vdev layers to call either zio_execute() or
|
||||||
* zio_interrupt() to ensure that the pipeline continues with the correct I/O.
|
* zio_interrupt() to ensure that the pipeline continues with the correct I/O.
|
||||||
*/
|
*/
|
||||||
@ -593,7 +591,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_vdev_io_start(zio_t *zio)
|
zio_vdev_io_start(zio_t *zio)
|
||||||
{
|
{
|
||||||
vdev_t *vd = zio->io_vd;
|
vdev_t *vd = zio->io_vd;
|
||||||
@@ -3192,7 +3198,7 @@ zio_vdev_io_start(zio_t *zio)
|
@@ -3192,7 +3200,7 @@ zio_vdev_io_start(zio_t *zio)
|
||||||
* The mirror_ops handle multiple DVAs in a single BP.
|
* The mirror_ops handle multiple DVAs in a single BP.
|
||||||
*/
|
*/
|
||||||
vdev_mirror_ops.vdev_op_io_start(zio);
|
vdev_mirror_ops.vdev_op_io_start(zio);
|
||||||
@ -602,7 +600,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
ASSERT3P(zio->io_logical, !=, zio);
|
ASSERT3P(zio->io_logical, !=, zio);
|
||||||
@@ -3269,31 +3275,31 @@ zio_vdev_io_start(zio_t *zio)
|
@@ -3269,31 +3277,31 @@ zio_vdev_io_start(zio_t *zio)
|
||||||
!vdev_dtl_contains(vd, DTL_PARTIAL, zio->io_txg, 1)) {
|
!vdev_dtl_contains(vd, DTL_PARTIAL, zio->io_txg, 1)) {
|
||||||
ASSERT(zio->io_type == ZIO_TYPE_WRITE);
|
ASSERT(zio->io_type == ZIO_TYPE_WRITE);
|
||||||
zio_vdev_io_bypass(zio);
|
zio_vdev_io_bypass(zio);
|
||||||
@ -640,7 +638,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_vdev_io_done(zio_t *zio)
|
zio_vdev_io_done(zio_t *zio)
|
||||||
{
|
{
|
||||||
vdev_t *vd = zio->io_vd;
|
vdev_t *vd = zio->io_vd;
|
||||||
@@ -3301,7 +3307,7 @@ zio_vdev_io_done(zio_t *zio)
|
@@ -3301,7 +3309,7 @@ zio_vdev_io_done(zio_t *zio)
|
||||||
boolean_t unexpected_error = B_FALSE;
|
boolean_t unexpected_error = B_FALSE;
|
||||||
|
|
||||||
if (zio_wait_for_children(zio, ZIO_CHILD_VDEV_BIT, ZIO_WAIT_DONE)) {
|
if (zio_wait_for_children(zio, ZIO_CHILD_VDEV_BIT, ZIO_WAIT_DONE)) {
|
||||||
@ -649,7 +647,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(zio->io_type == ZIO_TYPE_READ || zio->io_type == ZIO_TYPE_WRITE);
|
ASSERT(zio->io_type == ZIO_TYPE_READ || zio->io_type == ZIO_TYPE_WRITE);
|
||||||
@@ -3337,7 +3343,7 @@ zio_vdev_io_done(zio_t *zio)
|
@@ -3337,7 +3345,7 @@ zio_vdev_io_done(zio_t *zio)
|
||||||
if (unexpected_error)
|
if (unexpected_error)
|
||||||
VERIFY(vdev_probe(vd, zio) == NULL);
|
VERIFY(vdev_probe(vd, zio) == NULL);
|
||||||
|
|
||||||
@ -658,7 +656,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3366,13 +3372,13 @@ zio_vsd_default_cksum_report(zio_t *zio, zio_cksum_report_t *zcr, void *ignored)
|
@@ -3366,13 +3374,13 @@ zio_vsd_default_cksum_report(zio_t *zio, zio_cksum_report_t *zcr, void *ignored)
|
||||||
zcr->zcr_free = zio_abd_free;
|
zcr->zcr_free = zio_abd_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -674,7 +672,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (vd == NULL && !(zio->io_flags & ZIO_FLAG_CONFIG_WRITER))
|
if (vd == NULL && !(zio->io_flags & ZIO_FLAG_CONFIG_WRITER))
|
||||||
@@ -3402,7 +3408,7 @@ zio_vdev_io_assess(zio_t *zio)
|
@@ -3402,7 +3410,7 @@ zio_vdev_io_assess(zio_t *zio)
|
||||||
zio->io_stage = ZIO_STAGE_VDEV_IO_START >> 1;
|
zio->io_stage = ZIO_STAGE_VDEV_IO_START >> 1;
|
||||||
zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE,
|
zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE,
|
||||||
zio_requeue_io_start_cut_in_line);
|
zio_requeue_io_start_cut_in_line);
|
||||||
@ -683,7 +681,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3442,7 +3448,7 @@ zio_vdev_io_assess(zio_t *zio)
|
@@ -3442,7 +3450,7 @@ zio_vdev_io_assess(zio_t *zio)
|
||||||
zio->io_physdone(zio->io_logical);
|
zio->io_physdone(zio->io_logical);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -692,7 +690,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -3477,7 +3483,7 @@ zio_vdev_io_bypass(zio_t *zio)
|
@@ -3477,7 +3485,7 @@ zio_vdev_io_bypass(zio_t *zio)
|
||||||
* Generate and verify checksums
|
* Generate and verify checksums
|
||||||
* ==========================================================================
|
* ==========================================================================
|
||||||
*/
|
*/
|
||||||
@ -701,7 +699,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_checksum_generate(zio_t *zio)
|
zio_checksum_generate(zio_t *zio)
|
||||||
{
|
{
|
||||||
blkptr_t *bp = zio->io_bp;
|
blkptr_t *bp = zio->io_bp;
|
||||||
@@ -3491,7 +3497,7 @@ zio_checksum_generate(zio_t *zio)
|
@@ -3491,7 +3499,7 @@ zio_checksum_generate(zio_t *zio)
|
||||||
checksum = zio->io_prop.zp_checksum;
|
checksum = zio->io_prop.zp_checksum;
|
||||||
|
|
||||||
if (checksum == ZIO_CHECKSUM_OFF)
|
if (checksum == ZIO_CHECKSUM_OFF)
|
||||||
@ -710,7 +708,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
|
|
||||||
ASSERT(checksum == ZIO_CHECKSUM_LABEL);
|
ASSERT(checksum == ZIO_CHECKSUM_LABEL);
|
||||||
} else {
|
} else {
|
||||||
@@ -3505,10 +3511,10 @@ zio_checksum_generate(zio_t *zio)
|
@@ -3505,10 +3513,10 @@ zio_checksum_generate(zio_t *zio)
|
||||||
|
|
||||||
zio_checksum_compute(zio, checksum, zio->io_abd, zio->io_size);
|
zio_checksum_compute(zio, checksum, zio->io_abd, zio->io_size);
|
||||||
|
|
||||||
@ -723,7 +721,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_checksum_verify(zio_t *zio)
|
zio_checksum_verify(zio_t *zio)
|
||||||
{
|
{
|
||||||
zio_bad_cksum_t info;
|
zio_bad_cksum_t info;
|
||||||
@@ -3523,7 +3529,7 @@ zio_checksum_verify(zio_t *zio)
|
@@ -3523,7 +3531,7 @@ zio_checksum_verify(zio_t *zio)
|
||||||
* We're either verifying a label checksum, or nothing at all.
|
* We're either verifying a label checksum, or nothing at all.
|
||||||
*/
|
*/
|
||||||
if (zio->io_prop.zp_checksum == ZIO_CHECKSUM_OFF)
|
if (zio->io_prop.zp_checksum == ZIO_CHECKSUM_OFF)
|
||||||
@ -732,7 +730,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
|
|
||||||
ASSERT(zio->io_prop.zp_checksum == ZIO_CHECKSUM_LABEL);
|
ASSERT(zio->io_prop.zp_checksum == ZIO_CHECKSUM_LABEL);
|
||||||
}
|
}
|
||||||
@@ -3538,7 +3544,7 @@ zio_checksum_verify(zio_t *zio)
|
@@ -3538,7 +3546,7 @@ zio_checksum_verify(zio_t *zio)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -741,7 +739,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3581,7 +3587,7 @@ zio_worst_error(int e1, int e2)
|
@@ -3581,7 +3589,7 @@ zio_worst_error(int e1, int e2)
|
||||||
* I/O completion
|
* I/O completion
|
||||||
* ==========================================================================
|
* ==========================================================================
|
||||||
*/
|
*/
|
||||||
@ -750,7 +748,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_ready(zio_t *zio)
|
zio_ready(zio_t *zio)
|
||||||
{
|
{
|
||||||
blkptr_t *bp = zio->io_bp;
|
blkptr_t *bp = zio->io_bp;
|
||||||
@@ -3590,7 +3596,7 @@ zio_ready(zio_t *zio)
|
@@ -3590,7 +3598,7 @@ zio_ready(zio_t *zio)
|
||||||
|
|
||||||
if (zio_wait_for_children(zio, ZIO_CHILD_GANG_BIT | ZIO_CHILD_DDT_BIT,
|
if (zio_wait_for_children(zio, ZIO_CHILD_GANG_BIT | ZIO_CHILD_DDT_BIT,
|
||||||
ZIO_WAIT_READY)) {
|
ZIO_WAIT_READY)) {
|
||||||
@ -759,7 +757,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (zio->io_ready) {
|
if (zio->io_ready) {
|
||||||
@@ -3636,7 +3642,7 @@ zio_ready(zio_t *zio)
|
@@ -3636,7 +3644,7 @@ zio_ready(zio_t *zio)
|
||||||
*/
|
*/
|
||||||
for (; pio != NULL; pio = pio_next) {
|
for (; pio != NULL; pio = pio_next) {
|
||||||
pio_next = zio_walk_parents(zio, &zl);
|
pio_next = zio_walk_parents(zio, &zl);
|
||||||
@ -768,7 +766,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (zio->io_flags & ZIO_FLAG_NODATA) {
|
if (zio->io_flags & ZIO_FLAG_NODATA) {
|
||||||
@@ -3652,7 +3658,7 @@ zio_ready(zio_t *zio)
|
@@ -3652,7 +3660,7 @@ zio_ready(zio_t *zio)
|
||||||
zio->io_spa->spa_syncing_txg == zio->io_txg)
|
zio->io_spa->spa_syncing_txg == zio->io_txg)
|
||||||
zio_handle_ignored_writes(zio);
|
zio_handle_ignored_writes(zio);
|
||||||
|
|
||||||
@ -777,7 +775,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3716,7 +3722,7 @@ zio_dva_throttle_done(zio_t *zio)
|
@@ -3716,7 +3724,7 @@ zio_dva_throttle_done(zio_t *zio)
|
||||||
zio_allocate_dispatch(zio->io_spa);
|
zio_allocate_dispatch(zio->io_spa);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -786,7 +784,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
zio_done(zio_t *zio)
|
zio_done(zio_t *zio)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -3733,7 +3739,7 @@ zio_done(zio_t *zio)
|
@@ -3733,7 +3741,7 @@ zio_done(zio_t *zio)
|
||||||
* wait for them and then repeat this pipeline stage.
|
* wait for them and then repeat this pipeline stage.
|
||||||
*/
|
*/
|
||||||
if (zio_wait_for_children(zio, ZIO_CHILD_ALL_BITS, ZIO_WAIT_DONE)) {
|
if (zio_wait_for_children(zio, ZIO_CHILD_ALL_BITS, ZIO_WAIT_DONE)) {
|
||||||
@ -795,7 +793,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -3957,7 +3963,12 @@ zio_done(zio_t *zio)
|
@@ -3957,7 +3965,12 @@ zio_done(zio_t *zio)
|
||||||
if ((pio->io_flags & ZIO_FLAG_GODFATHER) &&
|
if ((pio->io_flags & ZIO_FLAG_GODFATHER) &&
|
||||||
(zio->io_reexecute & ZIO_REEXECUTE_SUSPEND)) {
|
(zio->io_reexecute & ZIO_REEXECUTE_SUSPEND)) {
|
||||||
zio_remove_child(pio, zio, remove_zl);
|
zio_remove_child(pio, zio, remove_zl);
|
||||||
@ -809,7 +807,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3969,7 +3980,11 @@ zio_done(zio_t *zio)
|
@@ -3969,7 +3982,11 @@ zio_done(zio_t *zio)
|
||||||
*/
|
*/
|
||||||
ASSERT(!(zio->io_flags & ZIO_FLAG_GODFATHER));
|
ASSERT(!(zio->io_flags & ZIO_FLAG_GODFATHER));
|
||||||
zio->io_flags |= ZIO_FLAG_DONT_PROPAGATE;
|
zio->io_flags |= ZIO_FLAG_DONT_PROPAGATE;
|
||||||
@ -822,7 +820,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
} else if (zio->io_reexecute & ZIO_REEXECUTE_SUSPEND) {
|
} else if (zio->io_reexecute & ZIO_REEXECUTE_SUSPEND) {
|
||||||
/*
|
/*
|
||||||
* We'd fail again if we reexecuted now, so suspend
|
* We'd fail again if we reexecuted now, so suspend
|
||||||
@@ -3987,7 +4002,7 @@ zio_done(zio_t *zio)
|
@@ -3987,7 +4004,7 @@ zio_done(zio_t *zio)
|
||||||
(task_func_t *)zio_reexecute, zio, 0,
|
(task_func_t *)zio_reexecute, zio, 0,
|
||||||
&zio->io_tqent);
|
&zio->io_tqent);
|
||||||
}
|
}
|
||||||
@ -831,7 +829,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(zio->io_child_count == 0);
|
ASSERT(zio->io_child_count == 0);
|
||||||
@@ -4023,12 +4038,17 @@ zio_done(zio_t *zio)
|
@@ -4023,12 +4040,17 @@ zio_done(zio_t *zio)
|
||||||
zio->io_state[ZIO_WAIT_DONE] = 1;
|
zio->io_state[ZIO_WAIT_DONE] = 1;
|
||||||
mutex_exit(&zio->io_lock);
|
mutex_exit(&zio->io_lock);
|
||||||
|
|
||||||
@ -850,7 +848,7 @@ index 9a465e1b..b08b4747 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (zio->io_waiter != NULL) {
|
if (zio->io_waiter != NULL) {
|
||||||
@@ -4040,7 +4060,7 @@ zio_done(zio_t *zio)
|
@@ -4040,7 +4062,7 @@ zio_done(zio_t *zio)
|
||||||
zio_destroy(zio);
|
zio_destroy(zio);
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,221 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Olaf Faaland <faaland1@llnl.gov>
|
||||||
|
Date: Mon, 20 Aug 2018 10:05:23 -0700
|
||||||
|
Subject: [PATCH] Skip import activity test in more zdb code paths
|
||||||
|
|
||||||
|
Since zdb opens the pools read-only, it cannot damage the pool in the
|
||||||
|
event the pool is already imported either on the same host or on
|
||||||
|
another one.
|
||||||
|
|
||||||
|
If the pool vdev structure is changing while zdb is importing the
|
||||||
|
pool, it may cause zdb to crash. However this is unlikely, and in any
|
||||||
|
case it's a user space process and can simply be run again.
|
||||||
|
|
||||||
|
For this reason, zdb should disable the multihost activity test on
|
||||||
|
import that is normally run.
|
||||||
|
|
||||||
|
This commit fixes a few zdb code paths where that had been overlooked.
|
||||||
|
It also adds tests to ensure that several common use cases handle this
|
||||||
|
properly in the future.
|
||||||
|
|
||||||
|
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Reviewed-by: Gu Zheng <guzheng2331314@163.com>
|
||||||
|
Signed-off-by: Olaf Faaland <faaland1@llnl.gov>
|
||||||
|
Closes #7797
|
||||||
|
Closes #7801
|
||||||
|
---
|
||||||
|
cmd/zdb/zdb.c | 39 +++++++-----
|
||||||
|
tests/runfiles/linux.run | 3 +-
|
||||||
|
tests/zfs-tests/tests/functional/mmp/Makefile.am | 1 +
|
||||||
|
.../zfs-tests/tests/functional/mmp/mmp_on_zdb.ksh | 74 ++++++++++++++++++++++
|
||||||
|
4 files changed, 101 insertions(+), 16 deletions(-)
|
||||||
|
create mode 100755 tests/zfs-tests/tests/functional/mmp/mmp_on_zdb.ksh
|
||||||
|
|
||||||
|
diff --git a/cmd/zdb/zdb.c b/cmd/zdb/zdb.c
|
||||||
|
index 17a0ae25..bb9fd3f1 100644
|
||||||
|
--- a/cmd/zdb/zdb.c
|
||||||
|
+++ b/cmd/zdb/zdb.c
|
||||||
|
@@ -24,7 +24,7 @@
|
||||||
|
* Copyright (c) 2011, 2016 by Delphix. All rights reserved.
|
||||||
|
* Copyright (c) 2014 Integros [integros.com]
|
||||||
|
* Copyright 2016 Nexenta Systems, Inc.
|
||||||
|
- * Copyright (c) 2017 Lawrence Livermore National Security, LLC.
|
||||||
|
+ * Copyright (c) 2017, 2018 Lawrence Livermore National Security, LLC.
|
||||||
|
* Copyright (c) 2015, 2017, Intel Corporation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@@ -3660,6 +3660,22 @@ dump_simulated_ddt(spa_t *spa)
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
+zdb_set_skip_mmp(char *target)
|
||||||
|
+{
|
||||||
|
+ spa_t *spa;
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Disable the activity check to allow examination of
|
||||||
|
+ * active pools.
|
||||||
|
+ */
|
||||||
|
+ mutex_enter(&spa_namespace_lock);
|
||||||
|
+ if ((spa = spa_lookup(target)) != NULL) {
|
||||||
|
+ spa->spa_import_flags |= ZFS_IMPORT_SKIP_MMP;
|
||||||
|
+ }
|
||||||
|
+ mutex_exit(&spa_namespace_lock);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
dump_zpool(spa_t *spa)
|
||||||
|
{
|
||||||
|
dsl_pool_t *dp = spa_get_dsl(spa);
|
||||||
|
@@ -4412,14 +4428,15 @@ main(int argc, char **argv)
|
||||||
|
target, strerror(ENOMEM));
|
||||||
|
}
|
||||||
|
|
||||||
|
- /*
|
||||||
|
- * Disable the activity check to allow examination of
|
||||||
|
- * active pools.
|
||||||
|
- */
|
||||||
|
if (dump_opt['C'] > 1) {
|
||||||
|
(void) printf("\nConfiguration for import:\n");
|
||||||
|
dump_nvlist(cfg, 8);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Disable the activity check to allow examination of
|
||||||
|
+ * active pools.
|
||||||
|
+ */
|
||||||
|
error = spa_import(target_pool, cfg, NULL,
|
||||||
|
flags | ZFS_IMPORT_SKIP_MMP);
|
||||||
|
}
|
||||||
|
@@ -4430,16 +4447,7 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
|
if (error == 0) {
|
||||||
|
if (target_is_spa || dump_opt['R']) {
|
||||||
|
- /*
|
||||||
|
- * Disable the activity check to allow examination of
|
||||||
|
- * active pools.
|
||||||
|
- */
|
||||||
|
- mutex_enter(&spa_namespace_lock);
|
||||||
|
- if ((spa = spa_lookup(target)) != NULL) {
|
||||||
|
- spa->spa_import_flags |= ZFS_IMPORT_SKIP_MMP;
|
||||||
|
- }
|
||||||
|
- mutex_exit(&spa_namespace_lock);
|
||||||
|
-
|
||||||
|
+ zdb_set_skip_mmp(target);
|
||||||
|
error = spa_open_rewind(target, &spa, FTAG, policy,
|
||||||
|
NULL);
|
||||||
|
if (error) {
|
||||||
|
@@ -4462,6 +4470,7 @@ main(int argc, char **argv)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
+ zdb_set_skip_mmp(target);
|
||||||
|
error = open_objset(target, DMU_OST_ANY, FTAG, &os);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/tests/runfiles/linux.run b/tests/runfiles/linux.run
|
||||||
|
index d8fe6f3a..ddf01aaf 100644
|
||||||
|
--- a/tests/runfiles/linux.run
|
||||||
|
+++ b/tests/runfiles/linux.run
|
||||||
|
@@ -499,7 +499,8 @@ tags = ['functional', 'mmap']
|
||||||
|
[tests/functional/mmp]
|
||||||
|
tests = ['mmp_on_thread', 'mmp_on_uberblocks', 'mmp_on_off', 'mmp_interval',
|
||||||
|
'mmp_active_import', 'mmp_inactive_import', 'mmp_exported_import',
|
||||||
|
- 'mmp_write_uberblocks', 'mmp_reset_interval', 'multihost_history']
|
||||||
|
+ 'mmp_write_uberblocks', 'mmp_reset_interval', 'multihost_history',
|
||||||
|
+ 'mmp_on_zdb']
|
||||||
|
tags = ['functional', 'mmp']
|
||||||
|
|
||||||
|
[tests/functional/mount]
|
||||||
|
diff --git a/tests/zfs-tests/tests/functional/mmp/Makefile.am b/tests/zfs-tests/tests/functional/mmp/Makefile.am
|
||||||
|
index ecf16f80..f2d0ad0e 100644
|
||||||
|
--- a/tests/zfs-tests/tests/functional/mmp/Makefile.am
|
||||||
|
+++ b/tests/zfs-tests/tests/functional/mmp/Makefile.am
|
||||||
|
@@ -10,6 +10,7 @@ dist_pkgdata_SCRIPTS = \
|
||||||
|
mmp_exported_import.ksh \
|
||||||
|
mmp_write_uberblocks.ksh \
|
||||||
|
mmp_reset_interval.ksh \
|
||||||
|
+ mmp_on_zdb.ksh \
|
||||||
|
setup.ksh \
|
||||||
|
cleanup.ksh
|
||||||
|
|
||||||
|
diff --git a/tests/zfs-tests/tests/functional/mmp/mmp_on_zdb.ksh b/tests/zfs-tests/tests/functional/mmp/mmp_on_zdb.ksh
|
||||||
|
new file mode 100755
|
||||||
|
index 00000000..b646475a
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/tests/zfs-tests/tests/functional/mmp/mmp_on_zdb.ksh
|
||||||
|
@@ -0,0 +1,74 @@
|
||||||
|
+#!/bin/ksh
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# This file and its contents are supplied under the terms of the
|
||||||
|
+# Common Development and Distribution License ("CDDL"), version 1.0.
|
||||||
|
+# You may only use this file in accordance with the terms of version
|
||||||
|
+# 1.0 of the CDDL.
|
||||||
|
+#
|
||||||
|
+# A full copy of the text of the CDDL should have accompanied this
|
||||||
|
+# source. A copy of the CDDL is also available via the Internet at
|
||||||
|
+# http://www.illumos.org/license/CDDL.
|
||||||
|
+#
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Copyright (c) 2018 Lawrence Livermore National Security, LLC.
|
||||||
|
+# Copyright (c) 2018 by Nutanix. All rights reserved.
|
||||||
|
+#
|
||||||
|
+
|
||||||
|
+. $STF_SUITE/include/libtest.shlib
|
||||||
|
+. $STF_SUITE/tests/functional/mmp/mmp.cfg
|
||||||
|
+. $STF_SUITE/tests/functional/mmp/mmp.kshlib
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Description:
|
||||||
|
+# zdb will work while multihost is enabled.
|
||||||
|
+#
|
||||||
|
+# Strategy:
|
||||||
|
+# 1. Create a pool
|
||||||
|
+# 2. Enable multihost
|
||||||
|
+# 3. Run zdb -d with pool and dataset arguments.
|
||||||
|
+# 4. Create a checkpoint
|
||||||
|
+# 5. Run zdb -kd with pool and dataset arguments.
|
||||||
|
+# 6. Discard the checkpoint
|
||||||
|
+# 7. Export the pool
|
||||||
|
+# 8. Run zdb -ed with pool and dataset arguments.
|
||||||
|
+#
|
||||||
|
+
|
||||||
|
+function cleanup
|
||||||
|
+{
|
||||||
|
+ datasetexists $TESTPOOL && destroy_pool $TESTPOOL
|
||||||
|
+ for DISK in $DISKS; do
|
||||||
|
+ zpool labelclear -f $DEV_RDSKDIR/$DISK
|
||||||
|
+ done
|
||||||
|
+ log_must mmp_clear_hostid
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+log_assert "Verify zdb -d works while multihost is enabled"
|
||||||
|
+log_onexit cleanup
|
||||||
|
+
|
||||||
|
+verify_runnable "global"
|
||||||
|
+verify_disk_count "$DISKS" 2
|
||||||
|
+
|
||||||
|
+default_mirror_setup_noexit $DISKS
|
||||||
|
+log_must mmp_set_hostid $HOSTID1
|
||||||
|
+log_must zpool set multihost=on $TESTPOOL
|
||||||
|
+log_must zfs snap $TESTPOOL/$TESTFS@snap
|
||||||
|
+
|
||||||
|
+log_must zdb -d $TESTPOOL
|
||||||
|
+log_must zdb -d $TESTPOOL/
|
||||||
|
+log_must zdb -d $TESTPOOL/$TESTFS
|
||||||
|
+log_must zdb -d $TESTPOOL/$TESTFS@snap
|
||||||
|
+
|
||||||
|
+log_must zpool export $TESTPOOL
|
||||||
|
+
|
||||||
|
+log_must zdb -ed $TESTPOOL
|
||||||
|
+log_must zdb -ed $TESTPOOL/
|
||||||
|
+log_must zdb -ed $TESTPOOL/$TESTFS
|
||||||
|
+log_must zdb -ed $TESTPOOL/$TESTFS@snap
|
||||||
|
+
|
||||||
|
+log_must zpool import $TESTPOOL
|
||||||
|
+
|
||||||
|
+cleanup
|
||||||
|
+
|
||||||
|
+log_pass "zdb -d works while multihost is enabled"
|
180
zfs-patches/0011-Fix-statfs-2-for-32-bit-user-space.patch
Normal file
180
zfs-patches/0011-Fix-statfs-2-for-32-bit-user-space.patch
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Date: Mon, 24 Sep 2018 17:11:25 -0700
|
||||||
|
Subject: [PATCH] Fix statfs(2) for 32-bit user space
|
||||||
|
|
||||||
|
When handling a 32-bit statfs() system call the returned fields,
|
||||||
|
although 64-bit in the kernel, must be limited to 32-bits or an
|
||||||
|
EOVERFLOW error will be returned.
|
||||||
|
|
||||||
|
This is less of an issue for block counts since the default
|
||||||
|
reported block size in 128KiB. But since it is possible to
|
||||||
|
set a smaller block size, these values will be scaled as
|
||||||
|
needed to fit in a 32-bit unsigned long.
|
||||||
|
|
||||||
|
Unlike most other filesystems the total possible file counts
|
||||||
|
are more likely to overflow because they are calculated based
|
||||||
|
on the available free space in the pool. In order to prevent
|
||||||
|
this the reported value must be capped at 2^32-1. This is
|
||||||
|
only for statfs(2) reporting, there are no changes to the
|
||||||
|
internal ZFS limits.
|
||||||
|
|
||||||
|
Reviewed-by: Andreas Dilger <andreas.dilger@whamcloud.com>
|
||||||
|
Reviewed-by: Richard Yao <ryao@gentoo.org>
|
||||||
|
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Issue #7927
|
||||||
|
Closes #7122
|
||||||
|
Closes #7937
|
||||||
|
---
|
||||||
|
config/kernel-in-compat-syscall.m4 | 20 ++++++++++++++++++++
|
||||||
|
config/kernel.m4 | 1 +
|
||||||
|
include/linux/vfs_compat.h | 18 ++++++++++++++++++
|
||||||
|
module/zfs/zfs_vfsops.c | 8 +++-----
|
||||||
|
module/zfs/zpl_super.c | 22 ++++++++++++++++++++++
|
||||||
|
5 files changed, 64 insertions(+), 5 deletions(-)
|
||||||
|
create mode 100644 config/kernel-in-compat-syscall.m4
|
||||||
|
|
||||||
|
diff --git a/config/kernel-in-compat-syscall.m4 b/config/kernel-in-compat-syscall.m4
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..9fca9da2
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/config/kernel-in-compat-syscall.m4
|
||||||
|
@@ -0,0 +1,20 @@
|
||||||
|
+dnl #
|
||||||
|
+dnl # 4.5 API change
|
||||||
|
+dnl # Added in_compat_syscall() which can be overridden on a per-
|
||||||
|
+dnl # architecture basis. Prior to this is_compat_task() was the
|
||||||
|
+dnl # provided interface.
|
||||||
|
+dnl #
|
||||||
|
+AC_DEFUN([ZFS_AC_KERNEL_IN_COMPAT_SYSCALL], [
|
||||||
|
+ AC_MSG_CHECKING([whether in_compat_syscall() is available])
|
||||||
|
+ ZFS_LINUX_TRY_COMPILE([
|
||||||
|
+ #include <linux/compat.h>
|
||||||
|
+ ],[
|
||||||
|
+ in_compat_syscall();
|
||||||
|
+ ],[
|
||||||
|
+ AC_MSG_RESULT(yes)
|
||||||
|
+ AC_DEFINE(HAVE_IN_COMPAT_SYSCALL, 1,
|
||||||
|
+ [in_compat_syscall() is available])
|
||||||
|
+ ],[
|
||||||
|
+ AC_MSG_RESULT(no)
|
||||||
|
+ ])
|
||||||
|
+])
|
||||||
|
diff --git a/config/kernel.m4 b/config/kernel.m4
|
||||||
|
index c7ca260c..3777f45c 100644
|
||||||
|
--- a/config/kernel.m4
|
||||||
|
+++ b/config/kernel.m4
|
||||||
|
@@ -129,6 +129,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
|
||||||
|
ZFS_AC_KERNEL_GLOBAL_PAGE_STATE
|
||||||
|
ZFS_AC_KERNEL_ACL_HAS_REFCOUNT
|
||||||
|
ZFS_AC_KERNEL_USERNS_CAPABILITIES
|
||||||
|
+ ZFS_AC_KERNEL_IN_COMPAT_SYSCALL
|
||||||
|
|
||||||
|
AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
|
||||||
|
KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
|
||||||
|
diff --git a/include/linux/vfs_compat.h b/include/linux/vfs_compat.h
|
||||||
|
index c8203bd5..90b3cca7 100644
|
||||||
|
--- a/include/linux/vfs_compat.h
|
||||||
|
+++ b/include/linux/vfs_compat.h
|
||||||
|
@@ -30,6 +30,7 @@
|
||||||
|
#include <sys/taskq.h>
|
||||||
|
#include <sys/cred.h>
|
||||||
|
#include <linux/backing-dev.h>
|
||||||
|
+#include <linux/compat.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 2.6.28 API change,
|
||||||
|
@@ -626,4 +627,21 @@ inode_set_iversion(struct inode *ip, u64 val)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+ * Returns true when called in the context of a 32-bit system call.
|
||||||
|
+ */
|
||||||
|
+static inline int
|
||||||
|
+zpl_is_32bit_api(void)
|
||||||
|
+{
|
||||||
|
+#ifdef CONFIG_COMPAT
|
||||||
|
+#ifdef HAVE_IN_COMPAT_SYSCALL
|
||||||
|
+ return (in_compat_syscall());
|
||||||
|
+#else
|
||||||
|
+ return (is_compat_task());
|
||||||
|
+#endif
|
||||||
|
+#else
|
||||||
|
+ return (BITS_PER_LONG == 32);
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
#endif /* _ZFS_VFS_H */
|
||||||
|
diff --git a/module/zfs/zfs_vfsops.c b/module/zfs/zfs_vfsops.c
|
||||||
|
index 76113393..bcdfa26b 100644
|
||||||
|
--- a/module/zfs/zfs_vfsops.c
|
||||||
|
+++ b/module/zfs/zfs_vfsops.c
|
||||||
|
@@ -1245,15 +1245,13 @@ zfs_statvfs(struct dentry *dentry, struct kstatfs *statp)
|
||||||
|
{
|
||||||
|
zfsvfs_t *zfsvfs = dentry->d_sb->s_fs_info;
|
||||||
|
uint64_t refdbytes, availbytes, usedobjs, availobjs;
|
||||||
|
- uint64_t fsid;
|
||||||
|
- uint32_t bshift;
|
||||||
|
|
||||||
|
ZFS_ENTER(zfsvfs);
|
||||||
|
|
||||||
|
dmu_objset_space(zfsvfs->z_os,
|
||||||
|
&refdbytes, &availbytes, &usedobjs, &availobjs);
|
||||||
|
|
||||||
|
- fsid = dmu_objset_fsid_guid(zfsvfs->z_os);
|
||||||
|
+ uint64_t fsid = dmu_objset_fsid_guid(zfsvfs->z_os);
|
||||||
|
/*
|
||||||
|
* The underlying storage pool actually uses multiple block
|
||||||
|
* size. Under Solaris frsize (fragment size) is reported as
|
||||||
|
@@ -1265,7 +1263,7 @@ zfs_statvfs(struct dentry *dentry, struct kstatfs *statp)
|
||||||
|
*/
|
||||||
|
statp->f_frsize = zfsvfs->z_max_blksz;
|
||||||
|
statp->f_bsize = zfsvfs->z_max_blksz;
|
||||||
|
- bshift = fls(statp->f_bsize) - 1;
|
||||||
|
+ uint32_t bshift = fls(statp->f_bsize) - 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following report "total" blocks of various kinds in
|
||||||
|
@@ -1282,7 +1280,7 @@ zfs_statvfs(struct dentry *dentry, struct kstatfs *statp)
|
||||||
|
* static metadata. ZFS doesn't preallocate files, so the best
|
||||||
|
* we can do is report the max that could possibly fit in f_files,
|
||||||
|
* and that minus the number actually used in f_ffree.
|
||||||
|
- * For f_ffree, report the smaller of the number of object available
|
||||||
|
+ * For f_ffree, report the smaller of the number of objects available
|
||||||
|
* and the number of blocks (each object will take at least a block).
|
||||||
|
*/
|
||||||
|
statp->f_ffree = MIN(availobjs, availbytes >> DNODE_SHIFT);
|
||||||
|
diff --git a/module/zfs/zpl_super.c b/module/zfs/zpl_super.c
|
||||||
|
index 5c426b0a..216c7940 100644
|
||||||
|
--- a/module/zfs/zpl_super.c
|
||||||
|
+++ b/module/zfs/zpl_super.c
|
||||||
|
@@ -181,6 +181,28 @@ zpl_statfs(struct dentry *dentry, struct kstatfs *statp)
|
||||||
|
spl_fstrans_unmark(cookie);
|
||||||
|
ASSERT3S(error, <=, 0);
|
||||||
|
|
||||||
|
+ /*
|
||||||
|
+ * If required by a 32-bit system call, dynamically scale the
|
||||||
|
+ * block size up to 16MiB and decrease the block counts. This
|
||||||
|
+ * allows for a maximum size of 64EiB to be reported. The file
|
||||||
|
+ * counts must be artificially capped at 2^32-1.
|
||||||
|
+ */
|
||||||
|
+ if (unlikely(zpl_is_32bit_api())) {
|
||||||
|
+ while (statp->f_blocks > UINT32_MAX &&
|
||||||
|
+ statp->f_bsize < SPA_MAXBLOCKSIZE) {
|
||||||
|
+ statp->f_frsize <<= 1;
|
||||||
|
+ statp->f_bsize <<= 1;
|
||||||
|
+
|
||||||
|
+ statp->f_blocks >>= 1;
|
||||||
|
+ statp->f_bfree >>= 1;
|
||||||
|
+ statp->f_bavail >>= 1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ uint64_t usedobjs = statp->f_files - statp->f_ffree;
|
||||||
|
+ statp->f_ffree = MIN(statp->f_ffree, UINT32_MAX - usedobjs);
|
||||||
|
+ statp->f_files = statp->f_ffree + usedobjs;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return (error);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,86 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Gregor Kopka <mailfrom-github@kopka.net>
|
||||||
|
Date: Wed, 26 Sep 2018 01:29:16 +0200
|
||||||
|
Subject: [PATCH] Zpool iostat: remove latency/queue scaling
|
||||||
|
|
||||||
|
Bandwidth and iops are average per second while *_wait are averages
|
||||||
|
per request for latency or, for queue depths, an instantaneous
|
||||||
|
measurement at the end of an interval (according to man zpool).
|
||||||
|
|
||||||
|
When calculating the first two it makes sense to do
|
||||||
|
x/interval_duration (x being the increase in total bytes or number of
|
||||||
|
requests over the duration of the interval, interval_duration in
|
||||||
|
seconds) to 'scale' from amount/interval_duration to amount/second.
|
||||||
|
|
||||||
|
But applying the same math for the latter (*_wait latencies/queue) is
|
||||||
|
wrong as there is no interval_duration component in the values (these
|
||||||
|
are time/requests to get to average_time/request or already an
|
||||||
|
absulute number).
|
||||||
|
|
||||||
|
This bug leads to the only correct continuous *_wait figures for both
|
||||||
|
latencies and queue depths from 'zpool iostat -l/q' being with
|
||||||
|
duration=1 as then the wrong math cancels itself (x/1 is a nop).
|
||||||
|
|
||||||
|
This removes temporal scaling from latency and queue depth figures.
|
||||||
|
|
||||||
|
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
|
||||||
|
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Signed-off-by: Gregor Kopka <gregor@kopka.net>
|
||||||
|
Closes #7945
|
||||||
|
Closes #7694
|
||||||
|
---
|
||||||
|
cmd/zpool/zpool_main.c | 12 ++++++------
|
||||||
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c
|
||||||
|
index a4fd0321..591e2e5c 100644
|
||||||
|
--- a/cmd/zpool/zpool_main.c
|
||||||
|
+++ b/cmd/zpool/zpool_main.c
|
||||||
|
@@ -3493,7 +3493,7 @@ single_histo_average(uint64_t *histo, unsigned int buckets)
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_iostat_queues(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
||||||
|
- nvlist_t *newnv, double scale)
|
||||||
|
+ nvlist_t *newnv)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
uint64_t val;
|
||||||
|
@@ -3523,7 +3523,7 @@ print_iostat_queues(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
||||||
|
format = ZFS_NICENUM_1024;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(names); i++) {
|
||||||
|
- val = nva[i].data[0] * scale;
|
||||||
|
+ val = nva[i].data[0];
|
||||||
|
print_one_stat(val, format, column_width, cb->cb_scripted);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -3532,7 +3532,7 @@ print_iostat_queues(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_iostat_latency(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
||||||
|
- nvlist_t *newnv, double scale)
|
||||||
|
+ nvlist_t *newnv)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
uint64_t val;
|
||||||
|
@@ -3562,7 +3562,7 @@ print_iostat_latency(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
||||||
|
/* Print our avg latencies on the line */
|
||||||
|
for (i = 0; i < ARRAY_SIZE(names); i++) {
|
||||||
|
/* Compute average latency for a latency histo */
|
||||||
|
- val = single_histo_average(nva[i].data, nva[i].count) * scale;
|
||||||
|
+ val = single_histo_average(nva[i].data, nva[i].count);
|
||||||
|
print_one_stat(val, format, column_width, cb->cb_scripted);
|
||||||
|
}
|
||||||
|
free_calc_stats(nva, ARRAY_SIZE(names));
|
||||||
|
@@ -3701,9 +3701,9 @@ print_vdev_stats(zpool_handle_t *zhp, const char *name, nvlist_t *oldnv,
|
||||||
|
print_iostat_default(calcvs, cb, scale);
|
||||||
|
}
|
||||||
|
if (cb->cb_flags & IOS_LATENCY_M)
|
||||||
|
- print_iostat_latency(cb, oldnv, newnv, scale);
|
||||||
|
+ print_iostat_latency(cb, oldnv, newnv);
|
||||||
|
if (cb->cb_flags & IOS_QUEUES_M)
|
||||||
|
- print_iostat_queues(cb, oldnv, newnv, scale);
|
||||||
|
+ print_iostat_queues(cb, oldnv, newnv);
|
||||||
|
if (cb->cb_flags & IOS_ANYHISTO_M) {
|
||||||
|
printf("\n");
|
||||||
|
print_iostat_histos(cb, oldnv, newnv, scale, name);
|
@ -0,0 +1,878 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tim Schumacher <timschumi@gmx.de>
|
||||||
|
Date: Wed, 26 Sep 2018 19:29:26 +0200
|
||||||
|
Subject: [PATCH] Linux 4.19-rc3+ compat: Remove refcount_t compat
|
||||||
|
|
||||||
|
torvalds/linux@59b57717f ("blkcg: delay blkg destruction until
|
||||||
|
after writeback has finished") added a refcount_t to the blkcg
|
||||||
|
structure. Due to the refcount_t compatibility code, zfs_refcount_t
|
||||||
|
was used by mistake.
|
||||||
|
|
||||||
|
Resolve this by removing the compatibility code and replacing the
|
||||||
|
occurrences of refcount_t with zfs_refcount_t.
|
||||||
|
|
||||||
|
Reviewed-by: Franz Pletz <fpletz@fnordicwalking.de>
|
||||||
|
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Signed-off-by: Tim Schumacher <timschumi@gmx.de>
|
||||||
|
Closes #7885
|
||||||
|
Closes #7932
|
||||||
|
---
|
||||||
|
cmd/ztest/ztest.c | 6 +++---
|
||||||
|
include/linux/vfs_compat.h | 5 -----
|
||||||
|
include/sys/abd.h | 2 +-
|
||||||
|
include/sys/arc.h | 2 +-
|
||||||
|
include/sys/arc_impl.h | 8 +++----
|
||||||
|
include/sys/dbuf.h | 2 +-
|
||||||
|
include/sys/dmu_tx.h | 4 ++--
|
||||||
|
include/sys/dnode.h | 4 ++--
|
||||||
|
include/sys/dsl_dataset.h | 2 +-
|
||||||
|
include/sys/metaslab_impl.h | 5 ++---
|
||||||
|
include/sys/refcount.h | 52 ++++++++++++++++++++-------------------------
|
||||||
|
include/sys/rrwlock.h | 4 ++--
|
||||||
|
include/sys/sa_impl.h | 2 +-
|
||||||
|
include/sys/spa_impl.h | 6 +++---
|
||||||
|
include/sys/zap.h | 2 +-
|
||||||
|
include/sys/zfs_znode.h | 2 +-
|
||||||
|
module/zfs/arc.c | 12 +++++------
|
||||||
|
module/zfs/dbuf.c | 10 ++++-----
|
||||||
|
module/zfs/dmu.c | 2 +-
|
||||||
|
module/zfs/dmu_tx.c | 6 +++---
|
||||||
|
module/zfs/dnode.c | 6 +++---
|
||||||
|
module/zfs/dsl_dataset.c | 2 +-
|
||||||
|
module/zfs/metaslab.c | 4 ++--
|
||||||
|
module/zfs/refcount.c | 30 +++++++++++++-------------
|
||||||
|
module/zfs/rrwlock.c | 4 ++--
|
||||||
|
module/zfs/sa.c | 2 +-
|
||||||
|
module/zfs/spa_misc.c | 8 +++----
|
||||||
|
module/zfs/zfs_ctldir.c | 10 ++++-----
|
||||||
|
module/zfs/zfs_znode.c | 2 +-
|
||||||
|
29 files changed, 97 insertions(+), 109 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cmd/ztest/ztest.c b/cmd/ztest/ztest.c
|
||||||
|
index a410eeef..24967a76 100644
|
||||||
|
--- a/cmd/ztest/ztest.c
|
||||||
|
+++ b/cmd/ztest/ztest.c
|
||||||
|
@@ -1189,7 +1189,7 @@ ztest_spa_prop_set_uint64(zpool_prop_t prop, uint64_t value)
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
list_node_t z_lnode;
|
||||||
|
- refcount_t z_refcnt;
|
||||||
|
+ zfs_refcount_t z_refcnt;
|
||||||
|
uint64_t z_object;
|
||||||
|
zfs_rlock_t z_range_lock;
|
||||||
|
} ztest_znode_t;
|
||||||
|
@@ -1248,13 +1248,13 @@ ztest_znode_get(ztest_ds_t *zd, uint64_t object)
|
||||||
|
for (zp = list_head(&zll->z_list); (zp);
|
||||||
|
zp = list_next(&zll->z_list, zp)) {
|
||||||
|
if (zp->z_object == object) {
|
||||||
|
- refcount_add(&zp->z_refcnt, RL_TAG);
|
||||||
|
+ zfs_refcount_add(&zp->z_refcnt, RL_TAG);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (zp == NULL) {
|
||||||
|
zp = ztest_znode_init(object);
|
||||||
|
- refcount_add(&zp->z_refcnt, RL_TAG);
|
||||||
|
+ zfs_refcount_add(&zp->z_refcnt, RL_TAG);
|
||||||
|
list_insert_head(&zll->z_list, zp);
|
||||||
|
}
|
||||||
|
mutex_exit(&zll->z_lock);
|
||||||
|
diff --git a/include/linux/vfs_compat.h b/include/linux/vfs_compat.h
|
||||||
|
index 90b3cca7..c01f5850 100644
|
||||||
|
--- a/include/linux/vfs_compat.h
|
||||||
|
+++ b/include/linux/vfs_compat.h
|
||||||
|
@@ -297,9 +297,6 @@ lseek_execute(
|
||||||
|
* This is several orders of magnitude larger than expected grace period.
|
||||||
|
* At 60 seconds the kernel will also begin issuing RCU stall warnings.
|
||||||
|
*/
|
||||||
|
-#ifdef refcount_t
|
||||||
|
-#undef refcount_t
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
#include <linux/posix_acl.h>
|
||||||
|
|
||||||
|
@@ -430,8 +427,6 @@ typedef mode_t zpl_equivmode_t;
|
||||||
|
#define zpl_posix_acl_valid(ip, acl) posix_acl_valid(acl)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#define refcount_t zfs_refcount_t
|
||||||
|
-
|
||||||
|
#endif /* CONFIG_FS_POSIX_ACL */
|
||||||
|
|
||||||
|
/*
|
||||||
|
diff --git a/include/sys/abd.h b/include/sys/abd.h
|
||||||
|
index cd710501..4898606a 100644
|
||||||
|
--- a/include/sys/abd.h
|
||||||
|
+++ b/include/sys/abd.h
|
||||||
|
@@ -52,7 +52,7 @@ typedef struct abd {
|
||||||
|
abd_flags_t abd_flags;
|
||||||
|
uint_t abd_size; /* excludes scattered abd_offset */
|
||||||
|
struct abd *abd_parent;
|
||||||
|
- refcount_t abd_children;
|
||||||
|
+ zfs_refcount_t abd_children;
|
||||||
|
union {
|
||||||
|
struct abd_scatter {
|
||||||
|
uint_t abd_offset;
|
||||||
|
diff --git a/include/sys/arc.h b/include/sys/arc.h
|
||||||
|
index 1ea4937b..943ebfb5 100644
|
||||||
|
--- a/include/sys/arc.h
|
||||||
|
+++ b/include/sys/arc.h
|
||||||
|
@@ -76,7 +76,7 @@ struct arc_prune {
|
||||||
|
void *p_private;
|
||||||
|
uint64_t p_adjust;
|
||||||
|
list_node_t p_node;
|
||||||
|
- refcount_t p_refcnt;
|
||||||
|
+ zfs_refcount_t p_refcnt;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef enum arc_strategy {
|
||||||
|
diff --git a/include/sys/arc_impl.h b/include/sys/arc_impl.h
|
||||||
|
index c6363f2a..ed2b0abe 100644
|
||||||
|
--- a/include/sys/arc_impl.h
|
||||||
|
+++ b/include/sys/arc_impl.h
|
||||||
|
@@ -74,12 +74,12 @@ typedef struct arc_state {
|
||||||
|
/*
|
||||||
|
* total amount of evictable data in this state
|
||||||
|
*/
|
||||||
|
- refcount_t arcs_esize[ARC_BUFC_NUMTYPES];
|
||||||
|
+ zfs_refcount_t arcs_esize[ARC_BUFC_NUMTYPES];
|
||||||
|
/*
|
||||||
|
* total amount of data in this state; this includes: evictable,
|
||||||
|
* non-evictable, ARC_BUFC_DATA, and ARC_BUFC_METADATA.
|
||||||
|
*/
|
||||||
|
- refcount_t arcs_size;
|
||||||
|
+ zfs_refcount_t arcs_size;
|
||||||
|
/*
|
||||||
|
* supports the "dbufs" kstat
|
||||||
|
*/
|
||||||
|
@@ -163,7 +163,7 @@ typedef struct l1arc_buf_hdr {
|
||||||
|
uint32_t b_l2_hits;
|
||||||
|
|
||||||
|
/* self protecting */
|
||||||
|
- refcount_t b_refcnt;
|
||||||
|
+ zfs_refcount_t b_refcnt;
|
||||||
|
|
||||||
|
arc_callback_t *b_acb;
|
||||||
|
abd_t *b_pabd;
|
||||||
|
@@ -180,7 +180,7 @@ typedef struct l2arc_dev {
|
||||||
|
kmutex_t l2ad_mtx; /* lock for buffer list */
|
||||||
|
list_t l2ad_buflist; /* buffer list */
|
||||||
|
list_node_t l2ad_node; /* device list node */
|
||||||
|
- refcount_t l2ad_alloc; /* allocated bytes */
|
||||||
|
+ zfs_refcount_t l2ad_alloc; /* allocated bytes */
|
||||||
|
} l2arc_dev_t;
|
||||||
|
|
||||||
|
typedef struct l2arc_buf_hdr {
|
||||||
|
diff --git a/include/sys/dbuf.h b/include/sys/dbuf.h
|
||||||
|
index f3f2007d..127acad3 100644
|
||||||
|
--- a/include/sys/dbuf.h
|
||||||
|
+++ b/include/sys/dbuf.h
|
||||||
|
@@ -212,7 +212,7 @@ typedef struct dmu_buf_impl {
|
||||||
|
* If nonzero, the buffer can't be destroyed.
|
||||||
|
* Protected by db_mtx.
|
||||||
|
*/
|
||||||
|
- refcount_t db_holds;
|
||||||
|
+ zfs_refcount_t db_holds;
|
||||||
|
|
||||||
|
/* buffer holding our data */
|
||||||
|
arc_buf_t *db_buf;
|
||||||
|
diff --git a/include/sys/dmu_tx.h b/include/sys/dmu_tx.h
|
||||||
|
index 74b7e111..96bbcb05 100644
|
||||||
|
--- a/include/sys/dmu_tx.h
|
||||||
|
+++ b/include/sys/dmu_tx.h
|
||||||
|
@@ -97,8 +97,8 @@ typedef struct dmu_tx_hold {
|
||||||
|
dmu_tx_t *txh_tx;
|
||||||
|
list_node_t txh_node;
|
||||||
|
struct dnode *txh_dnode;
|
||||||
|
- refcount_t txh_space_towrite;
|
||||||
|
- refcount_t txh_memory_tohold;
|
||||||
|
+ zfs_refcount_t txh_space_towrite;
|
||||||
|
+ zfs_refcount_t txh_memory_tohold;
|
||||||
|
enum dmu_tx_hold_type txh_type;
|
||||||
|
uint64_t txh_arg1;
|
||||||
|
uint64_t txh_arg2;
|
||||||
|
diff --git a/include/sys/dnode.h b/include/sys/dnode.h
|
||||||
|
index 2dd087b3..1e77e0a3 100644
|
||||||
|
--- a/include/sys/dnode.h
|
||||||
|
+++ b/include/sys/dnode.h
|
||||||
|
@@ -266,8 +266,8 @@ struct dnode {
|
||||||
|
uint8_t *dn_dirtyctx_firstset; /* dbg: contents meaningless */
|
||||||
|
|
||||||
|
/* protected by own devices */
|
||||||
|
- refcount_t dn_tx_holds;
|
||||||
|
- refcount_t dn_holds;
|
||||||
|
+ zfs_refcount_t dn_tx_holds;
|
||||||
|
+ zfs_refcount_t dn_holds;
|
||||||
|
|
||||||
|
kmutex_t dn_dbufs_mtx;
|
||||||
|
/*
|
||||||
|
diff --git a/include/sys/dsl_dataset.h b/include/sys/dsl_dataset.h
|
||||||
|
index 1281674b..d96f526d 100644
|
||||||
|
--- a/include/sys/dsl_dataset.h
|
||||||
|
+++ b/include/sys/dsl_dataset.h
|
||||||
|
@@ -186,7 +186,7 @@ typedef struct dsl_dataset {
|
||||||
|
* Owning counts as a long hold. See the comments above
|
||||||
|
* dsl_pool_hold() for details.
|
||||||
|
*/
|
||||||
|
- refcount_t ds_longholds;
|
||||||
|
+ zfs_refcount_t ds_longholds;
|
||||||
|
|
||||||
|
/* no locking; only for making guesses */
|
||||||
|
uint64_t ds_trysnap_txg;
|
||||||
|
diff --git a/include/sys/metaslab_impl.h b/include/sys/metaslab_impl.h
|
||||||
|
index f8a713a4..60151937 100644
|
||||||
|
--- a/include/sys/metaslab_impl.h
|
||||||
|
+++ b/include/sys/metaslab_impl.h
|
||||||
|
@@ -179,8 +179,7 @@ struct metaslab_class {
|
||||||
|
* number of allocations allowed.
|
||||||
|
*/
|
||||||
|
uint64_t mc_alloc_max_slots;
|
||||||
|
- refcount_t mc_alloc_slots;
|
||||||
|
-
|
||||||
|
+ zfs_refcount_t mc_alloc_slots;
|
||||||
|
uint64_t mc_alloc_groups; /* # of allocatable groups */
|
||||||
|
|
||||||
|
uint64_t mc_alloc; /* total allocated space */
|
||||||
|
@@ -230,7 +229,7 @@ struct metaslab_group {
|
||||||
|
* are unable to handle their share of allocations.
|
||||||
|
*/
|
||||||
|
uint64_t mg_max_alloc_queue_depth;
|
||||||
|
- refcount_t mg_alloc_queue_depth;
|
||||||
|
+ zfs_refcount_t mg_alloc_queue_depth;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A metalab group that can no longer allocate the minimum block
|
||||||
|
diff --git a/include/sys/refcount.h b/include/sys/refcount.h
|
||||||
|
index a96220b2..5c5198d8 100644
|
||||||
|
--- a/include/sys/refcount.h
|
||||||
|
+++ b/include/sys/refcount.h
|
||||||
|
@@ -41,17 +41,6 @@ extern "C" {
|
||||||
|
*/
|
||||||
|
#define FTAG ((char *)__func__)
|
||||||
|
|
||||||
|
-/*
|
||||||
|
- * Starting with 4.11, torvalds/linux@f405df5, the linux kernel defines a
|
||||||
|
- * refcount_t type of its own. The macro below effectively changes references
|
||||||
|
- * in the ZFS code from refcount_t to zfs_refcount_t at compile time, so that
|
||||||
|
- * existing code need not be altered, reducing conflicts when landing openZFS
|
||||||
|
- * patches.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-#define refcount_t zfs_refcount_t
|
||||||
|
-#define refcount_add zfs_refcount_add
|
||||||
|
-
|
||||||
|
#ifdef ZFS_DEBUG
|
||||||
|
typedef struct reference {
|
||||||
|
list_node_t ref_link;
|
||||||
|
@@ -69,23 +58,28 @@ typedef struct refcount {
|
||||||
|
uint64_t rc_removed_count;
|
||||||
|
} zfs_refcount_t;
|
||||||
|
|
||||||
|
-/* Note: refcount_t must be initialized with refcount_create[_untracked]() */
|
||||||
|
-
|
||||||
|
-void refcount_create(refcount_t *rc);
|
||||||
|
-void refcount_create_untracked(refcount_t *rc);
|
||||||
|
-void refcount_create_tracked(refcount_t *rc);
|
||||||
|
-void refcount_destroy(refcount_t *rc);
|
||||||
|
-void refcount_destroy_many(refcount_t *rc, uint64_t number);
|
||||||
|
-int refcount_is_zero(refcount_t *rc);
|
||||||
|
-int64_t refcount_count(refcount_t *rc);
|
||||||
|
-int64_t zfs_refcount_add(refcount_t *rc, void *holder_tag);
|
||||||
|
-int64_t refcount_remove(refcount_t *rc, void *holder_tag);
|
||||||
|
-int64_t refcount_add_many(refcount_t *rc, uint64_t number, void *holder_tag);
|
||||||
|
-int64_t refcount_remove_many(refcount_t *rc, uint64_t number, void *holder_tag);
|
||||||
|
-void refcount_transfer(refcount_t *dst, refcount_t *src);
|
||||||
|
-void refcount_transfer_ownership(refcount_t *, void *, void *);
|
||||||
|
-boolean_t refcount_held(refcount_t *, void *);
|
||||||
|
-boolean_t refcount_not_held(refcount_t *, void *);
|
||||||
|
+/*
|
||||||
|
+ * Note: zfs_refcount_t must be initialized with
|
||||||
|
+ * refcount_create[_untracked]()
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+void refcount_create(zfs_refcount_t *rc);
|
||||||
|
+void refcount_create_untracked(zfs_refcount_t *rc);
|
||||||
|
+void refcount_create_tracked(zfs_refcount_t *rc);
|
||||||
|
+void refcount_destroy(zfs_refcount_t *rc);
|
||||||
|
+void refcount_destroy_many(zfs_refcount_t *rc, uint64_t number);
|
||||||
|
+int refcount_is_zero(zfs_refcount_t *rc);
|
||||||
|
+int64_t refcount_count(zfs_refcount_t *rc);
|
||||||
|
+int64_t zfs_refcount_add(zfs_refcount_t *rc, void *holder_tag);
|
||||||
|
+int64_t refcount_remove(zfs_refcount_t *rc, void *holder_tag);
|
||||||
|
+int64_t refcount_add_many(zfs_refcount_t *rc, uint64_t number,
|
||||||
|
+ void *holder_tag);
|
||||||
|
+int64_t refcount_remove_many(zfs_refcount_t *rc, uint64_t number,
|
||||||
|
+ void *holder_tag);
|
||||||
|
+void refcount_transfer(zfs_refcount_t *dst, zfs_refcount_t *src);
|
||||||
|
+void refcount_transfer_ownership(zfs_refcount_t *, void *, void *);
|
||||||
|
+boolean_t refcount_held(zfs_refcount_t *, void *);
|
||||||
|
+boolean_t refcount_not_held(zfs_refcount_t *, void *);
|
||||||
|
|
||||||
|
void refcount_init(void);
|
||||||
|
void refcount_fini(void);
|
||||||
|
@@ -94,7 +88,7 @@ void refcount_fini(void);
|
||||||
|
|
||||||
|
typedef struct refcount {
|
||||||
|
uint64_t rc_count;
|
||||||
|
-} refcount_t;
|
||||||
|
+} zfs_refcount_t;
|
||||||
|
|
||||||
|
#define refcount_create(rc) ((rc)->rc_count = 0)
|
||||||
|
#define refcount_create_untracked(rc) ((rc)->rc_count = 0)
|
||||||
|
diff --git a/include/sys/rrwlock.h b/include/sys/rrwlock.h
|
||||||
|
index 7a328fd6..e1c1756c 100644
|
||||||
|
--- a/include/sys/rrwlock.h
|
||||||
|
+++ b/include/sys/rrwlock.h
|
||||||
|
@@ -57,8 +57,8 @@ typedef struct rrwlock {
|
||||||
|
kmutex_t rr_lock;
|
||||||
|
kcondvar_t rr_cv;
|
||||||
|
kthread_t *rr_writer;
|
||||||
|
- refcount_t rr_anon_rcount;
|
||||||
|
- refcount_t rr_linked_rcount;
|
||||||
|
+ zfs_refcount_t rr_anon_rcount;
|
||||||
|
+ zfs_refcount_t rr_linked_rcount;
|
||||||
|
boolean_t rr_writer_wanted;
|
||||||
|
boolean_t rr_track_all;
|
||||||
|
} rrwlock_t;
|
||||||
|
diff --git a/include/sys/sa_impl.h b/include/sys/sa_impl.h
|
||||||
|
index b68b7610..7eddd875 100644
|
||||||
|
--- a/include/sys/sa_impl.h
|
||||||
|
+++ b/include/sys/sa_impl.h
|
||||||
|
@@ -110,7 +110,7 @@ typedef struct sa_idx_tab {
|
||||||
|
list_node_t sa_next;
|
||||||
|
sa_lot_t *sa_layout;
|
||||||
|
uint16_t *sa_variable_lengths;
|
||||||
|
- refcount_t sa_refcount;
|
||||||
|
+ zfs_refcount_t sa_refcount;
|
||||||
|
uint32_t *sa_idx_tab; /* array of offsets */
|
||||||
|
} sa_idx_tab_t;
|
||||||
|
|
||||||
|
diff --git a/include/sys/spa_impl.h b/include/sys/spa_impl.h
|
||||||
|
index fa7490ac..62ac8f67 100644
|
||||||
|
--- a/include/sys/spa_impl.h
|
||||||
|
+++ b/include/sys/spa_impl.h
|
||||||
|
@@ -78,7 +78,7 @@ typedef struct spa_config_lock {
|
||||||
|
kthread_t *scl_writer;
|
||||||
|
int scl_write_wanted;
|
||||||
|
kcondvar_t scl_cv;
|
||||||
|
- refcount_t scl_count;
|
||||||
|
+ zfs_refcount_t scl_count;
|
||||||
|
} spa_config_lock_t;
|
||||||
|
|
||||||
|
typedef struct spa_config_dirent {
|
||||||
|
@@ -281,12 +281,12 @@ struct spa {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* spa_refcount & spa_config_lock must be the last elements
|
||||||
|
- * because refcount_t changes size based on compilation options.
|
||||||
|
+ * because zfs_refcount_t changes size based on compilation options.
|
||||||
|
* In order for the MDB module to function correctly, the other
|
||||||
|
* fields must remain in the same location.
|
||||||
|
*/
|
||||||
|
spa_config_lock_t spa_config_lock[SCL_LOCKS]; /* config changes */
|
||||||
|
- refcount_t spa_refcount; /* number of opens */
|
||||||
|
+ zfs_refcount_t spa_refcount; /* number of opens */
|
||||||
|
|
||||||
|
taskq_t *spa_upgrade_taskq; /* taskq for upgrade jobs */
|
||||||
|
};
|
||||||
|
diff --git a/include/sys/zap.h b/include/sys/zap.h
|
||||||
|
index 43b7fbd2..7acc3bec 100644
|
||||||
|
--- a/include/sys/zap.h
|
||||||
|
+++ b/include/sys/zap.h
|
||||||
|
@@ -226,7 +226,7 @@ int zap_lookup_norm_by_dnode(dnode_t *dn, const char *name,
|
||||||
|
boolean_t *ncp);
|
||||||
|
|
||||||
|
int zap_count_write_by_dnode(dnode_t *dn, const char *name,
|
||||||
|
- int add, refcount_t *towrite, refcount_t *tooverwrite);
|
||||||
|
+ int add, zfs_refcount_t *towrite, zfs_refcount_t *tooverwrite);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create an attribute with the given name and value.
|
||||||
|
diff --git a/include/sys/zfs_znode.h b/include/sys/zfs_znode.h
|
||||||
|
index 26d1eb37..33bc20d1 100644
|
||||||
|
--- a/include/sys/zfs_znode.h
|
||||||
|
+++ b/include/sys/zfs_znode.h
|
||||||
|
@@ -209,7 +209,7 @@ typedef struct znode_hold {
|
||||||
|
uint64_t zh_obj; /* object id */
|
||||||
|
kmutex_t zh_lock; /* lock serializing object access */
|
||||||
|
avl_node_t zh_node; /* avl tree linkage */
|
||||||
|
- refcount_t zh_refcount; /* active consumer reference count */
|
||||||
|
+ zfs_refcount_t zh_refcount; /* active consumer reference count */
|
||||||
|
} znode_hold_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
diff --git a/module/zfs/arc.c b/module/zfs/arc.c
|
||||||
|
index bcf74dd6..7518d5c8 100644
|
||||||
|
--- a/module/zfs/arc.c
|
||||||
|
+++ b/module/zfs/arc.c
|
||||||
|
@@ -1966,7 +1966,7 @@ add_reference(arc_buf_hdr_t *hdr, void *tag)
|
||||||
|
|
||||||
|
state = hdr->b_l1hdr.b_state;
|
||||||
|
|
||||||
|
- if ((refcount_add(&hdr->b_l1hdr.b_refcnt, tag) == 1) &&
|
||||||
|
+ if ((zfs_refcount_add(&hdr->b_l1hdr.b_refcnt, tag) == 1) &&
|
||||||
|
(state != arc_anon)) {
|
||||||
|
/* We don't use the L2-only state list. */
|
||||||
|
if (state != arc_l2c_only) {
|
||||||
|
@@ -2505,7 +2505,7 @@ arc_return_buf(arc_buf_t *buf, void *tag)
|
||||||
|
|
||||||
|
ASSERT3P(buf->b_data, !=, NULL);
|
||||||
|
ASSERT(HDR_HAS_L1HDR(hdr));
|
||||||
|
- (void) refcount_add(&hdr->b_l1hdr.b_refcnt, tag);
|
||||||
|
+ (void) zfs_refcount_add(&hdr->b_l1hdr.b_refcnt, tag);
|
||||||
|
(void) refcount_remove(&hdr->b_l1hdr.b_refcnt, arc_onloan_tag);
|
||||||
|
|
||||||
|
arc_loaned_bytes_update(-arc_buf_size(buf));
|
||||||
|
@@ -2519,7 +2519,7 @@ arc_loan_inuse_buf(arc_buf_t *buf, void *tag)
|
||||||
|
|
||||||
|
ASSERT3P(buf->b_data, !=, NULL);
|
||||||
|
ASSERT(HDR_HAS_L1HDR(hdr));
|
||||||
|
- (void) refcount_add(&hdr->b_l1hdr.b_refcnt, arc_onloan_tag);
|
||||||
|
+ (void) zfs_refcount_add(&hdr->b_l1hdr.b_refcnt, arc_onloan_tag);
|
||||||
|
(void) refcount_remove(&hdr->b_l1hdr.b_refcnt, tag);
|
||||||
|
|
||||||
|
arc_loaned_bytes_update(arc_buf_size(buf));
|
||||||
|
@@ -3533,7 +3533,7 @@ arc_prune_async(int64_t adjust)
|
||||||
|
if (refcount_count(&ap->p_refcnt) >= 2)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
- refcount_add(&ap->p_refcnt, ap->p_pfunc);
|
||||||
|
+ zfs_refcount_add(&ap->p_refcnt, ap->p_pfunc);
|
||||||
|
ap->p_adjust = adjust;
|
||||||
|
if (taskq_dispatch(arc_prune_taskq, arc_prune_task,
|
||||||
|
ap, TQ_SLEEP) == TASKQID_INVALID) {
|
||||||
|
@@ -5549,7 +5549,7 @@ arc_add_prune_callback(arc_prune_func_t *func, void *private)
|
||||||
|
refcount_create(&p->p_refcnt);
|
||||||
|
|
||||||
|
mutex_enter(&arc_prune_mtx);
|
||||||
|
- refcount_add(&p->p_refcnt, &arc_prune_list);
|
||||||
|
+ zfs_refcount_add(&p->p_refcnt, &arc_prune_list);
|
||||||
|
list_insert_head(&arc_prune_list, p);
|
||||||
|
mutex_exit(&arc_prune_mtx);
|
||||||
|
|
||||||
|
@@ -5815,7 +5815,7 @@ arc_release(arc_buf_t *buf, void *tag)
|
||||||
|
nhdr->b_l1hdr.b_mfu_hits = 0;
|
||||||
|
nhdr->b_l1hdr.b_mfu_ghost_hits = 0;
|
||||||
|
nhdr->b_l1hdr.b_l2_hits = 0;
|
||||||
|
- (void) refcount_add(&nhdr->b_l1hdr.b_refcnt, tag);
|
||||||
|
+ (void) zfs_refcount_add(&nhdr->b_l1hdr.b_refcnt, tag);
|
||||||
|
buf->b_hdr = nhdr;
|
||||||
|
|
||||||
|
mutex_exit(&buf->b_evict_lock);
|
||||||
|
diff --git a/module/zfs/dbuf.c b/module/zfs/dbuf.c
|
||||||
|
index 6edb39d6..5101c848 100644
|
||||||
|
--- a/module/zfs/dbuf.c
|
||||||
|
+++ b/module/zfs/dbuf.c
|
||||||
|
@@ -104,7 +104,7 @@ static boolean_t dbuf_evict_thread_exit;
|
||||||
|
* become eligible for arc eviction.
|
||||||
|
*/
|
||||||
|
static multilist_t *dbuf_cache;
|
||||||
|
-static refcount_t dbuf_cache_size;
|
||||||
|
+static zfs_refcount_t dbuf_cache_size;
|
||||||
|
unsigned long dbuf_cache_max_bytes = 100 * 1024 * 1024;
|
||||||
|
|
||||||
|
/* Cap the size of the dbuf cache to log2 fraction of arc size. */
|
||||||
|
@@ -2384,7 +2384,7 @@ dbuf_create(dnode_t *dn, uint8_t level, uint64_t blkid,
|
||||||
|
|
||||||
|
ASSERT(dn->dn_object == DMU_META_DNODE_OBJECT ||
|
||||||
|
refcount_count(&dn->dn_holds) > 0);
|
||||||
|
- (void) refcount_add(&dn->dn_holds, db);
|
||||||
|
+ (void) zfs_refcount_add(&dn->dn_holds, db);
|
||||||
|
atomic_inc_32(&dn->dn_dbufs_count);
|
||||||
|
|
||||||
|
dprintf_dbuf(db, "db=%p\n", db);
|
||||||
|
@@ -2749,7 +2749,7 @@ __dbuf_hold_impl(struct dbuf_hold_impl_data *dh)
|
||||||
|
(void) refcount_remove_many(&dbuf_cache_size,
|
||||||
|
dh->dh_db->db.db_size, dh->dh_db);
|
||||||
|
}
|
||||||
|
- (void) refcount_add(&dh->dh_db->db_holds, dh->dh_tag);
|
||||||
|
+ (void) zfs_refcount_add(&dh->dh_db->db_holds, dh->dh_tag);
|
||||||
|
DBUF_VERIFY(dh->dh_db);
|
||||||
|
mutex_exit(&dh->dh_db->db_mtx);
|
||||||
|
|
||||||
|
@@ -2873,7 +2873,7 @@ dbuf_rm_spill(dnode_t *dn, dmu_tx_t *tx)
|
||||||
|
void
|
||||||
|
dbuf_add_ref(dmu_buf_impl_t *db, void *tag)
|
||||||
|
{
|
||||||
|
- int64_t holds = refcount_add(&db->db_holds, tag);
|
||||||
|
+ int64_t holds = zfs_refcount_add(&db->db_holds, tag);
|
||||||
|
VERIFY3S(holds, >, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2893,7 +2893,7 @@ dbuf_try_add_ref(dmu_buf_t *db_fake, objset_t *os, uint64_t obj, uint64_t blkid,
|
||||||
|
|
||||||
|
if (found_db != NULL) {
|
||||||
|
if (db == found_db && dbuf_refcount(db) > db->db_dirtycnt) {
|
||||||
|
- (void) refcount_add(&db->db_holds, tag);
|
||||||
|
+ (void) zfs_refcount_add(&db->db_holds, tag);
|
||||||
|
result = B_TRUE;
|
||||||
|
}
|
||||||
|
mutex_exit(&found_db->db_mtx);
|
||||||
|
diff --git a/module/zfs/dmu.c b/module/zfs/dmu.c
|
||||||
|
index a09ac4f9..a76cdd9f 100644
|
||||||
|
--- a/module/zfs/dmu.c
|
||||||
|
+++ b/module/zfs/dmu.c
|
||||||
|
@@ -342,7 +342,7 @@ dmu_bonus_hold(objset_t *os, uint64_t object, void *tag, dmu_buf_t **dbp)
|
||||||
|
db = dn->dn_bonus;
|
||||||
|
|
||||||
|
/* as long as the bonus buf is held, the dnode will be held */
|
||||||
|
- if (refcount_add(&db->db_holds, tag) == 1) {
|
||||||
|
+ if (zfs_refcount_add(&db->db_holds, tag) == 1) {
|
||||||
|
VERIFY(dnode_add_ref(dn, db));
|
||||||
|
atomic_inc_32(&dn->dn_dbufs_count);
|
||||||
|
}
|
||||||
|
diff --git a/module/zfs/dmu_tx.c b/module/zfs/dmu_tx.c
|
||||||
|
index 6ebff267..b1508ffa 100644
|
||||||
|
--- a/module/zfs/dmu_tx.c
|
||||||
|
+++ b/module/zfs/dmu_tx.c
|
||||||
|
@@ -114,7 +114,7 @@ dmu_tx_hold_dnode_impl(dmu_tx_t *tx, dnode_t *dn, enum dmu_tx_hold_type type,
|
||||||
|
dmu_tx_hold_t *txh;
|
||||||
|
|
||||||
|
if (dn != NULL) {
|
||||||
|
- (void) refcount_add(&dn->dn_holds, tx);
|
||||||
|
+ (void) zfs_refcount_add(&dn->dn_holds, tx);
|
||||||
|
if (tx->tx_txg != 0) {
|
||||||
|
mutex_enter(&dn->dn_mtx);
|
||||||
|
/*
|
||||||
|
@@ -124,7 +124,7 @@ dmu_tx_hold_dnode_impl(dmu_tx_t *tx, dnode_t *dn, enum dmu_tx_hold_type type,
|
||||||
|
*/
|
||||||
|
ASSERT(dn->dn_assigned_txg == 0);
|
||||||
|
dn->dn_assigned_txg = tx->tx_txg;
|
||||||
|
- (void) refcount_add(&dn->dn_tx_holds, tx);
|
||||||
|
+ (void) zfs_refcount_add(&dn->dn_tx_holds, tx);
|
||||||
|
mutex_exit(&dn->dn_mtx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -916,7 +916,7 @@ dmu_tx_try_assign(dmu_tx_t *tx, uint64_t txg_how)
|
||||||
|
if (dn->dn_assigned_txg == 0)
|
||||||
|
dn->dn_assigned_txg = tx->tx_txg;
|
||||||
|
ASSERT3U(dn->dn_assigned_txg, ==, tx->tx_txg);
|
||||||
|
- (void) refcount_add(&dn->dn_tx_holds, tx);
|
||||||
|
+ (void) zfs_refcount_add(&dn->dn_tx_holds, tx);
|
||||||
|
mutex_exit(&dn->dn_mtx);
|
||||||
|
}
|
||||||
|
towrite += refcount_count(&txh->txh_space_towrite);
|
||||||
|
diff --git a/module/zfs/dnode.c b/module/zfs/dnode.c
|
||||||
|
index 4a169c49..77d38c36 100644
|
||||||
|
--- a/module/zfs/dnode.c
|
||||||
|
+++ b/module/zfs/dnode.c
|
||||||
|
@@ -1267,7 +1267,7 @@ dnode_hold_impl(objset_t *os, uint64_t object, int flag, int slots,
|
||||||
|
if ((flag & DNODE_MUST_BE_FREE) && type != DMU_OT_NONE)
|
||||||
|
return (SET_ERROR(EEXIST));
|
||||||
|
DNODE_VERIFY(dn);
|
||||||
|
- (void) refcount_add(&dn->dn_holds, tag);
|
||||||
|
+ (void) zfs_refcount_add(&dn->dn_holds, tag);
|
||||||
|
*dnp = dn;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
@@ -1484,7 +1484,7 @@ dnode_hold_impl(objset_t *os, uint64_t object, int flag, int slots,
|
||||||
|
return (type == DMU_OT_NONE ? ENOENT : EEXIST);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (refcount_add(&dn->dn_holds, tag) == 1)
|
||||||
|
+ if (zfs_refcount_add(&dn->dn_holds, tag) == 1)
|
||||||
|
dbuf_add_ref(db, dnh);
|
||||||
|
|
||||||
|
mutex_exit(&dn->dn_mtx);
|
||||||
|
@@ -1524,7 +1524,7 @@ dnode_add_ref(dnode_t *dn, void *tag)
|
||||||
|
mutex_exit(&dn->dn_mtx);
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
- VERIFY(1 < refcount_add(&dn->dn_holds, tag));
|
||||||
|
+ VERIFY(1 < zfs_refcount_add(&dn->dn_holds, tag));
|
||||||
|
mutex_exit(&dn->dn_mtx);
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
diff --git a/module/zfs/dsl_dataset.c b/module/zfs/dsl_dataset.c
|
||||||
|
index bd03b486..b7562bcd 100644
|
||||||
|
--- a/module/zfs/dsl_dataset.c
|
||||||
|
+++ b/module/zfs/dsl_dataset.c
|
||||||
|
@@ -645,7 +645,7 @@ void
|
||||||
|
dsl_dataset_long_hold(dsl_dataset_t *ds, void *tag)
|
||||||
|
{
|
||||||
|
ASSERT(dsl_pool_config_held(ds->ds_dir->dd_pool));
|
||||||
|
- (void) refcount_add(&ds->ds_longholds, tag);
|
||||||
|
+ (void) zfs_refcount_add(&ds->ds_longholds, tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
diff --git a/module/zfs/metaslab.c b/module/zfs/metaslab.c
|
||||||
|
index ee24850d..40658d51 100644
|
||||||
|
--- a/module/zfs/metaslab.c
|
||||||
|
+++ b/module/zfs/metaslab.c
|
||||||
|
@@ -2663,7 +2663,7 @@ metaslab_group_alloc_increment(spa_t *spa, uint64_t vdev, void *tag, int flags)
|
||||||
|
if (!mg->mg_class->mc_alloc_throttle_enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
- (void) refcount_add(&mg->mg_alloc_queue_depth, tag);
|
||||||
|
+ (void) zfs_refcount_add(&mg->mg_alloc_queue_depth, tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
@@ -3360,7 +3360,7 @@ metaslab_class_throttle_reserve(metaslab_class_t *mc, int slots, zio_t *zio,
|
||||||
|
* them individually when an I/O completes.
|
||||||
|
*/
|
||||||
|
for (d = 0; d < slots; d++) {
|
||||||
|
- reserved_slots = refcount_add(&mc->mc_alloc_slots, zio);
|
||||||
|
+ reserved_slots = zfs_refcount_add(&mc->mc_alloc_slots, zio);
|
||||||
|
}
|
||||||
|
zio->io_flags |= ZIO_FLAG_IO_ALLOCATING;
|
||||||
|
slot_reserved = B_TRUE;
|
||||||
|
diff --git a/module/zfs/refcount.c b/module/zfs/refcount.c
|
||||||
|
index a151acea..13f9bb6b 100644
|
||||||
|
--- a/module/zfs/refcount.c
|
||||||
|
+++ b/module/zfs/refcount.c
|
||||||
|
@@ -55,7 +55,7 @@ refcount_fini(void)
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
-refcount_create(refcount_t *rc)
|
||||||
|
+refcount_create(zfs_refcount_t *rc)
|
||||||
|
{
|
||||||
|
mutex_init(&rc->rc_mtx, NULL, MUTEX_DEFAULT, NULL);
|
||||||
|
list_create(&rc->rc_list, sizeof (reference_t),
|
||||||
|
@@ -68,21 +68,21 @@ refcount_create(refcount_t *rc)
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
-refcount_create_tracked(refcount_t *rc)
|
||||||
|
+refcount_create_tracked(zfs_refcount_t *rc)
|
||||||
|
{
|
||||||
|
refcount_create(rc);
|
||||||
|
rc->rc_tracked = B_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
-refcount_create_untracked(refcount_t *rc)
|
||||||
|
+refcount_create_untracked(zfs_refcount_t *rc)
|
||||||
|
{
|
||||||
|
refcount_create(rc);
|
||||||
|
rc->rc_tracked = B_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
-refcount_destroy_many(refcount_t *rc, uint64_t number)
|
||||||
|
+refcount_destroy_many(zfs_refcount_t *rc, uint64_t number)
|
||||||
|
{
|
||||||
|
reference_t *ref;
|
||||||
|
|
||||||
|
@@ -103,25 +103,25 @@ refcount_destroy_many(refcount_t *rc, uint64_t number)
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
-refcount_destroy(refcount_t *rc)
|
||||||
|
+refcount_destroy(zfs_refcount_t *rc)
|
||||||
|
{
|
||||||
|
refcount_destroy_many(rc, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
-refcount_is_zero(refcount_t *rc)
|
||||||
|
+refcount_is_zero(zfs_refcount_t *rc)
|
||||||
|
{
|
||||||
|
return (rc->rc_count == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
-refcount_count(refcount_t *rc)
|
||||||
|
+refcount_count(zfs_refcount_t *rc)
|
||||||
|
{
|
||||||
|
return (rc->rc_count);
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
-refcount_add_many(refcount_t *rc, uint64_t number, void *holder)
|
||||||
|
+refcount_add_many(zfs_refcount_t *rc, uint64_t number, void *holder)
|
||||||
|
{
|
||||||
|
reference_t *ref = NULL;
|
||||||
|
int64_t count;
|
||||||
|
@@ -143,13 +143,13 @@ refcount_add_many(refcount_t *rc, uint64_t number, void *holder)
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
-zfs_refcount_add(refcount_t *rc, void *holder)
|
||||||
|
+zfs_refcount_add(zfs_refcount_t *rc, void *holder)
|
||||||
|
{
|
||||||
|
return (refcount_add_many(rc, 1, holder));
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
-refcount_remove_many(refcount_t *rc, uint64_t number, void *holder)
|
||||||
|
+refcount_remove_many(zfs_refcount_t *rc, uint64_t number, void *holder)
|
||||||
|
{
|
||||||
|
reference_t *ref;
|
||||||
|
int64_t count;
|
||||||
|
@@ -197,13 +197,13 @@ refcount_remove_many(refcount_t *rc, uint64_t number, void *holder)
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
-refcount_remove(refcount_t *rc, void *holder)
|
||||||
|
+refcount_remove(zfs_refcount_t *rc, void *holder)
|
||||||
|
{
|
||||||
|
return (refcount_remove_many(rc, 1, holder));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
-refcount_transfer(refcount_t *dst, refcount_t *src)
|
||||||
|
+refcount_transfer(zfs_refcount_t *dst, zfs_refcount_t *src)
|
||||||
|
{
|
||||||
|
int64_t count, removed_count;
|
||||||
|
list_t list, removed;
|
||||||
|
@@ -234,7 +234,7 @@ refcount_transfer(refcount_t *dst, refcount_t *src)
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
-refcount_transfer_ownership(refcount_t *rc, void *current_holder,
|
||||||
|
+refcount_transfer_ownership(zfs_refcount_t *rc, void *current_holder,
|
||||||
|
void *new_holder)
|
||||||
|
{
|
||||||
|
reference_t *ref;
|
||||||
|
@@ -264,7 +264,7 @@ refcount_transfer_ownership(refcount_t *rc, void *current_holder,
|
||||||
|
* might be held.
|
||||||
|
*/
|
||||||
|
boolean_t
|
||||||
|
-refcount_held(refcount_t *rc, void *holder)
|
||||||
|
+refcount_held(zfs_refcount_t *rc, void *holder)
|
||||||
|
{
|
||||||
|
reference_t *ref;
|
||||||
|
|
||||||
|
@@ -292,7 +292,7 @@ refcount_held(refcount_t *rc, void *holder)
|
||||||
|
* since the reference might not be held.
|
||||||
|
*/
|
||||||
|
boolean_t
|
||||||
|
-refcount_not_held(refcount_t *rc, void *holder)
|
||||||
|
+refcount_not_held(zfs_refcount_t *rc, void *holder)
|
||||||
|
{
|
||||||
|
reference_t *ref;
|
||||||
|
|
||||||
|
diff --git a/module/zfs/rrwlock.c b/module/zfs/rrwlock.c
|
||||||
|
index 704f7606..effff330 100644
|
||||||
|
--- a/module/zfs/rrwlock.c
|
||||||
|
+++ b/module/zfs/rrwlock.c
|
||||||
|
@@ -183,9 +183,9 @@ rrw_enter_read_impl(rrwlock_t *rrl, boolean_t prio, void *tag)
|
||||||
|
if (rrl->rr_writer_wanted || rrl->rr_track_all) {
|
||||||
|
/* may or may not be a re-entrant enter */
|
||||||
|
rrn_add(rrl, tag);
|
||||||
|
- (void) refcount_add(&rrl->rr_linked_rcount, tag);
|
||||||
|
+ (void) zfs_refcount_add(&rrl->rr_linked_rcount, tag);
|
||||||
|
} else {
|
||||||
|
- (void) refcount_add(&rrl->rr_anon_rcount, tag);
|
||||||
|
+ (void) zfs_refcount_add(&rrl->rr_anon_rcount, tag);
|
||||||
|
}
|
||||||
|
ASSERT(rrl->rr_writer == NULL);
|
||||||
|
mutex_exit(&rrl->rr_lock);
|
||||||
|
diff --git a/module/zfs/sa.c b/module/zfs/sa.c
|
||||||
|
index 1fb1a8b5..df4f6fd8 100644
|
||||||
|
--- a/module/zfs/sa.c
|
||||||
|
+++ b/module/zfs/sa.c
|
||||||
|
@@ -1337,7 +1337,7 @@ sa_idx_tab_hold(objset_t *os, sa_idx_tab_t *idx_tab)
|
||||||
|
ASSERTV(sa_os_t *sa = os->os_sa);
|
||||||
|
|
||||||
|
ASSERT(MUTEX_HELD(&sa->sa_lock));
|
||||||
|
- (void) refcount_add(&idx_tab->sa_refcount, NULL);
|
||||||
|
+ (void) zfs_refcount_add(&idx_tab->sa_refcount, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
diff --git a/module/zfs/spa_misc.c b/module/zfs/spa_misc.c
|
||||||
|
index cc1c641d..f6c9b40b 100644
|
||||||
|
--- a/module/zfs/spa_misc.c
|
||||||
|
+++ b/module/zfs/spa_misc.c
|
||||||
|
@@ -80,7 +80,7 @@
|
||||||
|
* definition they must have an existing reference, and will never need
|
||||||
|
* to lookup a spa_t by name.
|
||||||
|
*
|
||||||
|
- * spa_refcount (per-spa refcount_t protected by mutex)
|
||||||
|
+ * spa_refcount (per-spa zfs_refcount_t protected by mutex)
|
||||||
|
*
|
||||||
|
* This reference count keep track of any active users of the spa_t. The
|
||||||
|
* spa_t cannot be destroyed or freed while this is non-zero. Internally,
|
||||||
|
@@ -414,7 +414,7 @@ spa_config_tryenter(spa_t *spa, int locks, void *tag, krw_t rw)
|
||||||
|
}
|
||||||
|
scl->scl_writer = curthread;
|
||||||
|
}
|
||||||
|
- (void) refcount_add(&scl->scl_count, tag);
|
||||||
|
+ (void) zfs_refcount_add(&scl->scl_count, tag);
|
||||||
|
mutex_exit(&scl->scl_lock);
|
||||||
|
}
|
||||||
|
return (1);
|
||||||
|
@@ -448,7 +448,7 @@ spa_config_enter(spa_t *spa, int locks, void *tag, krw_t rw)
|
||||||
|
}
|
||||||
|
scl->scl_writer = curthread;
|
||||||
|
}
|
||||||
|
- (void) refcount_add(&scl->scl_count, tag);
|
||||||
|
+ (void) zfs_refcount_add(&scl->scl_count, tag);
|
||||||
|
mutex_exit(&scl->scl_lock);
|
||||||
|
}
|
||||||
|
ASSERT(wlocks_held <= locks);
|
||||||
|
@@ -768,7 +768,7 @@ spa_open_ref(spa_t *spa, void *tag)
|
||||||
|
{
|
||||||
|
ASSERT(refcount_count(&spa->spa_refcount) >= spa->spa_minref ||
|
||||||
|
MUTEX_HELD(&spa_namespace_lock));
|
||||||
|
- (void) refcount_add(&spa->spa_refcount, tag);
|
||||||
|
+ (void) zfs_refcount_add(&spa->spa_refcount, tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
diff --git a/module/zfs/zfs_ctldir.c b/module/zfs/zfs_ctldir.c
|
||||||
|
index 0ab5b4f0..de3c5a41 100644
|
||||||
|
--- a/module/zfs/zfs_ctldir.c
|
||||||
|
+++ b/module/zfs/zfs_ctldir.c
|
||||||
|
@@ -120,7 +120,7 @@ typedef struct {
|
||||||
|
taskqid_t se_taskqid; /* scheduled unmount taskqid */
|
||||||
|
avl_node_t se_node_name; /* zfs_snapshots_by_name link */
|
||||||
|
avl_node_t se_node_objsetid; /* zfs_snapshots_by_objsetid link */
|
||||||
|
- refcount_t se_refcount; /* reference count */
|
||||||
|
+ zfs_refcount_t se_refcount; /* reference count */
|
||||||
|
} zfs_snapentry_t;
|
||||||
|
|
||||||
|
static void zfsctl_snapshot_unmount_delay_impl(zfs_snapentry_t *se, int delay);
|
||||||
|
@@ -169,7 +169,7 @@ zfsctl_snapshot_free(zfs_snapentry_t *se)
|
||||||
|
static void
|
||||||
|
zfsctl_snapshot_hold(zfs_snapentry_t *se)
|
||||||
|
{
|
||||||
|
- refcount_add(&se->se_refcount, NULL);
|
||||||
|
+ zfs_refcount_add(&se->se_refcount, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -192,7 +192,7 @@ static void
|
||||||
|
zfsctl_snapshot_add(zfs_snapentry_t *se)
|
||||||
|
{
|
||||||
|
ASSERT(RW_WRITE_HELD(&zfs_snapshot_lock));
|
||||||
|
- refcount_add(&se->se_refcount, NULL);
|
||||||
|
+ zfs_refcount_add(&se->se_refcount, NULL);
|
||||||
|
avl_add(&zfs_snapshots_by_name, se);
|
||||||
|
avl_add(&zfs_snapshots_by_objsetid, se);
|
||||||
|
}
|
||||||
|
@@ -269,7 +269,7 @@ zfsctl_snapshot_find_by_name(char *snapname)
|
||||||
|
search.se_name = snapname;
|
||||||
|
se = avl_find(&zfs_snapshots_by_name, &search, NULL);
|
||||||
|
if (se)
|
||||||
|
- refcount_add(&se->se_refcount, NULL);
|
||||||
|
+ zfs_refcount_add(&se->se_refcount, NULL);
|
||||||
|
|
||||||
|
return (se);
|
||||||
|
}
|
||||||
|
@@ -290,7 +290,7 @@ zfsctl_snapshot_find_by_objsetid(spa_t *spa, uint64_t objsetid)
|
||||||
|
search.se_objsetid = objsetid;
|
||||||
|
se = avl_find(&zfs_snapshots_by_objsetid, &search, NULL);
|
||||||
|
if (se)
|
||||||
|
- refcount_add(&se->se_refcount, NULL);
|
||||||
|
+ zfs_refcount_add(&se->se_refcount, NULL);
|
||||||
|
|
||||||
|
return (se);
|
||||||
|
}
|
||||||
|
diff --git a/module/zfs/zfs_znode.c b/module/zfs/zfs_znode.c
|
||||||
|
index e222c791..0ca10f82 100644
|
||||||
|
--- a/module/zfs/zfs_znode.c
|
||||||
|
+++ b/module/zfs/zfs_znode.c
|
||||||
|
@@ -272,7 +272,7 @@ zfs_znode_hold_enter(zfsvfs_t *zfsvfs, uint64_t obj)
|
||||||
|
ASSERT3U(zh->zh_obj, ==, obj);
|
||||||
|
found = B_TRUE;
|
||||||
|
}
|
||||||
|
- refcount_add(&zh->zh_refcount, NULL);
|
||||||
|
+ zfs_refcount_add(&zh->zh_refcount, NULL);
|
||||||
|
mutex_exit(&zfsvfs->z_hold_locks[i]);
|
||||||
|
|
||||||
|
if (found == B_TRUE)
|
2527
zfs-patches/0014-Prefix-all-refcount-functions-with-zfs_.patch
Normal file
2527
zfs-patches/0014-Prefix-all-refcount-functions-with-zfs_.patch
Normal file
File diff suppressed because it is too large
Load Diff
29
zfs-patches/0015-Fix-arc_release-refcount.patch
Normal file
29
zfs-patches/0015-Fix-arc_release-refcount.patch
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Date: Mon, 8 Oct 2018 14:59:34 -0700
|
||||||
|
Subject: [PATCH] Fix arc_release() refcount
|
||||||
|
|
||||||
|
Update arc_release to use arc_buf_size(). This hunk was accidentally
|
||||||
|
dropped when porting compressed send/recv, 2aa34383b.
|
||||||
|
|
||||||
|
Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
|
||||||
|
Signed-off-by: Tom Caputi <tcaputi@datto.com>
|
||||||
|
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Closes #8000
|
||||||
|
---
|
||||||
|
module/zfs/arc.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/module/zfs/arc.c b/module/zfs/arc.c
|
||||||
|
index 32ac0837..a7fb2429 100644
|
||||||
|
--- a/module/zfs/arc.c
|
||||||
|
+++ b/module/zfs/arc.c
|
||||||
|
@@ -5831,7 +5831,7 @@ arc_release(arc_buf_t *buf, void *tag)
|
||||||
|
|
||||||
|
mutex_exit(&buf->b_evict_lock);
|
||||||
|
(void) zfs_refcount_add_many(&arc_anon->arcs_size,
|
||||||
|
- HDR_GET_LSIZE(nhdr), buf);
|
||||||
|
+ arc_buf_size(buf), buf);
|
||||||
|
} else {
|
||||||
|
mutex_exit(&buf->b_evict_lock);
|
||||||
|
ASSERT(zfs_refcount_count(&hdr->b_l1hdr.b_refcnt) == 1);
|
59
zfs-patches/0016-Allow-use-of-pool-GUID-as-root-pool.patch
Normal file
59
zfs-patches/0016-Allow-use-of-pool-GUID-as-root-pool.patch
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: George Melikov <mail@gmelikov.ru>
|
||||||
|
Date: Wed, 24 Oct 2018 06:06:40 +0300
|
||||||
|
Subject: [PATCH] Allow use of pool GUID as root pool
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
It's helpful if there are pools with same names,
|
||||||
|
but you need to use only one of them.
|
||||||
|
|
||||||
|
Main case is twin servers, meanwhile some software
|
||||||
|
requires the same name of pools (e.g. Proxmox).
|
||||||
|
|
||||||
|
Reviewed-by: Kash Pande <kash@tripleback.net>
|
||||||
|
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Signed-off-by: George Melikov <mail@gmelikov.ru>
|
||||||
|
Signed-off-by: Igor ‘guardian’ Lidin of Moscow, Russia
|
||||||
|
Closes #8052
|
||||||
|
---
|
||||||
|
contrib/initramfs/scripts/zfs | 11 ++++++++++-
|
||||||
|
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/contrib/initramfs/scripts/zfs b/contrib/initramfs/scripts/zfs
|
||||||
|
index 86329e76..dacd71d2 100644
|
||||||
|
--- a/contrib/initramfs/scripts/zfs
|
||||||
|
+++ b/contrib/initramfs/scripts/zfs
|
||||||
|
@@ -193,7 +193,7 @@ import_pool()
|
||||||
|
|
||||||
|
# Verify that the pool isn't already imported
|
||||||
|
# Make as sure as we can to not require '-f' to import.
|
||||||
|
- "${ZPOOL}" status "$pool" > /dev/null 2>&1 && return 0
|
||||||
|
+ "${ZPOOL}" get name,guid -o value -H 2>/dev/null | grep -Fxq "$pool" && return 0
|
||||||
|
|
||||||
|
# For backwards compatibility, make sure that ZPOOL_IMPORT_PATH is set
|
||||||
|
# to something we can use later with the real import(s). We want to
|
||||||
|
@@ -772,6 +772,7 @@ mountroot()
|
||||||
|
# root=zfs:<pool>/<dataset> (uses this for rpool - first part, without 'zfs:')
|
||||||
|
#
|
||||||
|
# Option <dataset> could also be <snapshot>
|
||||||
|
+ # Option <pool> could also be <guid>
|
||||||
|
|
||||||
|
# ------------
|
||||||
|
# Support force option
|
||||||
|
@@ -889,6 +890,14 @@ mountroot()
|
||||||
|
/bin/sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
+ # In case the pool was specified as guid, resolve guid to name
|
||||||
|
+ pool="$("${ZPOOL}" get name,guid -o name,value -H | \
|
||||||
|
+ awk -v pool="${ZFS_RPOOL}" '$2 == pool { print $1 }')"
|
||||||
|
+ if [ -n "$pool" ]; then
|
||||||
|
+ ZFS_BOOTFS="${pool}/${ZFS_BOOTFS#*/}"
|
||||||
|
+ ZFS_RPOOL="${pool}"
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
# Set elevator=noop on the root pool's vdevs' disks. ZFS already
|
||||||
|
# does this for wholedisk vdevs (for all pools), so this is only
|
||||||
|
# important for partitions.
|
67
zfs-patches/0017-ZTS-Update-O_TMPFILE-support-check.patch
Normal file
67
zfs-patches/0017-ZTS-Update-O_TMPFILE-support-check.patch
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Date: Mon, 14 May 2018 20:36:30 -0700
|
||||||
|
Subject: [PATCH] ZTS: Update O_TMPFILE support check
|
||||||
|
|
||||||
|
In CentOS 7.5 the kernel provided a compatibility wrapper to support
|
||||||
|
O_TMPFILE. This results in the test setup script correctly detecting
|
||||||
|
kernel support. But the ZFS module was built without O_TMPFILE
|
||||||
|
support due to the non-standard CentOS kernel interface.
|
||||||
|
|
||||||
|
Handle this case by updating the setup check to fail either when
|
||||||
|
the kernel or the ZFS module fail to provide support. The reason
|
||||||
|
will be clearly logged in the test results.
|
||||||
|
|
||||||
|
Reviewed-by: Chunwei Chen <tuxoko@gmail.com>
|
||||||
|
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Closes #7528
|
||||||
|
---
|
||||||
|
tests/zfs-tests/tests/functional/tmpfile/setup.ksh | 11 +++++++----
|
||||||
|
tests/zfs-tests/tests/functional/tmpfile/tmpfile_test.c | 11 ++++++-----
|
||||||
|
2 files changed, 13 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tests/zfs-tests/tests/functional/tmpfile/setup.ksh b/tests/zfs-tests/tests/functional/tmpfile/setup.ksh
|
||||||
|
index 243a5b77..bc00a2a2 100755
|
||||||
|
--- a/tests/zfs-tests/tests/functional/tmpfile/setup.ksh
|
||||||
|
+++ b/tests/zfs-tests/tests/functional/tmpfile/setup.ksh
|
||||||
|
@@ -31,9 +31,12 @@
|
||||||
|
|
||||||
|
. $STF_SUITE/include/libtest.shlib
|
||||||
|
|
||||||
|
-if ! $STF_SUITE/tests/functional/tmpfile/tmpfile_test /tmp; then
|
||||||
|
- log_unsupported "The kernel doesn't support O_TMPFILE."
|
||||||
|
+DISK=${DISKS%% *}
|
||||||
|
+default_setup_noexit $DISK
|
||||||
|
+
|
||||||
|
+if ! $STF_SUITE/tests/functional/tmpfile/tmpfile_test $TESTDIR; then
|
||||||
|
+ default_cleanup_noexit
|
||||||
|
+ log_unsupported "The kernel/filesystem doesn't support O_TMPFILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
-DISK=${DISKS%% *}
|
||||||
|
-default_setup $DISK
|
||||||
|
+log_pass
|
||||||
|
diff --git a/tests/zfs-tests/tests/functional/tmpfile/tmpfile_test.c b/tests/zfs-tests/tests/functional/tmpfile/tmpfile_test.c
|
||||||
|
index 5fb67b47..91527ac5 100644
|
||||||
|
--- a/tests/zfs-tests/tests/functional/tmpfile/tmpfile_test.c
|
||||||
|
+++ b/tests/zfs-tests/tests/functional/tmpfile/tmpfile_test.c
|
||||||
|
@@ -36,13 +36,14 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
|
fd = open(argv[1], O_TMPFILE | O_WRONLY, 0666);
|
||||||
|
if (fd < 0) {
|
||||||
|
- /*
|
||||||
|
- * Only fail on EISDIR. If we get EOPNOTSUPP, that means
|
||||||
|
- * kernel support O_TMPFILE, but the path at argv[1] doesn't.
|
||||||
|
- */
|
||||||
|
if (errno == EISDIR) {
|
||||||
|
- fprintf(stderr, "kernel doesn't support O_TMPFILE\n");
|
||||||
|
+ fprintf(stderr,
|
||||||
|
+ "The kernel doesn't support O_TMPFILE\n");
|
||||||
|
return (1);
|
||||||
|
+ } else if (errno == EOPNOTSUPP) {
|
||||||
|
+ fprintf(stderr,
|
||||||
|
+ "The filesystem doesn't support O_TMPFILE\n");
|
||||||
|
+ return (2);
|
||||||
|
}
|
||||||
|
perror("open");
|
||||||
|
} else {
|
@ -0,0 +1,35 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Date: Wed, 24 Oct 2018 23:26:08 -0700
|
||||||
|
Subject: [PATCH] Fix flake8 "invalid escape sequence 'x'" warning
|
||||||
|
|
||||||
|
From, https://lintlyci.github.io/Flake8Rules/rules/W605.html
|
||||||
|
|
||||||
|
As of Python 3.6, a backslash-character pair that is not a valid
|
||||||
|
escape sequence now generates a DeprecationWarning. Although this
|
||||||
|
will eventually become a SyntaxError, that will not be for several
|
||||||
|
Python releases.
|
||||||
|
|
||||||
|
Note 'float_pobj' was simply removed from arcstat.py since it
|
||||||
|
was entirely unused.
|
||||||
|
|
||||||
|
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
|
||||||
|
Reviewed-by: Richard Elling <Richard.Elling@RichardElling.com>
|
||||||
|
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Closes #8056
|
||||||
|
---
|
||||||
|
cmd/arcstat/arcstat.py | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/cmd/arcstat/arcstat.py b/cmd/arcstat/arcstat.py
|
||||||
|
index b52a8c29..d7d3e9b7 100755
|
||||||
|
--- a/cmd/arcstat/arcstat.py
|
||||||
|
+++ b/cmd/arcstat/arcstat.py
|
||||||
|
@@ -112,7 +112,6 @@ cur = {}
|
||||||
|
d = {}
|
||||||
|
out = None
|
||||||
|
kstat = None
|
||||||
|
-float_pobj = re.compile("^[0-9]+(\.[0-9]+)?$")
|
||||||
|
|
||||||
|
|
||||||
|
def detailed_usage():
|
@ -0,0 +1,51 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tony Hutter <hutter2@llnl.gov>
|
||||||
|
Date: Wed, 7 Nov 2018 15:48:24 -0800
|
||||||
|
Subject: [PATCH] Add BuildRequires gcc, make, elfutils-libelf-devel
|
||||||
|
|
||||||
|
This adds a BuildRequires for gcc, make, and elfutils-libelf-devel
|
||||||
|
into our spec files. gcc has been a packaging requirement for
|
||||||
|
awhile now:
|
||||||
|
|
||||||
|
https://fedoraproject.org/wiki/Packaging:C_and_C%2B%2B
|
||||||
|
|
||||||
|
These additional BuildRequires allow us to mock build in
|
||||||
|
Fedora 29.
|
||||||
|
|
||||||
|
Reviewed-by: Neal Gompa <ngompa@datto.com>
|
||||||
|
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||||
|
Signed-off-by: Tony Hutter <hutter2@llnl.gov>
|
||||||
|
Closes #8095
|
||||||
|
Closes #8102
|
||||||
|
---
|
||||||
|
rpm/generic/zfs-kmod.spec.in | 4 ++++
|
||||||
|
rpm/generic/zfs.spec.in | 1 +
|
||||||
|
2 files changed, 5 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/rpm/generic/zfs-kmod.spec.in b/rpm/generic/zfs-kmod.spec.in
|
||||||
|
index d4746f5b..ecf14ece 100644
|
||||||
|
--- a/rpm/generic/zfs-kmod.spec.in
|
||||||
|
+++ b/rpm/generic/zfs-kmod.spec.in
|
||||||
|
@@ -52,6 +52,10 @@ URL: http://zfsonlinux.org/
|
||||||
|
Source0: %{module}-%{version}.tar.gz
|
||||||
|
Source10: kmodtool
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id} -u -n)
|
||||||
|
+%if 0%{?rhel}%{?fedora}
|
||||||
|
+BuildRequires: gcc, make
|
||||||
|
+BuildRequires: elfutils-libelf-devel
|
||||||
|
+%endif
|
||||||
|
|
||||||
|
# The developments headers will conflict with the dkms packages.
|
||||||
|
Conflicts: %{module}-dkms
|
||||||
|
diff --git a/rpm/generic/zfs.spec.in b/rpm/generic/zfs.spec.in
|
||||||
|
index fa6f1571..c1b8f2c8 100644
|
||||||
|
--- a/rpm/generic/zfs.spec.in
|
||||||
|
+++ b/rpm/generic/zfs.spec.in
|
||||||
|
@@ -91,6 +91,7 @@ Provides: %{name}-kmod-common = %{version}
|
||||||
|
Conflicts: zfs-fuse
|
||||||
|
|
||||||
|
%if 0%{?rhel}%{?fedora}%{?suse_version}
|
||||||
|
+BuildRequires: gcc, make
|
||||||
|
BuildRequires: zlib-devel
|
||||||
|
BuildRequires: libuuid-devel
|
||||||
|
BuildRequires: libblkid-devel
|
55
zfs-patches/0020-Tag-zfs-0.7.12.patch
Normal file
55
zfs-patches/0020-Tag-zfs-0.7.12.patch
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tony Hutter <hutter2@llnl.gov>
|
||||||
|
Date: Thu, 8 Nov 2018 14:38:37 -0800
|
||||||
|
Subject: [PATCH] Tag zfs-0.7.12
|
||||||
|
|
||||||
|
META file and changelog updated.
|
||||||
|
|
||||||
|
Signed-off-by: Tony Hutter <hutter2@llnl.gov>
|
||||||
|
---
|
||||||
|
META | 2 +-
|
||||||
|
rpm/generic/zfs-kmod.spec.in | 3 +++
|
||||||
|
rpm/generic/zfs.spec.in | 3 +++
|
||||||
|
3 files changed, 7 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/META b/META
|
||||||
|
index 4b0cdb9c..8631f885 100644
|
||||||
|
--- a/META
|
||||||
|
+++ b/META
|
||||||
|
@@ -1,7 +1,7 @@
|
||||||
|
Meta: 1
|
||||||
|
Name: zfs
|
||||||
|
Branch: 1.0
|
||||||
|
-Version: 0.7.11
|
||||||
|
+Version: 0.7.12
|
||||||
|
Release: 1
|
||||||
|
Release-Tags: relext
|
||||||
|
License: CDDL
|
||||||
|
diff --git a/rpm/generic/zfs-kmod.spec.in b/rpm/generic/zfs-kmod.spec.in
|
||||||
|
index ecf14ece..3b97e91d 100644
|
||||||
|
--- a/rpm/generic/zfs-kmod.spec.in
|
||||||
|
+++ b/rpm/generic/zfs-kmod.spec.in
|
||||||
|
@@ -195,6 +195,9 @@ chmod u+x ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/*/*/*
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
+* Thu Nov 08 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.12-1
|
||||||
|
+- Released 0.7.12-1, detailed release notes are available at:
|
||||||
|
+- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.12
|
||||||
|
* Thu Sep 13 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.11-1
|
||||||
|
- Released 0.7.11-1, detailed release notes are available at:
|
||||||
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.11
|
||||||
|
diff --git a/rpm/generic/zfs.spec.in b/rpm/generic/zfs.spec.in
|
||||||
|
index c1b8f2c8..f28793a8 100644
|
||||||
|
--- a/rpm/generic/zfs.spec.in
|
||||||
|
+++ b/rpm/generic/zfs.spec.in
|
||||||
|
@@ -372,6 +372,9 @@ systemctl --system daemon-reload >/dev/null || true
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
+* Thu Nov 08 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.12-1
|
||||||
|
+- Released 0.7.12-1, detailed release notes are available at:
|
||||||
|
+- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.12
|
||||||
|
* Thu Sep 13 2018 Tony Hutter <hutter2@llnl.gov> - 0.7.11-1
|
||||||
|
- Released 0.7.11-1, detailed release notes are available at:
|
||||||
|
- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.11
|
@ -1,9 +1,20 @@
|
|||||||
0001-remove-DKMS-modules-and-dracut-build.patch
|
0001-remove-DKMS-modules-and-dracut-build.patch
|
||||||
0002-import-with-d-dev-disk-by-id-in-scan-service.patch
|
0002-import-with-d-dev-disk-by-id-in-scan-service.patch
|
||||||
0003-always-load-ZFS-module-on-boot.patch
|
0003-always-load-ZFS-module-on-boot.patch
|
||||||
0004-Fix-deadlock-between-zfs-umount-snapentry_expire.patch
|
0004-Add-Breaks-Replaces-to-zfs-initramfs.patch
|
||||||
0005-Fix-race-in-dnode_check_slots_free.patch
|
0005-Revert-Install-init-scripts-to-support-non-systemd-s.patch
|
||||||
0006-Reduce-taskq-and-context-switch-cost-of-zio-pipe.patch
|
0006-Fix-deadlock-between-zfs-umount-snapentry_expire.patch
|
||||||
0007-deadlock-between-mm_sem-and-tx-assign-in-zfs_write-a.patch
|
0007-deadlock-between-mm_sem-and-tx-assign-in-zfs_write-a.patch
|
||||||
0008-Add-Breaks-Replaces-to-zfs-initramfs.patch
|
0008-Fix-race-in-dnode_check_slots_free.patch
|
||||||
0009-Revert-Install-init-scripts-to-support-non-systemd-s.patch
|
0009-Reduce-taskq-and-context-switch-cost-of-zio-pipe.patch
|
||||||
|
0010-Skip-import-activity-test-in-more-zdb-code-paths.patch
|
||||||
|
0011-Fix-statfs-2-for-32-bit-user-space.patch
|
||||||
|
0012-Zpool-iostat-remove-latency-queue-scaling.patch
|
||||||
|
0013-Linux-4.19-rc3-compat-Remove-refcount_t-compat.patch
|
||||||
|
0014-Prefix-all-refcount-functions-with-zfs_.patch
|
||||||
|
0015-Fix-arc_release-refcount.patch
|
||||||
|
0016-Allow-use-of-pool-GUID-as-root-pool.patch
|
||||||
|
0017-ZTS-Update-O_TMPFILE-support-check.patch
|
||||||
|
0018-Fix-flake8-invalid-escape-sequence-x-warning.patch
|
||||||
|
0019-Add-BuildRequires-gcc-make-elfutils-libelf-devel.patch
|
||||||
|
0020-Tag-zfs-0.7.12.patch
|
||||||
|
Loading…
Reference in New Issue
Block a user