xfs: fix double unlock in xfs_swap_extents()
authorFelix Blyakher <felixb@sgi.com>
Fri, 8 May 2009 00:49:45 +0000 (19:49 -0500)
committerFelix Blyakher <felixb@sgi.com>
Fri, 8 May 2009 05:29:44 +0000 (00:29 -0500)
commitec91d1335f478c5cd089d82ffbf936075c5f24c8
treea17f277b51ece8ffa9c5dae796372d7140c77a4c
parent6321e3ed2acf3ee9643cdd403e1c88605d7944ba
xfs: fix double unlock in xfs_swap_extents()

Regreesion from commit ef8f7fc, which rearranged the code in
xfs_swap_extents() leading to double unlock of xfs inode ilock.
That resulted in xfs_fsr deadlocking itself on platforms, which
don't handle double unlock of rw_semaphore nicely. It caused the
count go negative, which represents the write holder, without
really having one. ia64 is one of the platforms where deadlock
was easily reproduced and the fix was tested.

Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Eric Sandeen <sandeen@sandeen.net>
Signed-off-by: Felix Blyakher <felixb@sgi.com>
fs/xfs/xfs_dfrag.c