struct address_space * const mapping = page->mapping;
int bits = PAGE_SHIFT - mapping->host->i_blkbits;
int i;
+ int credits = 0;
struct indexblock *parents[1<<bits];
struct datablock *b = NULL;
list_del_init(&b[i].b.lru);
list_del_init(&b[i].b.peers);
(void)getdref_locked(&b[i], MKREF(lafs_release));
+ if (test_and_clear_bit(B_Credit, &b[i].b.flags))
+ credits++;
+ if (test_and_clear_bit(B_ICredit, &b[i].b.flags))
+ credits++;
+ if (test_and_clear_bit(B_NCredit, &b[i].b.flags))
+ credits++;
+ if (test_and_clear_bit(B_NICredit, &b[i].b.flags))
+ credits++;
/* When !PagePrivate(page), && refcnt, we hold a ref on the
* first block which holds a ref on the page.
* When ref on firstblock with !PagePrivate(page) becomes zero,
ClearPagePrivate(page);
spin_unlock(&mapping->private_lock);
+ lafs_space_return(fs_from_inode(mapping->host), credits);
for (i = 0; i < (1<<bits); i++) {
putdref(&b[i], MKREF(lafs_release));