Re: [PATCH 1/9] NFSv4: Don't invalidate the directory twice

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

 



> On Dec 19, 2016, at 12:07, Anna Schumaker <schumaker.anna@xxxxxxxxx> wrote:
> 
> 
> 
> On 12/19/2016 11:56 AM, Trond Myklebust wrote:
>> What’s the filesystem you’re testing on?
> 
> I see this on xfs and ext4 but btrfs seems to work.  What do you mean by timestamp resolution?  I can't find the file in question in `ls`, but for another file `stat` tells me:
> 
>  File: file.10
>  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
> Device: fe31h/65073d    Inode: 1319795     Links: 1
> Access: (0666/-rw-rw-rw-)  Uid: ( 1000/    anna)   Gid: (  100/   users)
> Access: 2016-12-19 12:04:47.680033877 -0500
> Modify: 2016-12-19 12:04:47.680033877 -0500
> Change: 2016-12-19 12:04:47.680033877 -0500

I mean that the timestamps appear to be unable to keep up with the volume of changes on the filesystem. If the cthon test is failing here, then it’s probably because the before/after change attributes are the same… Does wireshark show that the before/after change attributes on this directory are different?

> 
> I hope this helps!
> Anna
>> 
>>> On Dec 19, 2016, at 11:54, Anna Schumaker <schumaker.anna@xxxxxxxxx> wrote:
>>> 
>>> Hi Trond,
>>> 
>>> On 12/17/2016 01:27 PM, Trond Myklebust wrote:
>>>> If an operation that modified the directory raced with a GETATTR, then we
>>>> don't need to invalidate the directory cache more than once.
>>> 
>>> This patch causes cthon basic tests to fail with:
>>> 
>>> ./test6: readdir
>>>       ./test6: (/nfs/all) unlinked 'file.0' dir entry read pass 1
>>>       ./test6: (/nfs/all) Test failed with 1 errors
>>> basic tests failed
>>> 
>>> Thanks,
>>> Anna
>>>> 
>>>> Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
>>>> ---
>>>> fs/nfs/nfs4proc.c | 3 +++
>>>> 1 file changed, 3 insertions(+)
>>>> 
>>>> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
>>>> index d33242c8d95d..713932440e07 100644
>>>> --- a/fs/nfs/nfs4proc.c
>>>> +++ b/fs/nfs/nfs4proc.c
>>>> @@ -1088,12 +1088,15 @@ static void update_changeattr(struct inode *dir, struct nfs4_change_info *cinfo)
>>>> 	struct nfs_inode *nfsi = NFS_I(dir);
>>>> 
>>>> 	spin_lock(&dir->i_lock);
>>>> +	if (dir->i_version == cinfo->after)
>>>> +		goto out;
>>>> 	nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
>>>> 	if (!cinfo->atomic || cinfo->before != dir->i_version)
>>>> 		nfs_force_lookup_revalidate(dir);
>>>> 	dir->i_version = cinfo->after;
>>>> 	nfsi->attr_gencount = nfs_inc_attr_generation_counter();
>>>> 	nfs_fscache_invalidate(dir);
>>>> +out:
>>>> 	spin_unlock(&dir->i_lock);
>>>> }
>>>> 
>>>> 
>>> 
>> 
> 

��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux