Patch "NFS: Pass i_size to fscache_unuse_cookie() when a file is released" has been added to the 5.18-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    NFS: Pass i_size to fscache_unuse_cookie() when a file is released

to the 5.18-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     nfs-pass-i_size-to-fscache_unuse_cookie-when-a-file-.patch
and it can be found in the queue-5.18 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b3c92047280fe8c6e25e04388f6b7456d60efa06
Author: Dave Wysochanski <dwysocha@xxxxxxxxxx>
Date:   Wed May 4 09:21:06 2022 -0400

    NFS: Pass i_size to fscache_unuse_cookie() when a file is released
    
    [ Upstream commit 9c4a5c75a62e83963083efd4eea5d5bd1583193c ]
    
    Pass updated i_size in fscache_unuse_cookie() when called
    from nfs_fscache_release_file(), which ensures the size of
    an fscache object gets written to the cache storage.  Failing
    to do so results in unnessary reads from the NFS server, even
    when the data is cached, due to a cachefiles object coherency
    check failing with a trace similar to the following:
      cachefiles_coherency: o=0000000e BAD osiz B=afbb3 c=0
    
    This problem can be reproduced as follows:
      #!/bin/bash
      v=4.2; NFS_SERVER=127.0.0.1
      set -e; trap cleanup EXIT; rc=1
      function cleanup {
              umount /mnt/nfs > /dev/null 2>&1
              RC_STR="TEST PASS"
              [ $rc -eq 1 ] && RC_STR="TEST FAIL"
              echo "$RC_STR on $(uname -r) with NFSv$v and server $NFS_SERVER"
      }
      mount -o vers=$v,fsc $NFS_SERVER:/export /mnt/nfs
      rm -f /mnt/nfs/file1.bin > /dev/null 2>&1
      dd if=/dev/zero of=/mnt/nfs/file1.bin bs=4096 count=1 > /dev/null 2>&1
      echo 3 > /proc/sys/vm/drop_caches
      echo Read file 1st time from NFS server into fscache
      dd if=/mnt/nfs/file1.bin of=/dev/null > /dev/null 2>&1
      umount /mnt/nfs && mount -o vers=$v,fsc $NFS_SERVER:/export /mnt/nfs
      echo 3 > /proc/sys/vm/drop_caches
      echo Read file 2nd time from fscache
      dd if=/mnt/nfs/file1.bin of=/dev/null > /dev/null 2>&1
      echo Check mountstats for NFS read
      grep -q "READ: 0" /proc/self/mountstats # (1st number) == 0
      [ $? -eq 0 ] && rc=0
    
    Fixes: a6b5a28eb56c "nfs: Convert to new fscache volume/cookie API"
    Signed-off-by: Dave Wysochanski <dwysocha@xxxxxxxxxx>
    Tested-by: Daire Byrne <daire@xxxxxxxx>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/nfs/fscache.c b/fs/nfs/fscache.c
index f73c09a9cf0a..e861d7bae305 100644
--- a/fs/nfs/fscache.c
+++ b/fs/nfs/fscache.c
@@ -231,11 +231,10 @@ void nfs_fscache_release_file(struct inode *inode, struct file *filp)
 {
 	struct nfs_fscache_inode_auxdata auxdata;
 	struct fscache_cookie *cookie = nfs_i_fscache(inode);
+	loff_t i_size = i_size_read(inode);
 
-	if (fscache_cookie_valid(cookie)) {
-		nfs_fscache_update_auxdata(&auxdata, inode);
-		fscache_unuse_cookie(cookie, &auxdata, NULL);
-	}
+	nfs_fscache_update_auxdata(&auxdata, inode);
+	fscache_unuse_cookie(cookie, &auxdata, &i_size);
 }
 
 /*



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux