1

six locks: Disable percpu read lock mode in userspace

When running in userspace, we currently don't have a real percpu
implementation available - at least in bcachefs-tools, which is where
this code is currently used in userspace.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
Kent Overstreet 2023-06-10 10:57:23 -04:00
parent 2d9200cfe0
commit aab5e0972a

View File

@ -870,6 +870,11 @@ void __six_lock_init(struct six_lock *lock, const char *name,
lockdep_init_map(&lock->dep_map, name, key, 0); lockdep_init_map(&lock->dep_map, name, key, 0);
#endif #endif
/*
* Don't assume that we have real percpu variables available in
* userspace:
*/
#ifdef __KERNEL__
if (flags & SIX_LOCK_INIT_PCPU) { if (flags & SIX_LOCK_INIT_PCPU) {
/* /*
* We don't return an error here on memory allocation failure * We don't return an error here on memory allocation failure
@ -880,5 +885,6 @@ void __six_lock_init(struct six_lock *lock, const char *name,
*/ */
lock->readers = alloc_percpu(unsigned); lock->readers = alloc_percpu(unsigned);
} }
#endif
} }
EXPORT_SYMBOL_GPL(__six_lock_init); EXPORT_SYMBOL_GPL(__six_lock_init);