From mboxrd@z Thu Jan 1 00:00:00 1970 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 46A9CC369CB for ; Wed, 23 Apr 2025 16:15:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 047266B0088; Wed, 23 Apr 2025 12:15:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F137E6B008A; Wed, 23 Apr 2025 12:15:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D3DB76B0098; Wed, 23 Apr 2025 12:15:55 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id AE4DC6B0088 for ; Wed, 23 Apr 2025 12:15:55 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 25F5F1A1256 for ; Wed, 23 Apr 2025 16:15:56 +0000 (UTC) X-FDA: 83365809912.29.8AFBCF4 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) by imf05.hostedemail.com (Postfix) with ESMTP id 18C4F100009 for ; Wed, 23 Apr 2025 16:15:53 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=fh2l7TzE; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf05.hostedemail.com: domain of asml.silence@gmail.com designates 209.85.218.42 as permitted sender) smtp.mailfrom=asml.silence@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745424954; a=rsa-sha256; cv=none; b=YMttrHx/dQcBTeDTjCNRFFGIKAdAfpCdOsDC45cjqaLXwGsUuV0+nrelKiZhGfLiQYaYIY mAoEfmgyt/EDpTuPF+6oNDREc50YoNqVuudUt5qmmyql5n88ODovfQxZppStZbx1b44SVl 0aW5f3e0eU19Z+DHVPeI/WHfZISk5qY= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=fh2l7TzE; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf05.hostedemail.com: domain of asml.silence@gmail.com designates 209.85.218.42 as permitted sender) smtp.mailfrom=asml.silence@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745424954; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hkXQF6L07fq9JaRv1rocvcWtopuXJMouDQ2Qzy0VLAM=; b=UKaT8Clyz87LPHATnfThLIpK53Ze4TQ/ApT2w/raXrwAYLZxL5EwWQbWvy2E4tObVatiZM mEsF7SK/FaP4iAb3ZBIAJYxJv9uqpehYRELbGlG9lqTd9yEm7k+7KBTIPG6/1HUehTLF/W 7QY4ytT+Zg6mpM+WMb27TsQh+pN6Dm4= Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-ac2a81e41e3so9031866b.1 for ; Wed, 23 Apr 2025 09:15:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745424952; x=1746029752; darn=kvack.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=hkXQF6L07fq9JaRv1rocvcWtopuXJMouDQ2Qzy0VLAM=; b=fh2l7TzEUySGVlHwfmSVVu7tnkK8Zh7Y9I0jAdkHnm24gyS48mt7q+3KqHHvpKSn/H BlhwJ4vuAvulKoNJxfPl/YWBxpfwpunCslFknhq/aX2RCWqkjTcmD8JOqQBSHkw0YXf7 O5DGJUpN3vHYZDtiJsyuv/VafF358psCTNSxDHVOju5O8il4qqVaxOChp2YPZ88wXqjH JR5KXmN03y2Q/2w18vgF/EltxNiLWlu6BzzB2fjob5txVxyUw+vQb6uEzuq2Z84AFwYE JpsybWlAYbB38CBs9wLQTV4ZGW4m0UA2BKZemUqdZF6vCUBusM/L3kjMD/fWq9nwe0b0 a/ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745424952; x=1746029752; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=hkXQF6L07fq9JaRv1rocvcWtopuXJMouDQ2Qzy0VLAM=; b=sHMKSItZli6ujww4vujEl+KRrYIFg7aE+8shDlNqesRfOHOMgrzAGaqibYRwphg8wl n+x6EAA295a7vrMsKCBQ4/OqsZaKXE4sY5kyGn5XeeHbLIzVZ2x6EHe81q3g6p2QiuMp w1ScLVJ3umKewKHA0eyuboziNmMFmxMnC6oFQBGUDecINjLOcySS8owM2yjIjPK2F/0v sQeKOE5auKs1msEZlwBVc3+McMiCfarq+sxeMkh4ugdPyTPTVRxBUociEtQB027BJnX4 BJxfwYdU+E0T1thKJHy3Vkoh4rEfrY4wWKBTMlH9C0akqMEtq4HkpzkkLMIA27sb3f5M gVOA== X-Forwarded-Encrypted: i=1; AJvYcCXZeU6VyO9obVA5w9ARUGA4OmQ2Z/K/rxlbdkSFa5B9FmsLNieosXgSwHVFxnTo08Qs/Q5fsR1qpg==@kvack.org X-Gm-Message-State: AOJu0YxI53Yx1HGZDP2cGGjd5+V7pbRUcQo+34sgDsVShonX42thaMnB vkdYbIoNKDuQZrfutbSb7Mnb6WzR/axIR6dTcyZLnULDSFN+QyNH X-Gm-Gg: ASbGncsg8Q9ZIaS0YAwbaoyPVVWpZuPYaapl3MQHeUlGinLh8DZSHH+Rz866l6hjNUg ZpbPtYq1q4+Zgtw3mtPAr+shuRKZLuXHG8dJOJlFI1qx9w0B5c0+pI6ZgmHCRoepwtipzPP/0Ya SUG+wcMbKgyPzjCxJpHBtLIBGk+oeYyaLP8bxgLPYE7cHo4YHMLTXa/qAvsqvw1QrFUvq77q15k if3HtHBFrIOMmbjp7BErJVliTPAFgC+N1ZcWWjgILYQKTZGOh42l8lvxNYM+7QKS+TzKsJPuV4X 4IYx9zgSwsZOnpRQOo7OKftW8HqXYqgUwOYP/szVJrBHQmoX/c4= X-Google-Smtp-Source: AGHT+IGfjA59Ii1TRUVdhru/QpbvQvwRewAB73t3x7AzZ7MY4Efy5K3RpjCp5vGmws3XKlb0bIOUGw== X-Received: by 2002:a17:906:abd3:b0:acb:b1be:4873 with SMTP id a640c23a62f3a-acbb1be490fmr773691766b.2.1745424952134; Wed, 23 Apr 2025 09:15:52 -0700 (PDT) Received: from [192.168.8.100] ([148.252.133.217]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-acb6ec92a36sm811629366b.81.2025.04.23.09.15.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 23 Apr 2025 09:15:51 -0700 (PDT) Message-ID: <00c7d434-d923-4b91-8ad0-5f3c8e0c6465@gmail.com> Date: Wed, 23 Apr 2025 17:17:05 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 1/2] io_uring: Add new functions to handle user fault scenarios To: Jens Axboe , =?UTF-8?B?5aec5pm65Lyf?= Cc: viro@zeniv.linux.org.uk, brauner@kernel.org, jack@suse.cz, akpm@linux-foundation.org, peterx@redhat.com, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, io-uring@vger.kernel.org References: <20250422162913.1242057-1-qq282012236@gmail.com> <20250422162913.1242057-2-qq282012236@gmail.com> <14195206-47b1-4483-996d-3315aa7c33aa@kernel.dk> <7bea9c74-7551-4312-bece-86c4ad5c982f@kernel.dk> <52d55891-36e3-43e7-9726-a2cd113f5327@kernel.dk> Content-Language: en-US From: Pavel Begunkov In-Reply-To: <52d55891-36e3-43e7-9726-a2cd113f5327@kernel.dk> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 18C4F100009 X-Stat-Signature: kzoy3wctoqqq6pwypb8frhxcu7usw5ip X-HE-Tag: 1745424953-241273 X-HE-Meta: U2FsdGVkX18/lTlCT8GTt9BfAvZvCfdgaEFVPu6nKKFbuq8ieebmt6Ywau9zRgaLWsofGO6Tnngi5i+z5yvjIdFrmbzIpS/L+Sj6HRlWtJMrQVOSMt0+q0dQ063okeRbDK316RVO3WNunSEHoC9HhsW6yGUmYLsbct1XV9XTw0h0JtmTaIILb7zOnjLY67FYqS487czk2JINWkVKAV158Esxc2vL0MxZruhLsgZl1oimiuD8fHXDxVdV5IMMdkZMR0XytURaNMYQzG9K9inq1JaiKY/YBGKhiWS9vIAGxMwUGmU3ca51i8FH7FjGXx3+vqcTrztmHd66eRRjaZlNnFlvhHMcHu33bYg7QbdrvYknNmioGuGq2PbHkJ4Ziwbf42b0SpFSodo3KDlm4EYUYPYEuOI8PNcVFkoQ2pk87BU8fvOfn5v1gPwfwqeWAXOAybcMONGahBbJUCs6WvJsaryGqqLEzhjlqU1C1jpD7wYn84aM4+B54edpFClP8KJM01n/+8pzen3pQpfp1n6404621OtUYxB+/PnbWCc7Vq4y2GwULAntlOuHqLpvTIDlwJHFjuEYJsyYdP8Go+8dYD+vaIXVTS+Apw0NdzKjCoIH1c45wd2JjtFaRxedrnWd5k8YloTVgESl7NI8v4Ck79YxVzzH0kfoKLiW/NjPN4OYcdmuGoOK6kY5B54bfTip6jn9XJk//FC3zQk4s2AArsrYUsaIsnHUAMn7J6bLZeboEKyqnuwL7khqMFnuFx1FrNst5vsJJfUv6V//q8gIW9rnH0tXbfEA/wHZJDI7amgYEeGJ+0bKRUyB5NNJ1dNmpAesbpghS4EIxZzorsA+uOnYbg4VgGl2idC9CpOqu3NqX4k3Iefs3HflbN4yIlU3xI8SbrxuvefIeKN4NsR8Bf5IEKX2pH7yzZGSC9+3mB2bWyxO2lsyp4Pjq7+N49IBHnUAnZOF+44BdWNG4sB c1FwiSAh 7JfAqMarvqfIvK2fEr/mUP2+tbWrYUw4o39KgfcfqQuEhnGTqTUGg/DeubdLgKG8Oswcfs0c6QfLHYuHs70QSl8cABQM8QFZCRMl8R6xyRLutINZYd7NYC6zdj9t49PA4106Zyb2yw4Om48jaEqFYE+bTtAJI6FdV39algmId/g8BVnQpDJr6L5QDx/EDUNFSVzub4mdIQT2ivqNXMZzhKpfnTwh4OZ4E8mpRI4e7t3JgmWv9BQA/9Bck59Ekclbdn0B6iKuNRlRpV09PHSmcvKLUUo3zj5ZgmS1RA+1zVhlN+wuLhLyuiS+1lAI/5nF2S/GNgXerOZppGh5QttzcIG7SzcTWU+So+vRQAbyJEC+c+D1uw8uMAfvHt5lZkALoXkcELtS2Qbknymqljy6v0rXyvsoEonfCsYalKWkbEeHH3lhSODxw1T4XELuORsbeTJzmpbvXaAajbzrYpt6tNo9+wFpvcpz90dw6 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: On 4/23/25 16:55, Jens Axboe wrote: > Something like this, perhaps - it'll ensure that io-wq workers get a > chance to flush out pending work, which should prevent the looping. I've > attached a basic test case. It'll issue a write that will fault, and > then try and cancel that as a way to trigger the TIF_NOTIFY_SIGNAL based > looping. > > diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c > index d80f94346199..e18926dbf20a 100644 > --- a/fs/userfaultfd.c > +++ b/fs/userfaultfd.c > @@ -32,6 +32,7 @@ > #include > #include > #include > +#include > > static int sysctl_unprivileged_userfaultfd __read_mostly; > > @@ -376,6 +377,8 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason) > */ > if (current->flags & (PF_EXITING|PF_DUMPCORE)) > goto out; > + else if (current->flags & PF_IO_WORKER) > + io_worker_fault(); > > assert_fault_locked(vmf); > > diff --git a/include/linux/io_uring.h b/include/linux/io_uring.h > index 85fe4e6b275c..d93dd7402a28 100644 > --- a/include/linux/io_uring.h > +++ b/include/linux/io_uring.h > @@ -28,6 +28,7 @@ static inline void io_uring_free(struct task_struct *tsk) > if (tsk->io_uring) > __io_uring_free(tsk); > } > +void io_worker_fault(void); > #else > static inline void io_uring_task_cancel(void) > { > @@ -46,6 +47,9 @@ static inline bool io_is_uring_fops(struct file *file) > { > return false; > } > +static inline void io_worker_fault(void) > +{ > +} > #endif > > #endif > diff --git a/io_uring/io-wq.c b/io_uring/io-wq.c > index d52069b1177b..f74bea028ec7 100644 > --- a/io_uring/io-wq.c > +++ b/io_uring/io-wq.c > @@ -1438,3 +1438,13 @@ static __init int io_wq_init(void) > return 0; > } > subsys_initcall(io_wq_init); > + > +void io_worker_fault(void) > +{ > + if (test_thread_flag(TIF_NOTIFY_SIGNAL)) > + clear_notify_signal(); > + if (test_thread_flag(TIF_NOTIFY_RESUME)) > + resume_user_mode_work(NULL); > + if (task_work_pending(current)) > + task_work_run(); Looking at the stacktrace, that sounds dangerous 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 It might be holding a good bunch of locks, and then it's trapped in a page fault handler. Do normal / non-PF_IO_WORKER tasks run task_work from handle_userfault? -- Pavel Begunkov