From patchwork Wed Sep 4 20:27:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791355 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 06AE0CD4F24 for ; Wed, 4 Sep 2024 20:29:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 789446B0346; Wed, 4 Sep 2024 16:29:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7129D6B0347; Wed, 4 Sep 2024 16:29:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 53D966B0348; Wed, 4 Sep 2024 16:29:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 2F67E6B0346 for ; Wed, 4 Sep 2024 16:29:19 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 9AF3F81645 for ; Wed, 4 Sep 2024 20:29:18 +0000 (UTC) X-FDA: 82528195596.29.C0C7609 Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176]) by imf25.hostedemail.com (Postfix) with ESMTP id CE849A0010 for ; Wed, 4 Sep 2024 20:29:16 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=hfHQHtfn; spf=none (imf25.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.160.176) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481732; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=rE3z53SxlgArsKnVp16449O9VmLlGGSseshi4KP5xk8=; b=1ltz8HGGuXi/Q8gGIVDt2nQCpUIgcFcMHI5+kDD/RjF1NgcqLkbMVcuqllMICepuPs869L ACkxXtDjXV3KbytF/ddkuQA0LUiXKRnv3N2ZKiLoo3tL7J7BKsR61O5qyi1RFkK/UvBraj 9NfXBWFr7JPcNBgA+OnkSIVB3bDg2B4= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=hfHQHtfn; spf=none (imf25.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.160.176) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481732; a=rsa-sha256; cv=none; b=iGgeBWV/nipiC+niX5g77b41jGC1hxo+uXOt1crp7NmnwyQff0e0xDlPIWmVjbcsXNGD6r Dhyg04d4hsm3zv8ONwdOR3rLZ8D5V2XMFT6Lybh+w3azTrE4MI4rWcwzTFCvece6kSPx+b OQ0m8+0Yaecm5xfknpdbfAj/PphKRNo= Received: by mail-qt1-f176.google.com with SMTP id d75a77b69052e-4568780a168so364471cf.0 for ; Wed, 04 Sep 2024 13:29:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481756; x=1726086556; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=rE3z53SxlgArsKnVp16449O9VmLlGGSseshi4KP5xk8=; b=hfHQHtfntwFYajHGRxCxyfoZuw1lOB8LQE9wSFxFN5lVYiVyVnNuZGV8UfH+gmGBx3 qxA/11aYH/Z+bSgY0IhNG00et1Kokf2vSRRR6AzkJlqb9F6U1RAJxhtGBUrg6VLYuIQA ACSDdw+3wh06po/QcGITJpzm4EvHCjUfkuEz7S47BCzuxZhn25juncDtOkiX5lHreUAM nyTK6wUTozadfjB46xLKeFpj10hmWwo8lAdKAYRsyqZBdE+gIrCwCxEVHKrgxbyDDBKS o1w6EUzNL7pXYsSNb4t1VdE/EO+tI6JbN5yFwsuKJIM1QfkCWcpCYyvm489/ZaW8hElo 7qAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481756; x=1726086556; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rE3z53SxlgArsKnVp16449O9VmLlGGSseshi4KP5xk8=; b=oQk9Wr62EZ+8jigJYixXqPgw2mQHyEqQIeoM+cEAjqDLOfftkeFzjROfGbyZTtjox5 R7nG85ZUdoZGnVYLWxbVAwECT2RYumWuaycWjNE4BEX6/cSanZHr0YD5nFYGjwRNTYUw 3HqMY1mHah78uSTvLX0Z1GBG/JIbywnJ/SwzEUtwmBIWJGDpzkvSh1vlgIsXCwB3dlOB vb7zNPEIn0AXDhS0/J849EFuBbh7muBeL1pdsqNhM6OWWqAGosbBXu6uMDODjuhMjPqg BS4o5VX2VImlVdv9whaKLnuilUF3PGFCZZYJ142safjVHiQ8fk7H7e4/1kEydRUNv9kd p7TQ== X-Forwarded-Encrypted: i=1; AJvYcCVLJm2mN2NxQ0ZZ4iLDNZOD01ytAprPam/1+mPEba53ZjnGmNFoez2dsdjcGqaJcjevLMA+g78ymA==@kvack.org X-Gm-Message-State: AOJu0YxkJrqRZGsP0/edKO3UezzC13ffNmHAsg3Xa4AYWld4290xJfZa r67n30iP6txdfZdlXXd2TnN5oi4ruGgYkIWqZE1n1CB/0ltrJBX5K8h8/2f7kxY= X-Google-Smtp-Source: AGHT+IHwW5fXaHWnF6X5TRV/cQ4dUOF+w2NPeKDvoOEkYHuq6qKl8uAhehzsgXTy2K4uj8CzjjebGQ== X-Received: by 2002:a05:622a:2292:b0:456:7877:1e91 with SMTP id d75a77b69052e-456965f44ebmr193409851cf.27.1725481755768; Wed, 04 Sep 2024 13:29:15 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-45801b52ea3sm1489771cf.53.2024.09.04.13.29.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:15 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 01/18] fanotify: don't skip extra event info if no info_mode is set Date: Wed, 4 Sep 2024 16:27:51 -0400 Message-ID: <6a659625a0d08fae894cc47352453a6be2579788.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: 6b69hyby44uxas9fijkd1jijk9yfsniq X-Rspamd-Queue-Id: CE849A0010 X-Rspamd-Server: rspam11 X-HE-Tag: 1725481756-563775 X-HE-Meta: U2FsdGVkX1+HpQS4bLAb180SKJcdXT+NBEcb4DC+uBXBiibQLVOxMsCXNqI2EjWhxI9yP3lxOcEHWCBT/zptWJkvHGWh6ZjTXMZ+WHXLNjZJ2jEJoGXOGxhWanyUM8GAB0SosbN0atMbjLhveXNJAKMhxEaVK6PBnygkpPVQks9pAcOSMrjLh0hEmxuz+AdxfTTxKv4klZshnG/hXp+RgTI1/HM1f79FMUKk5h+sRwLGDiW0WRDsAYVN5pLR82ZYeU/GhLl4r7ONUGZrCzQsVDA644aLYB6SWJhSONQ4WYiJTh1HHZDC1M4ax2wW+tE6X97nlDzObMPwdHInWd4aUXXgpBWl9ir5T3dNWLuzenqTLC94TP4vfhYq/x3XtIb8OOCwIdsUtM1bfloQGKvbnIetbggrhHyWy1lxI2f3Kh3TRNb9polGBWgFH7epihcMSLMa0f6GelQIe3OdOoaI83cPle/BHs0k+TOBEvHiVEN/iHM3ScLX7ybl5OibEUQIF8FQkOOLsm3i7AQCpjTlST4JqPpouF+PDWencFQ+5LkpTDSCtAX9UKmlvYNaucrrXB3ACKIu6fm+89NsBJ2VUbBi5S8I8y0Y2/bbbG8BahrRy161woO/7dSUhCwZinMUDvJlqyvJd6lX2OgwpqlAHwVFKI44s/vSV0qWS7kMzz+wJcSJTKc2lk3h6qt7BLdHcRKfYxzL9l59Z8UJRA72v8vW5ci26xuicGRlDaolIa5PJAqauONaK+KY8V7ZHyYjxE+1dBsEVH6n8S2mbUMlOax+/XjHfvnF5H9T2Yib1q8isT3rQ7hKeRU5Ksr84yRXsZFZ62Jcaf7IHGT16SJ3Mb8EwM9IkJYs6qUEfDIvc5miqenDdreGOiDWURs9mKfFZbGzb921D7Yp3qPJhydzaaGz4S3RXh0suylwhhyh86Ee3qKE3vAk1eTrElrOmH594YZebqvRiI9/wnzA7HD UAwtWWof aTx9RXO8Ku81OZBPbIP/tXGxufwmgCEQjn7mqbLCzTP+saWJlqQn5C9fheOBLfDkufZchflsGdl2K8zJ+qSN33KZumiIhuALRjpkC1VFrlStHmLqMSPcbkWZASzqSrwnTnPGEZkYDHK2t54vp0FOfbGAYKWW9ZuMYoiUCw7W069pu+PMrtgrhY16DiAymwrOg79ypw677kObtFGuK9zQ/VakK5nDJ/CAjKrT6Dx6Wbn/ucW0AqMesuRBK5qKD8uWUZClnz1eh2kNdejj+TSw5Gv2bMZQQvC2CAG+qkKn4uhSmX4fgxvBDJCwyShHYlaxfOJbEKeLtjAk61UAZPEyrQzgLPdY2xFMAcatBxDKVgf8pWcbrf8+GW/Vvpom7eIkKyqTxM/DDF8F/x92TT9zO2aoulZnSg9ZIRtrj X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: New pre-content events will be path events but they will also carry additional range information. Remove the optimization to skip checking whether info structures need to be generated for path events. This results in no change in generated info structures for existing events. Signed-off-by: Josef Bacik Reviewed-by: Amir Goldstein --- fs/notify/fanotify/fanotify_user.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index 9ec313e9f6e1..2e2fba8a9d20 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c @@ -160,9 +160,6 @@ static size_t fanotify_event_len(unsigned int info_mode, int fh_len; int dot_len = 0; - if (!info_mode) - return event_len; - if (fanotify_is_error_event(event->mask)) event_len += FANOTIFY_ERROR_INFO_LEN; @@ -740,12 +737,10 @@ static ssize_t copy_event_to_user(struct fsnotify_group *group, if (fanotify_is_perm_event(event->mask)) FANOTIFY_PERM(event)->fd = fd; - if (info_mode) { - ret = copy_info_records_to_user(event, info, info_mode, pidfd, - buf, count); - if (ret < 0) - goto out_close_fd; - } + ret = copy_info_records_to_user(event, info, info_mode, pidfd, + buf, count); + if (ret < 0) + goto out_close_fd; if (f) fd_install(fd, f); From patchwork Wed Sep 4 20:27:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791356 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 3089CCD4F26 for ; Wed, 4 Sep 2024 20:29:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 25B476B0348; Wed, 4 Sep 2024 16:29:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1BD156B0349; Wed, 4 Sep 2024 16:29:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F00846B034A; Wed, 4 Sep 2024 16:29:20 -0400 (EDT) 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 C82406B0348 for ; Wed, 4 Sep 2024 16:29:20 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 68BA4120544 for ; Wed, 4 Sep 2024 20:29:20 +0000 (UTC) X-FDA: 82528195680.28.0D1D8E5 Received: from mail-vs1-f49.google.com (mail-vs1-f49.google.com [209.85.217.49]) by imf17.hostedemail.com (Postfix) with ESMTP id 9C7174000C for ; Wed, 4 Sep 2024 20:29:18 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=QodfRb0x; spf=none (imf17.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.217.49) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481710; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=G5YjJnCjztcen/Z+X5lHX0n7xhNQ/QripYlvqYqvblA=; b=WrL4DtgZGCtydO+5mLdOgqMELTMDocyux1iefAeNUo9Lpy4BRzb7S2aOUhS6VcT33lW1XP eETo2bY+ZZwpwoTfu9zFlD5Zc+BE+neHhZAw4zm6O+FOS5B7eh/PhkvSQgZ1UFGIgb0cCi e63XpS41KE7y7b+76f+sKsetv0XMRYI= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=QodfRb0x; spf=none (imf17.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.217.49) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481710; a=rsa-sha256; cv=none; b=S+DtOCbA2BqtVwgaQUqCLrSzP57OTh0Z0weeDMIPXSuBCuL0+gj6Uj4IfpJmnehkyWRct0 7WJe/QEE1DoBjDiqiI//uegKviVZtYx6saF0t65tF/WEoTZk4LShVOuNBFlftqUuYFCLAh HVie6n1nLhLszhW9vfWvKTgP0Y7hios= Received: by mail-vs1-f49.google.com with SMTP id ada2fe7eead31-49bc42bec6dso289366137.0 for ; Wed, 04 Sep 2024 13:29:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481757; x=1726086557; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=G5YjJnCjztcen/Z+X5lHX0n7xhNQ/QripYlvqYqvblA=; b=QodfRb0xFqcjOtP2Af2J7YOtdiorXV9de0WmL0jz3GOfx2cvwspq8+1xl8Ds21BeT+ mGr3EhH6sWl4Pq4206pG1RUOj8Av+N1YdqoXaPYU02Jo1JSLO1iyBAF+1x7u2t9zRASQ 6Gwx3kgNHPnnuIdy46g22SGgtZxQwQhEq1W4P/5azlrKQXonaUTtzHsGRpHAzAVDpgLh 2j4TdjydGWWcaoT6YlKYhDpyefeVk4F4J1EpuELYO7gc3TaWIqkE4fmzHorB5e+PUD6Q P1LtZo4MdWN2QRQ017BpV+I1stBthF+EbKHNes6g778HzuHcxfZK4EPDO42hX8c0R5bj rLXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481757; x=1726086557; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=G5YjJnCjztcen/Z+X5lHX0n7xhNQ/QripYlvqYqvblA=; b=bcLBFWdEOAird3skwuQcAStVbrJ/txi6wn2dezjhgMo33Hjoz3f9lVgpvmsObdtZR8 phoM+6q9wrWM3BAVMd7x315IZEgB8ubTFYMFHlIMa3/UlODcG2VtHYPKE5GTZLM47dnI 3KTBdPnwD5bm5gOqwRJprh66Ro5afj5GfI6RU/v7BPjro0KVUoQHSBOMqz7pyXXMrZ+3 Fv7fXP844F21dlotg2tUFozFDSOtSVOkiT3y/uCAnmCboubFyQ1Yd2AueEfkSYgN31Y1 wUpGRNn419XAPZDWZCG6tdkkSA8qochF7bcuLsgSL7DynjPRh9jyRYxl+vcmu7OG2sxR bV6Q== X-Forwarded-Encrypted: i=1; AJvYcCX0LcRWfwfCpSMDIMLaxIktaCucyvucNs9NUiu13pnHFZuHiB81Kjrz0Sbr/qQMnYXz1Ap6o6XS0w==@kvack.org X-Gm-Message-State: AOJu0YywUwiNFQ0eYQM3Da0A8qdQHYXjWbhzl75nEco48134pfxzsaxb oGhdATbKPgs8CooVnWUusb49gM4WIB4cYlUv8poE1A9s/uvbdE/AMoOfgyqWolY= X-Google-Smtp-Source: AGHT+IHvcict8JxrlQWrQU5plI6x5zmPl5v4oP6wc1pvF95llWkCs8Ce7IJ9EEARO1WLH0fb9o1Srw== X-Received: by 2002:a05:6102:c91:b0:498:d39d:9b7c with SMTP id ada2fe7eead31-49a77940af7mr14221150137.2.1725481757506; Wed, 04 Sep 2024 13:29:17 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7a98f00acf7sm15095385a.107.2024.09.04.13.29.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:16 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 02/18] fsnotify: introduce pre-content permission event Date: Wed, 4 Sep 2024 16:27:52 -0400 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Server: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: 9C7174000C X-Stat-Signature: nhremadne6dqfsm641c6htxs68mrqki1 X-HE-Tag: 1725481758-738882 X-HE-Meta: U2FsdGVkX18G8RLa7Mj9g2h+bJXVw8Gv7vHH2G0id2ZKVdmQ7i86gd8F0d72WxXSzp3tSlXyrSaHEJ0yV7Aqvnzud5k6suO1pGPqpCa6rIUZSuYaGdepY/9D7CK8f/iqlR9SH1PgsGUAX6eA/PDNnGhqlIG9RcB+G5qEX+yVGnJ2GE7BNh8pFNs6iQSUgEcooKnOG2wNM6lRRPWGrB+UwmtkjUH5/AGI6IjZ871RNvcttkJObjALvUuTeXGIXeEdG6GrcBzjZ9Gg6+oGG9Hazp3mpUQqWgscRWi9IcIvfPE7tk6YndzO+UndTKd+Gn69nUhnG9fT5Z/Atro9NYFsR4WABg25u3lHYWPY3A4mNM/IrqJB61CuoUbrxJPtk8VTyJpa3clbek7SZKs+P6CGX2SQcPpofswIBHil+IGSuHgtevKDTAAuDd7k5Hd8nHmh8NrrECMXjoy8/iV4XJNDTcQdrKk10km6eCu2zPpr/mR4QuIdxmyX9ArgMa0eRfXsg8v6M0Uv4kOto7CQb6+zMhRjjFTZGoR94QKlAP/GaQpmWFkJ+NyoiEmLHJkNC2Pln+i8HwbkBHpomJ9jHfyFOKR3ymVEkLEayex0J0mi+WCTInIroQw72MEKxSw2FHBLLZI5S3mxLu/1ArVueTkiArqWWsgyNKY9w47LO5ue5E+sMEiH1iLu8UBitkBusBEFYv5tqZuF/tSsMNO1Q80raEbLwuHukx707SPQyJe0KS3h8T1KCkY8v21ZXDDMRxlR6KRaT6nF+f5u/0Oz9ZvNDYfe+8KodESxH3hQ+89+55+OQnU4JKHXXR/9E/gNVjc/e0ER+80vlYwbzdDOLsHG5jJ6KEkJq9RCq97/eFu1kIZYokUOXWWDo6ix5ezZj16lkW62q0iaihGzrCaWvceqVB9STixjU81PXH3yq2X/yGX2V6bvmKIyyUdkLWD/0PateP1Bbi3lxdWTwJrOWqb uPmpuA6D 8GObm4AszzW2GZV9x/vNsXDo0jhcXwQHAmfjEllR73YfN1aJY+brAN9ZhExhcP6di8TfBXKlp2yrPXbPado2OxgFMHo6MTfnpmc/lNrfR2iJDDQOd4z41ZoH3pDkkYHvpvGKy4LIah50rbECAd4yUsYrmjjkpoRCznA3+TnnGCkdYgApOFfIpSHGj2QYhvHpv/HcTUHM/j5jG9gsoDk5C3x7rVrt+jJMvqa6f6rtjsAz3UHiN1YTrNpnGjPzNXCOXkvFy8mRerbiHTxBIIg0Xsyj2+qoefjgx95nC09p9oPZmfVtzz54T8krWNg== 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: From: Amir Goldstein The new FS_PRE_ACCESS permission event is similar to FS_ACCESS_PERM, but it meant for a different use case of filling file content before access to a file range, so it has slightly different semantics. Generate FS_PRE_ACCESS/FS_ACCESS_PERM as two seperate events, same as we did for FS_OPEN_PERM/FS_OPEN_EXEC_PERM. FS_PRE_MODIFY is a new permission event, with similar semantics as FS_PRE_ACCESS, which is called before a file is modified. FS_ACCESS_PERM is reported also on blockdev and pipes, but the new pre-content events are only reported for regular files and dirs. The pre-content events are meant to be used by hierarchical storage managers that want to fill the content of files on first access. Signed-off-by: Amir Goldstein --- fs/notify/fsnotify.c | 2 +- include/linux/fsnotify.h | 27 ++++++++++++++++++++++++--- include/linux/fsnotify_backend.h | 13 +++++++++++-- security/selinux/hooks.c | 3 ++- 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c index 272c8a1dab3c..1ca4a8da7f29 100644 --- a/fs/notify/fsnotify.c +++ b/fs/notify/fsnotify.c @@ -621,7 +621,7 @@ static __init int fsnotify_init(void) { int ret; - BUILD_BUG_ON(HWEIGHT32(ALL_FSNOTIFY_BITS) != 23); + BUILD_BUG_ON(HWEIGHT32(ALL_FSNOTIFY_BITS) != 25); ret = init_srcu_struct(&fsnotify_mark_srcu); if (ret) diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index 278620e063ab..7600a0c045ba 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h @@ -133,12 +133,13 @@ static inline int fsnotify_file(struct file *file, __u32 mask) #ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS /* - * fsnotify_file_area_perm - permission hook before access to file range + * fsnotify_file_area_perm - permission hook before access/modify of file range */ static inline int fsnotify_file_area_perm(struct file *file, int perm_mask, const loff_t *ppos, size_t count) { - __u32 fsnotify_mask = FS_ACCESS_PERM; + struct inode *inode = file_inode(file); + __u32 fsnotify_mask; /* * filesystem may be modified in the context of permission events @@ -147,7 +148,27 @@ static inline int fsnotify_file_area_perm(struct file *file, int perm_mask, */ lockdep_assert_once(file_write_not_started(file)); - if (!(perm_mask & MAY_READ)) + /* + * Generate FS_PRE_ACCESS/FS_ACCESS_PERM as two seperate events. + */ + if (perm_mask & MAY_READ) { + int ret = fsnotify_file(file, FS_ACCESS_PERM); + + if (ret) + return ret; + } + + /* + * Pre-content events are only reported for regular files and dirs. + */ + if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode)) + return 0; + + if (perm_mask & MAY_WRITE) + fsnotify_mask = FS_PRE_MODIFY; + else if (perm_mask & (MAY_READ | MAY_ACCESS)) + fsnotify_mask = FS_PRE_ACCESS; + else return 0; return fsnotify_file(file, fsnotify_mask); diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h index 8be029bc50b1..200a5e3b1cd4 100644 --- a/include/linux/fsnotify_backend.h +++ b/include/linux/fsnotify_backend.h @@ -56,6 +56,9 @@ #define FS_ACCESS_PERM 0x00020000 /* access event in a permissions hook */ #define FS_OPEN_EXEC_PERM 0x00040000 /* open/exec event in a permission hook */ +#define FS_PRE_ACCESS 0x00080000 /* Pre-content access hook */ +#define FS_PRE_MODIFY 0x00100000 /* Pre-content modify hook */ + /* * Set on inode mark that cares about things that happen to its children. * Always set for dnotify and inotify. @@ -77,8 +80,14 @@ */ #define ALL_FSNOTIFY_DIRENT_EVENTS (FS_CREATE | FS_DELETE | FS_MOVE | FS_RENAME) -#define ALL_FSNOTIFY_PERM_EVENTS (FS_OPEN_PERM | FS_ACCESS_PERM | \ - FS_OPEN_EXEC_PERM) +/* Content events can be used to inspect file content */ +#define FSNOTIFY_CONTENT_PERM_EVENTS (FS_OPEN_PERM | FS_OPEN_EXEC_PERM | \ + FS_ACCESS_PERM) +/* Pre-content events can be used to fill file content */ +#define FSNOTIFY_PRE_CONTENT_EVENTS (FS_PRE_ACCESS | FS_PRE_MODIFY) + +#define ALL_FSNOTIFY_PERM_EVENTS (FSNOTIFY_CONTENT_PERM_EVENTS | \ + FSNOTIFY_PRE_CONTENT_EVENTS) /* * This is a list of all events that may get sent to a parent that is watching diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 55c78c318ccd..2997edf3e7cd 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -3406,7 +3406,8 @@ static int selinux_path_notify(const struct path *path, u64 mask, perm |= FILE__WATCH_WITH_PERM; /* watches on read-like events need the file:watch_reads permission */ - if (mask & (FS_ACCESS | FS_ACCESS_PERM | FS_CLOSE_NOWRITE)) + if (mask & (FS_ACCESS | FS_ACCESS_PERM | FS_PRE_ACCESS | + FS_CLOSE_NOWRITE)) perm |= FILE__WATCH_READS; return path_has_perm(current_cred(), path, perm); From patchwork Wed Sep 4 20:27:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791357 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 307EFCD4F24 for ; Wed, 4 Sep 2024 20:29:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A4A1E6B0349; Wed, 4 Sep 2024 16:29:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9D16A6B034A; Wed, 4 Sep 2024 16:29:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 789E86B034B; Wed, 4 Sep 2024 16:29:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 561186B0349 for ; Wed, 4 Sep 2024 16:29:22 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id F28ED12093E for ; Wed, 4 Sep 2024 20:29:21 +0000 (UTC) X-FDA: 82528195722.16.84F8E2B Received: from mail-oi1-f172.google.com (mail-oi1-f172.google.com [209.85.167.172]) by imf19.hostedemail.com (Postfix) with ESMTP id 245A61A0014 for ; Wed, 4 Sep 2024 20:29:19 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=E6z8Zmv6; spf=none (imf19.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.167.172) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481665; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=jN13mVwJhuqjX4PmJ7GJ6BtR6lc23krv9oFHMk0R8ZY=; b=uz+zvoOytlRSAfFjH4J62F4ZWbC9x29x07zMs1aof0rn5TpJDbfRMANe84lTr44qTg1Aui i/qhuvbCBupz/26XbLvzmfPiUWhOQjU3E9m4vnVYZrb88gum3OzkLD61IyBKXbhn5i5rHB recPEHQA5F0jpAcInuyVxhSpSxM6fgA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481665; a=rsa-sha256; cv=none; b=4TZxSKOaEs/peb3ZcTiS7xe5EbE3D/K9V9p7vmxlzTmQNkWZjpnSBsV/T9ZuypvDYztHg4 /sA9C5IpeWoDQ/Y+vmEBEHVtgbh29WbK9DAD0dkwrLtzyAnBvpV3OYlia0q+tbOt76yvyd P6txOfaNFhwoUhsihC+H07o3yxI36XE= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=E6z8Zmv6; spf=none (imf19.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.167.172) smtp.mailfrom=josef@toxicpanda.com; dmarc=none Received: by mail-oi1-f172.google.com with SMTP id 5614622812f47-3df0d9c0fbfso3773039b6e.2 for ; Wed, 04 Sep 2024 13:29:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481759; x=1726086559; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=jN13mVwJhuqjX4PmJ7GJ6BtR6lc23krv9oFHMk0R8ZY=; b=E6z8Zmv6XIE8WPpO829qX6ZOQ6nKdbeTof2Ic69rEEH74NgSFXHYZ+0Z1FtNttQBs7 ZQMb3K9x7PioPALNozBaIKjy7/gd9Fk431SZVzVmRUg8wV5esic6oFMgqzUgP6gEA/yf jtyV+HIPsziKgx+oZWSP1hMGjYBB3rF/6OglmJfLyL95qqSPfcuy0tPsjyK9bwCTxmEh ycI8E9ZxUCihM+IszVMbbxWB6Ywrt+BsyK77y8k/tdGFA02ilEJrXoZo2iJ92b01s2V2 SRBxJIgbR1vaKGyit9vXcftEZDQa8s+n4PbcW+p0JQ8Bxb9idltO8V/ssa9cGNWB7XZ0 fW+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481759; x=1726086559; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jN13mVwJhuqjX4PmJ7GJ6BtR6lc23krv9oFHMk0R8ZY=; b=Xb3haUGQaOnYnmQ0RNu0eEsDttRKXzxHFfInTTzhFNWFWi3DZRyvc3G8xVR5EtkHuU +K/nMzrBPtBBDRWXRIwJIsGaXt92tRUk5V+uqVj/p+VDu+HWiNdZ7ui1QR+hDKkCV18W JuN2MQV02MeyRFwe8TMFYJwlSuhEKwD7aJuojtP+WKi9aoEWOBPt5aiiUgPgNLGFmvUF HwnH8alaZy/gWErkWbtOyqlT4shMRK8Vh8fIT4hl1tV43yW/yYgJbKQEqveZXt28Fe3+ zLenVETwn0zD2OE17L4b1ZB8JE5tdkFwKDZSZAqBA0rX0hLokIKPDKhJ81A0FCiaTPKP d86g== X-Forwarded-Encrypted: i=1; AJvYcCWx5ETrmq/HmKBa1KqthPBEtFRGyLsN6T/24pHU0ZNUDjJP01Jd+OgqG4/7mwiOVGHBUyjYMJKSiw==@kvack.org X-Gm-Message-State: AOJu0YzxNqvSnDy4mQvH3sd2L7kHZwBA7BeSYNDyyJ67vAD0M+8GSxaB 5OmlEjfu4R9ZuRxJardH5qVb9257pDMeSWH6fPwW48RyMyHAOvaNPl4mJVcnHRU= X-Google-Smtp-Source: AGHT+IG+yDupiC0Kppt9fCxGX8WKPY89paC515rZx6+FiPwoVSHDWV3mC1QVmv+EWb3aMkbVDFXGwg== X-Received: by 2002:a05:6808:3c46:b0:3e0:70a:3abb with SMTP id 5614622812f47-3e0070a4179mr12332118b6e.11.1725481759225; Wed, 04 Sep 2024 13:29:19 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-45801b3277esm1506081cf.31.2024.09.04.13.29.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:18 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 03/18] fsnotify: generate pre-content permission event on open Date: Wed, 4 Sep 2024 16:27:53 -0400 Message-ID: <4b235bf62c99f1f1196edc9da4258167314dc3c3.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Queue-Id: 245A61A0014 X-Stat-Signature: ygob6bbc9jf7pi7idygrs59d3bdsebko X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1725481759-198695 X-HE-Meta: U2FsdGVkX1/sfjTz47GN5X6PnOpgXw5mYQrgjueI/ejed0ZKL4gxxSxvcYmqD7JYfZNVAlNxrF9ZcO8VFd7wGY118i1nO25FYQmQjKqttBua1gsRPouEz7uCCD+U3rnb+7gOW6w+gfqZaiT9z0R1tOwsHjPRulR9WxBiTaSuw4qDbxYWKumkhj1ZjMdNDCG4AQCleW4RYP1tInQvYNui/GtoHRHUO46b2fsa9jc6qPC1FWue3ABrn6yKeAhegEJkKxu4CbthuJkVcxBxJ+QeIHHNNEJGJnr257TbOsm0Bb62E6SX1xg1Vkh5vVn9w7hUNEgKXxr2xL/LHodEZ8ZN41Mb+0QA6vs5fkecJchV3hxwgXLonOdamSyDS8E+ShwTeTdPuPUWVWXiJJPWPydNVQnAwdVb9Bucfx2FoxxFuGla22sl7y/9LDEIl2JNHkJqiHMyMZwvyG6nE+7FdiAb+ZoSqMtY7qKDEJYuEsfu9DGvNwJ2QokmtB/L3UjR5rLb/YBX0N2G6X6cEde00SW7rW+yA2xQkqZBZpWSreV731cxGN68zpQAWolBKFMB0UgXXyjfeuykEuTZIC+NtTPSnyZxBgGfsQzrBDuw1L0ZdGH4GVwuBBEOoWGp9yv4ngCCSQMBC1bbl23RTG6ISLrgFR408JVUvXd32PiorzTq8s9TmiKj5VvjF1m3CpZRIG5y0XVp3wtmz16MVAqUafAFUaA883GnutyPkJly34PmflAHOVdCYx+SOcEFdJouMqB+ywwMYcq+ne9QiDhHQdLvYEIiTH6VWcF5dVXaE15/FKoygSa+IjBfib4fgR9/L4xy4ozfIzG6BXP3TyEYY/xtCIN6MaLfLPJ9PUX+glZ/ETePh3eTTIy10d7xO58o3s54aoQ5eHD9fo7bIPF5XsMUgEYuKcT55IiJrjy0ucn8FzzRYT8cp1PHGBYwop6cmwzjpV59zCJ4g4XF/3p7mp0 N5PimFlX NIeW/0hRB5gkI4sGCMHc0id96Nr+r5W83HPtWea1KPiu6WhbxmY0IE469I0Jw+QuYBQWek4harmOENeVn5/6JfH8x+3XdTdfRzy1QAlKULQMknpb7ThMXSUK2JQtRAMDMi9jibctpBGHjY8U885MHtbyV7shlkZV2lffMjgvtVTzqmuPc3p9qg1H2kQzoL6rQTIw8EbAuinMLOr0sKdfh2hi9IvlGVKqGYnjSETVzFEHSvCach5izEP5sBsVyidlWpWfNoEvNVKBy5TauKkZIZ1FU4e7u4OhKizlJd6hzVby/5D6e7Fs9xzdpH74ae/hV/hZPgP0CUjTCd22CCcQOLOI8dCMB0Et5lHuA7piXWenz0oTpDIXXH7BPHw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.059638, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Amir Goldstein FS_PRE_ACCESS or FS_PRE_MODIFY will be generated on open depending on file open mode. The pre-content event will be generated in addition to FS_OPEN_PERM, but without sb_writers held and after file was truncated in case file was opened with O_CREAT and/or O_TRUNC. The event will have a range info of (0..0) to provide an opportunity to fill entire file content on open. Signed-off-by: Amir Goldstein Reviewed-by: Christian Brauner --- fs/namei.c | 9 +++++++++ include/linux/fsnotify.h | 10 +++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/fs/namei.c b/fs/namei.c index 3a4c40e12f78..c16487e3742d 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -3735,6 +3735,15 @@ static int do_open(struct nameidata *nd, } if (do_truncate) mnt_drop_write(nd->path.mnt); + + /* + * This permission hook is different than fsnotify_open_perm() hook. + * This is a pre-content hook that is called without sb_writers held + * and after the file was truncated. + */ + if (!error) + error = fsnotify_file_perm(file, MAY_OPEN); + return error; } diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index 7600a0c045ba..fb3837b8de4c 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h @@ -168,6 +168,10 @@ static inline int fsnotify_file_area_perm(struct file *file, int perm_mask, fsnotify_mask = FS_PRE_MODIFY; else if (perm_mask & (MAY_READ | MAY_ACCESS)) fsnotify_mask = FS_PRE_ACCESS; + else if (perm_mask & MAY_OPEN && file->f_mode & FMODE_WRITER) + fsnotify_mask = FS_PRE_MODIFY; + else if (perm_mask & MAY_OPEN) + fsnotify_mask = FS_PRE_ACCESS; else return 0; @@ -176,10 +180,14 @@ static inline int fsnotify_file_area_perm(struct file *file, int perm_mask, /* * fsnotify_file_perm - permission hook before file access + * + * Called from read()/write() with perm_mask MAY_READ/MAY_WRITE. + * Called from open() with MAY_OPEN without sb_writers held and after the file + * was truncated. Note that this is a different event from fsnotify_open_perm(). */ static inline int fsnotify_file_perm(struct file *file, int perm_mask) { - return fsnotify_file_area_perm(file, perm_mask, NULL, 0); + return fsnotify_file_area_perm(file, perm_mask, &file->f_pos, 0); } /* From patchwork Wed Sep 4 20:27:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791358 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 60F13CD4F25 for ; Wed, 4 Sep 2024 20:29:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2CE396B00C4; Wed, 4 Sep 2024 16:29:24 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 25B636B00E1; Wed, 4 Sep 2024 16:29:24 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0839D6B00CA; Wed, 4 Sep 2024 16:29:23 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id D3A336B0093 for ; Wed, 4 Sep 2024 16:29:23 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 8C3D414053B for ; Wed, 4 Sep 2024 20:29:23 +0000 (UTC) X-FDA: 82528195806.17.C296E10 Received: from mail-qv1-f50.google.com (mail-qv1-f50.google.com [209.85.219.50]) by imf11.hostedemail.com (Postfix) with ESMTP id C7C0D4001E for ; Wed, 4 Sep 2024 20:29:21 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=CDKQjeSO; spf=none (imf11.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.50) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481685; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=wY5GQe96iyZHYx9I8f9pL6l7vs2y5u4HNtMRHVuMKgs=; b=8DfLGzLLfGBdG/DKl+hCIpv/lxP7RoyIzcvI2UqeAZ4KedDZLht0DQPbbOXp1HpJg701uf wNFEbAIhtl5y6u9r1jmJGPex/h5iRiRGRlu8H28dRzpHvT2V7N2NZYFnQ/y8IPkYjuwcUi gpQs2nU8CUb/iKewD8OP0mmcajQ0vOo= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=CDKQjeSO; spf=none (imf11.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.50) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481685; a=rsa-sha256; cv=none; b=hutjUhnxNhTBgsMQ4G4Uoq07TL6It4lRdJKjrXDwrgt/nVgsjQuc7dDASIQqvzvVGiRwz9 cvJe7mfGF++usecM3r3jy72wY1ADFKcU5WJJsnDCxlQEYWEUWxHJnCs2pTadw1xtsEtepU OB4dRvyTyLz+IKsobnADHp5u60XkBhI= Received: by mail-qv1-f50.google.com with SMTP id 6a1803df08f44-6c159150ff4so37386d6.2 for ; Wed, 04 Sep 2024 13:29:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481761; x=1726086561; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=wY5GQe96iyZHYx9I8f9pL6l7vs2y5u4HNtMRHVuMKgs=; b=CDKQjeSOtO9g0nJglxJN6L2nkxfNfLyjKe++iWHkvWbnrbMOCeT4GHxWJfLPdkrZMX UlVnXXQZBtbDOWtd7dZJKKPh3WUK8HFQSpzpN+emufTvM4699xQlj8uIEUWLu4X9JeG3 jnZC4xGgKC380Qe4aaT9XWxYmL95NqGMQruf5k9yXHVUOYmXR05HjUqb0drilo0dUewD 0uQhO5IhxE+dqcbgVNpmAmadBYMubrixXyM7RCF9RgwSt8JBYh6NwcHdtESy8P7ilgsh 070NyEQpNq6GFlLx8AKPIdciblDoAsOHWTHJKF8o/NxiTqDa6URI+4Bj3kXAz0iGtiIA ingQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481761; x=1726086561; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wY5GQe96iyZHYx9I8f9pL6l7vs2y5u4HNtMRHVuMKgs=; b=D06r9yAS6/P8O0cg74H2zOKnM4dvseOrZKYbokAVWeaERnlx8TUNLfUpSnF03G+rpf ctYdHmruAywrpisDSrRrSMUMPpVunlp+i31wcWqCFoTVpFjNcftWjvJiVLsthJOKknnC Hsv3ucH9l6kaGd7Zk7MEBfIPc4ekMrGg/f3nYx88WeHST1WfkCqURyJS/Yp6JwIbOK0r Bx9rYH7GAauWJU8EnluV4+kmeAUfQ1R8SxnAb87JKFvWxn87oEXmjLumJSgEtHRFDRP5 Qe+VkxLzkt8gOi+q2z/jeqtJuKZUGqKTqyaKJMyBFKbkKpFUziup4eUJmWEtuvq1t1B8 GCCA== X-Forwarded-Encrypted: i=1; AJvYcCWOm3xlr3A5rZTgHp0Uzd4s0dmg86QRw5lZWfTFNJGX5ot5RsXtWIANVOv02n48Yzv3vaT1OOiBCA==@kvack.org X-Gm-Message-State: AOJu0Yyum6ml8Zhn4qjXNaW7294tYp7tv9/QR9ZTGxTivbZcePxNSym9 rQRvyu4tynPJzFsNmsKisIErZw5g5FZDWZGQbbGVwaiOOT0t5bvWYGykM0WVm4I= X-Google-Smtp-Source: AGHT+IHn2YN4Yn9s+Pe3cKQRQlM1ZQppCBWH1jZTlFjC6uGrUZZrr+lLwvttH1GqC8If9lYaSoNH2g== X-Received: by 2002:a05:6214:3a89:b0:6c3:626f:2366 with SMTP id 6a1803df08f44-6c3626f243amr168729666d6.34.1725481760916; Wed, 04 Sep 2024 13:29:20 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6c520315369sm1569046d6.96.2024.09.04.13.29.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:20 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 04/18] fanotify: introduce FAN_PRE_ACCESS permission event Date: Wed, 4 Sep 2024 16:27:54 -0400 Message-ID: <19cb8b3b5b93760bc6c6d47a8cbcd277952d7006.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Stat-Signature: j91dnf46xf18hgzb9kmjcehhtnyygbp5 X-Rspam-User: X-Rspamd-Queue-Id: C7C0D4001E X-Rspamd-Server: rspam02 X-HE-Tag: 1725481761-811819 X-HE-Meta: U2FsdGVkX19C9pPZnhHEwsoNbLaSc4YIuHFLPE4bc0c70ZTnmKikyHUhoLa7sjeAaAB2AXpaFmDmzi9SPBsgswmNROEPl/nlbWxrwgOFT8N3XoDe4X3at6s6AcHgdNQeZyGP81Bzin8OeRIVMGBuPrP5BD4kI1RFc4CtLA+gQPxJ32oBObA67bIhKUYGDcfvoJHKDv4uF9zr8jjADLzJA4r3rzGqG9ZAU7HKKKPbp95WqE84Mjmp8UdMaPySFZEZF70j372iOzLnyk8oMDHc29j7d1+UrfwTG7PMhz6No/mDMYQPkix/1ZOass8rS4AgtTbQuXXYyHurnvrFDOWIvCD77UzOyGwQW+VjrlCUviWk7WHKjTUg8YnfDWdlCzECVGslryk2LNkIbrKqcvQvMjJspeRZGofFeVaZ9Wv3nuXoLQMUWSmE7uprvr4FsFYPTjeLcUxSc8GbB6BuSFJUilJ8/+Nk/QJ+iEYHnw0nBMZXJB1VmmYLb/IiMAgvi/RRvkAReQQGFSdl2D2D+0z/GhPT3TfUnlXXOBChq7fcg/xneCuiYck3aeVZCF3+5FKuVE/s9E3Ly4Ujv4U4dOICwm1FzaFm0jEKTWoCuE+6b1M9x7bcPmHb9KeKjEGzzZC+EAuIeU89vc+G9EUJa/VlGMWQ3sqZ8l8iLjM9XQAi3rgL5TvoUhgqH9nCrnlP5SIFvMcjKEqhrGxyqq7lnApCUIT+fYtzXbtCpTi+zpXqf5E2K2xS7Nm3sZSPTVMaGi7qQjt3fa9QWsapCBJVT66AtwQg/c7T4ajSx8e1MB2NtNCQALB6QA7pW7G1pOmJs5ldFWdUxdc1dKrfm4vQLMZMD6m7onJT0STP9EhBUgoAF1hGpgx2N26fkJv4qcWJJpVq9Yw2XSC+qJZH6+DEyMVj0E9B6CZC17wywxhArCvfVHW1z7zXaqYbIay63o9rr7v9lTCYnlWcHHr4R1BVS1m fL6DjFEl QHFERJvXnl4T3GmsEH5N1XV36Lf0eg/5ry6w/dciLQeXbfTanXUwotCbEKsb/Kx+MKFbcPWRsHRB2FBvgzHK334XHQbfDJq5Dn7qjzSh5LzP76HeDkrHoJCPDsUYjdLVeQnwwr3zdRJkAGBpyzfh5FDBhHvk/BxrhpE3mkoo/vdpIgLJ0f8H6+DUbzZDwRwob2oii6rE2rPoCPAsjQZZ8HykTtu01yGFzBNd0qp+588qrnzZc8zGVdbVVv8SfxfAJwJrpVy7VHeh0NLM4TO+V84tyJOt+KcRkqs+nRCCHbnz/tjDy4rgE9y9mO71sL3gBQaVlw/GpsgSPcaSdmOw5YBeDZXJ/pmdF5EuIv0r3cT1ESSFzwurXgLVObngMfuxMxB0Jp/Xj+7yMb3kAGtw5I+z5dTvM/s35gF0B X-Bogosity: Ham, tests=bogofilter, spamicity=0.001814, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Amir Goldstein Similar to FAN_ACCESS_PERM permission event, but it is only allowed with class FAN_CLASS_PRE_CONTENT and only allowed on regular files and dirs. Unlike FAN_ACCESS_PERM, it is safe to write to the file being accessed in the context of the event handler. This pre-content event is meant to be used by hierarchical storage managers that want to fill the content of files on first read access. Signed-off-by: Amir Goldstein Reviewed-by: Christian Brauner --- fs/notify/fanotify/fanotify.c | 3 ++- fs/notify/fanotify/fanotify_user.c | 17 ++++++++++++++--- include/linux/fanotify.h | 14 ++++++++++---- include/uapi/linux/fanotify.h | 2 ++ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c index 224bccaab4cc..7dac8e4486df 100644 --- a/fs/notify/fanotify/fanotify.c +++ b/fs/notify/fanotify/fanotify.c @@ -910,8 +910,9 @@ static int fanotify_handle_event(struct fsnotify_group *group, u32 mask, BUILD_BUG_ON(FAN_OPEN_EXEC_PERM != FS_OPEN_EXEC_PERM); BUILD_BUG_ON(FAN_FS_ERROR != FS_ERROR); BUILD_BUG_ON(FAN_RENAME != FS_RENAME); + BUILD_BUG_ON(FAN_PRE_ACCESS != FS_PRE_ACCESS); - BUILD_BUG_ON(HWEIGHT32(ALL_FANOTIFY_EVENT_BITS) != 21); + BUILD_BUG_ON(HWEIGHT32(ALL_FANOTIFY_EVENT_BITS) != 22); mask = fanotify_group_event_mask(group, iter_info, &match_mask, mask, data, data_type, dir); diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index 2e2fba8a9d20..c294849e474f 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c @@ -1628,6 +1628,7 @@ static int fanotify_events_supported(struct fsnotify_group *group, unsigned int flags) { unsigned int mark_type = flags & FANOTIFY_MARK_TYPE_BITS; + bool is_dir = d_is_dir(path->dentry); /* Strict validation of events in non-dir inode mask with v5.17+ APIs */ bool strict_dir_events = FAN_GROUP_FLAG(group, FAN_REPORT_TARGET_FID) || (mask & FAN_RENAME) || @@ -1665,9 +1666,15 @@ static int fanotify_events_supported(struct fsnotify_group *group, * but because we always allowed it, error only when using new APIs. */ if (strict_dir_events && mark_type == FAN_MARK_INODE && - !d_is_dir(path->dentry) && (mask & FANOTIFY_DIRONLY_EVENT_BITS)) + !is_dir && (mask & FANOTIFY_DIRONLY_EVENT_BITS)) return -ENOTDIR; + /* Pre-content events are only supported on regular files and dirs */ + if (mask & FANOTIFY_PRE_CONTENT_EVENTS) { + if (!is_dir && !d_is_reg(path->dentry)) + return -EINVAL; + } + return 0; } @@ -1769,11 +1776,15 @@ static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask, goto fput_and_out; /* - * Permission events require minimum priority FAN_CLASS_CONTENT. + * Permission events are not allowed for FAN_CLASS_NOTIF. + * Pre-content permission events are not allowed for FAN_CLASS_CONTENT. */ ret = -EINVAL; if (mask & FANOTIFY_PERM_EVENTS && - group->priority < FSNOTIFY_PRIO_CONTENT) + group->priority == FSNOTIFY_PRIO_NORMAL) + goto fput_and_out; + else if (mask & FANOTIFY_PRE_CONTENT_EVENTS && + group->priority == FSNOTIFY_PRIO_CONTENT) goto fput_and_out; if (mask & FAN_FS_ERROR && diff --git a/include/linux/fanotify.h b/include/linux/fanotify.h index 4f1c4f603118..5c811baf44d2 100644 --- a/include/linux/fanotify.h +++ b/include/linux/fanotify.h @@ -88,6 +88,16 @@ #define FANOTIFY_DIRENT_EVENTS (FAN_MOVE | FAN_CREATE | FAN_DELETE | \ FAN_RENAME) +/* Content events can be used to inspect file content */ +#define FANOTIFY_CONTENT_PERM_EVENTS (FAN_OPEN_PERM | FAN_OPEN_EXEC_PERM | \ + FAN_ACCESS_PERM) +/* Pre-content events can be used to fill file content */ +#define FANOTIFY_PRE_CONTENT_EVENTS (FAN_PRE_ACCESS) + +/* Events that require a permission response from user */ +#define FANOTIFY_PERM_EVENTS (FANOTIFY_CONTENT_PERM_EVENTS | \ + FANOTIFY_PRE_CONTENT_EVENTS) + /* Events that can be reported with event->fd */ #define FANOTIFY_FD_EVENTS (FANOTIFY_PATH_EVENTS | FANOTIFY_PERM_EVENTS) @@ -103,10 +113,6 @@ FANOTIFY_INODE_EVENTS | \ FANOTIFY_ERROR_EVENTS) -/* Events that require a permission response from user */ -#define FANOTIFY_PERM_EVENTS (FAN_OPEN_PERM | FAN_ACCESS_PERM | \ - FAN_OPEN_EXEC_PERM) - /* Extra flags that may be reported with event or control handling of events */ #define FANOTIFY_EVENT_FLAGS (FAN_EVENT_ON_CHILD | FAN_ONDIR) diff --git a/include/uapi/linux/fanotify.h b/include/uapi/linux/fanotify.h index a37de58ca571..bcada21a3a2e 100644 --- a/include/uapi/linux/fanotify.h +++ b/include/uapi/linux/fanotify.h @@ -26,6 +26,8 @@ #define FAN_ACCESS_PERM 0x00020000 /* File accessed in perm check */ #define FAN_OPEN_EXEC_PERM 0x00040000 /* File open/exec in perm check */ +#define FAN_PRE_ACCESS 0x00080000 /* Pre-content access hook */ + #define FAN_EVENT_ON_CHILD 0x08000000 /* Interested in child events */ #define FAN_RENAME 0x10000000 /* File was renamed */ From patchwork Wed Sep 4 20:27:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791359 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 6EF6FCD4F25 for ; Wed, 4 Sep 2024 20:29:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F071C6B00E1; Wed, 4 Sep 2024 16:29:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E17286B00E5; Wed, 4 Sep 2024 16:29:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C1E986B00E6; Wed, 4 Sep 2024 16:29:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 99DFE6B00E1 for ; Wed, 4 Sep 2024 16:29:25 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 5BCA51A045B for ; Wed, 4 Sep 2024 20:29:25 +0000 (UTC) X-FDA: 82528195890.03.5104A76 Received: from mail-qk1-f174.google.com (mail-qk1-f174.google.com [209.85.222.174]) by imf26.hostedemail.com (Postfix) with ESMTP id 9A6DF140008 for ; Wed, 4 Sep 2024 20:29:23 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=yOygZlHj; spf=none (imf26.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.222.174) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481715; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=03GJ1k40z8a5Psi/RqpgoqHfW5s1FJwp4eQtJBRMqtc=; b=KGoFORoDAxAekU5UUzyX91TonHSVYio/+/ILwgRdP/Led1a7emyGYl9lE4rnNla8ME7yTa ji4CVBCLM3UcuezUrfg+RkUEX7ZfxyUjSjV3pcFYhQdo5y/l6GEhlI2xyc/QYTQtTvuYFV 2ltTaGb4ZdrKumKz2TSTZ2/A2ENcI5U= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=yOygZlHj; spf=none (imf26.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.222.174) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481715; a=rsa-sha256; cv=none; b=5him0wQn+IxtvyFqdhPVMIjvRE9cq3KvZWUvsyHz+qJ9cW+IbN4Sp71eOyB9hRGfKsuhD9 Ibb6QJxcCeGfNq7/nI/f+irfh86upO1+PNDsNdCf/vZnRMb83E+j1x4EiphkWKkR+CdF4a Sluuf5AYv9mDvOW4Ll9SnZv66aKDa6c= Received: by mail-qk1-f174.google.com with SMTP id af79cd13be357-7a80fe481a9so2348485a.0 for ; Wed, 04 Sep 2024 13:29:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481763; x=1726086563; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=03GJ1k40z8a5Psi/RqpgoqHfW5s1FJwp4eQtJBRMqtc=; b=yOygZlHj5dkxudXwMbspMj8aHMPB31fY9v8FdtUIghvMHm4o01ShOBS0NuH1/gHMUl w/UyE+JfKKsliduS4dNu7tkp4/CgIasodPPuvTXL7ecfZ4hJVu9+T1gUqMCfKrW4XrnW 3ijIZpPvFOjUtSxZFJW9alfxCtlPsXVBsm+YasyOjy1/FgAvYFm3wcZjMSDSfZ/x8lyE 9BVXRNExWYw03ff6vMGjaL/8ZBWfndYN9Sy8GMMhY9rKXgWJNgpkW+NhlLyXKoPepXIF 3JbM8khp1rpxJMXJ4fjh12soTSSmLvG+Q0teYVFePJF+qDiOwIHFYQwmnHwhctGGlL5E jjaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481763; x=1726086563; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=03GJ1k40z8a5Psi/RqpgoqHfW5s1FJwp4eQtJBRMqtc=; b=knai40S2lPDe9Kw0qF6oX0wKzBfYgWb8Y7I8Zclb9CKFauLaCGKhLV6m03j7PmzLuy bT+9Jrgc2hlu9G9/J/NBZXzhkYc6AmgN7OMTOPOaAAcBM51nqcMoTJti+IxgKCdjSMQ7 O84jkhB0PpXNMooDluxFOaZihoynUrguRVP4leGpwyE3OoBafRvZE6mVfU8l4Q3WlSU0 xqn4kix7nZAg0D2ZaG9AOoSvqmHaAje5ncW+0g+iwSN6TMJFBIURZ1dtSq+hqg98YpYi AcMOIjxZ3bekYT3xP6sFRHAPEdNhb5Cle82zDDK5ywEQUKZVm//b9i25Tx/Z8D4g61PK dlNw== X-Forwarded-Encrypted: i=1; AJvYcCU/tepGpDI5cS9a8CrMU/fBcbp8R05qzPI3RdmzL/qrAFyhb6GvvM9iroLmmZH0xiwSIwo5z7HJcg==@kvack.org X-Gm-Message-State: AOJu0Yy5fDdkZIj1+xGplJTR56TOjryyrq/GNxi3Zknl5VTo/Hy8+Vd4 VXn3rSjqT8+DlqO5yUuStXPT8VsbsrmbhUkubR9FNZA1nccVg3wXdsdwrKLHrIs= X-Google-Smtp-Source: AGHT+IGvPgs+n6cvUE85SbneJf41dyWf81pG4sPn/0S6fFjWTLzcLSXA4cf6j/r1vB6Kg6DKnHidAQ== X-Received: by 2002:a05:620a:44ca:b0:79c:b8c:8e2b with SMTP id af79cd13be357-7a81d641ed8mr2000168185a.3.1725481762573; Wed, 04 Sep 2024 13:29:22 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7a98efeaffdsm15457285a.83.2024.09.04.13.29.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:22 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 05/18] fanotify: introduce FAN_PRE_MODIFY permission event Date: Wed, 4 Sep 2024 16:27:55 -0400 Message-ID: <5142d1715dfecf58bc0a77eb410ca21d95e71cfc.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Server: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: 9A6DF140008 X-Stat-Signature: snctngxmk435fc6c7w3nrgf71gahfpex X-HE-Tag: 1725481763-873972 X-HE-Meta: U2FsdGVkX1+raCm7Mk8AuyTUswo5EiACGYiErGpQnv5n3YbG2/x5k9OeLF8KB/pdlTvvtUEPvjoZYtF8Du+TdOJwfD5DBMikztJgCyRjpt4KRXd6+nFYyRroItXx89qk7q5NDoBrLgG9Nzmb44c0uEOjRn+HsXwEJxTj35sVXr1h72UUIZL6wsHVtKy/P2J7w/H4881DL6+cF518ggprRW8K5vlds9ONpBbNiGXP+0DzzhMGBElAn0ylcie34tof4GTwVRjFaPtaQiXoukTXY2EgTn+GGJZNmrFLEH8rWBtgNpCfCHWG5IH2xfBX7SKlJ0K1yDPuJisO97sfd+pGwFmH0D4XoEXeaC+2+RJcYdo2V/KVHhXTnHZxD+yWHAztDKUlxhrkXYGxp4UUvnf/YQ8gIj0dyUTPERCbsPKQrrMOYgpWRwoW/vgebDn9bHKvB938Lz17WU6Iq5wVhKD6bG7fxuM45d0/B8/1k/Qlw5twA0AMYw2lxmwfnkrROlB2eQjjBkHVF+16xPT2G+kGd7B+ASzjTYjRZjfm6SBW1YP0AKF+9Y7gLQrxvlDxkdQR50oCUnhLYCcf8rh7b5PV2B5tNa545MoaFDpYUhhEs+ImUWq78uSgO6nnFLC0ci6EywGBimSQgYgMZv84ZVGxoIUuovplj6RFVg9Poa3lrKwMvkQJb2lN+fD9z/v1f1khG5Giv+bskgc/5Q95+Q/BIKtOf+G4wXx/mQDlpQRu13QKcHeaM0v1K6GLbbKt4FOQQMFgFvhguvEgmj63O1fY/jzhuH0Vi8Igk0E2EsYNQwbNVxC4frJA8gEzA5flCAPHchZck+CnPZ31Gxzr7ab4qTgXTOkfa2/XuZP68S2SHAMLpFHaYjfynqe1zrcUrVtlyWqpcBOHjEwakutTiudE3urp8BLOObqwUjd74v6f6wUUdj6T+NUikM/dry2E4n+Tn9F/0bXm2SaQJnuDZ9j 78lDByPZ 8CcBdn2nF3ka1pnYOkj6ZymVf6terrOqj5qnA9tTbzv4ZanHp1cMj19R2AFx3rfXUl+EZGD/Wke0ekHJQDzFOQEPQp04P65t2kmp4ykHgkzhmqTwoc9vSkAI0sMK4FPM99n6vn0J3T+KuDDy9peIuEVmSFwvcjcB6KZCCYXVTgnQ2L/g15YJUDNkgz7GVW7yfVCZ5ymV7MLMDuviytDX9cTR7Rkbr+1eNYZWF/H6cZNUPGlzuM+eAl/X8adhe+Bn1pI9smFeOuTb+9y2CABXtxmIpZ4kvWkz5oq1qQdpExuMWOaxS2ieeBU2SLI+hZPuoBlGovNhOMjNUWQYIojvOzp+q8IIw3Dd/Atu3pO0wZ1tCIKXKHLI+BM1Bat5EAA54A/bG/miUQxdrrg2OK6zER85Rbw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000795, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Amir Goldstein Generate FAN_PRE_MODIFY permission event from fsnotify_file_perm() pre-write hook to notify fanotify listeners on an intent to make modification to a file. Like FAN_PRE_ACCESS, it is only allowed with FAN_CLASS_PRE_CONTENT and unlike FAN_MODIFY, it is only allowed on regular files. Like FAN_PRE_ACCESS, it is generated without sb_start_write() held, so it is safe to perform filesystem modifications in the context of event handler. This pre-content event is meant to be used by hierarchical storage managers that want to fill the content of files on first write access. Signed-off-by: Amir Goldstein Reviewed-by: Christian Brauner --- fs/notify/fanotify/fanotify.c | 3 ++- fs/notify/fanotify/fanotify_user.c | 2 ++ include/linux/fanotify.h | 3 ++- include/uapi/linux/fanotify.h | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c index 7dac8e4486df..b163594843f5 100644 --- a/fs/notify/fanotify/fanotify.c +++ b/fs/notify/fanotify/fanotify.c @@ -911,8 +911,9 @@ static int fanotify_handle_event(struct fsnotify_group *group, u32 mask, BUILD_BUG_ON(FAN_FS_ERROR != FS_ERROR); BUILD_BUG_ON(FAN_RENAME != FS_RENAME); BUILD_BUG_ON(FAN_PRE_ACCESS != FS_PRE_ACCESS); + BUILD_BUG_ON(FAN_PRE_MODIFY != FS_PRE_MODIFY); - BUILD_BUG_ON(HWEIGHT32(ALL_FANOTIFY_EVENT_BITS) != 22); + BUILD_BUG_ON(HWEIGHT32(ALL_FANOTIFY_EVENT_BITS) != 23); mask = fanotify_group_event_mask(group, iter_info, &match_mask, mask, data, data_type, dir); diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index c294849e474f..3a7101544f30 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c @@ -1673,6 +1673,8 @@ static int fanotify_events_supported(struct fsnotify_group *group, if (mask & FANOTIFY_PRE_CONTENT_EVENTS) { if (!is_dir && !d_is_reg(path->dentry)) return -EINVAL; + if (is_dir && mask & FAN_PRE_MODIFY) + return -EISDIR; } return 0; diff --git a/include/linux/fanotify.h b/include/linux/fanotify.h index 5c811baf44d2..ae6cb2688d52 100644 --- a/include/linux/fanotify.h +++ b/include/linux/fanotify.h @@ -92,7 +92,8 @@ #define FANOTIFY_CONTENT_PERM_EVENTS (FAN_OPEN_PERM | FAN_OPEN_EXEC_PERM | \ FAN_ACCESS_PERM) /* Pre-content events can be used to fill file content */ -#define FANOTIFY_PRE_CONTENT_EVENTS (FAN_PRE_ACCESS) +#define FANOTIFY_PRE_CONTENT_EVENTS (FAN_PRE_ACCESS | FAN_PRE_MODIFY) +#define FANOTIFY_PRE_MODIFY_EVENTS (FAN_PRE_MODIFY) /* Events that require a permission response from user */ #define FANOTIFY_PERM_EVENTS (FANOTIFY_CONTENT_PERM_EVENTS | \ diff --git a/include/uapi/linux/fanotify.h b/include/uapi/linux/fanotify.h index bcada21a3a2e..ac00fad66416 100644 --- a/include/uapi/linux/fanotify.h +++ b/include/uapi/linux/fanotify.h @@ -27,6 +27,7 @@ #define FAN_OPEN_EXEC_PERM 0x00040000 /* File open/exec in perm check */ #define FAN_PRE_ACCESS 0x00080000 /* Pre-content access hook */ +#define FAN_PRE_MODIFY 0x00100000 /* Pre-content modify hook */ #define FAN_EVENT_ON_CHILD 0x08000000 /* Interested in child events */ From patchwork Wed Sep 4 20:27:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791360 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 807D2CD4F24 for ; Wed, 4 Sep 2024 20:29:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D562D6B00E5; Wed, 4 Sep 2024 16:29:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CDF286B010E; Wed, 4 Sep 2024 16:29:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A94EF6B012E; Wed, 4 Sep 2024 16:29:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 841666B00E5 for ; Wed, 4 Sep 2024 16:29:27 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 2CCBF1C63DE for ; Wed, 4 Sep 2024 20:29:27 +0000 (UTC) X-FDA: 82528195974.25.EA40410 Received: from mail-ua1-f53.google.com (mail-ua1-f53.google.com [209.85.222.53]) by imf08.hostedemail.com (Postfix) with ESMTP id 5DC8C160025 for ; Wed, 4 Sep 2024 20:29:25 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=uogSHjFa; spf=none (imf08.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.222.53) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481717; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=WSgX58UYc0emFHK3lK4cO5xgsT7V4KpoEDCer0WZNY4=; b=gRazQCxsDcpnqYtAqeFIpdVvJ03I6nWORV+DP57mpUIwk5U4ej6Oqfloox8+TFYdnyWfgn weoz1TECkZ+NSIAKEsJEWCBRMRAnIp5lguK/LX6ex7P+B+LhIe29tgEDUXzha98n4mZ/Pf V0qSwaXtNysgemdOlEABNiCVk1EztlQ= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=uogSHjFa; spf=none (imf08.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.222.53) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481717; a=rsa-sha256; cv=none; b=bBvpNsDSjlxFkZKfAm+a88GlqsIMfk3UuReWzyDlhXkqn8tQ7COnm7fV2NZyTn6qqidK6L OsZXQkiBhpwgNeknAirB5lH5OcpyzRXem4ntq6UE4j9ugSTN9rKvTp4LKOBwnlX+LNUgf6 j8K+G+gN3uy8wZDNuogZk0rbi/lIf5k= Received: by mail-ua1-f53.google.com with SMTP id a1e0cc1a2514c-846c5995a6fso1869241.0 for ; Wed, 04 Sep 2024 13:29:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481764; x=1726086564; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=WSgX58UYc0emFHK3lK4cO5xgsT7V4KpoEDCer0WZNY4=; b=uogSHjFa86U+YIbqQO2pPJBlFYOIRjBykhxqutZbr9BHcVNlaoR4Ccthx2aCOYymXl 7pAquLJmprMJXdZv65qtda0BuviVVfwQoW9BNLetIXBZKLvTM1P27Fm3xaB6wQ+loH1h rFgg0Tez9lRJOc+XiVvAjSzD2GpZtxsyGV9R0SoXz/q7o4KicLwzcS1r5CnUYVYDhlIg 9DBCLsLRkl0OocIJXBIKiAtx0IvYquO8YKOAub9P2/uAJUUwIaWU8ysfxtznPvAK1qUx QLa3mqLaLxdcPENbc3KrUWbKlGagHzV3SZbQ24FW5B7O0baZ2bBbKlKMEC23Eu+zTBZ0 vxrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481764; x=1726086564; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WSgX58UYc0emFHK3lK4cO5xgsT7V4KpoEDCer0WZNY4=; b=XDHQTimgQFN+vMF20iA1MQ0Ir+6mjBoJ+wEwEVgJM3aRVbFqYWPHbwbio3p3aFv4Um AP0+NRn3h/QvdzIJ5c/eTfsOkqFD5r5KZSWaxC5pyG8mG5Pu7OMGhCCyAJ/g8Ty3MViH XVSomEcaQMexCoEloq8LU8cwIQoeIRW+zYdLorA5+hflZeKKyv7M2Z7wDOJIO0XreBKV fPpG6P6T839525ZmCVj/VvMOaI8YYYaFEOCjNlzbpOjmBSmT5oSR/2Kdtao6sj0IaFh+ h0/UvFOg4EnJZQ9Hfrz7iWEB4fsseSsdB+YnWZtN68ElpAD5grvtCiipVOpYE+yF/FOX R76g== X-Forwarded-Encrypted: i=1; AJvYcCWxE6UbFDMqXybPWeAfBvkC0lFQUbAWay/yz63MpEZPiUXSmhRQBmbp/BP1h083tUEa3ryyzryqng==@kvack.org X-Gm-Message-State: AOJu0YxpajnCmdzFbsf8A6LhChN8n4dRvTens0YTLX1JVYh3+Uh9z2bS jkshluFJqwCXyt6Q+2+44Ecw6MsEO29xS6Xd5kaA8MD54pMC5qA21gHuhpXR2/Q= X-Google-Smtp-Source: AGHT+IGc7mGWNoIW6t0qFMzy1JgoaW/y/pAizbNG4FOmezxVo9UEWHiWN81iBDFZM1s4pxXg42sQVA== X-Received: by 2002:a05:6102:442b:b0:498:cf81:3a40 with SMTP id ada2fe7eead31-49a7778c1admr18354171137.17.1725481764310; Wed, 04 Sep 2024 13:29:24 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7a98efeb028sm15207185a.84.2024.09.04.13.29.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:23 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 06/18] fanotify: pass optional file access range in pre-content event Date: Wed, 4 Sep 2024 16:27:56 -0400 Message-ID: <87325af81514d7bd0b2236e14c613b7160651bda.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Server: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: 5DC8C160025 X-Stat-Signature: 9yzw5qtkpnytr6ozgwutjwrc6nn7i3wq X-HE-Tag: 1725481765-54792 X-HE-Meta: U2FsdGVkX19LeXhI2YU02Lv5uLTGwS0juOeBJJ9bIzFDmLW9DHjI2tCgi1/BNomnnVq156i0eiffUErApFdRt+v0FfMet2KjYWjrMXjkT9LD73mMcQGVV/tQd4NE3lGAU81ewdU+gfUdyHICoCvgd2yqA4hZzo08LErrK2g9BoHR8kFj++nLyvOroHDDgWW6KNn+/rfslbNFtL6Vnv/In1FG0Mp6SgjDKwPUSUOUgN4bzos4rPwNF/JADSj4h4pC3hxqdVml6sNB4RERg5TogjuVNbJpmQvD/73mxC2UvDIRwR4e+TtgVyPc2bdljiVuVoxXdxLJd/rQUU6z/YJufN1Sx/Q1aKPFTz5ypBw6o1j027saHOQ7CN7XTF+HvHKteEnpOP9r4Jvygo+jIj9FtHOH/YzAKMG3Nn37gAOlV+GkguiJwHUYIaaaaGrVATEYJ7K5Dp0sK+tiT7HUCeF/xDAss9DXyOVT574P5utVMO5fh+fBkBWG6Cdi55sfA2fYO0sCDqWvJXe3TWEql6SqeQnsVrDhwXJQ1EFsztAv//PVW/k7p/MwkV7L7dPuFTZqzXTuscShAMMGJDHAHoQI3tl2RDI6ELWGGk09OvBuDpyiWHHIlYfzsOsDHzyBTSPCdtvzSxTKFruS8JCZu8dExYIlI9X8EUWLu9bjfHNZgezYx2wUntyye3ApAPi/h+9KKGoYAcFPMjmqHovQPfFAqECnm00qIhujET12iQLiY0n1/F+Kl7gMvAEvZQYyN96yGR+L87LM8Ay4g6HRyrwjolf+rXzsRDHlLjafuI7FCGfau5BZzwREMZetnWpXFXmq4WreTPjG478dSCEU79AN0YmHHgPektHozGA42G60+OV3Fj/zcgPk8M2yh8DEeoYwI84ChoOXDAxN36tA90SBUmemVnjFcfXK/rEWh9oanVXjtZJ8LIuGBoKk9aVWD8giF2ZoS+x+CPO+dvlgSsZ 2tTynpvf uNvyR2+Q3qZtoeATjllD7P/2cGuv/95px4/MRDcQGwE6MGQvevBMovO+tWinm3IriHBH1CsjvobzRKOTLs6G1SFdZlLpjRCB8piK3w/I2VFTsEDXuZ8EsPHxrQbP74/Z9g45rokxaU3dOSZVLl9Tr8UVc3gOwVuZ4PZRUIQqVm0XG/ms1HfsU5JXDiVhKxsC8isF8PhATMaAJw/9I2NV/Us7afK1+1UF9LP/iG5zeKWaJVGuPe3YT3zHFWGCpanEugXkYmW+TZSCxGoTRXFNYWxoP1xKJRtpgGgUw1/9xQJcuvGZregYYEhA7F7KTSjOfrOQQVQzEEknmfQk= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000007, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Amir Goldstein We would like to add file range information to pre-content events. Pass a struct file_range with optional offset and length to event handler along with pre-content permission event. Signed-off-by: Amir Goldstein --- fs/notify/fanotify/fanotify.c | 10 ++++++++-- fs/notify/fanotify/fanotify.h | 2 ++ include/linux/fsnotify.h | 17 ++++++++++++++++- include/linux/fsnotify_backend.h | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c index b163594843f5..4e8dce39fa8f 100644 --- a/fs/notify/fanotify/fanotify.c +++ b/fs/notify/fanotify/fanotify.c @@ -549,9 +549,13 @@ static struct fanotify_event *fanotify_alloc_path_event(const struct path *path, return &pevent->fae; } -static struct fanotify_event *fanotify_alloc_perm_event(const struct path *path, +static struct fanotify_event *fanotify_alloc_perm_event(const void *data, + int data_type, gfp_t gfp) { + const struct path *path = fsnotify_data_path(data, data_type); + const struct file_range *range = + fsnotify_data_file_range(data, data_type); struct fanotify_perm_event *pevent; pevent = kmem_cache_alloc(fanotify_perm_event_cachep, gfp); @@ -565,6 +569,8 @@ static struct fanotify_event *fanotify_alloc_perm_event(const struct path *path, pevent->hdr.len = 0; pevent->state = FAN_EVENT_INIT; pevent->path = *path; + pevent->ppos = range ? range->ppos : NULL; + pevent->count = range ? range->count : 0; path_get(path); return &pevent->fae; @@ -802,7 +808,7 @@ static struct fanotify_event *fanotify_alloc_event( old_memcg = set_active_memcg(group->memcg); if (fanotify_is_perm_event(mask)) { - event = fanotify_alloc_perm_event(path, gfp); + event = fanotify_alloc_perm_event(data, data_type, gfp); } else if (fanotify_is_error_event(mask)) { event = fanotify_alloc_error_event(group, fsid, data, data_type, &hash); diff --git a/fs/notify/fanotify/fanotify.h b/fs/notify/fanotify/fanotify.h index e5ab33cae6a7..93598b7d5952 100644 --- a/fs/notify/fanotify/fanotify.h +++ b/fs/notify/fanotify/fanotify.h @@ -425,6 +425,8 @@ FANOTIFY_PE(struct fanotify_event *event) struct fanotify_perm_event { struct fanotify_event fae; struct path path; + const loff_t *ppos; /* optional file range info */ + size_t count; u32 response; /* userspace answer to the event */ unsigned short state; /* state of the event */ int fd; /* fd we passed to userspace for this event */ diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index fb3837b8de4c..9d001d328619 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h @@ -132,6 +132,21 @@ static inline int fsnotify_file(struct file *file, __u32 mask) } #ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS +static inline int fsnotify_file_range(struct file *file, __u32 mask, + const loff_t *ppos, size_t count) +{ + struct file_range range; + + if (file->f_mode & FMODE_NONOTIFY) + return 0; + + range.path = &file->f_path; + range.ppos = ppos; + range.count = count; + return fsnotify_parent(range.path->dentry, mask, &range, + FSNOTIFY_EVENT_FILE_RANGE); +} + /* * fsnotify_file_area_perm - permission hook before access/modify of file range */ @@ -175,7 +190,7 @@ static inline int fsnotify_file_area_perm(struct file *file, int perm_mask, else return 0; - return fsnotify_file(file, fsnotify_mask); + return fsnotify_file_range(file, fsnotify_mask, ppos, count); } /* diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h index 200a5e3b1cd4..276320846bfd 100644 --- a/include/linux/fsnotify_backend.h +++ b/include/linux/fsnotify_backend.h @@ -298,6 +298,7 @@ static inline void fsnotify_group_assert_locked(struct fsnotify_group *group) /* When calling fsnotify tell it if the data is a path or inode */ enum fsnotify_data_type { FSNOTIFY_EVENT_NONE, + FSNOTIFY_EVENT_FILE_RANGE, FSNOTIFY_EVENT_PATH, FSNOTIFY_EVENT_INODE, FSNOTIFY_EVENT_DENTRY, @@ -310,6 +311,17 @@ struct fs_error_report { struct super_block *sb; }; +struct file_range { + const struct path *path; + const loff_t *ppos; + size_t count; +}; + +static inline const struct path *file_range_path(const struct file_range *range) +{ + return range->path; +} + static inline struct inode *fsnotify_data_inode(const void *data, int data_type) { switch (data_type) { @@ -319,6 +331,8 @@ static inline struct inode *fsnotify_data_inode(const void *data, int data_type) return d_inode(data); case FSNOTIFY_EVENT_PATH: return d_inode(((const struct path *)data)->dentry); + case FSNOTIFY_EVENT_FILE_RANGE: + return d_inode(file_range_path(data)->dentry); case FSNOTIFY_EVENT_ERROR: return ((struct fs_error_report *)data)->inode; default: @@ -334,6 +348,8 @@ static inline struct dentry *fsnotify_data_dentry(const void *data, int data_typ return (struct dentry *)data; case FSNOTIFY_EVENT_PATH: return ((const struct path *)data)->dentry; + case FSNOTIFY_EVENT_FILE_RANGE: + return file_range_path(data)->dentry; default: return NULL; } @@ -345,6 +361,8 @@ static inline const struct path *fsnotify_data_path(const void *data, switch (data_type) { case FSNOTIFY_EVENT_PATH: return data; + case FSNOTIFY_EVENT_FILE_RANGE: + return file_range_path(data); default: return NULL; } @@ -360,6 +378,8 @@ static inline struct super_block *fsnotify_data_sb(const void *data, return ((struct dentry *)data)->d_sb; case FSNOTIFY_EVENT_PATH: return ((const struct path *)data)->dentry->d_sb; + case FSNOTIFY_EVENT_FILE_RANGE: + return file_range_path(data)->dentry->d_sb; case FSNOTIFY_EVENT_ERROR: return ((struct fs_error_report *) data)->sb; default: @@ -379,6 +399,18 @@ static inline struct fs_error_report *fsnotify_data_error_report( } } +static inline const struct file_range *fsnotify_data_file_range( + const void *data, + int data_type) +{ + switch (data_type) { + case FSNOTIFY_EVENT_FILE_RANGE: + return (struct file_range *)data; + default: + return NULL; + } +} + /* * Index to merged marks iterator array that correlates to a type of watch. * The type of watched object can be deduced from the iterator type, but not From patchwork Wed Sep 4 20:27:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791361 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 84812CD4F24 for ; Wed, 4 Sep 2024 20:29:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1BEAB6B012E; Wed, 4 Sep 2024 16:29:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 146BA6B012F; Wed, 4 Sep 2024 16:29:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EDE6C6B0130; Wed, 4 Sep 2024 16:29:28 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id C8E7C6B012E for ; Wed, 4 Sep 2024 16:29:28 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 8A8BF16040F for ; Wed, 4 Sep 2024 20:29:28 +0000 (UTC) X-FDA: 82528196016.24.571FAAB Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) by imf05.hostedemail.com (Postfix) with ESMTP id C030510000D for ; Wed, 4 Sep 2024 20:29:26 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=nKtu3pB+; spf=none (imf05.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.44) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481670; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=JmFE9zypkxWwtjgDkL/vbyJWxHrdDWRoGs2W5KUFOnA=; b=bhh5M0RRxzXK0hlbNp0+9idQ5b/mrQ97dFT6XaEu8mXnif0t6S3MyyNxawdenph7hUfEoM gq8t/ndSmZqXNnVYGeiOP9f5SoGyoEsjc8bSMeico17sN28/0nJLu94INAFfu3fWmfK629 OEEF8WK0gEmMOIp0oX5mp40XJFfRQb4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481670; a=rsa-sha256; cv=none; b=kavWWwaXDg5Xf4175oXC9naavHyyipMMoaHTvEAEI7IvGm0hBaMz+96jovZUdLD9GjcBOY /EiUF5FoGrtVDY/yDznJF2mNigJ6UziA22TkRqC2bZWeM8rdB/j3HoERgKDNxA2N/7UfcP i2ocKnqcm8SLZWWzru2Zdy/hAvdHlt4= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=nKtu3pB+; spf=none (imf05.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.44) smtp.mailfrom=josef@toxicpanda.com; dmarc=none Received: by mail-qv1-f44.google.com with SMTP id 6a1803df08f44-6c35427935eso28746d6.3 for ; Wed, 04 Sep 2024 13:29:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481766; x=1726086566; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=JmFE9zypkxWwtjgDkL/vbyJWxHrdDWRoGs2W5KUFOnA=; b=nKtu3pB+HDt2EOaZPep+ObkycI9Z2PdzwWy39+vwt4A7Hp5RLuN8/1/+u+9faE72Sm MXEuV3zrjKJf80Ymn7UekrZZX1wFBjIw4fgzcN38LBqQkvPscB9iZvg3u4bHNWhi9frl lODSELmOSQ77zj+Qe/QsBsVsyAmh3xbj5I6ZE16n/sTb3HomV4VbQGZj+8fxlKFIwgw4 tHo981PVLziTMOgGkqxJ7xLrRL9GUakFz0/Xg96Zj/90VCEt072JeFIvarmG5DYaN4jw s9iVnsXdtRehz6o4BXkHuq88HpbGzTLa9cd3AZexXBbkfV85R8v6QaG0LwFERvUTNXFJ 8Ttw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481766; x=1726086566; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JmFE9zypkxWwtjgDkL/vbyJWxHrdDWRoGs2W5KUFOnA=; b=Rf5LNALQadmEmQi8J+LJRvdgX9xFwzs8oEO/qAWBwZph0OesTUMX+5/Gp/slG3Q3kP 9Vuq0QDBbjM2K2CmbQQtEumtzHbp+AwamEYjoHh4fL2OiPHxMA+Z7AQ7FYHqUhTvQgc7 FBA4KzNI0wlw5xTS6eyYB+7osWUT/uyBvgEVW6qFcoU9UtOJMeJPx428QOEFOWyXNcE3 H7BINyOX3/AZ5u4N7Zf2BvSl24+QDy7Wi5sI2aMDXbx6eJYQsbYIfn9/WI9FOcemCyzW zdlJUGc+jn3ESPsshUhhro8d9ptuiMkVGrDM/IQS15sixbBt/95GnDwwtUKcm2Y0lCVl oZmg== X-Forwarded-Encrypted: i=1; AJvYcCUt0pQk+1MMmKRxEEJD6RqlYi9StepH3VvztTVUbO3dWBkMcMRgUSqB0InEQ7wBnRh16qACmuwUig==@kvack.org X-Gm-Message-State: AOJu0Yxm+jLNkwUJcShIuXyXJjHBzCeON6jZBAArRUtwZEwU4RV1+sIW 3BVRuQb9U+Qa3Llm6TLk/fOdhAtDLKfquehz4sydDRnv1rCg/zezEvwCxvjLII0= X-Google-Smtp-Source: AGHT+IFz/IUidwqQ59xRLvRnlzpJcJ1KGg9KuPmXBEEett+13VoyzgSnYGWxrufSaJ5p3j4xy3X2+w== X-Received: by 2002:a05:6214:4b09:b0:6c3:54fe:ebef with SMTP id 6a1803df08f44-6c3558359fbmr194853636d6.43.1725481765951; Wed, 04 Sep 2024 13:29:25 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6c5201dedd8sm1621726d6.7.2024.09.04.13.29.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:25 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 07/18] fanotify: rename a misnamed constant Date: Wed, 4 Sep 2024 16:27:57 -0400 Message-ID: <13c1df955c0e8af0aee2afce78b1ea1f2e3f8f66.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: C030510000D X-Stat-Signature: h1km4xfnqkoyaoh8fae4hwgy64xndy1b X-HE-Tag: 1725481766-782020 X-HE-Meta: U2FsdGVkX19DNDAZvNkZJiiyc0KZeZtdceCmWtIjUQD7sq3ob1F2g5pWm/n/dc8xcqELLDWGR6MlXM35nvspCHUZ8dHlWyy73/1v1fAxRe8iLqRdtiIbyqEQ5A6g+486N/XErSDXHJIJaYbrpqFjYmM7k8PRvnThPuI6+tErHByj7c85jguiN/1L/Km2HA7Sk7xP87y3/l5XtYwlJ52GXo+735gJEetPC+Xd2221XrGt7E/TgqgXSJd4sAcZlOfE8uYisZTGzk4fETh7v2JoAR7Ym8pNROEpuUafcp9OK1At45aorfOH4c+xFbRATq854nUwE9EKrPitl20NU1SJ8FwghE904sOPyardUYca9kCUDr5wQHCmKYRBIApEWY8rS7nnhOuObSNyMsBN2+ZtIvGQMAbC5iFGvcufOLESZEl8Tg9qPmPR0q08VGxucnU8T2C99wKhyD06wb3ZZ71ro8rJpHSIhqc5LVHTOk4Ndxfi4ceACM9ETb0M06BIsyIZQgFQhHRaHrOLiwTzFspeEYGIZyn/YLsaqp72P1oS6T3KaE/0YGr+ZsX6asVtrysAO4JuNUQA/NT4IaeaKtTbAacDkVVvZxX94032UADlkPDfKf6FcLKiMGhFZNS7MC7H1QUuRGVKrKlv5TP1rIBLCRLDIp0vBL8Gdw8T2OPW36DSaA0j8rxQkB/DNajI7dwMHS7iyjpRLHgybQ/6u0CpkthtbBiQk59PWUzrviyUXNAMsmM6B0h9MzPpcEYLtGYX1KP1OO8RT7TaoNAoW16TmubhPqanCSQxd7aDu3aM5q6fEsV3smsEcpRD7Kn3li+QamMXeedCtnVvPbxfDnzPnDStD/UMu8aJZflkEnmO/iLNgcofKI9nfmbIT8bA+UHTDf6aJlDAER8xvIiGKEngB2kw+JqggmX9SmGBWR4k7V2pvTVAb7/HPVcureabijz9r+aGG47h2SaED8fxh6n vfNoP1Ba 3bgkrB0DwmDa+Z/qb3ZC3/Y+e1ZC8UQF6eSE3YFYDaFEWpteiLSnDDDaRsc4BSV9JeqEMIMHcDMuh7EGuMho5/+Fkryi7NsQ1uOSilzXcFQVwu7wNZ3fdxG2PYzfaz5yPke+h0RZ5M+Sy6sx/KsV+zoPpjI01Jodu0DQSztUO53roe2HqywUPskOd5HHSjdgEFb2W7Vqya72XHZRhCGiuYgVKbWUpIjoKIl0LkTONhEnTYNKplxJglutySioehl/KKBpzZhSlmrAfmyfuPkU8eUwVxSXo8rmhBlGJ/vTnd4Lsc84G8kCJWuOQVR07T8o3j6qI1nAn3CxPUhh7Dlf2TjNOKNXZ+n/oF9la X-Bogosity: Ham, tests=bogofilter, spamicity=0.001442, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Amir Goldstein FANOTIFY_PIDFD_INFO_HDR_LEN is not the length of the header. Signed-off-by: Amir Goldstein Reviewed-by: Christian Brauner --- fs/notify/fanotify/fanotify_user.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index 3a7101544f30..5ece186d5c50 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c @@ -119,7 +119,7 @@ struct kmem_cache *fanotify_perm_event_cachep __ro_after_init; #define FANOTIFY_EVENT_ALIGN 4 #define FANOTIFY_FID_INFO_HDR_LEN \ (sizeof(struct fanotify_event_info_fid) + sizeof(struct file_handle)) -#define FANOTIFY_PIDFD_INFO_HDR_LEN \ +#define FANOTIFY_PIDFD_INFO_LEN \ sizeof(struct fanotify_event_info_pidfd) #define FANOTIFY_ERROR_INFO_LEN \ (sizeof(struct fanotify_event_info_error)) @@ -174,14 +174,14 @@ static size_t fanotify_event_len(unsigned int info_mode, dot_len = 1; } - if (info_mode & FAN_REPORT_PIDFD) - event_len += FANOTIFY_PIDFD_INFO_HDR_LEN; - if (fanotify_event_has_object_fh(event)) { fh_len = fanotify_event_object_fh_len(event); event_len += fanotify_fid_info_len(fh_len, dot_len); } + if (info_mode & FAN_REPORT_PIDFD) + event_len += FANOTIFY_PIDFD_INFO_LEN; + return event_len; } @@ -511,7 +511,7 @@ static int copy_pidfd_info_to_user(int pidfd, size_t count) { struct fanotify_event_info_pidfd info = { }; - size_t info_len = FANOTIFY_PIDFD_INFO_HDR_LEN; + size_t info_len = FANOTIFY_PIDFD_INFO_LEN; if (WARN_ON_ONCE(info_len > count)) return -EFAULT; From patchwork Wed Sep 4 20:27:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791362 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 9CDBBCD4F24 for ; Wed, 4 Sep 2024 20:29:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 20F0B6B00E7; Wed, 4 Sep 2024 16:29:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 195A86B012F; Wed, 4 Sep 2024 16:29:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EDC646B0130; Wed, 4 Sep 2024 16:29:30 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id B85606B00E7 for ; Wed, 4 Sep 2024 16:29:30 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 7B3BD1C144B for ; Wed, 4 Sep 2024 20:29:30 +0000 (UTC) X-FDA: 82528196100.27.4C19F08 Received: from mail-qk1-f175.google.com (mail-qk1-f175.google.com [209.85.222.175]) by imf13.hostedemail.com (Postfix) with ESMTP id C15CD20004 for ; Wed, 4 Sep 2024 20:29:28 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=F5EqOhem; dmarc=none; spf=none (imf13.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.222.175) smtp.mailfrom=josef@toxicpanda.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481744; a=rsa-sha256; cv=none; b=ZTa6v05o+SyNZIqCsgs3FtWqrkJDsCLNtdzlSXDT4bmiXc1JOOukrjfT5XgdbDyTanljCQ HRLBvj0BQFw2AagwKPXFKktIfgSfgFKwQmohKqFC2DtLRnJzJgXzUKBlsQPTVBwQFv1sgU lRomVuyv7T9ENFwtBUXpD3VHYwemAAo= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=F5EqOhem; dmarc=none; spf=none (imf13.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.222.175) smtp.mailfrom=josef@toxicpanda.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481744; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=kdFADlNMi9J5+Jo97YgtLX17z0QeGZLAaqk7oAQuL90=; b=kz64in/yDBpRwT34jT3f7AnjLYVyzCFDj5fv7Ugkzlc/OPcHcycsmgrIfEatre+ikN4YE6 WkSswQGyEPNnQY5D/pXtu4R7S41LNyacfId+GNmHZC72waXzXe0uGoUEN4WOAgkdfGOQrj ryoOf98pNIBVzb7iNJU3n2s+RAZjPYM= Received: by mail-qk1-f175.google.com with SMTP id af79cd13be357-7a7fd79ff71so1255185a.2 for ; Wed, 04 Sep 2024 13:29:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481768; x=1726086568; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=kdFADlNMi9J5+Jo97YgtLX17z0QeGZLAaqk7oAQuL90=; b=F5EqOhemcLKRzY08N29q0CM51heYi3TEsUod5J5eYQ6n8tKxYXkII/kZE1RdMlIR4P jMJq6a8IcUGyQIh0uwSKytcL5Q1D+uvxKF0rtEfatYQhmiZ15jQVtcVX+E+G9URl6+io WZloDaZeZzdjY9+pQHH+quX1Uie1vVibx3D6PjcvkZdrgz7SDUWNUiul3ySohFxAYbwn CJJFyJUTWZLh8ObGCXuwEJFRsl6Kk7dbtVvYA3N2PVnHabmjKxSRxMGrjK2RsUwqQxWC XrrugdORYOBV++j5xMwr/yOOszZnaMmZyNeShEHiXPlID2P6Y5hstm9qYMpt4JQ2J7fh wgWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481768; x=1726086568; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kdFADlNMi9J5+Jo97YgtLX17z0QeGZLAaqk7oAQuL90=; b=pFapZ6lPQ7+AiBz13974oQd/mGNjGzHDgqjaRfBBBphifSVXjrTCO2kdNNPIqJ7yn9 RLdl4uMEQ1aZ7itEtgA3mIVuHlADLA1ysmi6R/espqlI2Ex8QFqme92yXWN7pbGmyYQl Xe6ktr5m7Kmlba0xvtM81fVjCt85nx2hDxtPBjGsSyjvUMCmf/SsBYyxwG3Hm0pVNEAI 6Zw+fLVeQ8U12r8DY2XZVpKOHhaZdoUNXn5cvA/0+2wDXMW/dbxteOaj/YQq/rPIrVoK ATtEUqnawGfp/Cm3YkpirPueidbf904J2SvudFXnGkO0toxkrzA2ysC4H/6Ykd9GbL1x IdPw== X-Forwarded-Encrypted: i=1; AJvYcCVoBzpYsLlErq1lJBHDJl13QkfAhHHT0BleV3KoaZIdsLikM7649tU+h9k5Bz1oqGe4LcTC2X4glg==@kvack.org X-Gm-Message-State: AOJu0YxZNm8rM13UPFYKoIZE1BigfQ+2ruYcazgJxHsN1Fy9lzJboN5o zyBo1KJGzpmPCG6H2SuSd/z3UvSeRO2jNgeGJpkVnnnA7Ep6QBlDuIOhvjP6nuU= X-Google-Smtp-Source: AGHT+IGx6um9uXhEhda5h73KKWCoNW2FF/dwyP15+JSEZ33BwCH3HCg2dZ3AYVIuYxLr9QIEDkXCMg== X-Received: by 2002:a05:620a:1724:b0:79e:fc9c:4bcb with SMTP id af79cd13be357-7a8931ddae4mr1887788985a.11.1725481767911; Wed, 04 Sep 2024 13:29:27 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7a98ef4a2ebsm15638785a.67.2024.09.04.13.29.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:27 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 08/18] fanotify: report file range info with pre-content events Date: Wed, 4 Sep 2024 16:27:58 -0400 Message-ID: <0833eaada39f0a33e655b47f2d15a5a37cf39a78.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: C15CD20004 X-Rspamd-Server: rspam01 X-Stat-Signature: y8a51316bfjxqjrmm7r7wh886nwmjax6 X-HE-Tag: 1725481768-950325 X-HE-Meta: U2FsdGVkX1/1NN1AVD7DiAVn7/FrwsZ0SD/IS2WSaQ3ehp8FYc+whpf4gzVjAlWvsKodl0NX5StArS+gQgw14fgwkbN47Es/nZKFhhxDk4KdzFmLjASafDzV1o+Dktp263ZGXZhEVpOZf/p90m6WF2s6lINjKCoi/tAJN7dVm28UwiS44JR/e7JMKoqA1IAbakWU3KI6h1DOM0GTSL04keD8aTRR5eFMy3WE1L0ERQr7wjdIK2zam+NZUh7CcYTlh4I2wUtj87Ymeow0o+nbrJmMkqTWkCs5eg7F+C0RQyjFT3aioLeJzVHSTQBYULoyE5+3nBcOMLsfbVzRdxmMrll7xMxo+6WqsEsQnEd00Eh3c6HDzam7QDJE9o6UDbGHQOwE9puzuJTZ2q9Gsg8GB4aCFL6+oegmkgnDA/8UrJsiLPEReyswHKeG/rYDzg+Jxtd4Crh4RD0RqRcaUMNUR3KIar6jqjJYLtx9wW1liId1xXBmnbIao0+IcMNvWnZVcDFmEvJPQo5vXBVjeoXItm+ZDFucNsIrEwTTyOzRb3IGDaTEem20V8cK6ienyahQj4ld1MSNHCWqcRp/Jm9+S0MmAR862mpQxK+H499e3rOMrt1vZJ//Sx01k9aMrP2g2a8V0Y8BxAlmTpTw/CaJG2d4exxwKE7i5m15BdvNhkII9C8YiNEfQy3lme8pfEa7J4uWT/CqWUoQkeVh3woq3y93g0N0N6VfaTeI2AuRUpvP0QQE7eSd/O1L1thGmR7R08lFvzVPIvfmIqmIZ6rFmeVjyyi9wz3xU731gO1lGxg4DOSlZE2QN8aPo2C2pGd1AHkpnmpdRIWlutAmQjrGtNmM2bbFTDNNMBDxu691NcoGB6AQ4CXKERO5949Lw1yoKQPGSqUE1ksvY8L+et7D64XTebOdoTx261bENGg8FPbEDc+plUS6wyKNPPrRpobq6YJ62s8RRL7INd+LxNq /MYRxAX1 IQhQM+o+4ULIyA7JnbhBiuXfSNQcJ+TAhRfoNdZyVZ4DiXvDgb5hWTVPd2zq/SWv/FpVpJ/CV7PGO3i+8LQHL7eGbVBJHZh3TQHGXV+AH4Mhck1bbcgPx8nVaHeWvVZrBha7G4PCdchbuFymUb0H02EF+eZPJML07ic+vMJk0Jft77neEqWM6nrC1xNRM1ba6BKKTu36sq+TBQ+TYhs59f5L6az37k+HfBeAJ5LU7TBKZ2dQWO5BNzVgoIAt/8M6xseSKcsClaRAmhI2DkBWjDVq0PGKipQuZCuAdAdTu7ryL35X9N1vHJ321Wv8wKjPi2NxziYdHVMennuk= 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: From: Amir Goldstein With group class FAN_CLASS_PRE_CONTENT, report offset and length info along with FAN_PRE_ACCESS and FAN_PRE_MODIFY permission events. This information is meant to be used by hierarchical storage managers that want to fill partial content of files on first access to range. Signed-off-by: Amir Goldstein --- fs/notify/fanotify/fanotify.h | 8 +++++++ fs/notify/fanotify/fanotify_user.c | 38 ++++++++++++++++++++++++++++++ include/uapi/linux/fanotify.h | 8 +++++++ 3 files changed, 54 insertions(+) diff --git a/fs/notify/fanotify/fanotify.h b/fs/notify/fanotify/fanotify.h index 93598b7d5952..7f06355afa1f 100644 --- a/fs/notify/fanotify/fanotify.h +++ b/fs/notify/fanotify/fanotify.h @@ -448,6 +448,14 @@ static inline bool fanotify_is_perm_event(u32 mask) mask & FANOTIFY_PERM_EVENTS; } +static inline bool fanotify_event_has_access_range(struct fanotify_event *event) +{ + if (!(event->mask & FANOTIFY_PRE_CONTENT_EVENTS)) + return false; + + return FANOTIFY_PERM(event)->ppos; +} + static inline struct fanotify_event *FANOTIFY_E(struct fsnotify_event *fse) { return container_of(fse, struct fanotify_event, fse); diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index 5ece186d5c50..ed56fe6f5ec7 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c @@ -123,6 +123,8 @@ struct kmem_cache *fanotify_perm_event_cachep __ro_after_init; sizeof(struct fanotify_event_info_pidfd) #define FANOTIFY_ERROR_INFO_LEN \ (sizeof(struct fanotify_event_info_error)) +#define FANOTIFY_RANGE_INFO_LEN \ + (sizeof(struct fanotify_event_info_range)) static int fanotify_fid_info_len(int fh_len, int name_len) { @@ -182,6 +184,9 @@ static size_t fanotify_event_len(unsigned int info_mode, if (info_mode & FAN_REPORT_PIDFD) event_len += FANOTIFY_PIDFD_INFO_LEN; + if (fanotify_event_has_access_range(event)) + event_len += FANOTIFY_RANGE_INFO_LEN; + return event_len; } @@ -526,6 +531,30 @@ static int copy_pidfd_info_to_user(int pidfd, return info_len; } +static size_t copy_range_info_to_user(struct fanotify_event *event, + char __user *buf, int count) +{ + struct fanotify_perm_event *pevent = FANOTIFY_PERM(event); + struct fanotify_event_info_range info = { }; + size_t info_len = FANOTIFY_RANGE_INFO_LEN; + + if (WARN_ON_ONCE(info_len > count)) + return -EFAULT; + + if (WARN_ON_ONCE(!pevent->ppos)) + return -EINVAL; + + info.hdr.info_type = FAN_EVENT_INFO_TYPE_RANGE; + info.hdr.len = info_len; + info.offset = *(pevent->ppos); + info.count = pevent->count; + + if (copy_to_user(buf, &info, info_len)) + return -EFAULT; + + return info_len; +} + static int copy_info_records_to_user(struct fanotify_event *event, struct fanotify_info *info, unsigned int info_mode, int pidfd, @@ -647,6 +676,15 @@ static int copy_info_records_to_user(struct fanotify_event *event, total_bytes += ret; } + if (fanotify_event_has_access_range(event)) { + ret = copy_range_info_to_user(event, buf, count); + if (ret < 0) + return ret; + buf += ret; + count -= ret; + total_bytes += ret; + } + return total_bytes; } diff --git a/include/uapi/linux/fanotify.h b/include/uapi/linux/fanotify.h index ac00fad66416..6136e8a9f9f3 100644 --- a/include/uapi/linux/fanotify.h +++ b/include/uapi/linux/fanotify.h @@ -145,6 +145,7 @@ struct fanotify_event_metadata { #define FAN_EVENT_INFO_TYPE_DFID 3 #define FAN_EVENT_INFO_TYPE_PIDFD 4 #define FAN_EVENT_INFO_TYPE_ERROR 5 +#define FAN_EVENT_INFO_TYPE_RANGE 6 /* Special info types for FAN_RENAME */ #define FAN_EVENT_INFO_TYPE_OLD_DFID_NAME 10 @@ -191,6 +192,13 @@ struct fanotify_event_info_error { __u32 error_count; }; +struct fanotify_event_info_range { + struct fanotify_event_info_header hdr; + __u32 pad; + __u64 offset; + __u64 count; +}; + /* * User space may need to record additional information about its decision. * The extra information type records what kind of information is included. From patchwork Wed Sep 4 20:27:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791363 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 C53CACD4F24 for ; Wed, 4 Sep 2024 20:29:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2F69D6B0130; Wed, 4 Sep 2024 16:29:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 27FF26B0131; Wed, 4 Sep 2024 16:29:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 082876B0132; Wed, 4 Sep 2024 16:29:32 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id D21F46B0130 for ; Wed, 4 Sep 2024 16:29:32 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 861218123C for ; Wed, 4 Sep 2024 20:29:32 +0000 (UTC) X-FDA: 82528196184.15.DC2B301 Received: from mail-oa1-f45.google.com (mail-oa1-f45.google.com [209.85.160.45]) by imf01.hostedemail.com (Postfix) with ESMTP id B165040008 for ; Wed, 4 Sep 2024 20:29:30 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=IchPAQsS; spf=none (imf01.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.160.45) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481675; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=9jRcB1XulXFmj7DKhtdmn8n+Hih5C6C9O3bk81xEiZw=; b=QkJuDfBhq9nHeu5/ZBf1BbbiC1PjAItRd8JlLRSmdR0UYKCreHkCt1+rEMHHU3Yx5KO9XC jEtpRpejsA7T/ypfe2jYHfU4jLvAiVgFpbxRkuCOCYLap6Q/I+a68kCWHFdFUzXYo/5yFb VH6o3TCH/AJKqhsaHCGj7wP//V4zIz0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481675; a=rsa-sha256; cv=none; b=s4rvdot1k759xsjgr96Lj5cPIvgLPWLoXUyelfOxJ95YVYNW9EtcQzSY8R4JB5XOpkdruY wQSW/ravlTgntGOXkPXXNBCqWQpIzTztKDE5IOeeLgHxnCbf9I/xuRpv0cnVm1zNN1pKUA +AXihpC5He2bgmsfkBT5TOR35RyT2aQ= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=IchPAQsS; spf=none (imf01.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.160.45) smtp.mailfrom=josef@toxicpanda.com; dmarc=none Received: by mail-oa1-f45.google.com with SMTP id 586e51a60fabf-2781cb281abso52578fac.1 for ; Wed, 04 Sep 2024 13:29:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481769; x=1726086569; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=9jRcB1XulXFmj7DKhtdmn8n+Hih5C6C9O3bk81xEiZw=; b=IchPAQsSUawfsZAduoRck7x/bwpbtJObc1Wd+8PNbnPJQbrBsQX23v0S3n60bmLPAk KThRg0q2SeKDso1S6y4yRG54RYHb+MV9yo+cluAQTrGIab1c09KeHe1WkL/8hTxle8CC uUFVOqQOGpen4DyedMhCbEAKVQsqo9FNp/G3Z1bL48+c0YM56RBajLMhc6QQknyW2Hyx jcrCxb1TzfNtcUBEhO/2ot0BnCen4EN45id4Wwsi5ZFQyLYQB8z/GfHeLF6RWZ4kJTbR 3+aK1oMjCoFL5FJLPCSxk42r9cH6viPdxXgEp8R3Xl/rVhx38yKNmJfuzW6IdPtyA8xJ nufA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481769; x=1726086569; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9jRcB1XulXFmj7DKhtdmn8n+Hih5C6C9O3bk81xEiZw=; b=g3rH9ofDcMSzQNCYll5sOrslHZAMdCtLha/1Fv9Og5tqcMcP8TpPLWanweu6CtFw7Q i1DWmgKw1q4u9lb9u+Wq1Px5zAbJNZigpCJw4P8FULvZaiBNHShryw9b3MyZMYBPHjho FTufXAgavZz9KS0n4JwkADxiP1VLhfmd/XNYhDeOFzZZ2MtDGZ52tuCEy5zoAeBH/pTH 2fHx2/D4viCEemTxxX608N8e9/rPjjh8T4puI+EtvSBBoYMHgl4Cl40RwtVD3P0GQDBr VUEMwQdeQaxVGwrVEqx3o8pZ4iW2BFJRgrWr0CCyDhtXKBsk7Hj7dKROQ/4pZS9zytFR VViA== X-Forwarded-Encrypted: i=1; AJvYcCWbrBDbu259JCpCfzAqZdQrIgnCLD/OLiUT7Yr1qaoAuD+fpSsR31WRmDjwedVoejcBA8bzIrT47A==@kvack.org X-Gm-Message-State: AOJu0YwaG+rf+NibONGFZnbf+YAVjkYLs2sY7qxyGPKhEvrAuOaiASb+ Xo8FOHnkeBWKq1he/SkTWUFkWg72pk7LLsTzpu2fh0DsnNNhs+BfYCYaRsr67rg= X-Google-Smtp-Source: AGHT+IFWlV+ptqOFoXLlPgR/wzgAif5CenGcM7a3jH83CCzPXpqmv1KE+P96IBtwqQpEGOVQpckR6A== X-Received: by 2002:a05:6870:a1a1:b0:270:5f17:b34 with SMTP id 586e51a60fabf-277900b31a5mr23054551fac.11.1725481769655; Wed, 04 Sep 2024 13:29:29 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7a98efed964sm15316985a.73.2024.09.04.13.29.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:29 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 09/18] fanotify: allow to set errno in FAN_DENY permission response Date: Wed, 4 Sep 2024 16:27:59 -0400 Message-ID: <8c5ace4661500573fdc078b5e595b9397c13b859.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Queue-Id: B165040008 X-Stat-Signature: f9iaerctm51o1hyqoyofyc46cyrtym1e X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1725481770-415167 X-HE-Meta: U2FsdGVkX1/GQ7kQo5zfBcQSPSpb9DOd1Tv626LnvwJPCnF3P1xW1Crdx7s9y/pNcLRmDeh2NGF8VLlE82sstl01Vd0GnU1d3Mq1aFninQcpT8eKL0tg49TWlUeKMeB1ijIHHYfhG4HTm1I0yDVqQpK3Pdo7VuZgSDjCFiFpsx239LC/P8QsulOUWH5c8fuQdLEhgX/dd1NzrMpueN2KCRN8ic4E2aPbIPQX9qW6fFqwb30Nb6/ZgveA99zRifu4nHI98JKx/I0lDfRqDkI4+Y2Zr71VsQFQ0sW/n6lasd+TluYBd+3QCc9TUXMvT5suzaujzwhE8G/NPG2fNizBLFxFDP4yO9ba97z3NeZMhTW65jEeKTBJuAsBALddoH5tR7l8lIO+ED6VD3W2YeGotW9/j777IiSNnCF5Hrxynws8sJj7qohfkC34JRSK4UCMYgL4zt9jAP2H0s38lxUQGIPmgNNH60BSuD5NnK7buuHCi3vKHHFouJAsx/HzlWNvkWxKCjlnt2o/5xmb4FwgOchpqr4lCEtl7HKOMIHQsebKnsGZqIJaYGpRxbn/qa/J/B18JQVnOS0uuHz7OCUM2d2vMaoZWFddCVUnvpRK2XbTq7n8RmmoUgIfGCVg1qJS24auHrr9w08V5fFkiWoJ7BhvUcXh4QBFUGSUQ76Qn4kkBLQ3Hrl8bBSnV6xJJ9F+YLfdW7OflfwCtAAbP7ZADe9QhtMzq7a9SF3U/1M39DT/VJsK0EWaspahY9QeTPb19UO4VwKrYBEbbPGLEjxFrxXVQKB6n2bzHIeFhQOL9Hy18AWblJAwtmmm+t1WuIdyk++eaKztNUKCF0QMMSybLU6qEg9yImBcbLMPj2b332Sec6iVPXtEIciMVZuzPAtbqKo6h9MHhupEKQJI1yMlRcKHae/ASj/mEKyyzwirXPpdbpzEQJmUG4U87XSuPm3aH99yebInSS3q3CY7nKr xJCiHTOF gjYPWJuUQONOpkMtAjT7HCTrOYZbBRgrpLDtJGzQzlp8mm2j5AglGNPiU6YWLciQZRNkIteIWEASn5wi8aVZZyoWtx4SbC4GPEz78zyLh1P7WcJTWin6WbXpxW0k1RJCTOJUAZ/g8FzVjtaqGCuPgoaousCmXOgIrrZr1KgOYIFlmDiPN1t4zUycnJbhdn49Eh45e+6DMARTXWHiA//4EWAkVQ8rpZn0trQfGrLlROxoM53z49D9ssbx1/P0aRlh+3gqcVuW17J2fQv0F97Yn3lbkHLOLa2HcK3cNPq6YiBmiKJvNhQK6xNFX68dk+ZrT6wOnXdbgWiZQ8cw1oMPbM0MEuRlcStxPJt7uU6n0SjrvCT/xBvHLo3O81jRywsTKt6WC X-Bogosity: Ham, tests=bogofilter, spamicity=0.000057, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Amir Goldstein With FAN_DENY response, user trying to perform the filesystem operation gets an error with errno set to EPERM. It is useful for hierarchical storage management (HSM) service to be able to deny access for reasons more diverse than EPERM, for example EAGAIN, if HSM could retry the operation later. Allow fanotify groups with priority FAN_CLASSS_PRE_CONTENT to responsd to permission events with the response value FAN_DENY_ERRNO(errno), instead of FAN_DENY to return a custom error. Limit custom error values to errors expected on read(2)/write(2) and open(2) of regular files. This list could be extended in the future. Userspace can test for legitimate values of FAN_DENY_ERRNO(errno) by writing a response to an fanotify group fd with a value of FAN_NOFD in the fd field of the response. The change in fanotify_response is backward compatible, because errno is written in the high 8 bits of the 32bit response field and old kernels reject respose value with high bits set. Signed-off-by: Amir Goldstein --- fs/notify/fanotify/fanotify.c | 19 +++++++++++---- fs/notify/fanotify/fanotify.h | 5 ++++ fs/notify/fanotify/fanotify_user.c | 37 ++++++++++++++++++++++++++---- include/linux/fanotify.h | 5 +++- include/uapi/linux/fanotify.h | 7 ++++++ 5 files changed, 62 insertions(+), 11 deletions(-) diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c index 4e8dce39fa8f..2969f45a08dc 100644 --- a/fs/notify/fanotify/fanotify.c +++ b/fs/notify/fanotify/fanotify.c @@ -224,7 +224,8 @@ static int fanotify_get_response(struct fsnotify_group *group, struct fanotify_perm_event *event, struct fsnotify_iter_info *iter_info) { - int ret; + int ret, errno; + u32 decision; pr_debug("%s: group=%p event=%p\n", __func__, group, event); @@ -257,20 +258,28 @@ static int fanotify_get_response(struct fsnotify_group *group, goto out; } + decision = event->response & + (FANOTIFY_RESPONSE_ACCESS | FANOTIFY_RESPONSE_FLAGS); /* userspace responded, convert to something usable */ - switch (event->response & FANOTIFY_RESPONSE_ACCESS) { + switch (decision & FANOTIFY_RESPONSE_ACCESS) { case FAN_ALLOW: ret = 0; break; case FAN_DENY: + /* Check custom errno from pre-content events */ + errno = fanotify_get_response_errno(event->response); + if (errno) { + ret = -errno; + break; + } + fallthrough; default: ret = -EPERM; } /* Check if the response should be audited */ - if (event->response & FAN_AUDIT) - audit_fanotify(event->response & ~FAN_AUDIT, - &event->audit_rule); + if (decision & FAN_AUDIT) + audit_fanotify(decision & ~FAN_AUDIT, &event->audit_rule); pr_debug("%s: group=%p event=%p about to return ret=%d\n", __func__, group, event, ret); diff --git a/fs/notify/fanotify/fanotify.h b/fs/notify/fanotify/fanotify.h index 7f06355afa1f..9e93aba210c9 100644 --- a/fs/notify/fanotify/fanotify.h +++ b/fs/notify/fanotify/fanotify.h @@ -528,3 +528,8 @@ static inline unsigned int fanotify_mark_user_flags(struct fsnotify_mark *mark) return mflags; } + +static inline u32 fanotify_get_response_errno(int res) +{ + return res >> FAN_ERRNO_SHIFT; +} diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index ed56fe6f5ec7..53eee8af34a0 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c @@ -337,11 +337,14 @@ static int process_access_response(struct fsnotify_group *group, struct fanotify_perm_event *event; int fd = response_struct->fd; u32 response = response_struct->response; + u32 decision = response & + (FANOTIFY_RESPONSE_ACCESS | FANOTIFY_RESPONSE_FLAGS); + int errno = fanotify_get_response_errno(response); int ret = info_len; struct fanotify_response_info_audit_rule friar; - pr_debug("%s: group=%p fd=%d response=%u buf=%p size=%zu\n", __func__, - group, fd, response, info, info_len); + pr_debug("%s: group=%p fd=%d response=%x errno=%d buf=%p size=%zu\n", + __func__, group, fd, response, errno, info, info_len); /* * make sure the response is valid, if invalid we do nothing and either * userspace can send a valid response or we will clean it up after the @@ -350,18 +353,42 @@ static int process_access_response(struct fsnotify_group *group, if (response & ~FANOTIFY_RESPONSE_VALID_MASK) return -EINVAL; - switch (response & FANOTIFY_RESPONSE_ACCESS) { + switch (decision & FANOTIFY_RESPONSE_ACCESS) { case FAN_ALLOW: + if (errno) + return -EINVAL; + break; case FAN_DENY: + /* Custom errno is supported only for pre-content groups */ + if (errno && group->priority != FSNOTIFY_PRIO_PRE_CONTENT) + return -EINVAL; + + /* + * Limit errno to values expected on open(2)/read(2)/write(2) + * of regular files. + */ + switch (errno) { + case 0: + case EIO: + case EPERM: + case EBUSY: + case ETXTBSY: + case EAGAIN: + case ENOSPC: + case EDQUOT: + break; + default: + return -EINVAL; + } break; default: return -EINVAL; } - if ((response & FAN_AUDIT) && !FAN_GROUP_FLAG(group, FAN_ENABLE_AUDIT)) + if ((decision & FAN_AUDIT) && !FAN_GROUP_FLAG(group, FAN_ENABLE_AUDIT)) return -EINVAL; - if (response & FAN_INFO) { + if (decision & FAN_INFO) { ret = process_access_response_info(info, info_len, &friar); if (ret < 0) return ret; diff --git a/include/linux/fanotify.h b/include/linux/fanotify.h index ae6cb2688d52..547514542669 100644 --- a/include/linux/fanotify.h +++ b/include/linux/fanotify.h @@ -132,7 +132,10 @@ /* These masks check for invalid bits in permission responses. */ #define FANOTIFY_RESPONSE_ACCESS (FAN_ALLOW | FAN_DENY) #define FANOTIFY_RESPONSE_FLAGS (FAN_AUDIT | FAN_INFO) -#define FANOTIFY_RESPONSE_VALID_MASK (FANOTIFY_RESPONSE_ACCESS | FANOTIFY_RESPONSE_FLAGS) +#define FANOTIFY_RESPONSE_ERRNO (FAN_ERRNO_MASK << FAN_ERRNO_SHIFT) +#define FANOTIFY_RESPONSE_VALID_MASK \ + (FANOTIFY_RESPONSE_ACCESS | FANOTIFY_RESPONSE_FLAGS | \ + FANOTIFY_RESPONSE_ERRNO) /* Do not use these old uapi constants internally */ #undef FAN_ALL_CLASS_BITS diff --git a/include/uapi/linux/fanotify.h b/include/uapi/linux/fanotify.h index 6136e8a9f9f3..34b5d634de1f 100644 --- a/include/uapi/linux/fanotify.h +++ b/include/uapi/linux/fanotify.h @@ -234,6 +234,13 @@ struct fanotify_response_info_audit_rule { /* Legit userspace responses to a _PERM event */ #define FAN_ALLOW 0x01 #define FAN_DENY 0x02 +/* errno other than EPERM can specified in upper byte of deny response */ +#define FAN_ERRNO_BITS 8 +#define FAN_ERRNO_SHIFT (32 - FAN_ERRNO_BITS) +#define FAN_ERRNO_MASK ((1 << FAN_ERRNO_BITS) - 1) +#define FAN_DENY_ERRNO(err) \ + (FAN_DENY | ((((__u32)(err)) & FAN_ERRNO_MASK) << FAN_ERRNO_SHIFT)) + #define FAN_AUDIT 0x10 /* Bitmask to create audit record for result */ #define FAN_INFO 0x20 /* Bitmask to indicate additional information */ From patchwork Wed Sep 4 20:28:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791364 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 CADFBCD4F24 for ; Wed, 4 Sep 2024 20:29:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A4C4C6B0139; Wed, 4 Sep 2024 16:29:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9D44D6B0140; Wed, 4 Sep 2024 16:29:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6ED346B013E; Wed, 4 Sep 2024 16:29:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 4778D6B0139 for ; Wed, 4 Sep 2024 16:29:34 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 01DDA1A052E for ; Wed, 4 Sep 2024 20:29:33 +0000 (UTC) X-FDA: 82528196268.22.0AC8A00 Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176]) by imf11.hostedemail.com (Postfix) with ESMTP id 2C6334001F for ; Wed, 4 Sep 2024 20:29:31 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=ZCfHm3Fi; dmarc=none; spf=none (imf11.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.160.176) smtp.mailfrom=josef@toxicpanda.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481701; a=rsa-sha256; cv=none; b=yQxwcAs2N+0wGu34HOKrkoITJlRz+GGJlBp0kVwTG+ohMrC5mVdn+lKv1H52QNuAxrlAjR v47b/iD9ofJ6G+WImGJiGgf/a1WhA+tkxqMRE2GOt1w5uJopsuxnAD7sXnZj1orSlEanA6 0TGDxY3W741Ypxjfc5BxoxfpZqZ/vAM= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=ZCfHm3Fi; dmarc=none; spf=none (imf11.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.160.176) smtp.mailfrom=josef@toxicpanda.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481701; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hLbVQD1uWq7E7syR9oa0FyZv5hSgj9K2/YM9COMKj/I=; b=n+VoJERxlDhJK/utvfKRi4jCE56TGjgoTAxqSuEEMJRNjIgZKH4JivDbW6sZ7iree1arni 2nN/58zGZbjMkhL7Gd5eh3Ht7F11MVATVUKeiFIAFjDq5Sp1gBVBHzNBm0ORMffUbAkJwV w5DcqGjrvghd0lMpB7KaJW6VfH5iO9Y= Received: by mail-qt1-f176.google.com with SMTP id d75a77b69052e-4568acc1ca8so320961cf.0 for ; Wed, 04 Sep 2024 13:29:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481771; x=1726086571; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=hLbVQD1uWq7E7syR9oa0FyZv5hSgj9K2/YM9COMKj/I=; b=ZCfHm3Fii6vyPlR6XFmHN3fGawUQyfthTi7d/lLkKz9th+mbc0WMmtIVTsTZQbt1pL aSj/IZ43x3PKKBhD+3c1U6bQqumFDaGh2JpdrqvInG/2yv4mX1yXD7J8T9idpu+mFM9j HXvp+AhXb7gfix5d8uQ7ANE01MK8bc02Zg1ZewpwMZrOCK+ipOtHTkhbv6RUbbu1IPgs a9Z7Hmtx2m2Rf+cMZrp/Pd1th/eEm7ZgnkCfmaeyBR6q0+aKQVJDRTz3MsYyfGY26UVM GAAdAr/ekgaDIsY4gvmbn1bv5fnxRcEjc5HjNvtqqG6pVfOseNWRriP0/PD/jTXwivME L+0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481771; x=1726086571; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hLbVQD1uWq7E7syR9oa0FyZv5hSgj9K2/YM9COMKj/I=; b=XXRND6ac+NIKZlpOx3n1mDvaM8/7xuB66ATPtfLQ/mYW8up9ErAKb45mXpw307MHiM LZyGoFYUUQFXJV8t78a7V3t9mmTgk1kPKD9pNnW7SHe3VETvrCVIGXmBBZriMeKvXRyr ud+dEyiFUh7WDE2R+cQHLpB/qQZpv1jXM3s1ND9KUP9Ozx62yHp7Z4+jA9TqBzU8/c4S +WiDv2928x/hXY7D+/AVzHN/n6wuw9NJhFtG9dvxWoM/njTnOgJ261iwzKPUx/oYb5qw BCUbe0aekztQpZODhIUNFa7bDBL/LlJ2TQYj/hZiLJ5LGFwi2m64lwWY/WHSpp8pej63 zoFg== X-Forwarded-Encrypted: i=1; AJvYcCVmhsizhKdmfW3SBfq8KqqlQ+kSndeocgTSELbiyaOM4r1wA6skheDmQmE2xBnLZ7ZMiprwsemp4g==@kvack.org X-Gm-Message-State: AOJu0YxFbsv5xU4cXPP7cAQ15LypdfyrhGA9m6YkBXYzEKffKeoZ2QeG 5+IP/N9M5cMHEvDlVCOcSKjekmfdcpqbXUzZviDPIPd4mPpHHk8Fmk0XPxf+q8M= X-Google-Smtp-Source: AGHT+IGdJ5rFqIo2R8SFFCo2OiCjnf+nE2kM7AO4Z/b+MhtME6M5x1ovZdZNYRb7zGAzpKTv2dvAYA== X-Received: by 2002:a05:622a:6209:b0:44f:ed41:6a02 with SMTP id d75a77b69052e-45705429a88mr138893691cf.57.1725481771257; Wed, 04 Sep 2024 13:29:31 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-45801b5f7aasm1500371cf.52.2024.09.04.13.29.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:30 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 10/18] fs: add a flag to indicate the fs supports pre-content events Date: Wed, 4 Sep 2024 16:28:00 -0400 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Queue-Id: 2C6334001F X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: ypatmz656n35eiyepaxjhhiwg9e7j1ii X-HE-Tag: 1725481771-463549 X-HE-Meta: U2FsdGVkX18FaRZjB176X/areRcV1d1nnXX7QS421KSVO71Jx4VodmYPs5yxFwU/lyuWilXWbYx/9FOyEUtN9vafx3+B2kJZAwgnsHAgN+QSFNKc6DaPI0KgrlGuuejLuPt3jwHTaLu0kA1xfnceeSd2ujRDXJTUH8+i3KuyJSm4lizJwFoaxjifhVoIW9wYraWwZ0+6q9bImArPyLTuNVvKsRfiCP3ijVHCNoERJbCmK7OYJoBoVLnnQOPnWDIb8vfpxgukc3DiPrGnfnYTrEib+byDaMSvluPK6NTENk8Caui6cutkUENsSfLZcdrH6we0Uy/TGHV4nZ6QpYc/1KJatyaWp+fUZJeJV6qWYW+8xexn2iONKEGqOr3wTFecLrpaqAr7sTScVyHIudmRUyXeGShQi5xWq+K9hq0Ac26MkIZwkBdvL+rLoAz5+xfPC9KgYUE+vIjpySo+I9J4hNABIqqOm+QiFAwnNUrniWMUNXnu2H2r+Kmo2teEp4+pVCWLNA6x+e/JkhOF5Q87LCQpqYt8oU6wvRbR5OOCdPfeXXRSgR/DdWd5auAgGCdE0ZWtwxo7FhcXDWuJkrcXCwAzN8kFle8Ay1k+NDHUm3lFnOqexjCa8etlCxKgjBsIMhvXdhNsP+enpc3BAawWL/3nlocIxBLrV1+iUQx+VpISm2dGN+mx7PSBjb40w0sw6q7gSZi0uHfWQoqcTHIh2W4V/PcxynDcn+E+pSzL/Um0DSrZm1pGuacQbGCJwUyVNCMAUFoc5lSXs1Ia3bs/aOtf3nPPar9PIqoHsE9+UchIuWDvD9hubr5t+TqTqb1cfE/NKdge64fXNaHzFtxhjmuzSp5V2t6qZjbl/6MCcSj1/gJp/qbD0+aYLZ4xtBmFjlhcCXX+pH79kINWL3DHcP1rTIL/w+VnWCr0ZU4mlBz0tNYTwPUPIM8cnavXmHIx5GV4YDo7Wtb6/q6d8pf YFDNQoM5 vQMP/IrAP2cS0H0/oiBAh6rFdQM2yEv+zLUjabBtIocGn1swyVGHA9by1QO/hDhwvGOen5kbF7PgLQ6TipeYa9fSMFjjiHd/vO8FGv5OEYhru9Ay5daNtIwegzsIsUmQK03TJ4epaYDLnkoLq8mHn09M+yK//RToMUtXmoKScmZtG5GsIZfF1rWI4njvZPJsxA28dAOvzV/wha7BaOsjJRbaqOlmenIxdmLwu+Mpf4Dcr5MKYfY4vTsTUQhfYq3y0tWyuIcr3QdZWMSUtfhIGUwZmO1kGivFTYZ1uNWihY5qpj9xpfbnGo79h9TSAOolVZFOTRpY14VztNEbtKlwc+gHXkshaygw9TvrjqEsk/Fv7F81OBd0dxcsfBA== 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: The pre-content events require some extra thinking, especially around page faults. In order to make sure we don't advertise a feature working that doesn't actually work, add a flag to allow file systems to opt-in to this behavior. Signed-off-by: Josef Bacik Reviewed-by: Amir Goldstein --- fs/notify/fanotify/fanotify_user.c | 2 ++ include/linux/fs.h | 1 + include/linux/fsnotify.h | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index 53eee8af34a0..936e9f9e0cbc 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c @@ -1736,6 +1736,8 @@ static int fanotify_events_supported(struct fsnotify_group *group, /* Pre-content events are only supported on regular files and dirs */ if (mask & FANOTIFY_PRE_CONTENT_EVENTS) { + if (!(path->mnt->mnt_sb->s_type->fs_flags & FS_ALLOW_HSM)) + return -EINVAL; if (!is_dir && !d_is_reg(path->dentry)) return -EINVAL; if (is_dir && mask & FAN_PRE_MODIFY) diff --git a/include/linux/fs.h b/include/linux/fs.h index fd34b5755c0b..5708e91d3625 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2494,6 +2494,7 @@ struct file_system_type { #define FS_USERNS_MOUNT 8 /* Can be mounted by userns root */ #define FS_DISALLOW_NOTIFY_PERM 16 /* Disable fanotify permission events */ #define FS_ALLOW_IDMAP 32 /* FS has been updated to handle vfs idmappings. */ +#define FS_ALLOW_HSM 64 /* FS can handle fanotify pre-content events. */ #define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() during rename() internally. */ int (*init_fs_context)(struct fs_context *); const struct fs_parameter_spec *parameters; diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index 9d001d328619..27992b548f0c 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h @@ -179,6 +179,10 @@ static inline int fsnotify_file_area_perm(struct file *file, int perm_mask, if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode)) return 0; + /* The fs doesn't support pre-content events. */ + if (!(inode->i_sb->s_type->fs_flags & FS_ALLOW_HSM)) + return 0; + if (perm_mask & MAY_WRITE) fsnotify_mask = FS_PRE_MODIFY; else if (perm_mask & (MAY_READ | MAY_ACCESS)) From patchwork Wed Sep 4 20:28:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791365 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 6F41FCD4F24 for ; Wed, 4 Sep 2024 20:29:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 874F76B0156; Wed, 4 Sep 2024 16:29:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 800316B0157; Wed, 4 Sep 2024 16:29:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 650986B0158; Wed, 4 Sep 2024 16:29:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 4002B6B0156 for ; Wed, 4 Sep 2024 16:29:36 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id EB26C1C02E3 for ; Wed, 4 Sep 2024 20:29:35 +0000 (UTC) X-FDA: 82528196310.09.DB07082 Received: from mail-yb1-f170.google.com (mail-yb1-f170.google.com [209.85.219.170]) by imf24.hostedemail.com (Postfix) with ESMTP id 37054180016 for ; Wed, 4 Sep 2024 20:29:34 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=N7lXAO91; spf=none (imf24.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.170) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481698; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=0zVu5c8eaWCvvk5EBO+fDxyCoY1kZOiTk4/wXy3iZ/k=; b=s4iNbp+oCdVl+frXPJwA5iaX/rj4RPKU01rHn6LUGTxXYaRErIfgUtD4HnjsowcNrguUza MCU+E3SsrbjjqUQu9j28g9WwMOiAlmXd/5/Vc4OaZQzsGouhBOjihjUIGU/fUGvjNVkpbW 91zLxI48jbX+OuRjLz2LGJ8SdaYPHEk= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=N7lXAO91; spf=none (imf24.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.170) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481698; a=rsa-sha256; cv=none; b=IE77x5hY4dCDjXEIMM93DWT6B4DwlczxBG/PqcAxTkkTBIXRnUJinGYvZVYjWew5hGQYa6 OKaFSWRLBkA2x6SqoYFjqvCXGEiKXiht5ZKqIgHa4Uqx4QOQnwc4XGThkep9bc/H7NnB3H WxGnPxLpmmTxyDJAFtMnDlOTvH1aXYU= Received: by mail-yb1-f170.google.com with SMTP id 3f1490d57ef6-e1a989bd17aso81485276.1 for ; Wed, 04 Sep 2024 13:29:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481773; x=1726086573; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=0zVu5c8eaWCvvk5EBO+fDxyCoY1kZOiTk4/wXy3iZ/k=; b=N7lXAO91pBoopfrITR0zXtNo/A4pvPcnw8FkVsq99zMC9ba+TAQScCa0RrCvI38uwy b6+oYkM+JwxeYf2ellMkpLRR1tAQw7Ao3aSswzvb8R9/4KDqO7ATOxvXD2SvuBdNLGTL vnQ1Lwv5aU+lGuh7zScVwaOIuF3zCDL8qbyoxD9auisfNqfxKeaO4sugX7rQ/GU7gt5H HxtNJl5ueqpTWmzqcZ4MVAyIA6JXq80J9KcX+poyMIvlXx/if7VgtL/GKQYBHE04UKCy vFewUb1+h3069rEcyx7+peyRCyaDA61Pr2Su/6gWHkfKF0KPiT3XsaWnsWYvlTcGIgJe 2TDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481773; x=1726086573; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0zVu5c8eaWCvvk5EBO+fDxyCoY1kZOiTk4/wXy3iZ/k=; b=lzJnvGNVkMpPilsfPovyNczr4FfbHrO0ODWC8t6NtwJ13Lgq++Rr6E3i4OzoMUtjv+ gj8TuSMCmQVNFAwogr8v6BFbMhJAQcdEYmtqSGt9xnyqyhOtWMtqwd7F91WNaMeJTMeO H5JMMAQnx0AT1HIZS/NmsrY6y+8xnDAu0CEKMuZ1SfpNlY4AEuoqjdNsN6/fDUqczbco ax/uWveCW6PDI0Gc60gdJMlOV4829k3lZOKAgkjZaJO+z+Uo4rzmlbM1i3mVO04Exyc4 vkpwxHLT9fscpDjMrlgccsqGWcTx9ssXrdzGOA+fKwPa7CGYddlfJpg4HYsnd2gJBCme S0pg== X-Forwarded-Encrypted: i=1; AJvYcCWsh837MTT2onpcoKk2p/Yu54u7A5O6RLZjn7ECxb4ib32LpB04fqpX8oIgVItvkGuebDhECKB9kA==@kvack.org X-Gm-Message-State: AOJu0Yx+rBW0IoI542q5J5tr+wCjIIgpqNMn/PV55EPJEyT0MqFCSRwq OhM6Fcolcbj0tQJV1QLlee39Y2PKB7zunwZweEsTcekIp/yuPdWbITVbIPbH9RI= X-Google-Smtp-Source: AGHT+IFDFkzBbYpd9NLUztwVk1+npkB1ydP+fmMEnnhVo46mYhG5bHnYSQtzbSERWVZmLM1FzjZsHw== X-Received: by 2002:a05:6902:1b04:b0:e16:49d6:43e3 with SMTP id 3f1490d57ef6-e1a7a028d68mr20024706276.22.1725481773240; Wed, 04 Sep 2024 13:29:33 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6c520418d34sm1550836d6.119.2024.09.04.13.29.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:32 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 11/18] fanotify: add a helper to check for pre content events Date: Wed, 4 Sep 2024 16:28:01 -0400 Message-ID: <288ff84b68a6b79a0526b6d53df2df5d184b5232.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Stat-Signature: 4o84jxuwgwzq3c1hr7c5n3nurfeo5ayj X-Rspam-User: X-Rspamd-Queue-Id: 37054180016 X-Rspamd-Server: rspam02 X-HE-Tag: 1725481774-555442 X-HE-Meta: U2FsdGVkX1+2FuTXxA7FKl2/Wo7fMIFj4fOfPzfyzBYHbYuIA3ykuCU4aCWULI5oVKOc9cNv35yKoth3pkSR7IWyXEp0axHxdVM3JUT60WdAkxS5C55ooOQ54x9al9ATUTjiwNWmMiDk1HswyCGy0sY+A5+hJYFAJDJpn99L209ZuaaX7jB+MYBQJoilF/QG8kiwA95cZEMOhWTn9czmSsKIFzMK3l7CdEKf70a2f18y9nnIFNJQELpOmV7VeRdMRZ2lsZcSTHA0gzOKQQlL0XsCIHcv+yRhlCLsl/GCq+p0uvqBPy8bhpkJguTFxpPj621APqjJuJvXXIYaXo4lNOuaKalhbGR7d9rIimSDMX9f71SwFvFLD4FT12hbrq8d12GTMlugK/ubOBm0ja3ZpxpD+I4GRvTge79k4IwhZOHeQOwa2TnFP6SUywCXicxvGotZSguZ7AHkOq1Zt4URD/uNcXnMxhhXwuPYCiYkxLEYu5YJzAoNcxC9T5cRXevNw0jRpsT9OE9TntCostVPqISyxbzN/2jLEzW1kWbea18+OxQpoZq4+JQ2hd4rUOPAAnhMAnTr7wRaTvsWBNpziC9g2M4KNwkZM8Naao3Waz2vCYn+8hZeQfC4tIuK4mQuYqzgU0xNof0+LaFjiTQtNptiyWw9nrnrsTZgEwfK/B4lGeP5JRJzPv/1pBfUR3oH6W3+RKsgj/HU9AB46Nf4tA7yPaafg0XmA4hsV382F0e79YzWoO8TJkSijAXo8/ZEKdGXlPAS/jtc8O/kW2bEXM9Z9uxSKw7SEqqV4KXqY8ygXGozkpzk8gj3EC7FUb6ImIGO2q3qxihhWfJp545ZR41BUL1bh41jC4pSWwaTvaH4wtsPTtqrRelLClKn3vdEn8d05+FSu4pF3AQHRjeqrhR3h8pmS69G6o02CMA49s1stTJueiKZ5ZKQYtHNwIHZb10ug2OHDSnHpnOHKCo RyeKr0jI x6tj6r5Uvqbe7l9sUwa4Fv+I3dAlOcynQO79dz80odFXq9GUiqxS0zsVEntLn8XOlxOO1ATMdjO5C3ogGdYBb9iJGpOvDr38t7yDKEhfs6e6KdltbWYyeVG/0MebogT/Up2UiayHUqNW/COZkUvnNCVjrH9/D+FrIh6e1t9HWyeY4GVLIyISCeHW8A1UlZjrmn1vwMy+xiPuNBThCocWR6p0VGlHy5s4mSFFPpzlfZ7plXyb3/GVRcAvCgyaMmmxERolthnkgzzznRipEoVat6AsNrocygZuIs8J32aHawWfsXkGcScJa5+ZC+iDYOYaVTjguCjjuznt2opyeZ/T/uSt+l1muZ9wW3NyBtfLRJG0kyC4JaFfsoWWnkfPqAJxYPS33k0s5rtP2+CM= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000842, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: We want to emit events during page fault, and calling into fanotify could be expensive, so add a helper to allow us to skip calling into fanotify from page fault. This will also be used to disable readahead for content watched files which will be handled in a subsequent patch. Reviewed-by: Christian Brauner Signed-off-by: Josef Bacik Reviewed-by: Amir Goldstein --- fs/notify/fsnotify.c | 15 +++++++++++++++ include/linux/fsnotify_backend.h | 14 ++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c index 1ca4a8da7f29..30badf8ba36c 100644 --- a/fs/notify/fsnotify.c +++ b/fs/notify/fsnotify.c @@ -201,6 +201,21 @@ static inline bool fsnotify_object_watched(struct inode *inode, __u32 mnt_mask, return mask & marks_mask & ALL_FSNOTIFY_EVENTS; } +#ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS +bool fsnotify_file_has_pre_content_watches(struct file *file) +{ + struct inode *inode = file_inode(file); + __u32 mnt_mask = real_mount(file->f_path.mnt)->mnt_fsnotify_mask; + + if (!(inode->i_sb->s_type->fs_flags & FS_ALLOW_HSM)) + return false; + + return fsnotify_object_watched(inode, mnt_mask, + FSNOTIFY_PRE_CONTENT_EVENTS); +} +#endif + + /* * Notify this dentry's parent about a child's events with child name info * if parent is watching or if inode/sb/mount are interested in events with diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h index 276320846bfd..b495a0676dd3 100644 --- a/include/linux/fsnotify_backend.h +++ b/include/linux/fsnotify_backend.h @@ -900,6 +900,15 @@ static inline void fsnotify_init_event(struct fsnotify_event *event) INIT_LIST_HEAD(&event->list); } +#ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS +bool fsnotify_file_has_pre_content_watches(struct file *file); +#else +static inline bool fsnotify_file_has_pre_content_watches(struct file *file) +{ + return false; +} +#endif /* CONFIG_FANOTIFY_ACCESS_PERMISSIONS */ + #else static inline int fsnotify(__u32 mask, const void *data, int data_type, @@ -938,6 +947,11 @@ static inline u32 fsnotify_get_cookie(void) static inline void fsnotify_unmount_inodes(struct super_block *sb) {} +static inline bool fsnotify_file_has_pre_content_watches(struct file *file) +{ + return false; +} + #endif /* CONFIG_FSNOTIFY */ #endif /* __KERNEL __ */ From patchwork Wed Sep 4 20:28:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791366 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 D0DCFCD4F25 for ; Wed, 4 Sep 2024 20:29:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 121AE6B0158; Wed, 4 Sep 2024 16:29:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0AC416B0159; Wed, 4 Sep 2024 16:29:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DCA4C6B015A; Wed, 4 Sep 2024 16:29:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id B79516B0158 for ; Wed, 4 Sep 2024 16:29:37 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 7D21BA9CED for ; Wed, 4 Sep 2024 20:29:37 +0000 (UTC) X-FDA: 82528196394.14.75CE3FE Received: from mail-yb1-f169.google.com (mail-yb1-f169.google.com [209.85.219.169]) by imf21.hostedemail.com (Postfix) with ESMTP id BE9F41C0004 for ; Wed, 4 Sep 2024 20:29:35 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=JmhvrgC9; spf=none (imf21.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.169) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481648; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=NQ0y3/dQBSJxG2OyPRkhEh3Vj0wjByustgiYia+MZqs=; b=TbrwGocNhkIBUw/IBRy4qDgyu7/yAkRSh2GTIdsZ1FwTCORyIfoUAWwT6uPnGub1BxEe6U ourXFSQar1AmLun2EYoIUk1FoB9eTcukKYdn5HnGpxQcOW2mTRxduR2g72VC8Uy0y3MOuC 2EPgYTIxUjMc2VLvF/MMlxs6eUbgbzM= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=JmhvrgC9; spf=none (imf21.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.169) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481648; a=rsa-sha256; cv=none; b=kWLpT+XkYH3Yu5OJ5XULTJnKqHqeLtbcnjQXIaX3FN9WPuWDKNtylpb26CrRU5qxGAcBlq PYB9leDVBgqx2mkOdbOP7X0BTK9rrI83dSqPkT1Z7Iht+IcUm7oZjhej0qHroAEPmpprmy 6xMEg462Fqnmim2FM/zwg7+/1Xt2NNc= Received: by mail-yb1-f169.google.com with SMTP id 3f1490d57ef6-e1a9dc3efc1so81766276.2 for ; Wed, 04 Sep 2024 13:29:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481775; x=1726086575; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=NQ0y3/dQBSJxG2OyPRkhEh3Vj0wjByustgiYia+MZqs=; b=JmhvrgC9aHP3R00xeVMUMcYC5SUlqIJnuqaE6CArTNjPMGf1HaL2CKLQIFMlVeDMnC KxjqleKdx6+Nf52exqi6JuQZHIIHaBBLyPoCriNI2j/fYgTGRI4a07//ViV01pZSslZ1 Op+OjlqrGGPn9eJ4yLWDjk18H2coy22KNNmj9cIg/jaSjs+H4FicVesxHRXvqcrp5q27 qAjPf68g0k89bF/fFmfgSjt8ZKxuIyt3DR/63M4brdbqHUsNEGOSK2JGDRKGM2nNX+V4 pfj56HQkNfj2VSEb/DAX85qtcH/NgLIddGHYzSewxT3R6em9uUd+qiSRGDuMQwpsh5ES nzqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481775; x=1726086575; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NQ0y3/dQBSJxG2OyPRkhEh3Vj0wjByustgiYia+MZqs=; b=hZIKYIOmJ8D684ZbjROOKETF38aBn5INhtADJ9Avqg1ZmOB9Ja8d0hlzZc8K0g/xkU UOWgZu5nXdAefvaCvrt3Ymuy8lcw4ouwqgZl1OviRPyGLARyGbM58aiHdVGpn1/CaqPI VCIJN5lsnlEfe6rpfHsYKMLsyQKIhEnEaHY4Cyx1jjK4TXHRXXIqJkEd0m/rr75bR4N1 34O0kG/ZXaXla5vfOKOTkBG914zvpOJUWbhzTLGCp7aNLzDtdKm63SjzN8kvY1RS1iuF dM2lURrKcwAKtN2G5RXKyvE0vH+NNvpzBDxlCF10x4ATY98KoefYPS0td/nqJkpcw5nt nF6g== X-Forwarded-Encrypted: i=1; AJvYcCUmY3sviB4+8Cs4PVAW0X59T3tLY2atk7i7mJ30lq+9PFd0dGIRzVSkygDm9bGw6+1y9YSnXF7a1g==@kvack.org X-Gm-Message-State: AOJu0YyjgzUWD7qgH+qusCkmGQVFwgtPUkx2/dVqOKFQA83QS1sO0OFP T5gadXMmoMMoha8GBwXgg0YAqS6ajiP/Aynfg+0lfVXwLvCmPb5SD7Kce4627/s= X-Google-Smtp-Source: AGHT+IGBp2PIdRLM2XqIHSfjLgeh3BUtPWJbF41aaoGgznmohKpzreGJIvh+qUevQhYUH2lFWA7hgg== X-Received: by 2002:a05:6902:138d:b0:e0e:8adf:2e80 with SMTP id 3f1490d57ef6-e1a7a1a48abmr20532053276.44.1725481774821; Wed, 04 Sep 2024 13:29:34 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6c5201e4720sm1608386d6.51.2024.09.04.13.29.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:34 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 12/18] fanotify: disable readahead if we have pre-content watches Date: Wed, 4 Sep 2024 16:28:02 -0400 Message-ID: <5ce248ad6e7b551c6d566fd4580795f7a3495352.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: BE9F41C0004 X-Stat-Signature: phecqxwiz46eierbyjkschf38a1tgbfw X-Rspam-User: X-HE-Tag: 1725481775-854215 X-HE-Meta: U2FsdGVkX19Lto1NjPXEQ+IyvW7TXHWPfP8vcoRVRXs8AXWQMk5S08EDMpp2dNOvgzKElQ/mnAI4cRE/3f7ExzM+HaRdZCavWiIya8a/QutA8+d7hfzMBNJ6VE8RLd94GPCd2/ZM2i5+sICRFil5eESPhvhozj7NQFfHenik9J2I7DDPZSfrYW7z+IiIN5GozJPMi01hjfhZp/cKiLcrccHzgZGHum37aEkkfcsjvaGtWB+VOrQSELhiUbKAxW9UoPaNerBbaIIIQESknFbmnxpoQloxpjFi92QtX7z/3q/9Z7lykgSxVx3K6hIHi0Q+nQuTqek8XQe6cEvgJyNfxF0h++T0Ouy0hyBljKuF3NbbuT+hS1pSCdCdecqvtgDiLwE85waIvuI9YHbqQbrgPZkobnjATal9gwsmfvNYTac+F3oDRPr99D97nc4/JE3MztpZKRsgbyZ6kVt6EVFZfjwnWZ4Im4pui6JIlbrj3toWm35IcRPpKP4T1JUvWj0y/mjeieAz00md0iXR2sn80q8V4wrlHnfdtB90ZLOUAXT0vQTspLUaoIjUlurTVBD+C+7yL3YU40E1/rIQgdz8dVUdRUuyEVVgwwYhJm4PEa4F+9KIhpZw2tY2iXlnhfT4rSzDwhqopEGvCQZmjXEAiPjQ/G34sPFq6MpReXPti7/k3ptWmwDfKqwZlMDjfFHUX2E7FMNU9KODmsMP+xtfAFiv47vHumQ1uDScgxCdABxoH946wfRdL+hQtewrSOo+RegwRqE1NibfCRvvgbCy/SYlSJJUBI7YzcUDyNbhxrP4dSqZucorqxhvRGrR5L7qOAF5QQHNvo58fdmAo8dzq6G57LqM/COlW9tUcgUp6QRCWf21Tpk7QC6BRD7PG5aJyzONJcNywejW2JWICXbPbj41lZUuvXMqjT3QRoi7/pMGc/ENCAbXEmHQU3ybSeahItcH2tAdDPlceY94wZE TFhSXJeR ytSWNck6CleZ2+bprmY7D95TCW8aHl6UJl2mWUOZUi0bv6a1X1s5ZMnpyVxciQbY087QNbAHTbYL68tq3XA947Qwyaw69SluJ3s2a2X7E97jfqPk2Vw2XyuxHZSJrspVMz+sT4dDyFkabxhDou1WBBJPOKGzb98qc8E7yW1OS4XBmcr6YqVgK3Lzn6J6DbvAZvPM12ibH7Gfj4q8Vchw6EYO8z6LQl6Fe9doJHHlbwEpFOdq0cCLYzb3rvd35B9F7rYQpel4POSdu7tmHPvV5cR6yCzaR1F06a/A5J6rL4UxLEP+KwepJdTXeWx0dwIiFhARGMTBWNoPhZ8KqWqf5vJFbgrmW39Q69DTLmTvJTfcOfrCbWtR1rN/w/WMQeLstvx2pZtQHlj+qz/A= X-Bogosity: Ham, tests=bogofilter, spamicity=0.001603, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: With page faults we can trigger readahead on the file, and then subsequent faults can find these pages and insert them into the file without emitting an fanotify event. To avoid this case, disable readahead if we have pre-content watches on the file. This way we are guaranteed to get an event for every range we attempt to access on a pre-content watched file. Reviewed-by: Christian Brauner Signed-off-by: Josef Bacik Reviewed-by: Amir Goldstein --- mm/filemap.c | 12 ++++++++++++ mm/readahead.c | 13 +++++++++++++ 2 files changed, 25 insertions(+) diff --git a/mm/filemap.c b/mm/filemap.c index ca8c8d889eef..8b1684b62177 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -3122,6 +3122,14 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf) unsigned long vm_flags = vmf->vma->vm_flags; unsigned int mmap_miss; + /* + * If we have pre-content watches we need to disable readahead to make + * sure that we don't populate our mapping with 0 filled pages that we + * never emitted an event for. + */ + if (fsnotify_file_has_pre_content_watches(file)) + return fpin; + #ifdef CONFIG_TRANSPARENT_HUGEPAGE /* Use the readahead code, even if readahead is disabled */ if ((vm_flags & VM_HUGEPAGE) && HPAGE_PMD_ORDER <= MAX_PAGECACHE_ORDER) { @@ -3190,6 +3198,10 @@ static struct file *do_async_mmap_readahead(struct vm_fault *vmf, struct file *fpin = NULL; unsigned int mmap_miss; + /* See comment in do_sync_mmap_readahead. */ + if (fsnotify_file_has_pre_content_watches(file)) + return fpin; + /* If we don't want any read-ahead, don't bother */ if (vmf->vma->vm_flags & VM_RAND_READ || !ra->ra_pages) return fpin; diff --git a/mm/readahead.c b/mm/readahead.c index 817b2a352d78..bc068d9218e3 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -128,6 +128,7 @@ #include #include #include +#include #include "internal.h" @@ -674,6 +675,14 @@ void page_cache_sync_ra(struct readahead_control *ractl, { bool do_forced_ra = ractl->file && (ractl->file->f_mode & FMODE_RANDOM); + /* + * If we have pre-content watches we need to disable readahead to make + * sure that we don't find 0 filled pages in cache that we never emitted + * events for. + */ + if (ractl->file && fsnotify_file_has_pre_content_watches(ractl->file)) + return; + /* * Even if readahead is disabled, issue this request as readahead * as we'll need it to satisfy the requested range. The forced @@ -704,6 +713,10 @@ void page_cache_async_ra(struct readahead_control *ractl, if (!ractl->ra->ra_pages) return; + /* See the comment in page_cache_sync_ra. */ + if (ractl->file && fsnotify_file_has_pre_content_watches(ractl->file)) + return; + /* * Same bit is used for PG_readahead and PG_reclaim. */ From patchwork Wed Sep 4 20:28:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791367 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 5DF7ACD4F26 for ; Wed, 4 Sep 2024 20:29:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D59B86B0163; Wed, 4 Sep 2024 16:29:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CDF7A6B016A; Wed, 4 Sep 2024 16:29:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B31C36B016C; Wed, 4 Sep 2024 16:29:39 -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 7FE716B0163 for ; Wed, 4 Sep 2024 16:29:39 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 3189780541 for ; Wed, 4 Sep 2024 20:29:39 +0000 (UTC) X-FDA: 82528196478.27.589DA97 Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176]) by imf24.hostedemail.com (Postfix) with ESMTP id 677A0180011 for ; Wed, 4 Sep 2024 20:29:37 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=fEE3mS8J; dmarc=none; spf=none (imf24.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.160.176) smtp.mailfrom=josef@toxicpanda.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481753; a=rsa-sha256; cv=none; b=iygrCdc8T4z+oBlTc+fYb0kw+WPJPImnSGEeNyFVoZgVVqQGzm69w4IryT4SL6UbDZD1CO uRif9R1062RvTGJiYIE+gDVvjq/aURFei4owXhMgxRd6TWdCiKBlEgJQBgHSPtQAJUpniv 7qd32qBwaes/33mcj+h6lx0vzV7GlBI= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=fEE3mS8J; dmarc=none; spf=none (imf24.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.160.176) smtp.mailfrom=josef@toxicpanda.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481753; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=IDO1PsR4jqBoDIDFjuXXy+JZDMdVbZ460dPfM2iRCeI=; b=qkZr3p7BbZXc1qhAnTqe1DuNHAKIsqvkvEhYyM+/bz+TXOZY1s7dj5sInPk+v1zwitCpWu eI1USH4UHm/RZ4SwP+P1/FIDNDuMHFSdn8ejsBF6/oxYoNsKBD/kqUKmcoYsCRWoOsQXL9 Lx3rJcjDE0imZyfd3VLhtxUxJg3/cbs= Received: by mail-qt1-f176.google.com with SMTP id d75a77b69052e-45681098bbdso361071cf.1 for ; Wed, 04 Sep 2024 13:29:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481776; x=1726086576; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=IDO1PsR4jqBoDIDFjuXXy+JZDMdVbZ460dPfM2iRCeI=; b=fEE3mS8J15we/ctMPkyJMd8UaWHa2ncW4CRi9MJpyCRhbPenWcUisVdbqGRyi7fPlT ICPMmCorkoUbiv1DOpHG63bqrEuHfA/GJGoFGIArY530pzsf5KGBAFlq3ceF+Y1fchPq DHmwXqyfKrth6VOCmiaFy9e9hSUe3ZQDskiQHHDu0UdiW7YJTNmyrxaZhavEc3kZo4JU xFM/tP8plNw3ctfUeuDXY9cVTnhSEyzPeXwEgRoRUlEjLbYVMbVx0ogcihWocxTkPuy2 ReAzu1Aamtw1eKG24t2HpruhLgGPL1fA/8+odRYwSdEdgz/90RenXXha/YXCYFw7k7BA 5fXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481776; x=1726086576; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IDO1PsR4jqBoDIDFjuXXy+JZDMdVbZ460dPfM2iRCeI=; b=qio3qZJ5N8jKX01ApHPiidTWRP0w8iEVrK7TVm35/oSGCJXqxEnHWo4IOpgR8u+3SF icR6iEknQLyqZGbCWHHPalTNWEQBARXTWXQcF2UbRndUXjzUWeSZwciZEVtivz7Flc1M hN03IK2CITk/CdCX1rTxUQMPSYOGs8Ic4bOdo0vsb3afgOiyiW8BNC/0iNX5IB55RLBk a9AE9ySw8O/0WHtcrxD7YDrTxcSDC6urXnoUmUia/itO05e2huUzvKv+EB8Hm3xp8KRQ J/FHtP0MU0UT6eLeqnchSidogFZnyREPkkQ21J/A69XnpbQqKW15q3nYu54uySbXv3dC TovA== X-Forwarded-Encrypted: i=1; AJvYcCUxKUC6YcA9aI2eUnQcrP+bw8QK2+b2jCsjfgsdPwIAq91i9kl+kUjeJ2mWHlLV8BoM5bPAqVRhQA==@kvack.org X-Gm-Message-State: AOJu0YxFYhwDjmiN/WRur5kg83Q4Uz38fjfXU6IrpC+tc9Edq9DEXRkE FB00lgLOeIECt/yUxEh7DchrQqHKvbT6FKndppZakB+gGnC3ShbC4oWQG9gYTuI= X-Google-Smtp-Source: AGHT+IFq1hdENBAe17o88j4Kfx5nRP4kOzH63jEqqDXfFeqQM7cpPGSq1qeT7V7dadPcUVEqgl24EQ== X-Received: by 2002:a05:622a:1311:b0:447:f8b1:aeb9 with SMTP id d75a77b69052e-457f8bc54b2mr57102421cf.16.1725481776515; Wed, 04 Sep 2024 13:29:36 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-45801b4cacdsm1493041cf.42.2024.09.04.13.29.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:35 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 13/18] mm: don't allow huge faults for files with pre content watches Date: Wed, 4 Sep 2024 16:28:03 -0400 Message-ID: <80e7221d9679032c2d5affc317957114e5d77657.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: 677A0180011 X-Rspamd-Server: rspam01 X-Stat-Signature: 4eyyu8uszdb35q9wb4iwfy3tuzowucji X-HE-Tag: 1725481777-60264 X-HE-Meta: U2FsdGVkX18bTEgNJ3O0gqV32RNwmwQQ2SqI4vqZQfzrLYjmHs0tzGF81PP8WoMRFj1xVO5tLJfDkWGo+KndHh9lFdZUO0ItNCVB6dc/vnQwefOHV1g0dOVm/Nt5DvPOL2hr/lUBOreS9lrbo1ehHv+s0xRJctfwKLo5zZbO5DrGUyb8eWYwxaNDLViANjnnuiUqvEWGyaLm0eruIytrb7trTcVXtKGRTLPxPuPaYk7vfVRmG6sKBbCEfgzfJgAp4vSWiEHk798mWwTNbGQelCS7+KzfmSELKiKNphwSxNgbg7wj+t2VOYbga9hjK2xnaeropHZ7CgPFqJXqwDMtOx6jvr1SjvPPe8fPYXoamoe0nswo/akW3nuXiX3xRxAVn5ZVmJR3rNM2ziIXhTYEFxC6OEnf2Gk6XvKkj+rXa8/K24yfrDZWh42Rd1J6p3a3EkVjr71wH5QmNn66lhcZSf9LAaOX6pgaao3rfZ2j/v2/ZyagGk+m0SGixhyZI3ad88PB7Kx8dltAjy2EpbF0D5Soa/RlrAJ23zMDO4ADqlJ8mJooEwQndRkFJhtVPeL3+77L/2skZ434KkyWmMJoMReKpbXBDA0Rc/3CMd1jNmsYdaxjpe/MojdITRKpJIDZ+K3xfsdcKLT0tt45bnceBqWLKiLyDfSQsv1NEgGZQd993vNuWxtRV0vil++Rrg3BGEEgXf+bXbxz5GohLfnezRsnxZAYU45OO6DIqKKM39mPeo/ZcvgVJ4dyJ+Y2+By3pQpp7ec4XQzunNbNS/ctGRo0Rz3Ww3yhGS6EXlzlaAQGdxW1meCNtxNYbzADfm53HP5VtqABhXZFArmomjpQB0XCT9q7pBXwiN0bdyP++Rq7ioBwjdggTSKLoCRrG5zfuNDNWEOW6xqE2h0ht81NcPoCF+zoPsgqX21syjopJyYmmkzNgl8C5UEtW/0NR2M+s0bkPun8LbsKJ5FPDEI X8/c1WJh uVe72UYwM+Cm7PiwX3MC/TEgWUixC2K2/T7V8zoEeb/YhGA4SWmGHQlg9h4TnsHrlUIde5rZbOcYZCERlK6+AuO63nZV2EUqK4d820Nh2t/UwFgBWkdwnY+1zuMj9Pqg6j+Nnb6GZdDiPpkdWHr2oIoHi3VHsm4ykSR4NTcAzd/7yzAVq3HL3HjXjCqyxA442CkpJ0a4lglL0XR2N/47J6P2w4e6Z8dcVrUnwIoZs/J7hY5CiSVHKRD93uZr7mxq+duIETQJxpUlkpnF0EMpHikVmrrNZSrB8Mz/nrob9Ryib/Th8NbdePw2gGwSaz1k46CYdtd+YZmeg/t/daTGJ5691z/EwBnhzIYt6xOj38zPZEESUqwYJS+3JtJV3awWXP6CNMEY1NtKzRRVtIquYgDsLhQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.021840, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: There's nothing stopping us from supporting this, we could simply pass the order into the helper and emit the proper length. However currently there's no tests to validate this works properly, so disable it until there's a desire to support this along with the appropriate tests. Reviewed-by: Christian Brauner Signed-off-by: Josef Bacik Reviewed-by: Amir Goldstein --- mm/memory.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mm/memory.c b/mm/memory.c index d10e616d7389..3010bcc5e4f9 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -78,6 +78,7 @@ #include #include #include +#include #include @@ -5252,8 +5253,17 @@ static vm_fault_t do_numa_page(struct vm_fault *vmf) static inline vm_fault_t create_huge_pmd(struct vm_fault *vmf) { struct vm_area_struct *vma = vmf->vma; + struct file *file = vma->vm_file; if (vma_is_anonymous(vma)) return do_huge_pmd_anonymous_page(vmf); + /* + * Currently we just emit PAGE_SIZE for our fault events, so don't allow + * a huge fault if we have a pre content watch on this file. This would + * be trivial to support, but there would need to be tests to ensure + * this works properly and those don't exist currently. + */ + if (file && fsnotify_file_has_pre_content_watches(file)) + return VM_FAULT_FALLBACK; if (vma->vm_ops->huge_fault) return vma->vm_ops->huge_fault(vmf, PMD_ORDER); return VM_FAULT_FALLBACK; @@ -5263,6 +5273,7 @@ static inline vm_fault_t create_huge_pmd(struct vm_fault *vmf) static inline vm_fault_t wp_huge_pmd(struct vm_fault *vmf) { struct vm_area_struct *vma = vmf->vma; + struct file *file = vma->vm_file; const bool unshare = vmf->flags & FAULT_FLAG_UNSHARE; vm_fault_t ret; @@ -5277,6 +5288,9 @@ static inline vm_fault_t wp_huge_pmd(struct vm_fault *vmf) } if (vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) { + /* See comment in create_huge_pmd. */ + if (file && fsnotify_file_has_pre_content_watches(file)) + goto split; if (vma->vm_ops->huge_fault) { ret = vma->vm_ops->huge_fault(vmf, PMD_ORDER); if (!(ret & VM_FAULT_FALLBACK)) @@ -5296,9 +5310,13 @@ static vm_fault_t create_huge_pud(struct vm_fault *vmf) #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && \ defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) struct vm_area_struct *vma = vmf->vma; + struct file *file = vma->vm_file; /* No support for anonymous transparent PUD pages yet */ if (vma_is_anonymous(vma)) return VM_FAULT_FALLBACK; + /* See comment in create_huge_pmd. */ + if (file && fsnotify_file_has_pre_content_watches(file)) + return VM_FAULT_FALLBACK; if (vma->vm_ops->huge_fault) return vma->vm_ops->huge_fault(vmf, PUD_ORDER); #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ @@ -5310,12 +5328,16 @@ static vm_fault_t wp_huge_pud(struct vm_fault *vmf, pud_t orig_pud) #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && \ defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) struct vm_area_struct *vma = vmf->vma; + struct file *file = vma->vm_file; vm_fault_t ret; /* No support for anonymous transparent PUD pages yet */ if (vma_is_anonymous(vma)) goto split; if (vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) { + /* See comment in create_huge_pmd. */ + if (file && fsnotify_file_has_pre_content_watches(file)) + goto split; if (vma->vm_ops->huge_fault) { ret = vma->vm_ops->huge_fault(vmf, PUD_ORDER); if (!(ret & VM_FAULT_FALLBACK)) From patchwork Wed Sep 4 20:28:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791368 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 ECD14CD4F25 for ; Wed, 4 Sep 2024 20:29:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 607966B017B; Wed, 4 Sep 2024 16:29:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 58B556B017D; Wed, 4 Sep 2024 16:29:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3B8456B017B; Wed, 4 Sep 2024 16:29:41 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 18B2E6B0179 for ; Wed, 4 Sep 2024 16:29:41 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id CA1351A052F for ; Wed, 4 Sep 2024 20:29:40 +0000 (UTC) X-FDA: 82528196520.15.A230D56 Received: from mail-yb1-f175.google.com (mail-yb1-f175.google.com [209.85.219.175]) by imf14.hostedemail.com (Postfix) with ESMTP id 09BA5100013 for ; Wed, 4 Sep 2024 20:29:38 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=heToXNcQ; dmarc=none; spf=none (imf14.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.175) smtp.mailfrom=josef@toxicpanda.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481754; a=rsa-sha256; cv=none; b=1u2Essj/yQNarrBj0/nLKhDn5BylosgWTWrw5Z3ImMnF0nbv/oQSwWlB3zVJAbPmlYvvQv tILUKhMas9gdmJGS+9lLe34B8CiV44wsYC2CtcGDt+X1aZn6GucYplPI/lVg5yCPKUfIum aZuMwUZ+cHrz65y7ldNqBI2gcAhMQvc= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=heToXNcQ; dmarc=none; spf=none (imf14.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.175) smtp.mailfrom=josef@toxicpanda.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481754; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=TdpAgT058g8D2uASHL0DyNBaXA20e/8A0vSavuo8wh4=; b=VzFmsj/qmOtNPsYwuq0D1NV/6GTGgb6ZUz55uhAhstfCf9IrGFmJPjy9JcFaXiP6Mqo9E/ g9N0+LJdYFYBwZRfMJ0fKO+N9lqWE0BSscpdqDIZgjMI4Saau4cA5Sr7fqT21m8lvPJu9U sP1T1keOXH2KS8bJrxaYxONtkAdK+ro= Received: by mail-yb1-f175.google.com with SMTP id 3f1490d57ef6-e1a9dc3f0a3so86543276.0 for ; Wed, 04 Sep 2024 13:29:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481778; x=1726086578; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=TdpAgT058g8D2uASHL0DyNBaXA20e/8A0vSavuo8wh4=; b=heToXNcQ8dEx7O60WE5MsLXEzXwwigMSMQmYQ4xGGr1/2irC6nc4yUiKceWhJ2svhg yo6whsHWiWBRw3lvj3cWsnK4Hig1HnXwCV2jluXyCrfqd+FsBddodlqsZhJW8SWWc9el QIg6MQzscIN1fQEURUPXsLCxyHJb6dw9Zb+TR57hYQdX0FF8ObGtWpQzdGjUtMGN4PyJ FmeDnZRJf7jcVoA/9J7zbUimhKCk7PyroRdeBmGYmFNyGtQrHMVjQrmdtoKFvv1VjCyK FFp6NittvPfiD4+nm3D4j9+Otq6T9oFIC5ApXH4W7o4hPLMzpzA3bWHBWB3IB49mB12n +XzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481778; x=1726086578; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TdpAgT058g8D2uASHL0DyNBaXA20e/8A0vSavuo8wh4=; b=Ga1G10C8Cp8Zw9fsQdU6lLEikeJ4kcRy6NlwLc3YWFfl6NP64Ukan6LSQ/SdkBdUk7 ziEAl9e6N3hQfsfHHeNpniugzcLySShwiQv9apKKcChCIRnxDSMDjPdZtoEVRdd/Txfm 261voVPyn3U3XDTeZvONHMLhZ+8UKsQ4HIdcrPjzA4Kmr/fnKaJLuzxpqmkLFuohko0v PplFcVXXiWh7nbCHQpX5kO5tuki7WyiigAoKCpGGxkTHYvHpEeUgdpxNCnY3oF5x3xgK +1dXUMJQM/b25CnkVUwTtJXyFC+jpNlCsifUxY9Nwfabrpk6UCpfz6L3zVrFZ/dK4lRk JbDg== X-Forwarded-Encrypted: i=1; AJvYcCWPCdaKCFLHwritOhZOd6kRw5T/Yv+eF1y6vCE1SGkv77z2NfGLi9JqcbT4GEWgdm+vdrTmVkPKUQ==@kvack.org X-Gm-Message-State: AOJu0Yz3siwfiCqHTyYexnrtJpjJP7/yGMsxJwQHgys+cNs7XcJx+EPO Z/xZfj6DfaKWAx5c/RlC7xd0W/mO02p0paBSFfANX6znY+fYjKNsNXp16VB6sY8= X-Google-Smtp-Source: AGHT+IHeHitsPcQ1kfVrPGq0b4GF0aiDUGxULm3YTFoSiEMXAET19y3p8EGpUVDmPCTd+KLj6bMEOQ== X-Received: by 2002:a05:6902:70a:b0:e0e:7b3d:53fe with SMTP id 3f1490d57ef6-e1a79fd884emr23296230276.18.1725481778061; Wed, 04 Sep 2024 13:29:38 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6c520418d34sm1551586d6.119.2024.09.04.13.29.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:37 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 14/18] fsnotify: generate pre-content permission event on page fault Date: Wed, 4 Sep 2024 16:28:04 -0400 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: 09BA5100013 X-Rspamd-Server: rspam01 X-Stat-Signature: cwpyn1gjfdbctr1sbiur5tc44ms83bgn X-HE-Tag: 1725481778-461018 X-HE-Meta: U2FsdGVkX188pN89W/cSykq6evjI0LUOM7TQlQHv3z9j9eAbMoEiEAaJHEXMszHdsvu2GJh7clHy5UKTUK9YcZ74oUUpqZ8WsF2KKQUY2DlMRoPh0rbwjY+YaYD6FfdAOmlC7GwF+qsGv9p1aW+8QEWovgOfG9paWV3cYD9hjI13LlXL5RZy8U1XNu8J5ysTJOl7or+VWNDQ86hwlXF5iPPL0kqTMDWJd4wznVv7Fef1iyHDwz+C7MN9tnG27eT8X23wggn5kxZiZhqFDX5yWEqg77S31T2O+q8Ww1r2Iiori02N7Aw0T4hwTynRT0s+TZMvVXGgGXdYKCDJ29D6gkqrR7fG57JouVio5cVgolhuGTjnPUnXISNCbevpG2CLOEj/Mv3J5an7Z+O8qlb4niNakom/EaQt4oZolku7iUMLN2RbqlV7VY2p1pjJpOhMQDRCux6lha6jWrqPxVnEquaUnPSrFxs9eUAi52uYGXVS/MA7dcsB5JkQxprJvXr7L06ukEm5XbMOdc/kmogvYARfZCnjZlcZUvT0ik73Lc2dB6pu2UqCMPkli47H7unnoeAzbzBItQ1SQOD2K59GE/nk0zbp1WMt/EsPWvb+gpD6Ov0rcZqgQepZvzlY25dRtK3wnLWf9YiblplxurJbrtVc2XFEebXkgYqeyPLygrv8JQkf3DxuSboXJ702va2614yG7J3qJ9MLu9zPnd86OYcrAUf//QkugqMMpoUeuMWH4corG4OoJjJHNxc4Ah+KbSBPrAPGLR6cfz4zRoolVAJ3GPC0JcoCf+AuG9YHYPQahGad7eRaBK56c8klmVNn45k+OPaldwWAD1ZrTTq/VuPNUxwhCphvLbpGXmXGx72RBqHCe86PpE5lLb4VFYt2Y9N7sxnf+hSSl/mzUSU2rkDVbr0Mzfrmcur25OiSuDZvoBdwB/R4bvuBYZqHvEIoElCouUqWaALLBa6swcF wPhuXmOv XG8FkFL+FfEZun+kInAedSo6JYawbXKmFfvOJppM93i6xN9zVoGwqhlTeDyV/JEwKVR8T8M5PTtlehb3+kyX3E5Hvqot8Bq++OxOxUirR2G3w9hAZU6VVV3s+qFepcCcSTXdQ22yVPp5JsKSE9PGMh0AvSXNW/9W3vVeiMdEG7gBu2eucuXmF+CsXUFtCaIp9P12jKovoVkd/BuqzDtTUqXdqArbimz6NrnrH4/2qWC0tvGTPKfDBozPtzU3b/M86O8Iv4v6tsHI41XD6nm+tKWRRoR3KpEXSX6d99ObQ4LmalYdBTF+PKoTcVg1gpJgZxl/pzmzPHi8elEuQL7y+En/Y3FWHUxoC4avTtgsH/V/AFbtEZCY1Ee/zJA== 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: FS_PRE_ACCESS or FS_PRE_MODIFY will be generated on page fault depending on the faulting method. This pre-content event is meant to be used by hierarchical storage managers that want to fill in the file content on first read access. Export a simple helper that file systems that have their own ->fault() will use, and have a more complicated helper to be do fancy things with in filemap_fault. Signed-off-by: Josef Bacik --- include/linux/mm.h | 1 + mm/filemap.c | 116 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 110 insertions(+), 7 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index ab3d78116043..89665732b404 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3503,6 +3503,7 @@ extern vm_fault_t filemap_fault(struct vm_fault *vmf); extern vm_fault_t filemap_map_pages(struct vm_fault *vmf, pgoff_t start_pgoff, pgoff_t end_pgoff); extern vm_fault_t filemap_page_mkwrite(struct vm_fault *vmf); +extern vm_fault_t filemap_fsnotify_fault(struct vm_fault *vmf); extern unsigned long stack_guard_gap; /* Generic expand stack which grows the stack according to GROWS{UP,DOWN} */ diff --git a/mm/filemap.c b/mm/filemap.c index 8b1684b62177..b2d29947ce7f 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include "internal.h" @@ -3112,13 +3113,13 @@ static int lock_folio_maybe_drop_mmap(struct vm_fault *vmf, struct folio *folio, * that. If we didn't pin a file then we return NULL. The file that is * returned needs to be fput()'ed when we're done with it. */ -static struct file *do_sync_mmap_readahead(struct vm_fault *vmf) +static struct file *do_sync_mmap_readahead(struct vm_fault *vmf, + struct file *fpin) { struct file *file = vmf->vma->vm_file; struct file_ra_state *ra = &file->f_ra; struct address_space *mapping = file->f_mapping; DEFINE_READAHEAD(ractl, file, ra, mapping, vmf->pgoff); - struct file *fpin = NULL; unsigned long vm_flags = vmf->vma->vm_flags; unsigned int mmap_miss; @@ -3190,12 +3191,12 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf) * was pinned if we have to drop the mmap_lock in order to do IO. */ static struct file *do_async_mmap_readahead(struct vm_fault *vmf, - struct folio *folio) + struct folio *folio, + struct file *fpin) { struct file *file = vmf->vma->vm_file; struct file_ra_state *ra = &file->f_ra; DEFINE_READAHEAD(ractl, file, ra, file->f_mapping, vmf->pgoff); - struct file *fpin = NULL; unsigned int mmap_miss; /* See comment in do_sync_mmap_readahead. */ @@ -3260,6 +3261,93 @@ static vm_fault_t filemap_fault_recheck_pte_none(struct vm_fault *vmf) return ret; } +/* + * If we have pre-content watches on this file we will need to emit an event for + * this range. We will handle dropping the lock and emitting the event. + * + * If FAULT_FLAG_RETRY_NOWAIT is set then we'll return VM_FAULT_RETRY. + * + * If no event was emitted then *fpin will be NULL and we will return 0. + * + * If any error occurred we will return VM_FAULT_SIGBUS, *fpin could still be + * set and will need to have fput() called on it. + * + * If we emitted the event then we will return 0 and *fpin will be set, this + * must have fput() called on it, and the caller must call VM_FAULT_RETRY after + * any other operations it does in order to re-fault the page and make sure the + * appropriate locking is maintained. + * + * Return: the appropriate vm_fault_t return code, 0 on success. + */ +static vm_fault_t __filemap_fsnotify_fault(struct vm_fault *vmf, + struct file **fpin) +{ + struct file *file = vmf->vma->vm_file; + loff_t pos = vmf->pgoff << PAGE_SHIFT; + int mask = (vmf->flags & FAULT_FLAG_WRITE) ? MAY_WRITE : MAY_ACCESS; + int ret; + + /* + * We already did this and now we're retrying with everything locked, + * don't emit the event and continue. + */ + if (vmf->flags & FAULT_FLAG_TRIED) + return 0; + + /* No watches, return NULL. */ + if (!fsnotify_file_has_pre_content_watches(file)) + return 0; + + /* We are NOWAIT, we can't wait, just return EAGAIN. */ + if (vmf->flags & FAULT_FLAG_RETRY_NOWAIT) + return VM_FAULT_RETRY; + + /* + * If this fails then we're not allowed to drop the fault lock, return a + * SIGBUS so we don't errantly populate pagecache with bogus data for + * this file. + */ + *fpin = maybe_unlock_mmap_for_io(vmf, *fpin); + if (*fpin == NULL) + return VM_FAULT_SIGBUS; + + /* + * We can't fput(*fpin) at this point because we could have been passed + * in fpin from a previous call. + */ + ret = fsnotify_file_area_perm(*fpin, mask, &pos, PAGE_SIZE); + if (ret) + return VM_FAULT_SIGBUS; + + return 0; +} + +/** + * filemap_fsnotify_fault - maybe emit a pre-content event. + * @vmf: struct vm_fault containing details of the fault. + * + * If we have a pre-content watch on this file we will emit an event for this + * range. If we return anything the fault caller should return immediately, we + * will return VM_FAULT_RETRY if we had to emit an event, which will trigger the + * fault again and then the fault handler will run the second time through. + * + * Return: a bitwise-OR of %VM_FAULT_ codes, 0 if nothing happened. + */ +vm_fault_t filemap_fsnotify_fault(struct vm_fault *vmf) +{ + struct file *fpin = NULL; + vm_fault_t ret; + + ret = __filemap_fsnotify_fault(vmf, &fpin); + if (fpin) { + fput(fpin); + if (!ret) + ret = VM_FAULT_RETRY; + } + return ret; +} +EXPORT_SYMBOL_GPL(filemap_fsnotify_fault); + /** * filemap_fault - read in file data for page fault handling * @vmf: struct vm_fault containing details of the fault @@ -3299,6 +3387,17 @@ vm_fault_t filemap_fault(struct vm_fault *vmf) if (unlikely(index >= max_idx)) return VM_FAULT_SIGBUS; + /* + * If we have pre-content watchers then we need to generate events on + * page fault so that we can populate any data before the fault. + */ + ret = __filemap_fsnotify_fault(vmf, &fpin); + if (unlikely(ret)) { + if (fpin) + fput(fpin); + return ret; + } + /* * Do we have something in the page cache already? */ @@ -3309,21 +3408,24 @@ vm_fault_t filemap_fault(struct vm_fault *vmf) * the lock. */ if (!(vmf->flags & FAULT_FLAG_TRIED)) - fpin = do_async_mmap_readahead(vmf, folio); + fpin = do_async_mmap_readahead(vmf, folio, fpin); if (unlikely(!folio_test_uptodate(folio))) { filemap_invalidate_lock_shared(mapping); mapping_locked = true; } } else { ret = filemap_fault_recheck_pte_none(vmf); - if (unlikely(ret)) + if (unlikely(ret)) { + if (fpin) + goto out_retry; return ret; + } /* No page in the page cache at all */ count_vm_event(PGMAJFAULT); count_memcg_event_mm(vmf->vma->vm_mm, PGMAJFAULT); ret = VM_FAULT_MAJOR; - fpin = do_sync_mmap_readahead(vmf); + fpin = do_sync_mmap_readahead(vmf, fpin); retry_find: /* * See comment in filemap_create_folio() why we need From patchwork Wed Sep 4 20:28:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791369 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 5863FCD4F26 for ; Wed, 4 Sep 2024 20:29:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E1BAF6B017E; Wed, 4 Sep 2024 16:29:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DA4556B0181; Wed, 4 Sep 2024 16:29:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BF5606B0180; Wed, 4 Sep 2024 16:29:42 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 94AE86B017E for ; Wed, 4 Sep 2024 16:29:42 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 4B41A1404D9 for ; Wed, 4 Sep 2024 20:29:42 +0000 (UTC) X-FDA: 82528196604.15.624947F Received: from mail-qv1-f52.google.com (mail-qv1-f52.google.com [209.85.219.52]) by imf14.hostedemail.com (Postfix) with ESMTP id 7CCD2100006 for ; Wed, 4 Sep 2024 20:29:40 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=hoWdDa4W; dmarc=none; spf=none (imf14.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.52) smtp.mailfrom=josef@toxicpanda.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481673; 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=RWEHhx5O7UFZKYepru/YJGo3B9Ht5vMlNzII31DWFDk=; b=wMKmUHdN6dgpO/K3UY586CdoI1G+sdAm2p7R/4vKDpIYvLxrLz+ja5MtxG8FbsTXCVUSOe CgIRhdmmsxZUo32QYsXhLFSgWmZTrAYJbCZQ5Mb8QFd6SSv9tt8b6Eh3cVkh5k3T6WjXqR C1L5x0wH1Nu0nejDuP2XCysXf5jppAU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481673; a=rsa-sha256; cv=none; b=r/o9aIekREpSuDEPDiU98FNEw99Or98gc2S303ru7z9l168ZHgokwsLChpTxhuJKH1GMZe NlGgpJfM87rYmdVaNjdgJ7lAhGsxWfO9tx3/BoK2Va6kDvHDe6XscSrJ1utTXmaJeQnPoU VDHPlCnJ2PQm/KiyvI3wHOcLAQ7uoAU= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=hoWdDa4W; dmarc=none; spf=none (imf14.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.52) smtp.mailfrom=josef@toxicpanda.com Received: by mail-qv1-f52.google.com with SMTP id 6a1803df08f44-6c35334dfb1so182316d6.0 for ; Wed, 04 Sep 2024 13:29:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481779; x=1726086579; 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=RWEHhx5O7UFZKYepru/YJGo3B9Ht5vMlNzII31DWFDk=; b=hoWdDa4WrjHpC4BwALc8muGJquCp8OCrlVeWrDNZiHkrn/yjaD1BQ9f5SQ845pFx7j PLsmFNGdI7l06I75lAZC0aDfzPEtuDCJBwtYJtUG42OJ3xCXlJ+8oXZXnyDHCHyUDJSX 2oTWpKW0HOi2npyW1e1kxwauatVcPhsN5rMh6hSpBptRJFY5bKoF04qQE7sHsufRrzEJ s64k9K5S+JG0Qr6eI0LuRkh45pEjRAs8A7NlibsvUfP0XSXlSeI679cja5+E8qtKvdY2 GolmenIf2aFNJ7+fd2qMqbgUxD+XiSwf79vvpCFprz0qIQ9B4iaHoymavUOGtXUz/NPs zV4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481779; x=1726086579; 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=RWEHhx5O7UFZKYepru/YJGo3B9Ht5vMlNzII31DWFDk=; b=u/TWTVhWhb8KAht3y3PpG2E3VAJo/1gcvnxyCbgioywchrFSTAbSw6OYVsXTx65/QJ FblpZjHpjK01h542eNh2UCcuGe3nMbvoPhZkPXwVa+VsW5Nf0j9iL/BsxWR3hGoMukLe h2msqiSjsymmJkb6/3eO9Y02tJnyo1pqvhaVVpC5SDY2cxaVKmebitUEQkZJr6o4/ZBF lS6V6DmxHugdWNVkTEojFtsRdRl6zHMjTRiDa217s91tB28kYyW/bk77sX3blk8Wfyq9 9yQW5mGVmN0Zom+xA2B7Xfg/LEVcd8/Y2Ce26Xdd5pSJYAmNoFRQ4K1hg3IR2ZEu5Ztu 6Twg== X-Forwarded-Encrypted: i=1; AJvYcCUJvUoIJOTP510wDTo11tTzCdlcwcknBRZxJOeYBFj93H119/V93VBUKhn+HX5TUCXyL0wtUL1tEw==@kvack.org X-Gm-Message-State: AOJu0Yz44dQRzyE/SiLX38sTGZycHL8WOIV6THQ4scjfZjyyXtwTfGqj +GxWVNF3Ab9l4Y6u5DWEFZo+9yBQIZOcRYeqO16ZrIiGmG5VxkkijMBS5Ti25M4= X-Google-Smtp-Source: AGHT+IGNwdiKO4Frv0IpCUzBFB05rGHrErtdGiSxtnVsPoIgc9Az5OOPtCc2jc4JjLzRxF9YRhdyFw== X-Received: by 2002:a05:6214:498b:b0:6c3:5c0e:2bbd with SMTP id 6a1803df08f44-6c35c0e3262mr134228936d6.50.1725481779673; Wed, 04 Sep 2024 13:29:39 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6c52041874asm1535256d6.113.2024.09.04.13.29.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:39 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Cc: Kent Overstreet Subject: [PATCH v5 15/18] bcachefs: add pre-content fsnotify hook to fault Date: Wed, 4 Sep 2024 16:28:05 -0400 Message-ID: <89d4bd31a6faa634b9de4cb486498601f042bd7b.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 7CCD2100006 X-Stat-Signature: kz4f867edr8nur8ywfu5a1u5t84g7he5 X-Rspam-User: X-HE-Tag: 1725481780-742578 X-HE-Meta: U2FsdGVkX19lbTvTAVJPaKT2ANjB4E+UqI9t4sQaScqvSWYekDRFosU9cbtzU2+wnCy32BuJN+b/IaDaGFRazJ5Uz4NrihTCPO69tnd1OqCOQX9wyEnSZafO95aKkOur1Dswv2YZ5+wQRmhf3ldXaV0rI2j3tBR880oLwuPQaJIVLOhLd97pAEHHHjxl4FKbjcUfcy1Sf0GQtmHhR0PabBw2lt+1l3N5ZQLj0jX5FWH2TNsV96VMWs6KOmZa20GgJC+3vSdylgmTpzjk/TFdYODAVbXv3VRsVwMuiibnJVgWHXGORw3tRGGET0vCETjCsTAl6FRhl0fob0FUaS+rQ/D8g0geaVeJh0SnVkMyqEQEoiRA1oI5hbyxYK6bcoRy/Bk0/grCeGClvssxjqy4sBsxTXHRQByZ+gvFWcapu5zsobO5e4gtU7BGLPE712MljqFw4acPe987IBuOYMrt8yTZJRxDvkLHF3/yYhaj+PcFjStHzl8GV7z3QKdU8CXhRESRALE8OCU9Vq6QaYSG8Nqa9B2YpAXlpniZB2+ZzLHcQ5SPPm/Ha2s/YzXSChUHcgH3XE5qN3j4CrfEJxkfGmGIT0VjIwsOujwtH5u40+o0d3xkIou6H78npG3HQvV3JapRKhHGyReR9rkenN99xMbtLGG8Og7dGRPbXP0OTvbbjGGP3ltnqu1+vt92WAkzgwsgWs2Hjh7uF420oaZqOZizk5S/OaqBLB6JuR2d78wmzQQRczcrnTVszFpubSHrGAhgSXFhn8Uzrn+YxwQ/67H4Kk8wrraVa1ja3Io4xRKP1YjwI3N5Oe1R4Ic8SuPpdofmYYM3+r1OdH0Sj28TB3hMn7e1qUU5LE6IzCmbpxK6ncftfyhKixIBr0+Fd3SZpgv0uFGex4FYkxjKAcBCkBEso6vFLJON6S13kI7HSn2olu0VcNO0zBB4wAW/RfqwnH6cPmc+3Ie0NaC2Kjn BB2IUbGC Nmq2f01fIICZztW+eIrXh4H6cCcsfjHTNY1YyvTXCGE0FN9gusARKdePnil9F7/rh984eE80Wit+Hp0kCznjWLdERxG8OJAaa+RUZCz8bfOXGx4Dd++U/UofIsrqItcq6024pKziwIktmuFlL1Kvo1obi88JM+P5fPmDTWuw/jvlFv4fhYIiCscTVulV+g1E27jbLaJpG9hvS+whd+FE0fb7psAoDMhy/JFP2vtt253pkbQ3KgxXCqhKs28pFpcxOa4ZENADv++BIxgEpxLffzo5DU05NQ9NndJsyESYbzZvOKLDAnQgmAy6DDXey89ZaGUQunO7itEtpKSH/FvN5cxRa5A== X-Bogosity: Ham, tests=bogofilter, spamicity=0.004546, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: bcachefs has its own locking around filemap_fault, so we have to make sure we do the fsnotify hook before the locking. Add the check to emit the event before the locking and return VM_FAULT_RETRY to retrigger the fault once the event has been emitted. Acked-by: Kent Overstreet Signed-off-by: Josef Bacik --- fs/bcachefs/fs-io-pagecache.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/bcachefs/fs-io-pagecache.c b/fs/bcachefs/fs-io-pagecache.c index a9cc5cad9cc9..ce7968e4fd2f 100644 --- a/fs/bcachefs/fs-io-pagecache.c +++ b/fs/bcachefs/fs-io-pagecache.c @@ -570,6 +570,10 @@ vm_fault_t bch2_page_fault(struct vm_fault *vmf) if (fdm == mapping) return VM_FAULT_SIGBUS; + ret = filemap_fsnotify_fault(vmf); + if (unlikely(ret)) + return ret; + /* Lock ordering: */ if (fdm > mapping) { struct bch_inode_info *fdm_host = to_bch_ei(fdm->host); From patchwork Wed Sep 4 20:28:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791370 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 DEF2CCD4F24 for ; Wed, 4 Sep 2024 20:30:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6AD6C6B009B; Wed, 4 Sep 2024 16:29:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 629C76B00B6; Wed, 4 Sep 2024 16:29:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4A51A6B00C6; Wed, 4 Sep 2024 16:29:44 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 222BB6B009B for ; Wed, 4 Sep 2024 16:29:44 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id D59BE1C42CD for ; Wed, 4 Sep 2024 20:29:43 +0000 (UTC) X-FDA: 82528196646.03.52904E2 Received: from mail-oi1-f173.google.com (mail-oi1-f173.google.com [209.85.167.173]) by imf20.hostedemail.com (Postfix) with ESMTP id 19E351C0009 for ; Wed, 4 Sep 2024 20:29:41 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=jznI1wXQ; spf=none (imf20.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.167.173) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481733; a=rsa-sha256; cv=none; b=fjTJNIspLGr3HxgtmouxIoAuq0IwKOmhStt9R2FrhbKkIPNUnl3VR+Q1/YVzboCw53kzkQ CbU1Maw8MTdLfmUdESrhfGbJl7WWCRm5w5kOiPH4XpzlEFLbZSIKYB0i0yWMkes2VR1dib 2HSqp+vkE5fPHDHiSjk3Gc4Nl5jWYRE= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=jznI1wXQ; spf=none (imf20.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.167.173) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481733; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=8Z8sRCIfMieTISA3wuOPUcg1dm1vDp7n73Jg7OelYjY=; b=D8Lol0cChMvIWd6TVLyJ6JJ38E/APzTkjutXamQRS1Wca+cpn2BF13eL/5CWe/NYJ+xJWV EBWfP484lgSwQX22Si0YRkOqH9ikgZEbFms5sakBSqbrK2FcMitKLjRyXJla8ORntXVXEu wCAR88LdWjnH7fNaaBD/tyi7BOZLqP8= Received: by mail-oi1-f173.google.com with SMTP id 5614622812f47-3df0ad9c791so4233174b6e.1 for ; Wed, 04 Sep 2024 13:29:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481781; x=1726086581; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=8Z8sRCIfMieTISA3wuOPUcg1dm1vDp7n73Jg7OelYjY=; b=jznI1wXQMssp6xgR5joz02j7Z3nHcNrR6jE/KyZn0+nW2s4i5pZh/L2g6yvBBSk7cQ uJCo0Ay4zkysPiNNSaKUSRNbOzS9hjBv5XlBqx+ejmZx4WzV5JIA14Jafwg9h8JS2cml lHKGUqNqu6salp2NpiJQtUlw49QAS2EFeTbWT+1hcfJG92v3hzCKyLzb3rGZbA7Hn/TZ lMVlNvjrXDcv5eZAr/cyMmmjixnStl4gi/9bLKJlMVQla2ueefKbdOY8bG+4QOjG5bxF bU7jN3e57C81q/hwEDJDPLAhhDtLUKIntwtTXlUAOtDVml+q5RdWo8VjHwslM3Y5ps1X eYgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481781; x=1726086581; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8Z8sRCIfMieTISA3wuOPUcg1dm1vDp7n73Jg7OelYjY=; b=ed4k/LuJy9hayABWxFWlQ1QZ35/1sQZxDQSh/vmdMbd2qm/uDh8AgOYahhCZQoySKA FDvuvLogad1NJKZd9WnJ2BDuc1VKQrUTSei1Z4gcPESsgaErLHhhb/Rk4agu2yI2aLXx nZSjJi1rL4XaLxStdkjzIK4AP3xrkIRoV0xUhHyv0XtE9HMr2yZwq709z7W1gpTUDJ04 w1m8YRZzNj8bSj5FZ07emtaX9OU5Ysn4QyXEvNPbODouDQ24hEdG01xeZPelclK8VSoc P2qEGkZV9NmVYtbW2D4031b4PiduviqMRUv2VqIiWnOm4UAPlm3dTUHpvNwgSdygDk35 5m0A== X-Forwarded-Encrypted: i=1; AJvYcCWvp1f2yOk9Ui7Dz7g3k/Xfh2/CnpF877kNiZPptZbbQJ5jQsNyvt71kWC8Z91rvGP8wgbOb8qdDg==@kvack.org X-Gm-Message-State: AOJu0YxrtlqQHlMzvBime1NJojWMMpzFlhgYUIGT3s+JmY9bBBNhM5I5 +OvH9TQmIQUn1W+l2lkM4t7jWOBssxk1afVOfDBUg7aEh8PUZXQsONZ03zn8Oh4= X-Google-Smtp-Source: AGHT+IETtHQ5ywMiUmPhP/0afBVUyPAVLJijgZTnYTfqkdZL3bCN8lBGOnkAyW3ORokI+fooL1bn0A== X-Received: by 2002:a05:6808:f13:b0:3e0:483:8bc1 with SMTP id 5614622812f47-3e004838dfdmr11138749b6e.43.1725481781057; Wed, 04 Sep 2024 13:29:41 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-45801cbc493sm1441111cf.69.2024.09.04.13.29.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:40 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 16/18] xfs: add pre-content fsnotify hook for write faults Date: Wed, 4 Sep 2024 16:28:06 -0400 Message-ID: <12aebe1a4f039d0234ea74393a39614c0244f7e0.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Stat-Signature: dgcxfg5fq8j79x38y39419pf5g9hdfh4 X-Rspamd-Queue-Id: 19E351C0009 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1725481781-804379 X-HE-Meta: U2FsdGVkX1/IGIVdtDxioK2DvoXR/Vn2x9cK3D6CrWhCwbz8r0S9GXKssNTbKgk29ydEgq5yrHQL3hezyZWBsMud5w1E5c1lsKYBk+55bujYMmzZtoRLH+mxo9sBO8dZ9gqFsIjKVSgcWwL7GQTRxlw2lTfMr/cuOZWP8v+wxPF6ZfQxWRRVNWB3Bk5QrKTAhQ+eYaIr3hQG8aVJokFnUeXejvdkQ2vm0fou+vGMZmP6+Wl9BB8muTxHlptRB0cy9wjpgXZae/bozPg1RPEj1W4chOF0O2iIx6UxrY2ClhAmA/KGNIZpIs0rOJmcfLmUBdreYjVRSMKm/Br7d/27QVWV/xUv8fSct8uv0bSm9dX1Ic8DqcSczepL6E8ekziP6FcvU0/YPUYLmpPctlsLIkuVhCjHvXXJozhg/6CpXrLKFg4rk26CN0pELhFe7vsgJdrsSLg+HKWpKGN31d4K4OoNc63KBc9Hyo+/h/6qLgmvpa6XnwhLoVImTuUAp8VF5GjbAS/cxR9I+MiC7ZlnK4P0HZTw12I8Zp+FmfKS/qYHn89wTQrdRahSpXbzLqnVhy2pU2DHNDNrC+giGFGYvIspc3iRbGe3O4Tj5zi39yp3Ko5xxIop4g7EfBNoQeuzvLhNZz92mioWgs2hLWRYGaoTJbn4g9x2ZxN1mw8i00hz6Je+k3+/AtYdPesTqTDIRYqyUWqlC+I6JQ632UbPIU4X37szkxNjJiy2Qz+nNWyFoYRJoCToaDenODSzJd35wTfNAOyWcKcKvI1b7fHMZtwBkiwOEol74Q9zvIXhBnGwF1XDGbTsRKLEyOWeth+ZI+C/siXfkm2jrQQII1xcdJIIz5pGpHabHto/r4n7u6X8hZqIxJnIPIZvuP12HFAq4f57ik3hE924YvPEwbvFyAx8Z5x0qc1+DuM+QB2APhcdG7Eq0FVEhx3pejotHAX2RSmSz6U32wKIxDvNtmE zuwxVuOb 1Wb59R069d4vqfFiLg8flMoIYR8S7kRmr2nierAs1EHETl8idRCp/4Iq4m92ZKFzCE2QlPmzAlZpxePMkStl2FKXJ9c0DY623xpwnkrczCJOGPocV3BYd1f99M1O5RNTVr+Hg1Pnh2G4wqS7wsskimyysW7HcGqNATymxmkqhgqu8jxj7PZRi5svA/RKNYtD2DFZnbh3yJ0vAPdQXFTtxVHSNbZDemVkqGQ6M7d5jnWvz37asXdmU1Pcjb91z46MS9ZKAi6pTKc7nXVCAt0Dmfq4HjB9AiQB8IQqNrq9BFDxTZZVRrIs2XhJcfMxGzEmU8ex3+EBEBAVK6MhbJ0Y625D1Cg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000005, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: xfs has it's own handling for write faults, so we need to add the pre-content fsnotify hook for this case. Reads go through filemap_fault so they're handled properly there. Signed-off-by: Josef Bacik --- fs/xfs/xfs_file.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 4cdc54dc9686..3e385756017f 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -1283,6 +1283,10 @@ xfs_write_fault( unsigned int lock_mode = XFS_MMAPLOCK_SHARED; vm_fault_t ret; + ret = filemap_fsnotify_fault(vmf); + if (unlikely(ret)) + return ret; + sb_start_pagefault(inode->i_sb); file_update_time(vmf->vma->vm_file); From patchwork Wed Sep 4 20:28:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791371 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 86C8BCD4F24 for ; Wed, 4 Sep 2024 20:30:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C73E56B0185; Wed, 4 Sep 2024 16:29:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BD2F46B0188; Wed, 4 Sep 2024 16:29:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A22396B0185; Wed, 4 Sep 2024 16:29:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 7C0336B0183 for ; Wed, 4 Sep 2024 16:29:45 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 3A37C160369 for ; Wed, 4 Sep 2024 20:29:45 +0000 (UTC) X-FDA: 82528196730.14.642EFF6 Received: from mail-qv1-f48.google.com (mail-qv1-f48.google.com [209.85.219.48]) by imf01.hostedemail.com (Postfix) with ESMTP id 5778E40015 for ; Wed, 4 Sep 2024 20:29:43 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=xdkUy4al; spf=none (imf01.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.48) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481686; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=k2g5nWsdtLhh4I3qKZ9kVR48Zxv3ldXz3E9kfB37E8o=; b=tlDeTWPpDav8pcYLuszR7kPL6GOkHXWvS691Wh2kEKQKJKm5oReL8JpaaxtJTbvkYlftCi pICd2cuiLeLbEHxZJF3hUuwYOVkxn2JgQi7w/qCI5vyZ8yqeh2w1CTaOecrHffwdLCG4bo QB/sybnB670m7Z6W/dZTy393tt2V7M0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481686; a=rsa-sha256; cv=none; b=WXjJAJ6sbP4+vjkCWZP67/67ggTtyJzACbnFlYZcAgFvzEW49H1whe/CN/O62JMK1/uouJ a/U63K34JxkC/0GtSqTYCgjmP7xV84t2m3ydKvL6IThGNuguUF9erccqYcmIkmwDylfQem Ke298lxNuQT/5wAh7NoyN0ZqIIxJhC4= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=xdkUy4al; spf=none (imf01.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.219.48) smtp.mailfrom=josef@toxicpanda.com; dmarc=none Received: by mail-qv1-f48.google.com with SMTP id 6a1803df08f44-6c35427935eso30226d6.3 for ; Wed, 04 Sep 2024 13:29:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481782; x=1726086582; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=k2g5nWsdtLhh4I3qKZ9kVR48Zxv3ldXz3E9kfB37E8o=; b=xdkUy4alhyudXtnV05yYnP9O0rgGPXCWpflK6Cbx0PodkhJ11WKTg8aKbvVN+JLnhL ovCcUQZ8jrAZ4SRXvBrbeJ1BudTN2PT1KbaXIMtEJkEiio7K+VZhnaeMO8D8v1EINlKM kYrp8kJb6qpD89XFFrVYMEsjmQUY7lNhSCd1rkUWpIV6w2C6H0ABRW84k1P/eVO2i7cs d6QN0CV6plHhaumy3YNUjT7sPo7FWnHKV4ELOhBb6qG7lBd44Ul/xVgrp2/uGj3tXOQM mGnVgP4w6L/Ayb5kjUiLkefIzWKb8im3j/H++giVWaBZg9wJd6378lma65sc3mUt1EP2 nuAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481782; x=1726086582; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=k2g5nWsdtLhh4I3qKZ9kVR48Zxv3ldXz3E9kfB37E8o=; b=THYP0VpoPHqvkc/mwh2bp2xBPkMOBFXTkCFozgjDnEKWqxnH8255UZlKtGNp38aq1i kuKFcSfKPXoKv+vqrZzUROAzCE0IMkquO4QhRxsfyd8W/CcjA70FxF60C3Lpye2C/fkq xDuTzxxdVJQ0jZ7+dgLUV/U7/Wl19Wo9BZPwIfuKNR3hxF2Hepy4iNusc7Qynj+BUcNA Z57YK8L/9iLgLfYCVWnWr4UHjfUxllNOG50tMLNl7SRkJ92qCLzFqMspMjF3ojzLdqpf xr3eIKqyx+R4Jt16GbVRSpIxt53Fg5IWfJXotrxEbDi8guiHWD1vynAkbM6g0K+tO5B2 FbpQ== X-Forwarded-Encrypted: i=1; AJvYcCWs2auObWIPWNlRmNhCQKinGLKtOnSiRiHUETcVZ/4NAtFk6wPCWWwwf+zthqA51pkDBD/q4SqKww==@kvack.org X-Gm-Message-State: AOJu0YzItp6oAVV7snuNbjjSTxjLhw3M9QePnvxf+ZPU+7Tv/+ks09LQ Ak68jzw1xvVhtTK3IEU7YkUTZdJNL/YJjtMPJqHLKctvcBs8KWb/eOz4tiQpJU4= X-Google-Smtp-Source: AGHT+IGcGqc27V/yp+/MPiFXZlq6o8dH/S56y18i5ffiw87nR/uugOanZlUMV6j8hRmZXaYyxJ0xkA== X-Received: by 2002:a05:6214:4a09:b0:6c3:5ebb:9524 with SMTP id 6a1803df08f44-6c35ebb9733mr193501086d6.48.1725481782473; Wed, 04 Sep 2024 13:29:42 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6c520419ecfsm1552666d6.126.2024.09.04.13.29.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:42 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 17/18] btrfs: disable defrag on pre-content watched files Date: Wed, 4 Sep 2024 16:28:07 -0400 Message-ID: <367fe83ae53839b1e88dc00b5b420035496d28ff.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Stat-Signature: orunzh9gppzxqo93w6n5o9u18o4xmkbo X-Rspamd-Queue-Id: 5778E40015 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1725481783-708665 X-HE-Meta: U2FsdGVkX183agffRDLq2Qe3HEvnbUaNGUOmWZH62MtU0YURJiP+Hh+HpUNTp5XpOtmnzF+ASr2t7ABTGGGTpjStO7lFfwmiCkBzVvB/9HS+RfgCbNj00iCxZHXRPWWC4uIS86/vwwwT9UpsldJHOSF+UD6n9NqWt9NreW7uHHQ6ljSAT4waXUfjJZJW67gqw/BNYYsZzh2O8jZxvTVc6BqbO/dqaTsKZhhlFZ4ulaKy4HwYcQ3oNrlmcGsgix0rr0JV8tb6TFD7WYlQq3HB5ql/+N+So6zTTvlCO9KauxvUXwNK+i3OtGe4Zjd2tdOga1tHEIe6uVZ/Ydnt9UfXhCdvUJ7VS16mKecsiQqgurkWrNjLpnaQP9nioW5RYsjkuoiC2zpwyRvtesZuT2RwRhEkIJPILC8Jd2Ggsh6N8F4oBYJHqO1ukW1MoHmDLhL/cTtTksJr1vYvtL2exUGgcSfupqcjsMwE+MWBMiuexdzZ6WOVitQVW2E7GY0fj9VJ/tHpk6cuyFTYhTw1QG1ui15m+tCe9Fy6kWu8TXUK9axAsmvCNxQrEYdhzEQGhuaQOZCtBdtdBZYu4/piYB6WyMNxKcBkQZIP2fYdZ9gSCvZOYQObAsoYqYKF8xYDE29wuGCg3YTbGPrmeSLjbc9jOHZR4E8hiz4uDOD1Xw6xEnPhKVPuPAT8SghY7OOy6SkS0/gKioS9WcJHayUgjwkIXkYTJPggOuD1ltMUtxCpZFdCjIM9ojjY1VjE90FEV6kXBKVEojcYD9DO+03zWJpVVt/AN1/vGMCVHVE1DU2zVyELV5DQ9bobpYF9SVk5/J4AzaZciBFu8gsD9OoY2PSrIdinqSbVJUnc6G6yC3AdTPpqHH91ZF7OBGmSeg9ssLSJ0sr9rZ5VbCV7wOcv1Fb1Ef3OWvIPK+fWLhXSNWWa3j+gq7JUrVNLqDun/4GpTd9X9xbBH4IJPlEPVtr5mj4 2jDp3qhw yTtyEcA0rdBHuE9ovXrI6TjcrJYbRcet3lSEUt85vGdDJ3r63mbXq3kUqPED3Gcz+u/Oa4ANxh0q0/P3ANbxwqyx+2o/bXRHe+KCwsXW3BxpdvspVc7oBi5ojpHFEl/RMJIjX6mGceHZNRTKiecjxWbh2htS3r0oBUSHPwRvakdyM+AbN93mRCuW8AxnWR0PU+u+Ci5wVpeDhlvGJEj1Puk2QM8D034CtuNNAduU5KqxeBKz+kN+nhB0wmJjk9WcXdAlnoq5D4m5E+Wb+as1YVUeAM6/9tDLtnaEi62o1qwQOXrw3kLkQnl0ivom4jCuy4Hu1JBRfsNR0YmeL9U7nhPdZcWckLB4DvTX8mTawe8d8PKQ= 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: We queue up inodes to be defrag'ed asynchronously, which means we do not have their original file for readahead. This means that the code to skip readahead on pre-content watched files will not run, and we could potentially read in empty pages. Handle this corner case by disabling defrag on files that are currently being watched for pre-content events. Signed-off-by: Josef Bacik --- fs/btrfs/ioctl.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index e0a664b8a46a..529f7416814f 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -2640,6 +2640,15 @@ static int btrfs_ioctl_defrag(struct file *file, void __user *argp) goto out; } + /* + * Don't allow defrag on pre-content watched files, as it could + * populate the page cache with 0's via readahead. + */ + if (fsnotify_file_has_pre_content_watches(file)) { + ret = -EINVAL; + goto out; + } + if (argp) { if (copy_from_user(&range, argp, sizeof(range))) { ret = -EFAULT; From patchwork Wed Sep 4 20:28:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791372 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 DBC52CD4F24 for ; Wed, 4 Sep 2024 20:30:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 78C4C6B0199; Wed, 4 Sep 2024 16:29:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6EBED6B019B; Wed, 4 Sep 2024 16:29:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5418E6B019F; Wed, 4 Sep 2024 16:29:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 237B26B0199 for ; Wed, 4 Sep 2024 16:29:47 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id D625F160369 for ; Wed, 4 Sep 2024 20:29:46 +0000 (UTC) X-FDA: 82528196772.05.0BCAD23 Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172]) by imf21.hostedemail.com (Postfix) with ESMTP id 05ECA1C0007 for ; Wed, 4 Sep 2024 20:29:44 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=wLAiLQl2; spf=none (imf21.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.160.172) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481737; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Eq+9jML2+1Z0SY+HFrzR7GffDKDG9jp4/RSk9gnr/bU=; b=zx6n6hyHtx/7kETAye5xDkriiUSLG+3EFhQDAWGVnw1eXGfWAYtEi6rH81qEeyUdp+WQE5 rSjFsG0K0v1DVTtdDcW9L8uwKK8tvxQy1mNPbBZc5eSpR+/t4mqvujUzrp4BKHUuMGCFoM wuon1PQmSrhPHM5+eLgE+mkmWgG7MJA= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=wLAiLQl2; spf=none (imf21.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.160.172) smtp.mailfrom=josef@toxicpanda.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481737; a=rsa-sha256; cv=none; b=sABGKbSYD6D92GswtiUNarErnFH+6u1lChqVVBCU0/+nqISuPTY3Jyq6qE8RWGKlLOlm++ 6gU+GuUiOMYk8gO5wnQW8jZpYZq4H8ArRWeZwz4zRMZl60x2mZJNpZvGwdHusn40NLPVBp 7TLcDFxBgNBagvDqXCLY3ClOtT7IiJ4= Received: by mail-qt1-f172.google.com with SMTP id d75a77b69052e-456954d0396so174911cf.3 for ; Wed, 04 Sep 2024 13:29:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481784; x=1726086584; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Eq+9jML2+1Z0SY+HFrzR7GffDKDG9jp4/RSk9gnr/bU=; b=wLAiLQl21dZBrBYhvjfSvkwcgjlwiiDY0ekHVLN7dybqXtDS7zr1dhMXockSNb3bKK 6kzBU65emz4LstEgM8DN6vji4sTOILWXY1mqjhCAm/twksQ7JHvDWJEpp+bphr2VuHbr O6lyE6uMeWFKuPpt6FrIpZTTP15KaefzRpMe+a93BcwylPsjrJozKgcYDsa0TrO3+y7c viDA6DHIa32AKj3C1S0+x3dS8Ir2kbQcTmB3tL9D3ng7Q8L0/DyzsNmhuEjwCkVdOoBZ Vkm4ezqyyA8570etfJZqNoDz2wafSBhVr0VBgJpnIe55MW+VmA7T5Yw//0X1LpTFmae6 7VtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481784; x=1726086584; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Eq+9jML2+1Z0SY+HFrzR7GffDKDG9jp4/RSk9gnr/bU=; b=Nde3+Pjm7sfXTcvvjM5mdE7UvBLfMkszScxOpa9/7SB5TzheC/Sq06y3JxsyaZyfvz xcVDXAo4Efda6wLifhZNABCI4M5UrwuILrFeAmjcJOOheF5U0f0evpwCzL3Nf7Gc94ia NMb34lPK7rW2VYcsWEJ1KhRmNlVTe+9kdqKe1/q00Q1st4MKKN3BQzioFcRKfutD2v2u /sekOnuvpUEL1IPmR146tsGfYVNXPRNvAMcbov48V4o2rW3t02TuWpix9j0bSpL31ZGZ +R6W1Tncnx71pOP2ss5MjqgN/f7CtKj1GEwOlNlSv3eAMs1S3n9FxKBdSI9SjtR9b6BT ccow== X-Forwarded-Encrypted: i=1; AJvYcCWW/1fOVpU2T9GsHwEwVt5Rkiy8NVHXqBQVj6tbNTk+k6zsoETFd5VyRI3Eifn038du21DNGLgghg==@kvack.org X-Gm-Message-State: AOJu0YwKMn6neq6uQ73o2b4+M4OCHL0qRvXRgwq4+9shEjyx46WwGkDr xhrcPztCatl/hM1m4xExIEnrW/uCa32MD1y02oYqCLG8UNiomBfGkW4RYf4sVfQ= X-Google-Smtp-Source: AGHT+IEW2/ZH57qdIHT1xYE99y1ro7rMeuspqZzclDk+WG9y2YYBgpGHJd3Dr2WZ9zk9cnANiDJM0Q== X-Received: by 2002:a05:622a:993:b0:456:87c1:59c7 with SMTP id d75a77b69052e-4571a013180mr198617071cf.57.1725481784189; Wed, 04 Sep 2024 13:29:44 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-45801b5312bsm1502351cf.44.2024.09.04.13.29.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:43 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 18/18] fs: enable pre-content events on supported file systems Date: Wed, 4 Sep 2024 16:28:08 -0400 Message-ID: <33151057684a62a89b45466d53671c6232c34a68.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspamd-Server: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: 05ECA1C0007 X-Stat-Signature: ocyxunw397n6itaidjqrixas3dm9rdwm X-HE-Tag: 1725481784-482122 X-HE-Meta: U2FsdGVkX1+Druqzlbu9r4GMBj2mSlNlMJs0leqFv5iRHAOB1yOyS7bAmG8orN4b0teL+v5AE9chLkb9JVhSbY9YnMT2+8k9PuUl0kbPEwSFm00nRZH/P0B6dPfFv5EK+T47effv31Bm1nAriAeRTEOLXs+YAQU4Oo3GzA4bxrJupO6l9SV6RnjBkAQkxLn74LAAEOY9/I2czA5rfBrcD4PmQu5PUN1khhxbaYRGt/QZmsDGQ05ujn3gmnbh5fKMXZRRSrL+j3+V9gQW+V/M+ZMzVoFUaUGvIBMaSNBwW+gDGlGsOTakBHb87Pwu67b02qmyo5PgPGPdOcX5qOvLo7z9Ai1FL347J5Trn41Xok+YI8nhhLMs6K6JBJslm05EWqdJLTZj7qqqf7pjnIzXSpsIRP1XLQNXlhBGArflThpvozFk8SQG5rs9AdglN6xxQDjFUMie3K8vpW3S1FUBcCl4z6xPfmRw0fW7vbB6d/FVDEIOX/vSvLelFg+FJY8bdIRm4Lzz3iKdpzmCeZDox94ZoBVklK05tlN1ZVGFuE4RsqFZSeZ2rMV0SKRmVObrMdvx1w+pwPLO6A0lOQZTl5u8youbQaiFW+laVWV7Xs29o0AL/ZM/g8KtysjzLppMAvHLQqCUU0C0a1xa69r/sF7g/4kDqII3DU2ZV680lAPEn+2eqly67Z6d90MLvQF/GoBkYrbHRKgc5tMTgDVf7vvRVvxPPZkW4DB/ihGsYqRieR/EGCTL4oz9ag7w97YuLNVfkvoYfuxJoceo2ULeaet1UtW75sIyNkpH7cjepEytgzr+k6B9sLMnFXgfFEGhfoUOZ56+T/KhQmx8TQNf4cRZGh+G4L5p/bE1svDarOZ7FQ+xNB9FZgUNxLho/FaohzNLvqgox2q7VnABOWPZfWdM9Ddvk79a2H3GH1Wx8bh/te80RDxS6n3bqUZ1ITey728x++OdpQhTsGJxd89 cGtKrtTJ HR024lCpLJaRwva+dslLf1jcrlRt7u3F4Kb7zC8MOTAvRIZtxmVMxPbi/x1ntQ+zF8J1lSBqM3ic+epPRUZXwxrP6FdxRBj0eHsWSCgVJS6eM+SUX4Z8Ezxif/7goKDwgZv7cX+ILU895Lp2LEhAGr3naI1kPflUPZMNFVtuEwSAxhQLF881nlppveFkBFzcAcbwCUujnAM0unUDKejcui1yLN8EXmlYtz+aJ6DgOWFO+RYP+cs0Hvbo3XtZCh5an5KLizjdfCfd7odH89EnmBNzLXPd2ZLsH1V6Mn8lDrL9hztXNLzon/h+rbu97Fjsx8gCPCl2qYhvn7JBKSO+QhsaWtxhx+SjM0zUtXq91Wygfh61qeQnHousGig== 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: Now that all the code has been added for pre-content events, and the various file systems that need the page fault hooks for fsnotify have been updated, add FS_ALLOW_HSM to the currently tested file systems. Signed-off-by: Josef Bacik --- fs/bcachefs/fs.c | 2 +- fs/btrfs/super.c | 3 ++- fs/ext4/super.c | 6 +++--- fs/xfs/xfs_super.c | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/fs/bcachefs/fs.c b/fs/bcachefs/fs.c index 3a5f49affa0a..f889a105643b 100644 --- a/fs/bcachefs/fs.c +++ b/fs/bcachefs/fs.c @@ -2124,7 +2124,7 @@ static struct file_system_type bcache_fs_type = { .name = "bcachefs", .init_fs_context = bch2_init_fs_context, .kill_sb = bch2_kill_sb, - .fs_flags = FS_REQUIRES_DEV, + .fs_flags = FS_REQUIRES_DEV | FS_ALLOW_HSM, }; MODULE_ALIAS_FS("bcachefs"); diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 0eda8c21d861..201ed90a6083 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -2193,7 +2193,8 @@ static struct file_system_type btrfs_fs_type = { .init_fs_context = btrfs_init_fs_context, .parameters = btrfs_fs_parameters, .kill_sb = btrfs_kill_super, - .fs_flags = FS_REQUIRES_DEV | FS_BINARY_MOUNTDATA | FS_ALLOW_IDMAP, + .fs_flags = FS_REQUIRES_DEV | FS_BINARY_MOUNTDATA | + FS_ALLOW_IDMAP | FS_ALLOW_HSM, }; MODULE_ALIAS_FS("btrfs"); diff --git a/fs/ext4/super.c b/fs/ext4/super.c index e72145c4ae5a..a042216fb370 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -137,7 +137,7 @@ static struct file_system_type ext2_fs_type = { .init_fs_context = ext4_init_fs_context, .parameters = ext4_param_specs, .kill_sb = ext4_kill_sb, - .fs_flags = FS_REQUIRES_DEV, + .fs_flags = FS_REQUIRES_DEV | FS_ALLOW_HSM, }; MODULE_ALIAS_FS("ext2"); MODULE_ALIAS("ext2"); @@ -153,7 +153,7 @@ static struct file_system_type ext3_fs_type = { .init_fs_context = ext4_init_fs_context, .parameters = ext4_param_specs, .kill_sb = ext4_kill_sb, - .fs_flags = FS_REQUIRES_DEV, + .fs_flags = FS_REQUIRES_DEV | FS_ALLOW_HSM, }; MODULE_ALIAS_FS("ext3"); MODULE_ALIAS("ext3"); @@ -7298,7 +7298,7 @@ static struct file_system_type ext4_fs_type = { .init_fs_context = ext4_init_fs_context, .parameters = ext4_param_specs, .kill_sb = ext4_kill_sb, - .fs_flags = FS_REQUIRES_DEV | FS_ALLOW_IDMAP, + .fs_flags = FS_REQUIRES_DEV | FS_ALLOW_IDMAP | FS_ALLOW_HSM, }; MODULE_ALIAS_FS("ext4"); diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 27e9f749c4c7..04a6ec7bc2ae 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -2052,7 +2052,7 @@ static struct file_system_type xfs_fs_type = { .init_fs_context = xfs_init_fs_context, .parameters = xfs_fs_parameters, .kill_sb = xfs_kill_sb, - .fs_flags = FS_REQUIRES_DEV | FS_ALLOW_IDMAP, + .fs_flags = FS_REQUIRES_DEV | FS_ALLOW_IDMAP | FS_ALLOW_HSM, }; MODULE_ALIAS_FS("xfs");