Re: [PATCH 1/2] NFS: Add FATTR4_WORD1_SPACE_USED to the cache_consistency_bitmask

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

 



Hi Trond,

On Fri, 2019-11-08 at 21:22 +0000, Trond Myklebust wrote:
> On Fri, 2019-11-08 at 16:02 -0500, schumaker.anna@xxxxxxxxx wrote:
> > From: Anna Schumaker <Anna.Schumaker@xxxxxxxxxx>
> > 
> > Changing a sparse file could have an effect not only on the file
> > size,
> > but also on the number of blocks used by the file in the underlying
> > filesystem. Let's update the SPACE_USED attribute whenever we update
> > SIZE to be as accurate as possible.
> > 
> > This patch fixes xfstests generic/568, which tests that fallocating
> > an
> > unaligned range allocates all blocks touched by that range. Without
> > this
> > patch, `stat` reports 0 bytes used immediately after the fallocate.
> > Adding a `sleep 5` to the test also catches the update, but it's
> > better
> > to just do it when we know something has changed.
> > 
> > Signed-off-by: Anna Schumaker <Anna.Schumaker@xxxxxxxxxx>
> > ---
> >  fs/nfs/nfs4proc.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> > index ac9063c06205..00a1f3ec7f22 100644
> > --- a/fs/nfs/nfs4proc.c
> > +++ b/fs/nfs/nfs4proc.c
> > @@ -3775,7 +3775,7 @@ static int _nfs4_server_capabilities(struct
> > nfs_server *server, struct nfs_fh *f
> >  
> >  		memcpy(server->cache_consistency_bitmask,
> > res.attr_bitmask, sizeof(server->cache_consistency_bitmask));
> >  		server->cache_consistency_bitmask[0] &=
> > FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE;
> > -		server->cache_consistency_bitmask[1] &=
> > FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY;
> > +		server->cache_consistency_bitmask[1] &=
> > FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY|FATTR4_WORD1_SPAC
> > E_USED;
> 
> I'd rather not do this. Space used is not a cache consistency attribute
> , as we do not use it to revalidate the cache and it can be rather
> expensive to retrieve on some platforms.

Okay, that makes sense.

> 
> I'd therefore prefer that we just make sure we mark the cache validity
> with NFS_INO_INVALID_OTHER when we have a write succeed on a sparse
> file.

It looks like setting falloc_bitmask to use the standard nfs4_fattr_bitmap
instead of the cache_consistency_bitmask will also update the SPACE_USED
attribute after a fallocate call.

I'll play around with NFS_INO_INVALID_OTHER next, but making use of the trailing
getattr that ALLOCATE and DEALLOCATE already have seems more straightforward to
me.

Anna

> 
> >  		server->cache_consistency_bitmask[2] = 0;
> >  
> >  		/* Avoid a regression due to buggy server */
> -- 
> Trond Myklebust
> Linux NFS client maintainer, Hammerspace
> trond.myklebust@xxxxxxxxxxxxxxx
> 
> 




[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