]> git.hungrycats.org Git - linux/commitdiff
[PATCH] remove buffer head b_inode
authorAndrew Morton <akpm@zip.com.au>
Tue, 30 Apr 2002 06:53:09 +0000 (23:53 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Tue, 30 Apr 2002 06:53:09 +0000 (23:53 -0700)
Removal of buffer_head.b_inode.  The list_emptiness of b_inode_buffers
is used to indicate whether the buffer is on an inode's
i_dirty_buffers.

fs/buffer.c
include/linux/fs.h

index aa9dba56428065c7c1f8428ec795fb12a62467fe..88bb9b9f297d4831ceaf8d4e8b4c4952d3888176 100644 (file)
@@ -410,9 +410,7 @@ void buffer_insert_list(spinlock_t *lock,
        if (lock == NULL)
                lock = &global_bufferlist_lock;
        spin_lock(lock);
-       if (bh->b_inode)
-               list_del(&bh->b_inode_buffers);
-       bh->b_inode = 1;
+       list_del(&bh->b_inode_buffers);
        list_add(&bh->b_inode_buffers, list);
        spin_unlock(lock);
 }
@@ -422,10 +420,7 @@ void buffer_insert_list(spinlock_t *lock,
  */
 static inline void __remove_inode_queue(struct buffer_head *bh)
 {
-       if (bh->b_inode) {
-               list_del(&bh->b_inode_buffers);
-               bh->b_inode = 0;
-       }
+       list_del_init(&bh->b_inode_buffers);
 }
 
 int inode_has_buffers(struct inode *inode)
@@ -653,11 +648,8 @@ int fsync_buffers_list(spinlock_t *lock, struct list_head *list)
        spin_lock(lock);
        while (!list_empty(list)) {
                bh = BH_ENTRY(list->next);
-               list_del(&bh->b_inode_buffers);
-               if (!buffer_dirty(bh) && !buffer_locked(bh))
-                       bh->b_inode = 0;
-               else {
-                       bh->b_inode = 1;
+               list_del_init(&bh->b_inode_buffers);
+               if (buffer_dirty(bh) || buffer_locked(bh)) {
                        list_add(&bh->b_inode_buffers, &tmp);
                        if (buffer_dirty(bh)) {
                                get_bh(bh);
@@ -2229,8 +2221,7 @@ EXPORT_SYMBOL(alloc_buffer_head);
 
 void free_buffer_head(struct buffer_head *bh)
 {
-       if (bh->b_inode)
-               BUG();
+       BUG_ON(!list_empty(&bh->b_inode_buffers));
        mempool_free(bh, bh_mempool);
 }
 EXPORT_SYMBOL(free_buffer_head);
@@ -2243,6 +2234,7 @@ static void init_buffer_head(void *data, kmem_cache_t *cachep, unsigned long fla
 
                memset(bh, 0, sizeof(*bh));
                bh->b_blocknr = -1;
+               INIT_LIST_HEAD(&bh->b_inode_buffers);
                init_waitqueue_head(&bh->b_wait);
        }
 }
index e350e386dab42e83fbf24fa5486213863d919522..16c8dc3de35b7ec4a79cab5703a4d9c82cfe92b7 100644 (file)
@@ -256,7 +256,6 @@ struct buffer_head {
 
        wait_queue_head_t b_wait;
 
-       int b_inode;                            /* will go away */
        struct list_head     b_inode_buffers;   /* doubly linked list of inode dirty buffers */
 };