From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D5638D7877B for ; Thu, 21 Nov 2024 16:01:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 34EDB6B007B; Thu, 21 Nov 2024 11:01:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2FEAD6B0082; Thu, 21 Nov 2024 11:01:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1C6556B0088; Thu, 21 Nov 2024 11:01:31 -0500 (EST) 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 F2B846B007B for ; Thu, 21 Nov 2024 11:01:30 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 89D8A141483 for ; Thu, 21 Nov 2024 16:01:30 +0000 (UTC) X-FDA: 82810566636.14.2E24EDC Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) by imf18.hostedemail.com (Postfix) with ESMTP id 420B41C000B for ; Thu, 21 Nov 2024 16:01:04 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=IMzYQ0ZJ; spf=pass (imf18.hostedemail.com: domain of amir73il@gmail.com designates 209.85.218.46 as permitted sender) smtp.mailfrom=amir73il@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1732204683; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=/D7HID2373t79vMCmeYvvZaFKSvpWPkH3dxYYPJQ+KQ=; b=QEWfDSYlfTYL/FLebBLusu6Z0TdufiZdUB/9a/8wsvmGjdal9nGcM3HHke0pYQWGEXsurq UoC2cdI47qYWpRP8cpniYe/1dj9hlZMJ0bhMe8gUJ3wA8wDdgJ4dhnxwPkBA9Bl81LbcFG 1hOmVJ+PwSCOp4lHCTEFvVSA4n2J5Io= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=IMzYQ0ZJ; spf=pass (imf18.hostedemail.com: domain of amir73il@gmail.com designates 209.85.218.46 as permitted sender) smtp.mailfrom=amir73il@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1732204683; a=rsa-sha256; cv=none; b=qrZI7by0yGWP9o1LuQHHos4W7zAeFaFIKzq+hzqbhNLaKys4fHwacTUKgdYHIqAo1IFnQd VorkAu50Jg3pSbvexmuxXjv7vgMHQ/iqqAW8s96Nbl4UCNl/lZGolTDH70ShU91C/t2E4a JSwXXhgibk/NSVUy7dN9Idh5DW/fZI8= Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-a99eb8b607aso136489366b.2 for ; Thu, 21 Nov 2024 08:01:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1732204886; x=1732809686; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=/D7HID2373t79vMCmeYvvZaFKSvpWPkH3dxYYPJQ+KQ=; b=IMzYQ0ZJ7Jd40AQGrbBf9xhoM2c97UjQDFBI/91ebHzlPNnFQeccJpdrYmx3bb322Y 0N/bYHvxoXFsYfNraB4MoDfieehfaop+FEXNef1QkyQJDj/v49D3WWq8aidm8s6HPYgT Y6iWI8ec8/RD4dPdSZiXIen6F9p2QRDFA0DZP3MmAU+7O4/fjp9LlnPyfPvYwCpp96X8 bstp1GbJxNAYNeER6tG5PN6cW7/hPIZDjng451ZgXc/KIJfnO81J0k8lmhWcAWmZLje0 OatupSUJmne9lllyown92AiLaesEQ3KjBAB1SvV8P3fmRSfXKa420EKH7mXrK/JGbUiQ 0ojQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732204886; x=1732809686; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/D7HID2373t79vMCmeYvvZaFKSvpWPkH3dxYYPJQ+KQ=; b=sPeFn1hFHfjmR8HDoeIaoCGvz9m+zVsz2WL37s5FfJG29216hR+YR5x25B4QOXDQsG Cl/5o1NxtPsGwConqgWFs+cVS+rPVIowM4bUhu23Pk/iTVSCuauGrHnAE2VNzeMjwzYq 7OWmXrTZUkY+ioQRZ30zWEln6Qid/dEVIFpAj1FT779fn6rGMe6uqHEsoxYkVERtSfI1 6uJf4rDV05LtpOQbp4NxRoWZTACkWtXP16JLcD2OX1YdX3o+k3758cLnU4cWmc35k9nG Y4uYuB6dVuf9xMdJ+wBurkmWgZjdKZknq2n8IZRWtiNMubmm66RtUo8wkOd4NNtakPOA pT+w== X-Forwarded-Encrypted: i=1; AJvYcCWENsJSaxF19bc4yDDLHxgAdti9SczXdHYCU6Ln39ParFuXZEbjXd1x4hFGmoDKBhZ8SJ008tNHyg==@kvack.org X-Gm-Message-State: AOJu0YzK0+JxmYfY7wb6v+FO6xh3UvaPcZNPPzblQLNkEXa871TsM0Hw FYE2LtwEfSx0w96TLSJH8/wWTyAbfiFJ/Bdrgv0ivZOF2kxZmgaJ++1SV0n6GrOL7c6/jIetuKr 0yPJIarfuh/7OcvTBzRj59IHza7o= X-Gm-Gg: ASbGnctO/hxYJlcDpWhr/yj0h2JGKOkR3hMn1A8Cfp4cHmfc+3vd4SyLdNbjoowLcVo 6xgQlyexsF5+25csCVZSrdHGlH0mzfus= X-Google-Smtp-Source: AGHT+IHdxsoaDROzQG8qEj5x/K+j8d0Op0HAfKhZzlzLbAAPgZOVvmKuZZFzk9WC4mWx+/oxlwIOMbxa3djrhsRAlko= X-Received: by 2002:a17:907:9281:b0:aa1:f73b:be3d with SMTP id a640c23a62f3a-aa4dd56aa50mr737837466b.27.1732204884517; Thu, 21 Nov 2024 08:01:24 -0800 (PST) MIME-Version: 1.0 References: <20241121112218.8249-1-jack@suse.cz> <20241121112218.8249-4-jack@suse.cz> In-Reply-To: <20241121112218.8249-4-jack@suse.cz> From: Amir Goldstein Date: Thu, 21 Nov 2024 17:01:13 +0100 Message-ID: Subject: Re: [PATCH 03/19] fsnotify: check if file is actually being watched for pre-content events on open To: Jan Kara Cc: linux-fsdevel@vger.kernel.org, Josef Bacik , brauner@kernel.org, Linus Torvalds , Al Viro , linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 420B41C000B X-Stat-Signature: 1dt6zwfn8375f3nzudtf8i3d3r61fiuk X-Rspam-User: X-HE-Tag: 1732204864-878954 X-HE-Meta: U2FsdGVkX1+CepMOVCIrzSwHCG79dIM1KQXE7J59oWjxS3fvjXcTU1x2I9DMt99q+A2lx5vZm632uAqSvIDBaXfwetFLhvP2oQyRMtzNiCYaIm3/+OZwrJmPKu9R6q3r6g4XEQjOVGR5jbVbYgvWEn22LSuFN89H2gZ+TBmvjRjGHC2wzuyMmb0fqBJSMTJ2t0kRebnVJ9ZdRVwHKgFrdSWVKyqcyRGnuuWgF3GCHkVR9DeNdqPZPeMM7DBT946+mv6vG9esfsOxr3bD6DuIg2FgMsI1dJXhJf6AJq3mk7vfuMfB4lpdWBnU+UbdyJW3HP6mN1ftB/IXkOHYn/rC1gVk/9XdQU8MqbhGA5v7t3yYRU3AgfQSgcoQgebCanwWffU7CuwWOddVAOVoecM3FOoUqP26sEygJwRef0vpFbB2UAmYIsxo1WF9vpvvK5J54m1ax94RYiJoGFUpnSuQ2UVNANnXYs0Tw35GoLAqXE+TzXltbGNkFoRBGe0eFsLuTEnfAd0li6jhn18NC0+8SaUmRaTxYq/B2TegSkNm9cpe++EHDt1zclE3Uc57fo/JEr3xW2YFuY7lM+7o3rOIfDU/fc9Hdtr2ibz0DrkNmoh+mSlY4FPZXjhTnJU7ZD+aR2C/DHfCn/zMvGvs4ResEKwFNPu48Q8ZiB0W8z/HXZzfZfbitmpH14X9YLmJbrSHFDSEmD1fqP7sv6Qzad7+NkapoBaEs6iZSq54XEVMNi0RifZi0X+0z3e2UBCAT0LctYXvWQhzRgPLvn1pa59yp9spqc+Q7CkbVXTlPT7+RHxXR7XjMDdE2eM1dPFsRbq20EL9jeo714+r70z9dmGEuYGtqgV4zi6aZLKCo2BRoL0gmWr/UPTKDhEr5xPIElAQkXQ/NBJaguf9viCWLVPkh9JCnjg1jPIUEMUyPgOlf2MWWC6MHzzO3T2Ay2OlvdTAoaegpNhF+w4SajO60cy G+vBiP1l Ji8/FshMsd5xzYVcRa8PgNVZHCwimNYhQbb3X6reOcF3zo4TMqBzjoz03qZgNdtmQHzdCljsC8olp2vhuils8M3ERppvk0yfgx2Y9HnNnHvVNuGijuet5oKgClinwoBeNDStAviUabm6r0Frv2fXiH0vYZ/T8vA0R+Zfr+9YdA41Di6M/Ea1UAQjNwhkQXX7+cI6aWokrJPL9p9s2kgp4PhRlQDuGsPS59stTirNw9st6fQriWZn7cOvfOIRInymd6lTgot2A7U+lZ27s8dBDaCXlUv9KXdun+Je2Xu/WAOpVwnqUBdZuZj88ksLMqmmGQ1A6p4dlAeIlfG34lumlgK/DQJyFK7HE2f6sy5XDQaiUkfIwL6eNEraFNmHa003lXohUeapKCEBqBuGTbFBWfawJ8uTd7LyOn7FuWEz8ZLI4gRp01G7nWFHZDxC+ydhsob1V2PY/4Rcrf/Cy4Fm8RHE7R5mOxdPJoLV5+0VFrNkbO0+8zFZRcWBGHbxGG/d5HZceNR4hB0dqCWw= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000014, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Thu, Nov 21, 2024 at 12:22=E2=80=AFPM Jan Kara wrote: > > From: Amir Goldstein > > So far, we set FMODE_NONOTIFY_ flags at open time if we know that there > are no permission event watchers at all on the filesystem, but lack of > FMODE_NONOTIFY_ flags does not mean that the file is actually watched. > > For pre-content events, it is possible to optimize things so that we > don't bother trying to send pre-content events if file was not watched > (through sb, mnt, parent or inode itself) on open. Set FMODE_NONOTIFY_ > flags according to that. > > Signed-off-by: Amir Goldstein > Signed-off-by: Jan Kara > Link: https://patch.msgid.link/2ddcc9f8d1fde48d085318a6b5a889289d8871d8.1= 731684329.git.josef@toxicpanda.com > --- > fs/notify/fsnotify.c | 27 +++++++++++++++++++++++++-- > include/linux/fsnotify_backend.h | 3 +++ > 2 files changed, 28 insertions(+), 2 deletions(-) > > diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c > index 569ec356e4ce..dd1dffd89fd6 100644 > --- a/fs/notify/fsnotify.c > +++ b/fs/notify/fsnotify.c > @@ -193,7 +193,7 @@ static bool fsnotify_event_needs_parent(struct inode = *inode, __u32 mnt_mask, > return mask & marks_mask; > } > > -/* Are there any inode/mount/sb objects that are interested in this even= t? */ > +/* Are there any inode/mount/sb objects that watch for these events? */ > static inline bool fsnotify_object_watched(struct inode *inode, __u32 mn= t_mask, > __u32 mask) > { > @@ -632,7 +632,9 @@ EXPORT_SYMBOL_GPL(fsnotify); > */ > void file_set_fsnotify_mode(struct file *file) > { > - struct super_block *sb =3D file->f_path.dentry->d_sb; > + struct dentry *dentry =3D file->f_path.dentry, *parent; > + struct super_block *sb =3D dentry->d_sb; > + __u32 mnt_mask, p_mask; > > /* Is it a file opened by fanotify? */ > if (FMODE_FSNOTIFY_NONE(file->f_mode)) > @@ -658,6 +660,27 @@ void file_set_fsnotify_mode(struct file *file) > file->f_mode |=3D FMODE_NONOTIFY | FMODE_NONOTIFY_PERM; > return; > } This was lost in translation: @@ -672,8 +672,10 @@ void file_set_fsnotify_mode(struct file *file) /* * If there are permission event watchers but no pre-content event * watchers, set FMODE_NONOTIFY | FMODE_NONOTIFY_PERM to indicate t= hat. + * Pre-content events are only reported for regular files and dirs. */ - if (likely(!fsnotify_sb_has_priority_watchers(sb, + if ((!d_is_dir(dentry) && !d_is_reg(dentry)) || + likely(!fsnotify_sb_has_priority_watchers(sb, FSNOTIFY_PRIO_PRE_CONTENT))= ) { file->f_mode |=3D FMODE_NONOTIFY | FMODE_NONOTIFY_PERM; return; > + > + /* > + * OK, there are some pre-content watchers. Check if anybody can = be > + * watching for pre-content events on *this* file. > + */ > + mnt_mask =3D READ_ONCE(real_mount(file->f_path.mnt)->mnt_fsnotify= _mask); > + if (likely(!(dentry->d_flags & DCACHE_FSNOTIFY_PARENT_WATCHED) && > + !fsnotify_object_watched(d_inode(dentry), mnt_mask, > + FSNOTIFY_PRE_CONTENT_EVENTS))) { > + file->f_mode |=3D FMODE_NONOTIFY | FMODE_NONOTIFY_PERM; > + return; > + } > + > + /* Even parent is not watching for pre-content events on this fil= e? */ > + parent =3D dget_parent(dentry); > + p_mask =3D fsnotify_inode_watches_children(d_inode(parent)); > + dput(parent); > + if (!(p_mask & FSNOTIFY_PRE_CONTENT_EVENTS)) { > + file->f_mode |=3D FMODE_NONOTIFY | FMODE_NONOTIFY_PERM; > + return; > + } inlining broke the logic and your branch fails the new PRE_ACCESS test cases of fanotify03 LTP test (now pushed to branch fan_hsm). Specifically in the test case that fails, parent is not watching and inode is watching pre-content and your code gets to the p_mask test and marks this file as no-pre-content watchers. This passes the test: @@ -684,17 +686,18 @@ void file_set_fsnotify_mode(struct file *file) * watching for pre-content events on *this* file. */ mnt_mask =3D READ_ONCE(real_mount(file->f_path.mnt)->mnt_fsnotify_m= ask); - if (likely(!(dentry->d_flags & DCACHE_FSNOTIFY_PARENT_WATCHED) && - !fsnotify_object_watched(d_inode(dentry), mnt_mask, - FSNOTIFY_PRE_CONTENT_EVENTS))) { - file->f_mode |=3D FMODE_NONOTIFY | FMODE_NONOTIFY_PERM; + if (unlikely(fsnotify_object_watched(d_inode(dentry), mnt_mask, + FSNOTIFY_PRE_CONTENT_EVENTS)))= { return; } /* Even parent is not watching for pre-content events on this file?= */ - parent =3D dget_parent(dentry); - p_mask =3D fsnotify_inode_watches_children(d_inode(parent)); - dput(parent); + p_mask =3D 0; + if (unlikely(dentry->d_flags & DCACHE_FSNOTIFY_PARENT_WATCHED)) { + parent =3D dget_parent(dentry); + p_mask =3D fsnotify_inode_watches_children(d_inode(parent))= ; + dput(parent); + } if (!(p_mask & FSNOTIFY_PRE_CONTENT_EVENTS)) { file->f_mode |=3D FMODE_NONOTIFY | FMODE_NONOTIFY_PERM; return; Thanks, Amir.