* [PATCH] xfs: active inodes stat is broken
@ 2014-12-01 22:34 Dave Chinner
2014-12-02 13:52 ` Mark Tinguely
0 siblings, 1 reply; 5+ messages in thread
From: Dave Chinner @ 2014-12-01 22:34 UTC (permalink / raw)
To: xfs
From: Dave Chinner <dchinner@redhat.com>
vn_active only ever gets decremented, so it has a very large
negative number. Make it track the inode count we currently have
allocated properly so we can easily track the size of the inode
cache via tools like PCP.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
fs/xfs/xfs_icache.c | 3 +++
fs/xfs/xfs_super.c | 1 -
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
index 92ca910..8bc3d78 100644
--- a/fs/xfs/xfs_icache.c
+++ b/fs/xfs/xfs_icache.c
@@ -128,6 +128,7 @@ xfs_inode_free(
/* asserts to verify all state is correct here */
ASSERT(atomic_read(&ip->i_pincount) == 0);
ASSERT(!xfs_isiflocked(ip));
+ XFS_STATS_DEC(vn_active);
call_rcu(&VFS_I(ip)->i_rcu, xfs_inode_free_callback);
}
@@ -287,6 +288,8 @@ xfs_iget_cache_miss(
if (!ip)
return -ENOMEM;
+ XFS_STATS_INC(vn_active);
+
error = xfs_iread(mp, tp, ip, flags);
if (error)
goto out_destroy;
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index fee11c8..6b95851 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -1005,7 +1005,6 @@ xfs_fs_evict_inode(
clear_inode(inode);
XFS_STATS_INC(vn_rele);
XFS_STATS_INC(vn_remove);
- XFS_STATS_DEC(vn_active);
xfs_inactive(ip);
}
--
2.0.0
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] xfs: active inodes stat is broken
2014-12-01 22:34 [PATCH] xfs: active inodes stat is broken Dave Chinner
@ 2014-12-02 13:52 ` Mark Tinguely
2014-12-02 21:02 ` Dave Chinner
0 siblings, 1 reply; 5+ messages in thread
From: Mark Tinguely @ 2014-12-02 13:52 UTC (permalink / raw)
To: Dave Chinner; +Cc: xfs
On 12/01/14 16:34, Dave Chinner wrote:
> From: Dave Chinner<dchinner@redhat.com>
>
> vn_active only ever gets decremented, so it has a very large
> negative number. Make it track the inode count we currently have
> allocated properly so we can easily track the size of the inode
> cache via tools like PCP.
>
> Signed-off-by: Dave Chinner<dchinner@redhat.com>
> ---
> fs/xfs/xfs_icache.c | 3 +++
> fs/xfs/xfs_super.c | 1 -
> 2 files changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
> index 92ca910..8bc3d78 100644
> --- a/fs/xfs/xfs_icache.c
> +++ b/fs/xfs/xfs_icache.c
> @@ -128,6 +128,7 @@ xfs_inode_free(
> /* asserts to verify all state is correct here */
> ASSERT(atomic_read(&ip->i_pincount) == 0);
> ASSERT(!xfs_isiflocked(ip));
> + XFS_STATS_DEC(vn_active);
>
> call_rcu(&VFS_I(ip)->i_rcu, xfs_inode_free_callback);
> }
Would the inode allocated and freed in xfs_recover_inode_owner_change()
cause this the count to go negative?
--Mark.
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] xfs: active inodes stat is broken
2014-12-02 13:52 ` Mark Tinguely
@ 2014-12-02 21:02 ` Dave Chinner
2014-12-02 22:34 ` [PATCH v2] " Dave Chinner
0 siblings, 1 reply; 5+ messages in thread
From: Dave Chinner @ 2014-12-02 21:02 UTC (permalink / raw)
To: Mark Tinguely; +Cc: xfs
On Tue, Dec 02, 2014 at 07:52:17AM -0600, Mark Tinguely wrote:
> On 12/01/14 16:34, Dave Chinner wrote:
> >From: Dave Chinner<dchinner@redhat.com>
> >
> >vn_active only ever gets decremented, so it has a very large
> >negative number. Make it track the inode count we currently have
> >allocated properly so we can easily track the size of the inode
> >cache via tools like PCP.
> >
> >Signed-off-by: Dave Chinner<dchinner@redhat.com>
> >---
> > fs/xfs/xfs_icache.c | 3 +++
> > fs/xfs/xfs_super.c | 1 -
> > 2 files changed, 3 insertions(+), 1 deletion(-)
> >
> >diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
> >index 92ca910..8bc3d78 100644
> >--- a/fs/xfs/xfs_icache.c
> >+++ b/fs/xfs/xfs_icache.c
> >@@ -128,6 +128,7 @@ xfs_inode_free(
> > /* asserts to verify all state is correct here */
> > ASSERT(atomic_read(&ip->i_pincount) == 0);
> > ASSERT(!xfs_isiflocked(ip));
> >+ XFS_STATS_DEC(vn_active);
> >
> > call_rcu(&VFS_I(ip)->i_rcu, xfs_inode_free_callback);
> > }
>
> Would the inode allocated and freed in xfs_recover_inode_owner_change()
> cause this the count to go negative?
Good catch - it will. Recovering swap extent operations is pretty
rare, so I wouldn't have noticed an off-by-one-or-two on a normal
system where there are several thousand allocated and cached inodes
even at idle. I'll fix it.
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] xfs: active inodes stat is broken
2014-12-02 21:02 ` Dave Chinner
@ 2014-12-02 22:34 ` Dave Chinner
2014-12-02 22:45 ` Mark Tinguely
0 siblings, 1 reply; 5+ messages in thread
From: Dave Chinner @ 2014-12-02 22:34 UTC (permalink / raw)
To: Mark Tinguely; +Cc: xfs
From: Dave Chinner <dchinner@redhat.com>
vn_active only ever gets decremented, so it has a very large
negative number. Make it track the inode count we currently have
allocated properly so we can easily track the size of the inode
cache via tools like PCP.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
Version 2:
- move stat increment to inode allocation code rather than cache
miss code so that inc/dec are evenly balanced no matter who calls
them.
fs/xfs/xfs_icache.c | 2 ++
fs/xfs/xfs_super.c | 1 -
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
index 92ca910..9771b7e 100644
--- a/fs/xfs/xfs_icache.c
+++ b/fs/xfs/xfs_icache.c
@@ -63,6 +63,7 @@ xfs_inode_alloc(
return NULL;
}
+ XFS_STATS_INC(vn_active);
ASSERT(atomic_read(&ip->i_pincount) == 0);
ASSERT(!spin_is_locked(&ip->i_flags_lock));
ASSERT(!xfs_isiflocked(ip));
@@ -128,6 +129,7 @@ xfs_inode_free(
/* asserts to verify all state is correct here */
ASSERT(atomic_read(&ip->i_pincount) == 0);
ASSERT(!xfs_isiflocked(ip));
+ XFS_STATS_DEC(vn_active);
call_rcu(&VFS_I(ip)->i_rcu, xfs_inode_free_callback);
}
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index fee11c8..6b95851 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -1005,7 +1005,6 @@ xfs_fs_evict_inode(
clear_inode(inode);
XFS_STATS_INC(vn_rele);
XFS_STATS_INC(vn_remove);
- XFS_STATS_DEC(vn_active);
xfs_inactive(ip);
}
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] xfs: active inodes stat is broken
2014-12-02 22:34 ` [PATCH v2] " Dave Chinner
@ 2014-12-02 22:45 ` Mark Tinguely
0 siblings, 0 replies; 5+ messages in thread
From: Mark Tinguely @ 2014-12-02 22:45 UTC (permalink / raw)
To: Dave Chinner; +Cc: xfs
On 12/02/14 16:34, Dave Chinner wrote:
>
> From: Dave Chinner <dchinner@redhat.com>
>
> vn_active only ever gets decremented, so it has a very large
> negative number. Make it track the inode count we currently have
> allocated properly so we can easily track the size of the inode
> cache via tools like PCP.
>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> ---
Nice to have that working.
Reviewed-by: Mark Tinguely <tinguely@sgi.com>
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-12-02 22:45 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-01 22:34 [PATCH] xfs: active inodes stat is broken Dave Chinner
2014-12-02 13:52 ` Mark Tinguely
2014-12-02 21:02 ` Dave Chinner
2014-12-02 22:34 ` [PATCH v2] " Dave Chinner
2014-12-02 22:45 ` Mark Tinguely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox