GFS2: Resolve inode eviction and ail list interaction bug
authorSteven Whitehouse <swhiteho@redhat.com>
Thu, 14 Jul 2011 07:59:44 +0000 (08:59 +0100)
committerSteven Whitehouse <swhiteho@redhat.com>
Thu, 14 Jul 2011 07:59:44 +0000 (08:59 +0100)
commit380f7c65a7eb3288e4b6812acf3474a1de230707
tree7abe4b4ce390afc6b4d2bc7cae0ec298fe2efa3c
parent3942ae5319640ced5844b75f44884e4bcb8a2f16
GFS2: Resolve inode eviction and ail list interaction bug

This patch contains a few misc fixes which resolve a recently
reported issue. This patch has been a real team effort and has
received a lot of testing.

The first issue is that the ail lock needs to be held over a few
more operations. The lock thats added into gfs2_releasepage() may
possibly be a candidate for replacing with RCU at some future
point, but at this stage we've gone for the obvious fix.

The second issue is that gfs2_write_inode() can end up calling
a glock recursively when called from gfs2_evict_inode() via the
syncing code, so it needs a guard added.

The third issue is that we either need to not truncate the metadata
pages of inodes which have zero link count, but which we cannot
deallocate due to them still being in use by other nodes, or we need
to ensure that those pages have all made it through the journal and
ail lists first. This patch takes the former approach, but the
latter has also been tested and there is nothing to choose between
them performance-wise. So again, we could revise that decision
in the future.

Also, the inode eviction process is now better documented.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Tested-by: Bob Peterson <rpeterso@redhat.com>
Tested-by: Abhijith Das <adas@redhat.com>
Reported-by: Barry J. Marson <bmarson@redhat.com>
Reported-by: David Teigland <teigland@redhat.com>
fs/gfs2/aops.c
fs/gfs2/glops.c
fs/gfs2/log.c
fs/gfs2/super.c