[PATCH -next/-mmotm] kernel/user.c: fix build when POLL not enabled

From: Randy Dunlap
Date: Tue Aug 03 2021 - 16:46:13 EST


Fix build errors in kernel/user.c when CONFIG_EPOLL is not set/enabled.

../kernel/user.c: In function ‘free_user’:
../kernel/user.c:141:30: error: ‘struct user_struct’ has no member named ‘epoll_watches’; did you mean ‘nr_watches’?
percpu_counter_destroy(&up->epoll_watches);
^~~~~~~~~~~~~
In file included from ../include/linux/sched/user.h:7:0,
from ../kernel/user.c:17:
../kernel/user.c: In function ‘alloc_uid’:
../kernel/user.c:189:33: error: ‘struct user_struct’ has no member named ‘epoll_watches’; did you mean ‘nr_watches’?
if (percpu_counter_init(&new->epoll_watches, 0, GFP_KERNEL)) {
^
../kernel/user.c:203:33: error: ‘struct user_struct’ has no member named ‘epoll_watches’; did you mean ‘nr_watches’?
percpu_counter_destroy(&new->epoll_watches);
^~~~~~~~~~~~~
In file included from ../include/linux/sched/user.h:7:0,
from ../kernel/user.c:17:
../kernel/user.c: In function ‘uid_cache_init’:
../kernel/user.c:225:37: error: ‘struct user_struct’ has no member named ‘epoll_watches’; did you mean ‘nr_watches’?
if (percpu_counter_init(&root_user.epoll_watches, 0, GFP_KERNEL))
^
Also fix type: "cpunter" -> "counter" in a panic message.

Fixes: e75b89477811 ("fs/epoll: use a per-cpu counter for user's watches count")
Signed-off-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx>
Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
Cc: Nick Piggin <npiggin@xxxxxxxxx>
Cc: Mark Brown <broonie@xxxxxxxxxx>
---
kernel/user.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

--- mmotm-2021-0802-1851.orig/kernel/user.c
+++ mmotm-2021-0802-1851/kernel/user.c
@@ -137,9 +137,11 @@ static void free_user(struct user_struct
__releases(&uidhash_lock)
{
uid_hash_remove(up);
+#ifdef CONFIG_EPOLL
spin_unlock_irqrestore(&uidhash_lock, flags);
percpu_counter_destroy(&up->epoll_watches);
kmem_cache_free(uid_cachep, up);
+#endif
}

/*
@@ -186,10 +188,12 @@ struct user_struct *alloc_uid(kuid_t uid

new->uid = uid;
refcount_set(&new->__count, 1);
+#ifdef CONFIG_EPOLL
if (percpu_counter_init(&new->epoll_watches, 0, GFP_KERNEL)) {
kmem_cache_free(uid_cachep, new);
return NULL;
}
+#endif
ratelimit_state_init(&new->ratelimit, HZ, 100);
ratelimit_set_flags(&new->ratelimit, RATELIMIT_MSG_ON_RELEASE);

@@ -200,7 +204,9 @@ struct user_struct *alloc_uid(kuid_t uid
spin_lock_irq(&uidhash_lock);
up = uid_hash_find(uid, hashent);
if (up) {
+#ifdef CONFIG_EPOLL
percpu_counter_destroy(&new->epoll_watches);
+#endif
kmem_cache_free(uid_cachep, new);
} else {
uid_hash_insert(new, hashent);
@@ -222,8 +228,10 @@ static int __init uid_cache_init(void)
for(n = 0; n < UIDHASH_SZ; ++n)
INIT_HLIST_HEAD(uidhash_table + n);

+#ifdef CONFIG_EPOLL
if (percpu_counter_init(&root_user.epoll_watches, 0, GFP_KERNEL))
- panic("percpu cpunter alloc failed");
+ panic("percpu counter alloc failed");
+#endif

/* Insert the root user immediately (init already runs as root) */
spin_lock_irq(&uidhash_lock);