mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-11-17 10:01:01 +03:00
Fix preemptible warning in aggsum_add()
In the new aggsum counters the CPU_SEQID macro should be surrounded by kpreempt_disable)() and kpreempt_enable() calls to prevent a Linux kernel BUG warning. The addsum_add() function use the cpuid to minimize lock contention when selecting a bucket, after selection the bucket is protected by a mutex and it is safe to reschedule the process to a different processor at any time. Reviewed-by: Matthew Thode <prometheanfire@gentoo.org> Reviewed-by: Paul Dagnelie <pcd@delphix.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #7609 Closes #7610
This commit is contained in:
parent
39042f9736
commit
174bcd581d
@ -183,8 +183,11 @@ aggsum_borrow(aggsum_t *as, int64_t delta, struct aggsum_bucket *asb)
|
||||
void
|
||||
aggsum_add(aggsum_t *as, int64_t delta)
|
||||
{
|
||||
struct aggsum_bucket *asb =
|
||||
&as->as_buckets[CPU_SEQID % as->as_numbuckets];
|
||||
struct aggsum_bucket *asb;
|
||||
|
||||
kpreempt_disable();
|
||||
asb = &as->as_buckets[CPU_SEQID % as->as_numbuckets];
|
||||
kpreempt_enable();
|
||||
|
||||
for (;;) {
|
||||
mutex_enter(&asb->asc_lock);
|
||||
|
Loading…
Reference in New Issue
Block a user