diff --git a/kmod/src/Makefile.kernelcompat b/kmod/src/Makefile.kernelcompat index 88b97f89..3a67cdb5 100644 --- a/kmod/src/Makefile.kernelcompat +++ b/kmod/src/Makefile.kernelcompat @@ -214,6 +214,14 @@ ifneq (,$(shell grep 'struct posix_acl.*get_inode_acl' include/linux/fs.h)) ccflags-y += -DKC_GET_INODE_ACL endif +# +# v6.1-rc5-2-ge9a688bcb193 +# +# get_random_u32_below() implementation +ifneq (,$(shell grep 'u32 get_random_u32_below' include/linux/random.h)) +ccflags-y += -DKC_HAVE_GET_RANDOM_U32_BELOW +endif + # # v6.15-13744-g41cb08555c41 # diff --git a/kmod/src/block.c b/kmod/src/block.c index 7d28758e..e0ac6590 100644 --- a/kmod/src/block.c +++ b/kmod/src/block.c @@ -894,7 +894,7 @@ int scoutfs_block_dirty_ref(struct super_block *sb, struct scoutfs_alloc *alloc, hdr->magic = cpu_to_le32(magic); hdr->fsid = cpu_to_le64(sbi->fsid); hdr->blkno = cpu_to_le64(bl->blkno); - prandom_bytes(&hdr->seq, sizeof(hdr->seq)); + get_random_bytes(&hdr->seq, sizeof(hdr->seq)); trace_scoutfs_block_dirty_ref(sb, le64_to_cpu(ref->blkno), le64_to_cpu(ref->seq), le64_to_cpu(hdr->blkno), le64_to_cpu(hdr->seq)); diff --git a/kmod/src/inode.c b/kmod/src/inode.c index 6db15554..3b536a86 100644 --- a/kmod/src/inode.c +++ b/kmod/src/inode.c @@ -2047,7 +2047,7 @@ void scoutfs_inode_schedule_orphan_dwork(struct super_block *sb) low = (opts.orphan_scan_delay_ms * 80) / 100; high = (opts.orphan_scan_delay_ms * 120) / 100; - delay = msecs_to_jiffies(low + prandom_u32_max(high - low)) ?: 1; + delay = msecs_to_jiffies(low + get_random_u32_below(high - low)) ?: 1; mod_delayed_work(system_wq, &inf->orphan_scan_dwork, delay); } diff --git a/kmod/src/kernelcompat.h b/kmod/src/kernelcompat.h index cfa78214..55e23fdf 100644 --- a/kmod/src/kernelcompat.h +++ b/kmod/src/kernelcompat.h @@ -207,6 +207,10 @@ unsigned long kc_list_lru_shrink_walk(struct list_lru *lru, struct shrink_contro #define kc_list_lru_shrink_walk list_lru_shrink_walk #endif +#ifndef KC_HAVE_GET_RANDOM_U32_BELOW +#define get_random_u32_below prandom_u32_max +#endif + #ifndef KC_TIMER_CONTAINER_OF #define timer_container_of(var, callback_timer, timer_fieldname) \ from_timer(var, callback_timer, timer_fieldname) diff --git a/kmod/src/quorum.c b/kmod/src/quorum.c index d87033c5..7aa5dd8a 100644 --- a/kmod/src/quorum.c +++ b/kmod/src/quorum.c @@ -162,7 +162,7 @@ static void quorum_slot_sin(struct scoutfs_quorum_config *qconf, int i, struct s static ktime_t election_timeout(void) { return ktime_add_ms(ktime_get(), SCOUTFS_QUORUM_ELECT_MIN_MS + - prandom_u32_max(SCOUTFS_QUORUM_ELECT_VAR_MS)); + get_random_u32_below(SCOUTFS_QUORUM_ELECT_VAR_MS)); } static ktime_t heartbeat_interval(void) diff --git a/kmod/src/quota.c b/kmod/src/quota.c index cb2b0b4f..4b3df75b 100644 --- a/kmod/src/quota.c +++ b/kmod/src/quota.c @@ -205,7 +205,7 @@ static struct squota_check *lookup_random_check(struct rhashtable *rht) tbl = rht_dereference_rcu(rht->tbl, rht); do { - for (s = 0, i = prandom_u32_max(tbl->size); + for (s = 0, i = get_random_u32_below(tbl->size); s < tbl->size; s++, i = (i + 1) % tbl->size) { rht_for_each_entry_rcu(chk, pos, tbl, i, head) {