mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 04:47:05 +00:00
350175bf9b
This improves the nocow lock table so that hash table entries have multiple locks, and locks specify which bucket they're for - i.e. we can now resolve hash collisions. This is important because the allocator has to skip buckets that are locked in the nocow lock table, and previously hash collisions would cause it to spuriously skip unlocked buckets. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
20 lines
491 B
C
20 lines
491 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _BCACHEFS_NOCOW_LOCKING_TYPES_H
|
|
#define _BCACHEFS_NOCOW_LOCKING_TYPES_H
|
|
|
|
#define BUCKET_NOCOW_LOCKS_BITS 10
|
|
#define BUCKET_NOCOW_LOCKS (1U << BUCKET_NOCOW_LOCKS_BITS)
|
|
|
|
struct nocow_lock_bucket {
|
|
struct closure_waitlist wait;
|
|
spinlock_t lock;
|
|
u64 b[4];
|
|
atomic_t l[4];
|
|
} __aligned(SMP_CACHE_BYTES);
|
|
|
|
struct bucket_nocow_lock_table {
|
|
struct nocow_lock_bucket l[BUCKET_NOCOW_LOCKS];
|
|
};
|
|
|
|
#endif /* _BCACHEFS_NOCOW_LOCKING_TYPES_H */
|
|
|