From patchwork Sat Feb 1 16:31:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateusz Guzik X-Patchwork-Id: 13956255 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id DF73DC02192 for ; Sat, 1 Feb 2025 16:31:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 74CDD280002; Sat, 1 Feb 2025 11:31:34 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6FD39280001; Sat, 1 Feb 2025 11:31:34 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 59E08280002; Sat, 1 Feb 2025 11:31:34 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 39B6F280001 for ; Sat, 1 Feb 2025 11:31:34 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id BAB231218F4 for ; Sat, 1 Feb 2025 16:31:33 +0000 (UTC) X-FDA: 83071916466.25.E134AB6 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) by imf06.hostedemail.com (Postfix) with ESMTP id BE37C180007 for ; Sat, 1 Feb 2025 16:31:31 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=gQsw3zu5; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf06.hostedemail.com: domain of mjguzik@gmail.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=mjguzik@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738427491; a=rsa-sha256; cv=none; b=dLiVmC/t7Gzi00Z7Wz5kju5xe5wqFN3y4hJCDe9M2Hc/Yz2DwqxNJ3kxawJZcEBDKJquk4 MrOi3tgsU6oyAF06Rr5XFBEZDEYPnhUeDTz0PS5jusizkH2JwnxX7dIAFEEuW4HdrVwi8t cvy4swHyT5yWIsGWtZC3f0BFQT8Qslk= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=gQsw3zu5; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf06.hostedemail.com: domain of mjguzik@gmail.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=mjguzik@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738427491; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=dahzR0UxsGypw5SX9Oc+7ltkwZX50Rxb2ddXibPMRZo=; b=C52Aat4AZUY8a5+6pfQnf2j98cl/NmiA9Pw+rF/YKnz6J7ALPBXIY6i7TX3Q3wZxwXb9er Iw5JmqB4QDCRU8EGJS2G4firaG1+qAPrp03YAbWAXmMPg9m46cpRQsmujZV+uPuLpZxgLK 8jQlT1P9Dfspeh9RIozMb2jCjO9fCQY= Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-5d3f57582a2so7974100a12.1 for ; Sat, 01 Feb 2025 08:31:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738427490; x=1739032290; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dahzR0UxsGypw5SX9Oc+7ltkwZX50Rxb2ddXibPMRZo=; b=gQsw3zu5pJMGUogtBR+WJJuT/3M+88J330xPJZTtqLfXVp6vjvpTK4dhO97dhkWSfT VdL24N1/VIrT8EqrmcVSoEO4cy3ovlUlvchNO5OlaokoxGirWAQurAfcvbcP7ViiOdR0 TU7DsBLTRPuW86RV+Mn5T6oCT4oa1z5lrLsjSvKrZek+uESJTVSjARNWiFd1/IHctGI1 Sz2qNS+XcTFnosuDEG+8B2NZ0q7AzpbGccCvXrV7mf2dD/tQ6gUG+PCofF3cJf3drTua nSHXQCMuXUmRldg1DwA2TwiKeFS+8SkKelLdsST2USwzxBk08fv7p0EclOpVqOfT0rJ0 HiKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738427490; x=1739032290; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dahzR0UxsGypw5SX9Oc+7ltkwZX50Rxb2ddXibPMRZo=; b=LBSTyfSQ7lJDI7+WrrgG0VSYcqppIMMy4XdViNRPYfop2WmJbZPVkSZoeTjq8VpMAt uWwWWczJSdKNFEK3NourIOXlpjhnnelFGXbpXrWM2wIMKMQI1fQVpH6EcyVaQVMHDM7m ZLj8fSY1eR77DAwFC85KBslAqR1WvofgGvNwlxGaZhRHpKFOkZz/JYXh6w0Y9yifPkqx muzxCXOF1255/oufhy71xUIG9J6XGNHODpCiwyVk8rbl5kCW+XB8Xm3mrHsEwOsAifP3 iU7ViPHFo8YPCvscbymss6kEoXeDGP6kL6/vxVSO6a+aq+tq2qx0iwJUxG4lkNQgLqJS zDCw== X-Forwarded-Encrypted: i=1; AJvYcCWsuL9XKiItTg/nHngh608vrCsN0ZgH8blz8mJJACzINekHBM7VmTI9z1nCQDbOnYkVt6EGSg6WXg==@kvack.org X-Gm-Message-State: AOJu0YwDRyW/VY4RdovpssRkWeREMZ5Ma1R9KyrSomz0eEnjdoZmTl/9 Rk6bmek6HI69mGShss4GKLg8At+ufDXye5bEJ9I5Wq7X8Y3Rp+Q5EfRhuQ== X-Gm-Gg: ASbGnctLgHZbLkuhh2rMZRUNArUBYP4vE2/MIJnmaKF8qO5WzJCtCABZ7MlR1UcgaPd jsDPX7rEE082Ab2uwPZfDrNtDJ5/j628PsmJb1ZgEmov2WyVTDnixrkEnUhheoWjMEVHOyM6IJX wfdmNjRyyduwoUHz3PpIIhLrd3mca7HN468UibRcETjDPaBm5EEfHIPzXou08GP+wTUKtdZZLOI RF8+sqcUpFRlAoGCLSCUG/ZpsPpho+PpmchmW1CxvOwmDWdHbcqC7Gfpq7/F8kpOvCmYyAvC833 mG2tSIUFpLed3U69N7f5baU8RBNZWMtMeg== X-Google-Smtp-Source: AGHT+IFZHEIO8U5RqJXJbo7DHyIgBpdE5v9HITImIJ/GuVeKkP/Vgt/hmam0AcjLWutOLfeAg8IQfg== X-Received: by 2002:a05:6402:1d55:b0:5dc:92a9:8a5 with SMTP id 4fb4d7f45d1cf-5dc92a90b78mr2511527a12.6.1738427489352; Sat, 01 Feb 2025 08:31:29 -0800 (PST) Received: from f.. (cst-prg-25-223.cust.vodafone.cz. [46.135.25.223]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dc723cff72sm4636959a12.15.2025.02.01.08.31.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Feb 2025 08:31:28 -0800 (PST) From: Mateusz Guzik To: ebiederm@xmission.com, oleg@redhat.com Cc: brauner@kernel.org, akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Mateusz Guzik Subject: [PATCH v3 3/6] exit: postpone tty_kref_put() until after tasklist_lock is dropped Date: Sat, 1 Feb 2025 17:31:03 +0100 Message-ID: <20250201163106.28912-4-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250201163106.28912-1-mjguzik@gmail.com> References: <20250201163106.28912-1-mjguzik@gmail.com> MIME-Version: 1.0 X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: BE37C180007 X-Stat-Signature: h8qpdbyo51e1xzgdnfyxniedm3fsjnou X-Rspam-User: X-HE-Tag: 1738427491-493110 X-HE-Meta: U2FsdGVkX195NgaRcTyAlNnEmg5PzbU6r39BYEgKvmHTn8YbXU1z9sIcMaWTCxwv3ue6+AZduVHKTS9TuLLYXRb1W8vqK2CNpwU5TH4fHxWXYgjwxyuyYHBnSkk8P+AG93C+tde1kSj4hAwxSi5QyxaZwvBdeN4JZ5hYhEpD5Tds0ZMELaa6gP7KUS8cMgc8ALfOjMUmeN9KF7yTereYcCbfWsacKo7+I7o3Q/jxsDPuyrMdUWBsPKUooUs2f85zyr+iafm6ZmAyE3Zwxd7xsRsTQi8+kvkScLs5sMMVx4vITFI86H/y+uRP4PaSq5FH20kWUFuWAccOSQ5xOnMQ7aUVYTizhCczZ2yARoJyeUiAWjGvg7y1+uU994KLz3jswdmmUTk6YDs4MEbYavfLXqrRYwnsTPuYcSizVQeBuDmrRj/HfmwfuUprsDDDzFWosPppmb3t8nVFkGCkd4fZP8tcp376BKu62gAG4NSqbMy4AiuNTdSjerHG7PJ0DZuGueEiLokZ8ZzZE55zjAFnhye1mW6BDDo8frrjX1BGXMnz6o6dX4hAmVn2fbn2EK70vuW/3UFLNfR2EjC/sqGqM6+aisgXkSgo3EWUnPECinAIJnnc0UW66A8kcOakGEj7MTtAvJ6TrgwSoSnmj/W3xBw/5KRQ1T6dOzTpSL8nNcHr212RWSeHtjIoaE1LH8gryc/GymmsYJ2dz/bp5ZFnxAqU5b9ibY2WORMoF3tUgWkx6rPWFhXuAaRqNs+Fe/mm4lamQSmlmmEEHvUrId5HepUI3h9C1+lVfbgwFYwNET8W3tPSTR4Tn3ZYdElfpgqxyX226eVJnXasmN1QLEie63p5xdtBSzVJ9v3/kYsY++gOvcUleF3RlBV4ujHES/gEHJx0il/n4vsn29cDE45wPFd3hVGtXMhbzw0ARDmO/yRudcH5NmaucaOqqUx/CN0JHsQniQGsUXxa7DJJejR 3VPIv498 DjuJigtLPjE8B6JH8A0CY+65OIZmF7IV3eCP29S5j63vBW3qaES3m/cL3bjZdUjx/to5yoTDFP3mlhNOE7/Td094NPAVJE6daUMztqfyEifUCwH8Wu7deFSYxHJh8kZXsnUXkjjYreeiXNegK0Ljh32A/9zglaKoJYB3sGqy+LAuIgM+4bVhz96YjUhDjKqsPH3VgHo9nicw90K3M3X/hV/V+G2BFjc5LWjkbouPUozgt5chOEiiEbGOGQgHkAbhV6OGxYNuLaxlscQ1A71/eNg8dN5qujdva3TDOcb1r+RvouDfhRMAAlYEgc1GD283gKOxHk6xvvTnQHyTTdCVUuqx6I8qjW2WKuF361ehJT0sKuzKrQoiY9TaMxkMeVJBrxYSznVodx1xiMONXuTVczqfN5If9AxG6+iBrUtuoB3zylWM= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Instead of smuggling the tty pointer directly, use a struct so that more things can be added later. Signed-off-by: Mateusz Guzik --- kernel/exit.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/kernel/exit.c b/kernel/exit.c index 257dd8ed45ea..d2c74f93f7d2 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -122,6 +122,13 @@ static __init int kernel_exit_sysfs_init(void) late_initcall(kernel_exit_sysfs_init); #endif +/* + * For things release_task() would like to do *after* tasklist_lock is released. + */ +struct release_task_post { + struct tty_struct *tty; +}; + static void __unhash_process(struct task_struct *p, bool group_dead) { nr_threads--; @@ -141,12 +148,11 @@ static void __unhash_process(struct task_struct *p, bool group_dead) /* * This function expects the tasklist_lock write-locked. */ -static void __exit_signal(struct task_struct *tsk) +static void __exit_signal(struct release_task_post *post, struct task_struct *tsk) { struct signal_struct *sig = tsk->signal; bool group_dead = thread_group_leader(tsk); struct sighand_struct *sighand; - struct tty_struct *tty; u64 utime, stime; sighand = rcu_dereference_check(tsk->sighand, @@ -160,7 +166,7 @@ static void __exit_signal(struct task_struct *tsk) #endif if (group_dead) { - tty = sig->tty; + post->tty = sig->tty; sig->tty = NULL; } else { /* @@ -207,10 +213,8 @@ static void __exit_signal(struct task_struct *tsk) __cleanup_sighand(sighand); clear_tsk_thread_flag(tsk, TIF_SIGPENDING); - if (group_dead) { + if (group_dead) flush_sigqueue(&sig->shared_pending); - tty_kref_put(tty); - } } static void delayed_put_task_struct(struct rcu_head *rhp) @@ -236,10 +240,13 @@ void __weak release_thread(struct task_struct *dead_task) void release_task(struct task_struct *p) { + struct release_task_post post; struct task_struct *leader; struct pid *thread_pid; int zap_leader; repeat: + memset(&post, 0, sizeof(post)); + /* don't need to get the RCU readlock here - the process is dead and * can't be modifying its own credentials. But shut RCU-lockdep up */ rcu_read_lock(); @@ -252,7 +259,7 @@ void release_task(struct task_struct *p) write_lock_irq(&tasklist_lock); ptrace_release_task(p); - __exit_signal(p); + __exit_signal(&post, p); /* * If we are the last non-leader member of the thread @@ -280,6 +287,7 @@ void release_task(struct task_struct *p) sizeof(unsigned long long)); release_thread(p); put_task_struct_rcu_user(p); + tty_kref_put(post.tty); p = leader; if (unlikely(zap_leader))