if (!entry->e_value_inum)
goto next;
if (!ctx->ea_inode_refs) {
- pctx->errcode = ea_refcount_create(0,
- &ctx->ea_inode_refs);
+ pctx->errcode = ea_refcount_create(&ctx->ea_inode_refs);
if (pctx->errcode) {
pctx->num = 4;
fix_problem(ctx, PR_1_ALLOCATE_REFCOUNT, pctx);
static errcode_t e2fsck_pass1_merge_ea_inode_refs(e2fsck_t global_ctx,
e2fsck_t thread_ctx)
{
- ea_value_t count;
- blk64_t blk;
+ ea_value_t thread_count, global_count;
+ ea_key_t ino;
errcode_t retval;
if (!thread_ctx->ea_inode_refs)
ea_refcount_intr_begin(thread_ctx->ea_inode_refs);
while (1) {
- if ((blk = ea_refcount_intr_next(thread_ctx->ea_inode_refs,
- &count)) == 0)
+ if ((ino = ea_refcount_intr_next(thread_ctx->ea_inode_refs,
+ &thread_count)) == 0)
break;
- if (!global_ctx->block_ea_map ||
- !ext2fs_fast_test_block_bitmap2(global_ctx->block_ea_map,
- blk)) {
- retval = ea_refcount_store(global_ctx->ea_inode_refs,
- blk, count);
- if (retval)
- return retval;
- }
+ ea_refcount_fetch(global_ctx->ea_inode_refs,
+ ino, &global_count);
+ retval = ea_refcount_store(global_ctx->ea_inode_refs,
+ ino, thread_count + global_count);
+ if (retval)
+ return retval;
}
return retval;
continue;
if (!global_ctx->refcount_extra) {
- retval = ea_refcount_create(0,
- &global_ctx->refcount_extra);
+ retval = ea_refcount_create(&global_ctx->refcount_extra);
if (retval)
return retval;
}
return retval;
/* Ooops, this EA was referenced more than it stated */
if (!global_ctx->refcount_extra) {
- retval = ea_refcount_create(0,
- &global_ctx->refcount_extra);
+ retval = ea_refcount_create(&global_ctx->refcount_extra);
if (retval)
return retval;
}
/* Create the EA refcount structure if necessary */
if (!ctx->refcount) {
- pctx->errcode = ea_refcount_create(0,
- &ctx->refcount_orig);
+ pctx->errcode = ea_refcount_create(&ctx->refcount_orig);
if (pctx->errcode) {
pctx->num = 1;
fix_problem(ctx, PR_1_ALLOCATE_REFCOUNT, pctx);
return 0;
}
- pctx->errcode = ea_refcount_create(0, &ctx->refcount);
+ pctx->errcode = ea_refcount_create(&ctx->refcount);
if (pctx->errcode) {
pctx->num = 1;
fix_problem(ctx, PR_1_ALLOCATE_REFCOUNT, pctx);
return 1;
/* Ooops, this EA was referenced more than it stated */
if (!ctx->refcount_extra) {
- pctx->errcode = ea_refcount_create(0,
- &ctx->refcount_extra);
+ pctx->errcode = ea_refcount_create(&ctx->refcount_extra);
if (pctx->errcode) {
pctx->num = 2;
fix_problem(ctx, PR_1_ALLOCATE_REFCOUNT, pctx);
if (quota_blocks != EXT2FS_C2B(fs, 1U)) {
if (!ctx->ea_block_quota_blocks) {
- pctx->errcode = ea_refcount_create(0,
- &ctx->ea_block_quota_blocks);
+ pctx->errcode = ea_refcount_create(&ctx->ea_block_quota_blocks);
if (pctx->errcode) {
pctx->num = 3;
goto refcount_fail;
if (quota_inodes) {
if (!ctx->ea_block_quota_inodes) {
- pctx->errcode = ea_refcount_create(0,
- &ctx->ea_block_quota_inodes);
+ pctx->errcode = ea_refcount_create(&ctx->ea_block_quota_inodes);
if (pctx->errcode) {
pctx->num = 4;
refcount_fail: