Commit 7f14d0a0 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Nathan Scott

[XFS] Simplify pagebuf_rele Remove a conditional that can not be true

anymore and simplify the final put path a little

SGI-PV: 908809
SGI-Modid: xfs-linux:xfs-kern:200790a
Signed-off-by: default avatarChristoph Hellwig <hch@sgi.com>
Signed-off-by: default avatarNathan Scott <nathans@sgi.com>
parent e718eeb4
...@@ -830,39 +830,18 @@ pagebuf_rele( ...@@ -830,39 +830,18 @@ pagebuf_rele(
PB_TRACE(pb, "rele", pb->pb_relse); PB_TRACE(pb, "rele", pb->pb_relse);
/*
* pagebuf_lookup buffers are not hashed, not delayed write,
* and don't have their own release routines. Special case.
*/
if (unlikely(!hash)) {
ASSERT(!pb->pb_relse);
if (atomic_dec_and_test(&pb->pb_hold))
xfs_buf_free(pb);
return;
}
if (atomic_dec_and_lock(&pb->pb_hold, &hash->bh_lock)) { if (atomic_dec_and_lock(&pb->pb_hold, &hash->bh_lock)) {
int do_free = 1;
if (pb->pb_relse) { if (pb->pb_relse) {
atomic_inc(&pb->pb_hold); atomic_inc(&pb->pb_hold);
spin_unlock(&hash->bh_lock); spin_unlock(&hash->bh_lock);
(*(pb->pb_relse)) (pb); (*(pb->pb_relse)) (pb);
spin_lock(&hash->bh_lock); } else if (pb->pb_flags & PBF_FS_MANAGED) {
do_free = 0;
}
if (pb->pb_flags & PBF_FS_MANAGED) {
do_free = 0;
}
if (do_free) {
ASSERT((pb->pb_flags & (PBF_DELWRI|_PBF_DELWRI_Q)) == 0);
list_del_init(&pb->pb_hash_list);
spin_unlock(&hash->bh_lock); spin_unlock(&hash->bh_lock);
pagebuf_free(pb);
} else { } else {
ASSERT(!(pb->pb_flags & (PBF_DELWRI|_PBF_DELWRI_Q)));
list_del_init(&pb->pb_hash_list);
spin_unlock(&hash->bh_lock); spin_unlock(&hash->bh_lock);
pagebuf_free(pb);
} }
} else { } else {
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment