From nobody Tue Dec 16 04:40:15 2025 Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E42E14A4DB; Tue, 22 Apr 2025 10:46:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745318774; cv=none; b=RL+o7MJgx2wZG09Xby0NPXtQ8MaCu6Sv2ar1kwLnohoM5crfKD71tSz5WFYiLrlDhWIGXwPgnXYp5lKyKEZaUS4J+krsijY+HJ0GTd7aTtP7+Pjaqk1piQBNSTCfBdFkdWazVAVw1y6kY5FwRNc6QSX+VTT/NwmVdfYwj/ELrdk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745318774; c=relaxed/simple; bh=5ON3Qc96t4HPtldyPAv1fdNFgCXbMaHyskQ2ScUxLXQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=MTktV1monnfw34FPWYaY3pH0Altva83iWSv2238aQq0ZSc25QbeZKBcwq8Zm/MAvNKiMwxz8Z8BwMARSpI5+6rXu7ATCVzZtwot2sbHOmpkkT43OQ/8YZvAM6jn6yWndRs/JU6AGW8laliTv6Bsj37jS2P8WSpGxIpgm/S5d8ew= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=HMtqXC1r; arc=none smtp.client-ip=209.85.215.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HMtqXC1r" Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-af5139ad9a2so3073267a12.1; Tue, 22 Apr 2025 03:46:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745318771; x=1745923571; darn=vger.kernel.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=46xNBkAds9S2JuwMvzLESb7WgL9Z7roCgubVvThFP7A=; b=HMtqXC1rMSSl5upHX20PF80AsxXu0w26o2v4L7nhFG6hvtBvDeA67GcPFDHpNmkoJe 3TzRrqXKlDTW/DCiVA0rCyr6z/01u0ncoqEia6iCu9jCkYvwi731MvZfjzQxVQiqLGUD 6SmgOGog4Y4AAy1e7hJQMesAEdi/77UnvugqE3Xu2NhyJjqtU3aSg/AJlUGv2NGqDNIw E0XQeiB8FcSWeZFkRTuFL3pn9U4taFG2ALWpEx7oreuynRgUHMAB1BhbjJhkihUCTLaG AezyZ5xFh1dRPtD1m00veojpP+mEGsYhilgTvjO0ap1sihmSVokbRLjWgr8t+th+wn5h IRiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745318771; x=1745923571; 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=46xNBkAds9S2JuwMvzLESb7WgL9Z7roCgubVvThFP7A=; b=qLI350bPP+9bKQnbE19YmEmNGsUi3NYOHI0gRlWK1JoJ6+pxY34ypdPiuhYY8R274d U/x646DMMZnFv+ie/j22ph/W+S4YE0A3XvLi1Ac6M+pYKrq+JrsySOr87iuIryw91VnT kSJvrugp5NB6lUOXi4WnX6WVCegNeShTK9JfxgqPeCXPDnsiwL9hnF1gygHkKmPX35qL D5TDyeObGvalQknLuFxppYNOuMICUyUodD6PQsqDqhSbYrC0ZDNrYIVydoHf3y1YCKyZ h7kODLZHthSsLz7/td/RTcbCyiVlysyMQcmcAhOaWxy3/Trm5YcD1jb3SUp0+8fCNB54 AyNw== X-Forwarded-Encrypted: i=1; AJvYcCUOjigr3Urn0WiTLk50hTk9ZczTZULeZNMbgultdKcFiZ+nUWW4v/Gfeqg4z8XaN963ymBFtuYQRg==@vger.kernel.org, AJvYcCUQ5211HPRMZCDPvNIqeQaAwdJb8YZtxafIzgOfomu8NNxWBFRkQzwwOatS0C/T3rKHAiOaEejtjuVL2hTi@vger.kernel.org, AJvYcCVJD1uAuIn/mZSeJ5RXRs39NjLiPKz/iZXmH/2Wd2ceXts8ldIBt7h1RrIPLhaIqu0Spom607qPYfy3VRQkwQ==@vger.kernel.org X-Gm-Message-State: AOJu0Yzz1Ac2AmEjHqJ+yz9Ss2b36lBhxOEh18o3emWEY3b/MAHCpH07 qDIjUzMrisr7C9SRyzgVu3GsQPq2vrT/rtRscThhj2332Dqg4BIJ X-Gm-Gg: ASbGnctcNc85Yy4tDtSQzIq2MSxYM/OulNdZxgYOdvVT2Dg2MtPmyVubNAuk59maagL 0nkXHN25KynhB2q0tnqON3srSx21GeMP2PrfqZkn3eRhOx8CfD6hNvZ0vmnNWcp5kWwwXiRDpyd bo+pq5M2g0YC29fbiJxwvrGFSDQyA1pUF5mHR0tuSQTD+zmwVG4qZGSBAHOcOnXCgOucmC5j9Ib 76m4Ye1EfEtfwCdJh+UvPSvOowlhNlVgtmzBRXK6GHNWMANFN+DPlzQP4KRy/A+ama78JQsLRI6 96oKWIlLMtweX3KmnwhBHPUb5cTD3zWjDvgOdRa1PH8Ok0h7naK5GsFwwcnkOTUgfi2NWU9eLJN rFMJEe5HBzD/gLK5r+OKAx4zzNuTahhga088KggIEfIKeUv4l/a8XinOE6CBbHVTKwqadye9dSV E/3A9X2Hlgm1Omysw= X-Google-Smtp-Source: AGHT+IEqm/DNI3N1N8dhJ0Fxva3uN96gL/QRNLBQRrVtNPBP7fWK3AnIAn74ryqa0MNY4U0+zJHsUg== X-Received: by 2002:a17:90b:2810:b0:2fa:f8d:65de with SMTP id 98e67ed59e1d1-3087bbc2abfmr18128646a91.22.1745318771409; Tue, 22 Apr 2025 03:46:11 -0700 (PDT) Received: from linux-devops-jiangzhiwei-1.asia-southeast1-a.c.monica-ops.internal (92.206.124.34.bc.googleusercontent.com. [34.124.206.92]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3087e05e90bsm8276853a91.45.2025.04.22.03.46.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Apr 2025 03:46:11 -0700 (PDT) From: Zhiwei Jiang To: viro@zeniv.linux.org.uk Cc: brauner@kernel.org, jack@suse.cz, akpm@linux-foundation.org, peterx@redhat.com, axboe@kernel.dk, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, io-uring@vger.kernel.org, Zhiwei Jiang Subject: [PATCH 1/2] io_uring: Add new functions to handle user fault scenarios Date: Tue, 22 Apr 2025 10:45:44 +0000 Message-Id: <20250422104545.1199433-2-qq282012236@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250422104545.1199433-1-qq282012236@gmail.com> References: <20250422104545.1199433-1-qq282012236@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In the Firecracker VM scenario, sporadically encountered threads with the UN state in the following call stack: [<0>] io_wq_put_and_exit+0xa1/0x210 [<0>] io_uring_clean_tctx+0x8e/0xd0 [<0>] io_uring_cancel_generic+0x19f/0x370 [<0>] __io_uring_cancel+0x14/0x20 [<0>] do_exit+0x17f/0x510 [<0>] do_group_exit+0x35/0x90 [<0>] get_signal+0x963/0x970 [<0>] arch_do_signal_or_restart+0x39/0x120 [<0>] syscall_exit_to_user_mode+0x206/0x260 [<0>] do_syscall_64+0x8d/0x170 [<0>] entry_SYSCALL_64_after_hwframe+0x78/0x80 The cause is a large number of IOU kernel threads saturating the CPU and not exiting. When the issue occurs, CPU usage 100% and can only be resolved by rebooting. Each thread's appears as follows: iou-wrk-44588 [kernel.kallsyms] [k] ret_from_fork_asm iou-wrk-44588 [kernel.kallsyms] [k] ret_from_fork iou-wrk-44588 [kernel.kallsyms] [k] io_wq_worker iou-wrk-44588 [kernel.kallsyms] [k] io_worker_handle_work iou-wrk-44588 [kernel.kallsyms] [k] io_wq_submit_work iou-wrk-44588 [kernel.kallsyms] [k] io_issue_sqe iou-wrk-44588 [kernel.kallsyms] [k] io_write iou-wrk-44588 [kernel.kallsyms] [k] blkdev_write_iter iou-wrk-44588 [kernel.kallsyms] [k] iomap_file_buffered_write iou-wrk-44588 [kernel.kallsyms] [k] iomap_write_iter iou-wrk-44588 [kernel.kallsyms] [k] fault_in_iov_iter_readable iou-wrk-44588 [kernel.kallsyms] [k] fault_in_readable iou-wrk-44588 [kernel.kallsyms] [k] asm_exc_page_fault iou-wrk-44588 [kernel.kallsyms] [k] exc_page_fault iou-wrk-44588 [kernel.kallsyms] [k] do_user_addr_fault iou-wrk-44588 [kernel.kallsyms] [k] handle_mm_fault iou-wrk-44588 [kernel.kallsyms] [k] hugetlb_fault iou-wrk-44588 [kernel.kallsyms] [k] hugetlb_no_page iou-wrk-44588 [kernel.kallsyms] [k] hugetlb_handle_userfault iou-wrk-44588 [kernel.kallsyms] [k] handle_userfault iou-wrk-44588 [kernel.kallsyms] [k] schedule iou-wrk-44588 [kernel.kallsyms] [k] __schedule iou-wrk-44588 [kernel.kallsyms] [k] __raw_spin_unlock_irq iou-wrk-44588 [kernel.kallsyms] [k] io_wq_worker_sleeping I tracked the address that triggered the fault and the related function graph, as well as the wake-up side of the user fault, and discovered this : In the IOU worker, when fault in a user space page, this space is associated with a userfault but does not sleep. This is because during scheduling, the judgment in the IOU worker context leads to early return. Meanwhile, the listener on the userfaultfd user side never performs a COPY to respond, causing the page table entry to remain empty. However, due to the early return, it does not sleep and wait to be awakened as in a normal user fault, thus continuously faulting at the same address,so CPU loop. Therefore, I believe it is necessary to specifically handle user faults by setting a new flag to allow schedule function to continue in such cases, make sure the thread to sleep.Export the relevant functions and struct for user fault. Signed-off-by: Zhiwei Jiang --- io_uring/io-wq.c | 57 +++++++++++++++--------------------------------- io_uring/io-wq.h | 45 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 41 deletions(-) diff --git a/io_uring/io-wq.c b/io_uring/io-wq.c index 04a75d666195..8faad766d565 100644 --- a/io_uring/io-wq.c +++ b/io_uring/io-wq.c @@ -26,12 +26,6 @@ #define WORKER_IDLE_TIMEOUT (5 * HZ) #define WORKER_INIT_LIMIT 3 =20 -enum { - IO_WORKER_F_UP =3D 0, /* up and active */ - IO_WORKER_F_RUNNING =3D 1, /* account as running */ - IO_WORKER_F_FREE =3D 2, /* worker on free list */ -}; - enum { IO_WQ_BIT_EXIT =3D 0, /* wq exiting */ }; @@ -40,33 +34,6 @@ enum { IO_ACCT_STALLED_BIT =3D 0, /* stalled on hash */ }; =20 -/* - * One for each thread in a wq pool - */ -struct io_worker { - refcount_t ref; - unsigned long flags; - struct hlist_nulls_node nulls_node; - struct list_head all_list; - struct task_struct *task; - struct io_wq *wq; - struct io_wq_acct *acct; - - struct io_wq_work *cur_work; - raw_spinlock_t lock; - - struct completion ref_done; - - unsigned long create_state; - struct callback_head create_work; - int init_retries; - - union { - struct rcu_head rcu; - struct delayed_work work; - }; -}; - #if BITS_PER_LONG =3D=3D 64 #define IO_WQ_HASH_ORDER 6 #else @@ -706,6 +673,16 @@ static int io_wq_worker(void *data) return 0; } =20 +void set_userfault_flag_for_ioworker(struct io_worker *worker) +{ + set_bit(IO_WORKER_F_FAULT, &worker->flags); +} + +void clear_userfault_flag_for_ioworker(struct io_worker *worker) +{ + clear_bit(IO_WORKER_F_FAULT, &worker->flags); +} + /* * Called when a worker is scheduled in. Mark us as currently running. */ @@ -715,12 +692,14 @@ void io_wq_worker_running(struct task_struct *tsk) =20 if (!worker) return; - if (!test_bit(IO_WORKER_F_UP, &worker->flags)) - return; - if (test_bit(IO_WORKER_F_RUNNING, &worker->flags)) - return; - set_bit(IO_WORKER_F_RUNNING, &worker->flags); - io_wq_inc_running(worker); + if (!test_bit(IO_WORKER_F_FAULT, &worker->flags)) { + if (!test_bit(IO_WORKER_F_UP, &worker->flags)) + return; + if (test_bit(IO_WORKER_F_RUNNING, &worker->flags)) + return; + set_bit(IO_WORKER_F_RUNNING, &worker->flags); + io_wq_inc_running(worker); + } } =20 /* diff --git a/io_uring/io-wq.h b/io_uring/io-wq.h index d4fb2940e435..9444912d038d 100644 --- a/io_uring/io-wq.h +++ b/io_uring/io-wq.h @@ -15,6 +15,13 @@ enum { IO_WQ_HASH_SHIFT =3D 24, /* upper 8 bits are used for hash key */ }; =20 +enum { + IO_WORKER_F_UP =3D 0, /* up and active */ + IO_WORKER_F_RUNNING =3D 1, /* account as running */ + IO_WORKER_F_FREE =3D 2, /* worker on free list */ + IO_WORKER_F_FAULT =3D 3, /* used for userfault */ +}; + enum io_wq_cancel { IO_WQ_CANCEL_OK, /* cancelled before started */ IO_WQ_CANCEL_RUNNING, /* found, running, and attempted cancelled */ @@ -24,6 +31,32 @@ enum io_wq_cancel { typedef struct io_wq_work *(free_work_fn)(struct io_wq_work *); typedef void (io_wq_work_fn)(struct io_wq_work *); =20 +/* + * One for each thread in a wq pool + */ +struct io_worker { + refcount_t ref; + unsigned long flags; + struct hlist_nulls_node nulls_node; + struct list_head all_list; + struct task_struct *task; + struct io_wq *wq; + struct io_wq_acct *acct; + + struct io_wq_work *cur_work; + raw_spinlock_t lock; + struct completion ref_done; + + unsigned long create_state; + struct callback_head create_work; + int init_retries; + + union { + struct rcu_head rcu; + struct delayed_work work; + }; +}; + struct io_wq_hash { refcount_t refs; unsigned long map; @@ -70,8 +103,10 @@ enum io_wq_cancel io_wq_cancel_cb(struct io_wq *wq, wor= k_cancel_fn *cancel, void *data, bool cancel_all); =20 #if defined(CONFIG_IO_WQ) -extern void io_wq_worker_sleeping(struct task_struct *); -extern void io_wq_worker_running(struct task_struct *); +extern void io_wq_worker_sleeping(struct task_struct *tsk); +extern void io_wq_worker_running(struct task_struct *tsk); +extern void set_userfault_flag_for_ioworker(struct io_worker *worker); +extern void clear_userfault_flag_for_ioworker(struct io_worker *worker); #else static inline void io_wq_worker_sleeping(struct task_struct *tsk) { @@ -79,6 +114,12 @@ static inline void io_wq_worker_sleeping(struct task_st= ruct *tsk) static inline void io_wq_worker_running(struct task_struct *tsk) { } +static inline void set_userfault_flag_for_ioworker(struct io_worker *worke= r) +{ +} +static inline void clear_userfault_flag_for_ioworker(struct io_worker *wor= ker) +{ +} #endif =20 static inline bool io_wq_current_is_worker(void) --=20 2.34.1 From nobody Tue Dec 16 04:40:15 2025 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 160951D54C2; Tue, 22 Apr 2025 10:46:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745318781; cv=none; b=k3QpF9ieMkkwm7Snc6thdbt9SI4Tzng1GGY0m2apgmHbrClqPn2GETEVblULWRuDSPDEjb8RWwfhe0MNZ1670FX8+zjyFOUc/vWeDZk9dvhj+pGasT4Z/0+CSdwjdSEFqWqahy/z0jzpyHB83iDvpeNs+3ezA1+qNMAVBRv86yA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745318781; c=relaxed/simple; bh=riTPMhcadxwpUbCakRdCNbb8gPBt4Dlh4hK5pGGVbgs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=OYR78BtKHnnfHB48Zbq76jRUqlxNQSlhx+t1L+w59iHa5g7GMTyVKd0NjJW2x8na5ijr7ewsbDTactnexSR81PsV2wI1cFZWCWH5jyDgT/VImI03fMlLpJNFr856HuSzvLS2aTdL9IrE3rZuqEjD6FGzm4y2DLTr9LPh5pVh3dY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JTyOVtqa; arc=none smtp.client-ip=209.85.216.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JTyOVtqa" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-30828fc17adso4275943a91.1; Tue, 22 Apr 2025 03:46:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745318779; x=1745923579; darn=vger.kernel.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=Xly8X1cEz+i+9kvxZBf7zmULO0Y4b0BskUgodyS4Lpc=; b=JTyOVtqaE4z/i0e8L3qwNGMpGGtvaWiGzeSNohlAh1ipWXtGCTW7lavjicmOZfbQ7m FHbJF2RgikYLtdu81ASES35P6T9OiURfJM+N49G7D9Oav6SzniIWSe6utpV3FqWYQbic /FVPSpyqq7u8UHXtsljSGNoIOu/YbPBG2RLGM+g7x6tXxpC03oCERF7rC9VtKCYRP53Y D6Yo/A1p65AeO4DeIqmzNhzlnzUYK0qo6lYtfa6k33LQHONhs9pdLGw6+1P4C41Ito5q 837y+MR8UPb7CZP9KB7dLgtzhgZnkGujvaw1341dEVtNwhsMPYSBCLH2qh6doR3Wn8lc 6TEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745318779; x=1745923579; 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=Xly8X1cEz+i+9kvxZBf7zmULO0Y4b0BskUgodyS4Lpc=; b=qCq+9Ha5bkEuCVrzXabBlA0KfhwKYJPvLIjxQ4vY/fS4xv6eQq8C42zPp+vjztH0Fj kyHzHAjVM0lNB8ZlRes+6U/gQziov1eIoYrNWLaR4d+urLK4lUBjqs76b/OP8pVH5APy FejFNZ37rtuSb85fF4oKYerX8MmkIzTgnYvaPHPyWPzoZ+EB0WJsWgGtSwQ3RpTTKyW9 T6z0Sk12LDSOQjgNvlGNPAdLfTvbuGVeeDNRGpNXb64/Aigv6RQ7HLwHY2bmyA2hbYQC 2qoh/rPdDFkKSKmFgB35eBe0yNMp7zhhwQjvo14cKOcMotewxcTKbT6FPy2ddXdb8B6f O1+A== X-Forwarded-Encrypted: i=1; AJvYcCUSbiS70UQ03zz4UJIU7RzSmEF7TDcVA6WtUwW6cY4l0fjTesVp7CiaQsaTRKT79NWS0JD18DfaAQ==@vger.kernel.org, AJvYcCUg2is03shZ+0Rzc0UghJnREES5fvwndPlWDbZPSfxuWySsNldhI9KX0oPyiRWs+px5rHT4hU+nupnTXe1NQQ==@vger.kernel.org, AJvYcCWM7ql8N++B7M1/PUo2y6I7OxC5yIUDdobJ7rP0pZ6x9gM66d0IBWW+fN8oGhKaG7bO61l6pIAtVnloars8@vger.kernel.org X-Gm-Message-State: AOJu0YxhF4OplSzbhLLR/93VR5MTo5RF93cier8pJniTJ2hFZj2nADft QE47Fc6wuPuGAVP/i/SvnVrTnVK/elj6XmcSBbei0jj9RfUCM6M8PaDo1tjy1NVmLQ== X-Gm-Gg: ASbGncu3LTpu9H/xm8Z2/ur6BE5Dk9PQ4cdnJiFO81aaAxIkVCKrix85FXA/ADvWC8K bqWhuntshhsLGSMoiyMcZBPK805zGMqkMRmIHOFWzXfdwJW4UQTZoDOh4rrRXtie+e7xnZO7fsI L5hAWD2i1vgdgddgDV2ni93ejM4Zpt4dPjTnAkt19OkcrkXGqdiYNKJ6OBPc4DGnf7ct7W+9o0j zPd0erc0VFXUcIsjEo0z7ZeDLv6Cwa8udl4jq9q5Lc1MihPfm9R4CReNziExQWu3b5fcXjflPki ZLXg+yxjEJI7R+ZlVUOHDfPXuw/LZJw/1T16QsiWIcDLgEtUuVVejnu63+w9Nu43GeBI2bS0hIZ 8U6WGo6u/QQYzk+UsnGtJKaH2Qa8ZDC9tgR6+a6hBwpZQVuwkdla9dzFW1Jd2FwaXLXrMuc4Rbs aUF+lz X-Google-Smtp-Source: AGHT+IEvi8cHEqKxCFXREp4zm5+5YB1OUJt9x/7QpkeaDQmDO+nzdR3N8oeB3QOX75NaFlZSTp6kLw== X-Received: by 2002:a17:90b:5646:b0:2ee:f80c:6889 with SMTP id 98e67ed59e1d1-3087bcc8a9dmr24601641a91.33.1745318779308; Tue, 22 Apr 2025 03:46:19 -0700 (PDT) Received: from linux-devops-jiangzhiwei-1.asia-southeast1-a.c.monica-ops.internal (92.206.124.34.bc.googleusercontent.com. [34.124.206.92]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3087e05e90bsm8276853a91.45.2025.04.22.03.46.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Apr 2025 03:46:18 -0700 (PDT) From: Zhiwei Jiang To: viro@zeniv.linux.org.uk Cc: brauner@kernel.org, jack@suse.cz, akpm@linux-foundation.org, peterx@redhat.com, axboe@kernel.dk, asml.silence@gmail.com, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, io-uring@vger.kernel.org, Zhiwei Jiang Subject: [PATCH 2/2] userfaultfd: Set the corresponding flag in IOU worker context Date: Tue, 22 Apr 2025 10:45:45 +0000 Message-Id: <20250422104545.1199433-3-qq282012236@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250422104545.1199433-1-qq282012236@gmail.com> References: <20250422104545.1199433-1-qq282012236@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Set this to avoid premature return from schedule in IOU worker threads, ensuring it sleeps and waits to be woken up as in normal cases. Signed-off-by: Zhiwei Jiang --- fs/userfaultfd.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c index d80f94346199..74bead069e85 100644 --- a/fs/userfaultfd.c +++ b/fs/userfaultfd.c @@ -32,6 +32,7 @@ #include #include #include +#include "../io_uring/io-wq.h" =20 static int sysctl_unprivileged_userfaultfd __read_mostly; =20 @@ -369,7 +370,10 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsi= gned long reason) vm_fault_t ret =3D VM_FAULT_SIGBUS; bool must_wait; unsigned int blocking_state; + struct io_worker *worker =3D current->worker_private; =20 + if (worker) + set_userfault_flag_for_ioworker(worker); /* * We don't do userfault handling for the final child pid update * and when coredumping (faults triggered by get_dump_page()). @@ -506,6 +510,9 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsig= ned long reason) =20 __set_current_state(TASK_RUNNING); =20 + if (worker) + clear_userfault_flag_for_ioworker(worker); + /* * Here we race with the list_del; list_add in * userfaultfd_ctx_read(), however because we don't ever run --=20 2.34.1