[XFS] Fix regression in xfs_buf_rele dealing with non-hashed buffers, as
authorNathan Scott <nathans@sgi.com>
Wed, 1 Feb 2006 01:14:52 +0000 (12:14 +1100)
committerNathan Scott <nathans@sgi.com>
Wed, 1 Feb 2006 01:14:52 +0000 (12:14 +1100)
occur during log replay.  Novell bug 145204, Fedora bug 177848.

SGI-PV: 948860
SGI-Modid: xfs-linux-melb:xfs-kern:25064a

Signed-off-by: Nathan Scott <nathans@sgi.com>
fs/xfs/linux-2.6/xfs_buf.c

index e44b7c1a3a36d432617edfd66131c30a259359f9..a36a8e3b703fdea9090c9c981cbf21410412f345 100644 (file)
@@ -822,6 +822,13 @@ xfs_buf_rele(
 
        XB_TRACE(bp, "rele", bp->b_relse);
 
 
        XB_TRACE(bp, "rele", bp->b_relse);
 
+       if (unlikely(!hash)) {
+               ASSERT(!bp->b_relse);
+               if (atomic_dec_and_test(&bp->b_hold))
+                       xfs_buf_free(bp);
+               return;
+       }
+
        if (atomic_dec_and_lock(&bp->b_hold, &hash->bh_lock)) {
                if (bp->b_relse) {
                        atomic_inc(&bp->b_hold);
        if (atomic_dec_and_lock(&bp->b_hold, &hash->bh_lock)) {
                if (bp->b_relse) {
                        atomic_inc(&bp->b_hold);