Skip to content

Commit

Permalink
sys-fs/zfs-kmod: revert patch causing SEEK_HOLE corruption (again)
Browse files Browse the repository at this point in the history
This reverts commit 4b3133e671b958fa2c915a4faf57812820124a7b upstream.

See #14753 - possible corruption again, very similar symptoms to the
nightmare that was #11900 and same area of code.

We can safely revert it as it's an optimisation rather than a bugfix
in itself.

Keen Gentoo users may remember the following commits (in Gentoo):
- 8e5626dc90e4e6166c2e296371b6ff5a9d13a8c4
- 9fb275f656de639e25acc9497b70b4cae593d35d
- 95c250a3f3986b2bc2091dd3981ff1e1d3de0c73

Bug: openzfs/zfs#14753
Bug: openzfs/zfs#11900
Signed-off-by: Sam James <[email protected]>
  • Loading branch information
thesamesam committed Apr 16, 2023
1 parent 2d0f84d commit c21654b
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
From ac6b8f40981cb9328c22a3485e1a4b060ea89b1e Mon Sep 17 00:00:00 2001
From: Sam James <[email protected]>
Date: Sun, 16 Apr 2023 04:49:04 +0100
Subject: [PATCH] Revert "ZFS_IOC_COUNT_FILLED does unnecessary
txg_wait_synced()"

This reverts commit 4b3133e671b958fa2c915a4faf57812820124a7b.

See #14753 - possible corruption again, very similar symptoms to the
nightmare that was #11900 and same area of code.

We can safely revert it as it's an optimisation rather than a bugfix
in itself.

Bug: https://github.com/openzfs/zfs/issues/14753
Bug: https://github.com/openzfs/zfs/issues/11900
Signed-off-by: Sam James <[email protected]>
--- a/module/zfs/dnode.c
+++ b/module/zfs/dnode.c
@@ -1773,29 +1773,20 @@ dnode_try_claim(objset_t *os, uint64_t object, int slots)
}

/*
- * Checks if the dnode might contain any uncommitted changes to data blocks.
- * Dirty metadata (e.g. bonus buffer) does not count.
+ * Checks if the dnode contains any uncommitted dirty records.
*/
boolean_t
dnode_is_dirty(dnode_t *dn)
{
mutex_enter(&dn->dn_mtx);
+
for (int i = 0; i < TXG_SIZE; i++) {
- list_t *list = &dn->dn_dirty_records[i];
- for (dbuf_dirty_record_t *dr = list_head(list);
- dr != NULL; dr = list_next(list, dr)) {
- if (dr->dr_dbuf == NULL ||
- (dr->dr_dbuf->db_blkid != DMU_BONUS_BLKID &&
- dr->dr_dbuf->db_blkid != DMU_SPILL_BLKID)) {
- mutex_exit(&dn->dn_mtx);
- return (B_TRUE);
- }
- }
- if (dn->dn_free_ranges[i] != NULL) {
+ if (multilist_link_active(&dn->dn_dirty_link[i])) {
mutex_exit(&dn->dn_mtx);
return (B_TRUE);
}
}
+
mutex_exit(&dn->dn_mtx);

return (B_FALSE);
@@ -2667,9 +2658,7 @@ dnode_next_offset(dnode_t *dn, int flags, uint64_t *offset,
rw_enter(&dn->dn_struct_rwlock, RW_READER);

if (dn->dn_phys->dn_nlevels == 0) {
- if (!(flags & DNODE_FIND_HOLE)) {
- error = SET_ERROR(ESRCH);
- }
+ error = SET_ERROR(ESRCH);
goto out;
}

--
2.40.0

Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ RESTRICT="debug? ( strip ) test"

DOCS=( AUTHORS COPYRIGHT META README.md )

PATCHES=(
# https://github.com/openzfs/zfs/issues/14753
"${FILESDIR}"/2.1.10-Revert-ZFS_IOC_COUNT_FILLED-does-unnecessary-txg_wai.patch
)

pkg_pretend() {
use rootfs || return 0

Expand Down

0 comments on commit c21654b

Please sign in to comment.