]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
pidfs: reduce wait_pidfd lock scope
authorChristian Brauner <brauner@kernel.org>
Tue, 4 Nov 2025 23:05:01 +0000 (00:05 +0100)
committerChristian Brauner <brauner@kernel.org>
Tue, 4 Nov 2025 23:09:06 +0000 (00:09 +0100)
There's no need to hold the lock after we realized that pid->attr is
set. We're holding a reference to struct pid so it won't go away and
pidfs_exit() is called once per struct pid.

Link: https://patch.msgid.link/20251105-work-pidfs-wait_pidfd-lock-v1-1-02638783be07@kernel.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/pidfs.c

index 354ceb2126e7c358b2b2721965b0bd8c26b58e2f..dbbdd2085790bb47b292dc34fc9459302b1f6eb2 100644 (file)
@@ -634,17 +634,19 @@ void pidfs_exit(struct task_struct *tsk)
 
        might_sleep();
 
-       guard(spinlock_irq)(&pid->wait_pidfd.lock);
-       attr = pid->attr;
-       if (!attr) {
-               /*
-                * No one ever held a pidfd for this struct pid.
-                * Mark it as dead so no one can add a pidfs
-                * entry anymore. We're about to be reaped and
-                * so no exit information would be available.
-                */
-               pid->attr = PIDFS_PID_DEAD;
-               return;
+       /* Synchronize with pidfs_register_pid(). */
+       scoped_guard(spinlock_irq, &pid->wait_pidfd.lock) {
+               attr = pid->attr;
+               if (!attr) {
+                       /*
+                        * No one ever held a pidfd for this struct pid.
+                        * Mark it as dead so no one can add a pidfs
+                        * entry anymore. We're about to be reaped and
+                        * so no exit information would be available.
+                        */
+                       pid->attr = PIDFS_PID_DEAD;
+                       return;
+               }
        }
 
        /*