summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Scott <nathans@sgi.com>2006-02-01 12:14:52 +1100
committerNathan Scott <nathans@sgi.com>2006-02-01 12:14:52 +1100
commitfad3aa1e8e2e4123a19b926fefd91ec63dd56497 (patch)
tree77fc99e0bc94385e1b0b7fc0b9891fa5c180892d
parent3a69c7dc6f3d58aeb9ce5051fc7060d55e05c003 (diff)
downloadlinux-3.10-fad3aa1e8e2e4123a19b926fefd91ec63dd56497.tar.gz
linux-3.10-fad3aa1e8e2e4123a19b926fefd91ec63dd56497.tar.bz2
linux-3.10-fad3aa1e8e2e4123a19b926fefd91ec63dd56497.zip
[XFS] Fix regression in xfs_buf_rele dealing with non-hashed buffers, as
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>
-rw-r--r--fs/xfs/linux-2.6/xfs_buf.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c
index e44b7c1a3a3..a36a8e3b703 100644
--- a/fs/xfs/linux-2.6/xfs_buf.c
+++ b/fs/xfs/linux-2.6/xfs_buf.c
@@ -822,6 +822,13 @@ xfs_buf_rele(
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);