]> err.no Git - linux-2.6/commitdiff
[XFS] Simplify pagebuf_rele Remove a conditional that can not be true
authorChristoph Hellwig <hch@sgi.com>
Wed, 2 Nov 2005 04:09:35 +0000 (15:09 +1100)
committerNathan Scott <nathans@sgi.com>
Wed, 2 Nov 2005 04:09:35 +0000 (15:09 +1100)
anymore and simplify the final put path a little

SGI-PV: 908809
SGI-Modid: xfs-linux:xfs-kern:200790a

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

index e22cce1a9d5dcc65d028bdcba6986f69985155c6..a764ded9f3a023746feedbe78e3c8f4346ee737c 100644 (file)
@@ -830,39 +830,18 @@ pagebuf_rele(
 
        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)) {
-               int             do_free = 1;
-
                if (pb->pb_relse) {
                        atomic_inc(&pb->pb_hold);
                        spin_unlock(&hash->bh_lock);
                        (*(pb->pb_relse)) (pb);
-                       spin_lock(&hash->bh_lock);
-                       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);
+               } else if (pb->pb_flags & PBF_FS_MANAGED) {
                        spin_unlock(&hash->bh_lock);
-                       pagebuf_free(pb);
                } else {
+                       ASSERT(!(pb->pb_flags & (PBF_DELWRI|_PBF_DELWRI_Q)));
+                       list_del_init(&pb->pb_hash_list);
                        spin_unlock(&hash->bh_lock);
+                       pagebuf_free(pb);
                }
        } else {
                /*