zfs: merge openzfs/zfs@4694131a0 (master) into main
Notable upstream pull request merges:
#12253 module/zfs: simplify ddt_stat_add() loop
#12288 Avoid 64bit division in multilist index functions
Obtained from: OpenZFS
OpenZFS commit: 4694131a0a
This commit is contained in:
commit
2617128a21
@ -6,5 +6,5 @@ Release: 1
|
||||
Release-Tags: relext
|
||||
License: CDDL
|
||||
Author: OpenZFS
|
||||
Linux-Maximum: 5.12
|
||||
Linux-Maximum: 5.13
|
||||
Linux-Minimum: 3.10
|
||||
|
@ -267,7 +267,7 @@ zed_notify_email()
|
||||
-e "s/@SUBJECT@/${subject}/g")"
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
${ZED_EMAIL_PROG} ${ZED_EMAIL_OPTS} < "${pathname}" >/dev/null 2>&1
|
||||
eval ${ZED_EMAIL_PROG} ${ZED_EMAIL_OPTS} < "${pathname}" >/dev/null 2>&1
|
||||
rv=$?
|
||||
if [ "${rv}" -ne 0 ]; then
|
||||
zed_log_err "$(basename "${ZED_EMAIL_PROG}") exit=${rv}"
|
||||
|
@ -179,8 +179,8 @@ ask_for_password() {
|
||||
# Prompt for password with plymouth, if installed and running.
|
||||
if plymouth --ping 2>/dev/null; then
|
||||
plymouth ask-for-password \
|
||||
--prompt "$ply_prompt" --number-of-tries="$ply_tries" \
|
||||
--command="$ply_cmd"
|
||||
--prompt "$ply_prompt" --number-of-tries="$ply_tries" | \
|
||||
eval "$ply_cmd"
|
||||
ret=$?
|
||||
else
|
||||
if [ "$tty_echo_off" = yes ]; then
|
||||
|
@ -7454,9 +7454,10 @@ arc_state_multilist_index_func(multilist_t *ml, void *obj)
|
||||
* Also, the low order bits of the hash value are thought to be
|
||||
* distributed evenly. Otherwise, in the case that the multilist
|
||||
* has a power of two number of sublists, each sublists' usage
|
||||
* would not be evenly distributed.
|
||||
* would not be evenly distributed. In this context full 64bit
|
||||
* division would be a waste of time, so limit it to 32 bits.
|
||||
*/
|
||||
return (buf_hash(hdr->b_spa, &hdr->b_dva, hdr->b_birth) %
|
||||
return ((unsigned int)buf_hash(hdr->b_spa, &hdr->b_dva, hdr->b_birth) %
|
||||
multilist_get_num_sublists(ml));
|
||||
}
|
||||
|
||||
|
@ -622,9 +622,10 @@ dbuf_cache_multilist_index_func(multilist_t *ml, void *obj)
|
||||
* Also, the low order bits of the hash value are thought to be
|
||||
* distributed evenly. Otherwise, in the case that the multilist
|
||||
* has a power of two number of sublists, each sublists' usage
|
||||
* would not be evenly distributed.
|
||||
* would not be evenly distributed. In this context full 64bit
|
||||
* division would be a waste of time, so limit it to 32 bits.
|
||||
*/
|
||||
return (dbuf_hash(db->db_objset, db->db.db_object,
|
||||
return ((unsigned int)dbuf_hash(db->db_objset, db->db.db_object,
|
||||
db->db_level, db->db_blkid) %
|
||||
multilist_get_num_sublists(ml));
|
||||
}
|
||||
|
@ -423,8 +423,8 @@ ddt_stat_add(ddt_stat_t *dst, const ddt_stat_t *src, uint64_t neg)
|
||||
|
||||
ASSERT(neg == 0 || neg == -1ULL); /* add or subtract */
|
||||
|
||||
while (d < d_end)
|
||||
*d++ += (*s++ ^ neg) - neg;
|
||||
for (int i = 0; i < d_end - d; i++)
|
||||
d[i] += (s[i] ^ neg) - neg;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -399,7 +399,15 @@ static unsigned int
|
||||
dnode_multilist_index_func(multilist_t *ml, void *obj)
|
||||
{
|
||||
dnode_t *dn = obj;
|
||||
return (dnode_hash(dn->dn_objset, dn->dn_object) %
|
||||
|
||||
/*
|
||||
* The low order bits of the hash value are thought to be
|
||||
* distributed evenly. Otherwise, in the case that the multilist
|
||||
* has a power of two number of sublists, each sublists' usage
|
||||
* would not be evenly distributed. In this context full 64bit
|
||||
* division would be a waste of time, so limit it to 32 bits.
|
||||
*/
|
||||
return ((unsigned int)dnode_hash(dn->dn_objset, dn->dn_object) %
|
||||
multilist_get_num_sublists(ml));
|
||||
}
|
||||
|
||||
|
@ -1874,7 +1874,12 @@ static unsigned int
|
||||
metaslab_idx_func(multilist_t *ml, void *arg)
|
||||
{
|
||||
metaslab_t *msp = arg;
|
||||
return (msp->ms_id % multilist_get_num_sublists(ml));
|
||||
|
||||
/*
|
||||
* ms_id values are allocated sequentially, so full 64bit
|
||||
* division would be a waste of time, so limit it to 32 bits.
|
||||
*/
|
||||
return ((unsigned int)msp->ms_id % multilist_get_num_sublists(ml));
|
||||
}
|
||||
|
||||
uint64_t
|
||||
|
@ -202,6 +202,25 @@ static struct zstd_fallback_mem zstd_dctx_fallback;
|
||||
static struct zstd_pool *zstd_mempool_cctx;
|
||||
static struct zstd_pool *zstd_mempool_dctx;
|
||||
|
||||
/*
|
||||
* The library zstd code expects these if ADDRESS_SANITIZER gets defined,
|
||||
* and while ASAN does this, KASAN defines that and does not. So to avoid
|
||||
* changing the external code, we do this.
|
||||
*/
|
||||
#if defined(__has_feature)
|
||||
#if __has_feature(address_sanitizer)
|
||||
#define ADDRESS_SANITIZER 1
|
||||
#endif
|
||||
#elif defined(__SANITIZE_ADDRESS__)
|
||||
#define ADDRESS_SANITIZER 1
|
||||
#endif
|
||||
#if defined(_KERNEL) && defined(ADDRESS_SANITIZER)
|
||||
void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
|
||||
void __asan_poison_memory_region(void const volatile *addr, size_t size);
|
||||
void __asan_unpoison_memory_region(void const volatile *addr, size_t size) {};
|
||||
void __asan_poison_memory_region(void const volatile *addr, size_t size) {};
|
||||
#endif
|
||||
|
||||
|
||||
static void
|
||||
zstd_mempool_reap(struct zstd_pool *zstd_mempool)
|
||||
|
Loading…
Reference in New Issue
Block a user