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);
}
*/
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)
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);
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);
memset(bh, 0, sizeof(*bh));
bh->b_blocknr = -1;
+ INIT_LIST_HEAD(&bh->b_inode_buffers);
init_waitqueue_head(&bh->b_wait);
}
}