diff options
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_buf.c | 29 |
1 files changed, 4 insertions, 25 deletions
diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c index e22cce1a9d5d..a764ded9f3a0 100644 --- a/fs/xfs/linux-2.6/xfs_buf.c +++ b/fs/xfs/linux-2.6/xfs_buf.c | |||
| @@ -830,39 +830,18 @@ pagebuf_rele( | |||
| 830 | 830 | ||
| 831 | PB_TRACE(pb, "rele", pb->pb_relse); | 831 | PB_TRACE(pb, "rele", pb->pb_relse); |
| 832 | 832 | ||
| 833 | /* | ||
| 834 | * pagebuf_lookup buffers are not hashed, not delayed write, | ||
| 835 | * and don't have their own release routines. Special case. | ||
| 836 | */ | ||
| 837 | if (unlikely(!hash)) { | ||
| 838 | ASSERT(!pb->pb_relse); | ||
| 839 | if (atomic_dec_and_test(&pb->pb_hold)) | ||
| 840 | xfs_buf_free(pb); | ||
| 841 | return; | ||
| 842 | } | ||
| 843 | |||
| 844 | if (atomic_dec_and_lock(&pb->pb_hold, &hash->bh_lock)) { | 833 | if (atomic_dec_and_lock(&pb->pb_hold, &hash->bh_lock)) { |
| 845 | int do_free = 1; | ||
| 846 | |||
| 847 | if (pb->pb_relse) { | 834 | if (pb->pb_relse) { |
| 848 | atomic_inc(&pb->pb_hold); | 835 | atomic_inc(&pb->pb_hold); |
| 849 | spin_unlock(&hash->bh_lock); | 836 | spin_unlock(&hash->bh_lock); |
| 850 | (*(pb->pb_relse)) (pb); | 837 | (*(pb->pb_relse)) (pb); |
| 851 | spin_lock(&hash->bh_lock); | 838 | } else if (pb->pb_flags & PBF_FS_MANAGED) { |
| 852 | do_free = 0; | ||
| 853 | } | ||
| 854 | |||
| 855 | if (pb->pb_flags & PBF_FS_MANAGED) { | ||
| 856 | do_free = 0; | ||
| 857 | } | ||
| 858 | |||
| 859 | if (do_free) { | ||
| 860 | ASSERT((pb->pb_flags & (PBF_DELWRI|_PBF_DELWRI_Q)) == 0); | ||
| 861 | list_del_init(&pb->pb_hash_list); | ||
| 862 | spin_unlock(&hash->bh_lock); | 839 | spin_unlock(&hash->bh_lock); |
| 863 | pagebuf_free(pb); | ||
| 864 | } else { | 840 | } else { |
| 841 | ASSERT(!(pb->pb_flags & (PBF_DELWRI|_PBF_DELWRI_Q))); | ||
| 842 | list_del_init(&pb->pb_hash_list); | ||
| 865 | spin_unlock(&hash->bh_lock); | 843 | spin_unlock(&hash->bh_lock); |
| 844 | pagebuf_free(pb); | ||
| 866 | } | 845 | } |
| 867 | } else { | 846 | } else { |
| 868 | /* | 847 | /* |
