buf = map_dblock(b);
while (bnum == 0 && bit < 16) {
/* Never return an inum below 16 - they are special */
- if (!test_bit(bit, (unsigned long *)buf))
- set_bit(bit, (unsigned long *)buf);
+ if (!generic_test_le_bit(bit, (unsigned long *)buf))
+ generic___clear_le_bit(bit, (unsigned long *)buf);
bit++;
}
- bit = find_next_bit((unsigned long *)buf,
- fs->blocksize<<3, bit);
+ bit = generic_find_next_le_bit((unsigned long *)buf,
+ fs->blocksize<<3, bit);
unmap_dblock(b, buf);
LAFSI(im)->md.inodemap.nextbit = bit+1;
if (bit >= fs->blocksize<<3) {
int blksize = imni->ib->b.inode->i_sb->s_blocksize;
int bit = imni->ib->b.fileaddr & (blksize*8 - 1);
int hole = 0;
- struct inode *ino;
+ struct inode *ino = imni->mb->b.inode;
+ mutex_lock_nested(&ino->i_mutex, I_MUTEX_QUOTA);
buf = map_dblock(imni->mb);
- clear_bit(bit, buf);
+ generic___clear_le_bit(bit, buf);
if (buf[blksize/sizeof(*buf)-1] == 0 &&
- find_first_bit(buf, blksize*8) == blksize*8)
+ generic_find_next_le_bit(buf, blksize*8, 0) == blksize*8)
/* block is empty, punch a hole */
hole = 1;
else
lafs_dirty_dblock(imni->mb);
- ino = imni->mb->b.inode;
putdref(imni->mb, MKREF(cfi_map));
+ mutex_unlock(&ino->i_mutex);
iput(ino);
}
putdref(imni->ib, MKREF(cfi_ino));
u32 bnum;
int err;
+ mutex_lock_nested(&im->i_mutex, I_MUTEX_QUOTA);
+
bnum = inum >> (3 + sb->s_blocksize_bits);
bit = inum - (bnum << (3 + sb->s_blocksize_bits));
b = lafs_get_block(im, bnum, NULL, GFP_KERNEL, MKREF(inode_map_free));
if (!b) {
+ mutex_unlock(&im->i_mutex);
iput(im);
return -ENOMEM;
}
err = lafs_read_block(b);
if (err) {
- iput(im);
putdref(b, MKREF(inode_map_free));
+ mutex_unlock(&im->i_mutex);
+ iput(im);
return err;
}
lafs_iolock_written(&b->b);
}
BUG_ON(err < 0);
buf = map_dblock(b);
- set_bit(bit, buf); // FIXME this is host-endian !!
+ generic___set_le_bit(bit, buf);
unmap_dblock(b, buf);
lafs_dirty_dblock(b);
putdref(b, MKREF(inode_map_free));
lafs_checkpoint_unlock(fs);
+ mutex_unlock(&im->i_mutex);
iput(im);
return 0;
}