From: Dave Chinner <david@fromorbit.com>
To: ira.weiny@intel.com
Cc: linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org,
"Darrick J. Wong" <darrick.wong@oracle.com>,
Al Viro <viro@zeniv.linux.org.uk>, Jan Kara <jack@suse.cz>,
Dan Williams <dan.j.williams@intel.com>,
Christoph Hellwig <hch@lst.de>,
"Theodore Y. Ts'o" <tytso@mit.edu>,
Jeff Moyer <jmoyer@redhat.com>,
linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-api@vger.kernel.org
Subject: Re: [PATCH V10 10/11] fs: Introduce DCACHE_DONTCACHE
Date: Fri, 24 Apr 2020 08:57:34 +1000 [thread overview]
Message-ID: <20200423225734.GY27860@dread.disaster.area> (raw)
In-Reply-To: <20200422212102.3757660-11-ira.weiny@intel.com>
On Wed, Apr 22, 2020 at 02:21:01PM -0700, ira.weiny@intel.com wrote:
> From: Ira Weiny <ira.weiny@intel.com>
>
> DCACHE_DONTCACHE indicates a dentry should not be cached on final
> dput().
>
> Also add a helper function to mark DCACHE_DONTCACHE on all dentries
> pointing to a specific inode when that inode is being set I_DONTCACHE.
>
> This facilitates dropping dentry references to inodes sooner which
> require eviction to swap S_DAX mode.
>
> Cc: Al Viro <viro@zeniv.linux.org.uk>
> Signed-off-by: Ira Weiny <ira.weiny@intel.com>
Code looks fine....
> --- a/fs/inode.c
> +++ b/fs/inode.c
> @@ -1526,6 +1526,21 @@ int generic_delete_inode(struct inode *inode)
> }
> EXPORT_SYMBOL(generic_delete_inode);
>
> +void mark_inode_dontcache(struct inode *inode)
> +{
> + struct dentry *de;
> +
> + spin_lock(&inode->i_lock);
> + hlist_for_each_entry(de, &inode->i_dentry, d_u.d_alias) {
> + spin_lock(&de->d_lock);
> + de->d_flags |= DCACHE_DONTCACHE;
> + spin_unlock(&de->d_lock);
> + }
> + inode->i_state |= I_DONTCACHE;
> + spin_unlock(&inode->i_lock);
> +}
> +EXPORT_SYMBOL(mark_inode_dontcache);
Though I suspect that this should be in fs/dcache.c and not
fs/inode.c. i.e. nothing in fs/inode.c does dentry list walks, but
there are several cases in the dcache code where inode dentry walks
are done under the inode lock (e.g. d_find_alias(inode)).
So perhaps this should be d_mark_dontcache(inode), which also marks
the inode as I_DONTCACHE so that everything is evicted on last
reference...
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2020-04-23 22:57 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-22 21:20 [PATCH V10 00/11] XFS - Enable per-file/per-directory DAX operations V10 ira.weiny
2020-04-22 21:20 ` [PATCH V10 01/11] fs/xfs: Remove unnecessary initialization of i_rwsem ira.weiny
2020-04-22 21:20 ` [PATCH V10 02/11] fs: Remove unneeded IS_DAX() check in io_is_direct() ira.weiny
2020-04-23 21:41 ` Dave Chinner
2020-04-22 21:20 ` [PATCH V10 03/11] fs/stat: Define DAX statx attribute ira.weiny
2020-04-22 21:20 ` [PATCH V10 04/11] Documentation/dax: Update Usage section ira.weiny
2020-04-23 2:33 ` Yasunori Goto
2020-04-23 5:05 ` Ira Weiny
2020-04-23 22:27 ` Dave Chinner
2020-04-23 23:25 ` Ira Weiny
2020-04-24 2:15 ` Dave Chinner
2020-04-24 5:55 ` Ira Weiny
2020-04-22 21:20 ` [PATCH V10 05/11] fs/xfs: Change XFS_MOUNT_DAX to XFS_MOUNT_DAX_ALWAYS ira.weiny
2020-04-23 22:27 ` Dave Chinner
2020-04-22 21:20 ` [PATCH V10 06/11] fs/xfs: Make DAX mount option a tri-state ira.weiny
2020-04-23 22:35 ` Dave Chinner
2020-04-23 23:33 ` Ira Weiny
2020-04-22 21:20 ` [PATCH V10 07/11] fs/xfs: Create function xfs_inode_should_enable_dax() ira.weiny
2020-04-23 22:36 ` Dave Chinner
2020-04-22 21:20 ` [PATCH V10 08/11] fs/xfs: Combine xfs_diflags_to_linux() and xfs_diflags_to_iflags() ira.weiny
2020-04-23 22:37 ` Dave Chinner
2020-04-22 21:21 ` [PATCH V10 09/11] fs: Lift XFS_IDONTCACHE to the VFS layer ira.weiny
2020-04-23 22:38 ` Dave Chinner
2020-04-22 21:21 ` [PATCH V10 10/11] fs: Introduce DCACHE_DONTCACHE ira.weiny
2020-04-23 8:40 ` Jan Kara
2020-04-23 22:57 ` Dave Chinner [this message]
2020-04-23 23:38 ` Ira Weiny
2020-04-22 21:21 ` [PATCH V10 11/11] fs/xfs: Update xfs_ioctl_setattr_dax_invalidate() ira.weiny
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200423225734.GY27860@dread.disaster.area \
--to=david@fromorbit.com \
--cc=dan.j.williams@intel.com \
--cc=darrick.wong@oracle.com \
--cc=hch@lst.de \
--cc=ira.weiny@intel.com \
--cc=jack@suse.cz \
--cc=jmoyer@redhat.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=tytso@mit.edu \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.