NFSv4.1: reset the inode MDS threshold counters on layout destruction
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Thu, 20 Sep 2012 19:52:13 +0000 (15:52 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Fri, 28 Sep 2012 20:03:12 +0000 (16:03 -0400)
Instead of resetting the inode MDS threshold counters when we mark
the layout for destruction, do it as part of freeing the layout.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/pnfs.c

index 8b32f87..ac94fb8 100644 (file)
@@ -215,9 +215,13 @@ pnfs_free_layout_hdr(struct pnfs_layout_hdr *lo)
 static void
 destroy_layout_hdr(struct pnfs_layout_hdr *lo)
 {
 static void
 destroy_layout_hdr(struct pnfs_layout_hdr *lo)
 {
+       struct nfs_inode *nfsi = NFS_I(lo->plh_inode);
        dprintk("%s: freeing layout cache %p\n", __func__, lo);
        BUG_ON(!list_empty(&lo->plh_layouts));
        dprintk("%s: freeing layout cache %p\n", __func__, lo);
        BUG_ON(!list_empty(&lo->plh_layouts));
-       NFS_I(lo->plh_inode)->layout = NULL;
+       nfsi->layout = NULL;
+       /* Reset MDS Threshold I/O counters */
+       nfsi->write_io = 0;
+       nfsi->read_io = 0;
        pnfs_free_layout_hdr(lo);
 }
 
        pnfs_free_layout_hdr(lo);
 }
 
@@ -461,9 +465,6 @@ pnfs_mark_matching_lsegs_invalid(struct pnfs_layout_hdr *lo,
        dprintk("%s:Begin lo %p\n", __func__, lo);
 
        if (list_empty(&lo->plh_segs)) {
        dprintk("%s:Begin lo %p\n", __func__, lo);
 
        if (list_empty(&lo->plh_segs)) {
-               /* Reset MDS Threshold I/O counters */
-               NFS_I(lo->plh_inode)->write_io = 0;
-               NFS_I(lo->plh_inode)->read_io = 0;
                if (!test_and_set_bit(NFS_LAYOUT_DESTROYED, &lo->plh_flags))
                        pnfs_put_layout_hdr_locked(lo);
                return 0;
                if (!test_and_set_bit(NFS_LAYOUT_DESTROYED, &lo->plh_flags))
                        pnfs_put_layout_hdr_locked(lo);
                return 0;