Re: [PATCH] fuse: respect FOPEN_KEEP_CACHE on opendir

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 1/1/25 14:00, Amir Goldstein wrote:
> The re-factoring of fuse_dir_open() missed the need to invalidate
> directory inode page cache with open flag FOPEN_KEEP_CACHE.
> 
> Fixes: 7de64d521bf92 ("fuse: break up fuse_open_common()")
> Reported-by: Prince Kumar <princer@xxxxxxxxxx>
> Closes: https://lore.kernel.org/linux-fsdevel/CAEW=TRr7CYb4LtsvQPLj-zx5Y+EYBmGfM24SuzwyDoGVNoKm7w@xxxxxxxxxxxxxx/
> Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx>
> ---
> 
> Miklos,
> 
> I verified the fix using:
> passthrough_ll -d -o source=/src,cache=always /mnt
> 
> and watching debug prints from repeating 'ls /mnt' invocations.
> 
> With current upstream, dir cache is kept even though passthrough_ll
> never sets keep_cache in opendir.
> 
> passthrough_hp always set keep_cache together with cache_readdir,
> so it could not have noticed this regression.
> 
> I've modified passthrough_ll as follows to test the keep_cache flag:
> 
>         fi->fh = (uintptr_t) d;
> <       if (lo->cache == CACHE_ALWAYS)
>>       if (lo->cache != CACHE_NEVER)
>                 fi->cache_readdir = 1;
>>       if (lo->cache == CACHE_ALWAYS)
>>               fi->keep_cache = 1;
>         fuse_reply_open(req, fi);
>         return;
> 
> Thanks,
> Amir.
> 
> diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
> index 494ac372ace07..e540d05549fff 100644
> --- a/fs/fuse/dir.c
> +++ b/fs/fuse/dir.c
> @@ -1681,6 +1681,8 @@ static int fuse_dir_open(struct inode *inode, struct file *file)
>  		 */
>  		if (ff->open_flags & (FOPEN_STREAM | FOPEN_NONSEEKABLE))
>  			nonseekable_open(inode, file);
> +		if (!(ff->open_flags & FOPEN_KEEP_CACHE))
> +			invalidate_inode_pages2(inode->i_mapping);
>  	}
>  
>  	return err;

LGTM. Thanks for the quick fix Amir, especially during holidays!

Reviewed-by: Bernd Schubert <bernd.schubert@xxxxxxxxxxx>




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux