Re: Questions about FUSE_NOTIFY_INVAL_ENTRY
From: Miklos Szeredi <miklos@szeredi.hu>
Date: 2025-08-20 08:55:25
Also in:
kvm, linux-fsdevel
From: Miklos Szeredi <miklos@szeredi.hu>
Date: 2025-08-20 08:55:25
Also in:
kvm, linux-fsdevel
On Wed, 20 Aug 2025 at 01:35, Jim Harris [off-list ref] wrote:
Can we safely depend on the FUSE_NOTIFY_INVAL_ENTRY notifications to trigger FORGET commands for the associated inodes? If not, can we consider adding a new FUSE_NOTIFY_DROP_ENTRY notification that would ask the kernel to release the inode and send a FORGET command when memory pressure or clean-up is needed by the device?
As far as I understand what you want is drop the entry from the cache *if it is unused*. Plain FUSE_NOTIFY_INVAL_ENTRY will unhash the dentry regardless of its refcount, of course FORGET will be sent only after the reference is released. FUSE_NOTIFY_INVAL_ENTRY with FUSE_EXPIRE_ONLY will do something like your desired FUSE_NOTIFY_DROP_ENTRY operation, at least on virtiofs (fc->delete_stale is on). I notice there's a fuse_dir_changed() call regardless of FUSE_EXPIRE_ONLY, which is not appropriate for the drop case, this can probably be moved inside the !FUSE_EXPIRE_ONLY branch. The other question is whether something more efficient should be added. E.g. FUSE_NOTIFY_SHRINK_LOOKUP_CACHE with a num_drop argument that tells fuse to try to drop this many unused entries? Thanks, Miklos