mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-08-06 05:47:13 +02:00
70 lines
2.1 KiB
Diff
70 lines
2.1 KiB
Diff
Patch-Source: https://github.com/gentoo/gentoo/blob/a64fff9b8106dec5affc6a9e82bb9cbbb1fe6fec/sys-fs/zfs-kmod/files/2.1.10-Revert-ZFS_IOC_COUNT_FILLED-does-unnecessary-txg_wai.patch
|
|
--
|
|
From ac6b8f40981cb9328c22a3485e1a4b060ea89b1e Mon Sep 17 00:00:00 2001
|
|
From: Sam James <sam@gentoo.org>
|
|
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 <sam@gentoo.org>
|
|
--- 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
|
|
|