if (test_and_clear_bit(B_Prealloc, &b->b.flags))
if (b->b.physaddr == 0)
lafs_summary_allocate(fs, b->b.inode, -1);
- lafs_iounlock_block(&b->b, 0);
if (b->b.physaddr)
lafs_allocated_block(fs, &b->b, 0);
lafs_space_return(fs, 1);
printk("Erased unwritten block (p=%p) %s\n", b->b.parent, strblk(&b->b));
}
+ lafs_iounlock_block(&b->b, 0);
}
void
{
struct fs *fs = fs_from_inode(b->b.inode);
- lafs_iolock_block(&b->b);
+ BUG_ON(!test_bit(B_IOLock, &b->b.flags));
clear_bit(B_Valid, &b->b.flags);
if (test_and_clear_bit(B_Dirty, &b->b.flags))
lafs_space_return(fs, 1);
if (test_and_clear_bit(B_Realloc, &b->b.flags))
lafs_space_return(fs, 1);
- lafs_iounlock_block(&b->b, 0);
if (b->b.physaddr && !test_bit(B_InoIdx, &b->b.flags))
lafs_allocated_block(fs, &b->b, 0);
BUG_ON(b->parent == NULL && !test_bit(B_Root, &b->flags));
BUG_ON(ib->uninc_table.pending_cnt);
BUG_ON(atomic_read(&ib->pincnt[oldphase]));
+ BUG_ON(!test_bit(B_IOLock, &b->flags));
/* If this is the only reference, and pincnts are zero
* and all relevant flags are clear, then don't flip
BUG_ON(!test_bit(B_Dirty, &blk->flags) &&
!test_bit(B_Realloc, &blk->flags) &&
phys != 0);
+ BUG_ON(!test_bit(B_IOLock, &blk->flags));
if (test_bit(B_Root, &blk->flags)) {
int i;
} else {
BUG_ON(LAFSI(ino)->type != 0);
lafs_orphan_release(fs, b);
+ lafs_iolock_block(&ib->b);
lafs_erase_iblock(ib);
+ lafs_iounlock_block(&ib->b, 0);
lafs_erase_dblock(b);
}
putiref(ib, MKREF(inode_handle_orphan));
lafs_pin_dblock(blk); /* cannot fail during ! ->rolled */
lafs_dirty_dblock(blk);
+ lafs_iolock_block(&blk->b);
if (lafs_allocated_block(fs, &blk->b, baddr))
printk("MALLOC ERROR\n"); /* FIXME */
dprintk("Allocated block %lu to %llu\n",
(unsigned long)bnum, baddr);
+ lafs_iounlock_block(&blk->b, 0);
clear_bit(B_PinPending, &blk->b.flags);
clear_bit(B_Dirty, &blk->b.flags);