mutex_lock_nested(&im->i_mutex, I_MUTEX_QUOTA);
retry:
if (*bp) {
+ struct inode *i = (*bp)->b.inode;
putdref(*bp, MKREF(cfi_map));
+ iput(i);
*bp = NULL;
}
mutex_unlock(&im->i_mutex);
*inump = bit + (bnum << (im->i_blkbits + 3));
- iput(im);
return 0;
abort_unlock:
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 = NULL;
+
clear_bit(bit, buf);
if (buf[blksize/sizeof(*buf)-1] == 0 &&
find_first_bit(buf, blksize*8) == blksize*8)
else
lafs_dirty_dblock(imni->mb);
putdref(imni->ib, MKREF(cfi_ino));
+ if (imni->mb)
+ ino = imni->mb->b.inode;
putdref(imni->mb, MKREF(cfi_map));
+ if (ino)
+ iput(ino);
}
static void
inode_map_new_abort(struct inode_map_new_info *imni)
{
+ struct inode *ino = NULL;
if (imni->ib) {
clear_bit(B_Claimed, &imni->ib->b.flags);
clear_bit(B_PinPending, &imni->ib->b.flags);
imni->ib);
}
putdref(imni->ib, MKREF(cfi_ino));
+ if (imni->mb)
+ ino = imni->mb->b.inode;
putdref(imni->mb, MKREF(cfi_map));
+ if (ino)
+ iput(ino);
}
struct inode *