@Greg
I can apply patch 081003fff467ea0e727f66d5d435b4f473a789b3 to the tree,
but could you verify that it resolves your issue first before I do that?
I've tried to backport the patch and resulted in the patch i attached. I'll now wait some days if it really fixes my problem.

@Dave
I'm travelling for the next week and a half, so I won't be able to
get to it any time soon....
Would be nice if you could have a short look over my patch attempt.

Greets Stefan
diff -upr orig/linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.c linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.c
--- orig/linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.c	2011-05-10 01:03:02.000000000 +0200
+++ linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.c	2011-06-08 10:24:50.074080844 +0200
@@ -711,16 +711,24 @@ xfs_inode_set_reclaim_tag(
 }
 
 void
-__xfs_inode_clear_reclaim_tag(
-	xfs_mount_t	*mp,
+__xfs_inode_clear_reclaim(
 	xfs_perag_t	*pag,
 	xfs_inode_t	*ip)
 {
-	radix_tree_tag_clear(&pag->pag_ici_root,
-			XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG);
 	pag->pag_ici_reclaimable--;
 }
 
+void
+__xfs_inode_clear_reclaim_tag(
+       xfs_mount_t     *mp,
+       xfs_perag_t     *pag,
+       xfs_inode_t     *ip)
+{
+       radix_tree_tag_clear(&pag->pag_ici_root,
+                       XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG);
+       __xfs_inode_clear_reclaim(pag, ip);
+}
+
 STATIC int
 xfs_reclaim_inode(
 	struct xfs_inode	*ip,
diff -upr orig/linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.h linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.h
--- orig/linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.h	2011-05-10 01:03:02.000000000 +0200
+++ linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.h	2011-06-08 09:44:09.468747065 +0200
@@ -48,6 +48,7 @@ int xfs_reclaim_inodes(struct xfs_mount 
 
 void xfs_inode_set_reclaim_tag(struct xfs_inode *ip);
 void __xfs_inode_set_reclaim_tag(struct xfs_perag *pag, struct xfs_inode *ip);
+void __xfs_inode_clear_reclaim(struct xfs_perag *pag, struct xfs_inode *ip);
 void __xfs_inode_clear_reclaim_tag(struct xfs_mount *mp, struct xfs_perag *pag,
 				struct xfs_inode *ip);
 
diff -upr orig/linux-2.6.32.40/fs/xfs/xfs_iget.c linux-2.6.32.40/fs/xfs/xfs_iget.c
--- orig/linux-2.6.32.40/fs/xfs/xfs_iget.c	2011-05-10 01:03:02.000000000 +0200
+++ linux-2.6.32.40/fs/xfs/xfs_iget.c	2011-06-08 09:44:09.471746918 +0200
@@ -529,6 +529,7 @@ xfs_ireclaim(
 	write_lock(&pag->pag_ici_lock);
 	if (!radix_tree_delete(&pag->pag_ici_root, agino))
 		ASSERT(0);
+	__xfs_inode_clear_reclaim(pag, ip);
 	write_unlock(&pag->pag_ici_lock);
 	xfs_put_perag(mp, pag);
 
_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to