int err;
int bit;
- mutex_lock_nested(&im->i_mutex, I_MUTEX_QUOTA);
-retry:
if (*bp) {
struct inode *i = (*bp)->b.inode;
putdref(*bp, MKREF(cfi_map));
*bp = NULL;
}
+ mutex_lock_nested(&im->i_mutex, I_MUTEX_QUOTA);
+retry:
bnum = LAFSI(im)->md.inodemap.thisblock;
if (bnum == NoBlock ||
err = -ENOSPC;
if (!b)
goto abort;
- *bp = b;
err = lafs_find_block(b, NOADOPT);
if (err)
goto abort;
if (b->b.physaddr == 0 && !test_bit(B_Valid, &b->b.flags)) {
LAFSI(im)->md.inodemap.nextbit =
(fs->blocksize<<3) + 1;
+ putdref(b,MKREF(cfi_map));
goto retry;
}
err = lafs_read_block(b);
fs->blocksize<<3, bit);
unmap_dblock(b, buf);
LAFSI(im)->md.inodemap.nextbit = bit+1;
- if (bit >= fs->blocksize<<3)
+ if (bit >= fs->blocksize<<3) {
+ putdref(b,MKREF(cfi_map));
goto retry;
-
+ }
mutex_unlock(&im->i_mutex);
+ *bp = b;
*inump = bit + (bnum << (im->i_blkbits + 3));
return 0;