mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +03:00
Add kpreempt_disable/enable around CPU_SEQID uses
In zfs/dmu_object and icp/core/kcf_sched, the CPU_SEQID macro should be surrounded by `kpreempt_disable` and `kpreempt_enable` calls to avoid a Linux kernel BUG warning. These code paths use the cpuid to minimize lock contention and is is safe to reschedule the process to a different processor at any time. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Morgan Jones <me@numin.it> Closes #6239
This commit is contained in:
committed by
Brian Behlendorf
parent
0241e491a0
commit
d9ad3fea3b
@@ -59,10 +59,14 @@ dmu_object_alloc_dnsize(objset_t *os, dmu_object_type_t ot, int blocksize,
|
||||
dnode_t *dn = NULL;
|
||||
int dn_slots = dnodesize >> DNODE_SHIFT;
|
||||
boolean_t restarted = B_FALSE;
|
||||
uint64_t *cpuobj = &os->os_obj_next_percpu[CPU_SEQID %
|
||||
os->os_obj_next_percpu_len];
|
||||
uint64_t *cpuobj = NULL;
|
||||
int dnodes_per_chunk = 1 << dmu_object_alloc_chunk_shift;
|
||||
|
||||
kpreempt_disable();
|
||||
cpuobj = &os->os_obj_next_percpu[CPU_SEQID %
|
||||
os->os_obj_next_percpu_len];
|
||||
kpreempt_enable();
|
||||
|
||||
if (dn_slots == 0) {
|
||||
dn_slots = DNODE_MIN_SLOTS;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user