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 __ */