Christoph Hellwig bc990f5cb4 xfs: fix locking in xfs_iget_cache_hit
The locking in xfs_iget_cache_hit currently has numerous problems:

 - we clear the reclaim tag without i_flags_lock which protects
   modifications to it
 - we call inode_init_always which can sleep with pag_ici_lock
   held (this is oss.sgi.com BZ #819)
 - we acquire and drop i_flags_lock a lot and thus provide no
   consistency between the various flags we set/clear under it

This patch fixes all that with a major revamp of the locking in
the function.  The new version acquires i_flags_lock early and
only drops it once we need to call into inode_init_always or before
calling xfs_ilock.

This patch fixes a bug seen in the wild where we race modifying the
reclaim tag.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Felix Blyakher <felixb@sgi.com>
Reviewed-by: Eric Sandeen <sandeen@sandeen.net>
Signed-off-by: Felix Blyakher <felixb@sgi.com>
2009-08-17 01:23:48 -05:00
..
2009-06-10 17:07:47 +02:00
2009-03-30 10:21:31 +02:00
2009-06-10 17:07:47 +02:00
2009-06-10 17:07:47 +02:00
2009-06-10 17:07:47 +02:00
2009-03-29 19:26:46 +02:00
2008-07-28 16:58:35 +10:00
2009-06-08 15:33:32 +02:00
2009-03-29 19:26:46 +02:00
2009-03-29 09:55:42 +02:00
2009-03-29 09:55:42 +02:00
2009-03-29 09:51:14 +02:00
2009-03-29 09:51:08 +02:00
2009-03-29 09:55:42 +02:00
2009-03-29 09:51:08 +02:00
2009-03-29 09:55:42 +02:00
2009-03-29 09:51:08 +02:00
2008-12-01 11:37:35 +11:00
2008-10-30 17:53:24 +11:00
2009-06-08 15:35:48 +02:00
2009-06-08 15:32:59 +02:00
2009-03-29 09:55:42 +02:00
2009-03-29 09:55:42 +02:00
2009-06-10 17:07:47 +02:00
2009-04-06 18:49:12 +02:00
2009-03-29 09:55:42 +02:00
2009-03-16 08:24:13 +01:00
2009-03-16 08:19:29 +01:00
2009-06-08 15:33:32 +02:00
2009-06-08 15:33:32 +02:00
2009-03-29 09:55:42 +02:00
2009-06-10 17:07:47 +02:00
2009-03-29 09:55:42 +02:00
2009-03-29 09:55:42 +02:00
2009-03-29 09:55:42 +02:00
2009-06-08 15:33:32 +02:00
2009-06-10 17:07:47 +02:00
2008-10-30 16:55:13 +11:00