mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
Use atomic_t for ucounts reference counting
The current implementation of the ucounts reference counter requires the use of spin_lock. We're going to use get_ucounts() in more performance critical areas like a handling of RLIMIT_SIGPENDING. Now we need to use spin_lock only if we want to change the hashtable. v10: * Always try to put ucounts in case we cannot increase ucounts->count. This will allow to cover the case when all consumers will return ucounts at once. v9: * Use a negative value to check that the ucounts->count is close to overflow. Signed-off-by: Alexey Gladkov <legion@kernel.org> Link: https://lkml.kernel.org/r/94d1dbecab060a6b116b0a2d1accd8ca1bbb4f5f.1619094428.git.legion@kernel.org Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
This commit is contained in:
committed by
Eric W. Biederman
parent
905ae01c4a
commit
b6c3365289
@@ -95,7 +95,7 @@ struct ucounts {
|
||||
struct hlist_node node;
|
||||
struct user_namespace *ns;
|
||||
kuid_t uid;
|
||||
int count;
|
||||
atomic_t count;
|
||||
atomic_long_t ucount[UCOUNT_COUNTS];
|
||||
};
|
||||
|
||||
@@ -107,7 +107,7 @@ void retire_userns_sysctls(struct user_namespace *ns);
|
||||
struct ucounts *inc_ucount(struct user_namespace *ns, kuid_t uid, enum ucount_type type);
|
||||
void dec_ucount(struct ucounts *ucounts, enum ucount_type type);
|
||||
struct ucounts *alloc_ucounts(struct user_namespace *ns, kuid_t uid);
|
||||
struct ucounts *get_ucounts(struct ucounts *ucounts);
|
||||
struct ucounts * __must_check get_ucounts(struct ucounts *ucounts);
|
||||
void put_ucounts(struct ucounts *ucounts);
|
||||
|
||||
#ifdef CONFIG_USER_NS
|
||||
|
Reference in New Issue
Block a user