pass1d(ctx, block_buf);
print_resource_track(ctx, "Pass 1d", &rtrack, ctx->fs->io);
+ if (ext2fs_has_feature_shared_blocks(ctx->fs->super) &&
+ (ctx->options & E2F_OPT_UNSHARE_BLOCKS)) {
+ /*
+ * If we successfully managed to unshare all blocks, unset the
+ * shared block feature.
+ */
+ blk64_t next;
+ int result = ext2fs_find_first_set_block_bitmap2(
+ ctx->block_dup_map,
+ ctx->fs->super->s_first_data_block,
+ ext2fs_blocks_count(ctx->fs->super) - 1,
+ &next);
+ if (result == ENOENT) {
+ ext2fs_clear_feature_shared_blocks(ctx->fs->super);
+ ext2fs_mark_super_dirty(ctx->fs);
+ }
+ }
+
/*
* Time to free all of the accumulated data structures that we
* don't need anymore.
fix_problem(ctx, PR_1D_DUP_BLOCKS_DEALT, &pctx);
continue;
}
- if (fix_problem(ctx, PR_1D_CLONE_QUESTION, &pctx)) {
+ if ((ctx->options & E2F_OPT_UNSHARE_BLOCKS) ||
+ fix_problem(ctx, PR_1D_CLONE_QUESTION, &pctx)) {
pctx.errcode = clone_file(ctx, ino, p, block_buf);
if (pctx.errcode)
fix_problem(ctx, PR_1D_CLONE_ERROR, &pctx);
else
continue;
}
- if (fix_problem(ctx, PR_1D_DELETE_QUESTION, &pctx))
+ /*
+ * Note: When unsharing blocks, we don't prompt to delete
+ * files. If the clone operation fails than the unshare
+ * operation should fail too.
+ */
+ if (!(ctx->options & E2F_OPT_UNSHARE_BLOCKS) &&
+ fix_problem(ctx, PR_1D_DELETE_QUESTION, &pctx))
delete_file(ctx, ino, p, block_buf);
else
ext2fs_unmark_valid(fs);
cs->errcode = retval;
return BLOCK_ABORT;
}
+ if (ext2fs_has_feature_shared_blocks(fs->super)) {
+ /*
+ * Update the block stats so we don't get a prompt to fix block
+ * counts in the final pass.
+ */
+ ext2fs_block_alloc_stats2(fs, new_block, +1);
+ }
cluster_alloc_ok:
cs->alloc_block = new_block;
--- /dev/null
+Pass 1: Checking inodes, blocks, and sizes
+
+Running additional passes to resolve blocks claimed by more than one inode...
+Pass 1B: Rescanning for multiply-claimed blocks
+Multiply-claimed block(s) in inode 24: 10
+Multiply-claimed block(s) in inode 25: 9 9 9--10
+Multiply-claimed block(s) in inode 26: 9 9 9--10
+Multiply-claimed block(s) in inode 27: 9 9 9--10
+Multiply-claimed block(s) in inode 28: 9 9 9--10
+Multiply-claimed block(s) in inode 29: 9 9 9--10
+Multiply-claimed block(s) in inode 30: 9 9 9--10
+Multiply-claimed block(s) in inode 31: 9 9 9--10
+Multiply-claimed block(s) in inode 32: 9 9 9--10
+Pass 1C: Scanning directories for inodes with multiply-claimed blocks
+Pass 1D: Reconciling multiply-claimed blocks
+(There are 9 inodes containing multiply-claimed blocks.)
+
+File /file4.txt (inode #24, mod time Mon Mar 5 20:30:04 2018)
+ has 1 multiply-claimed block(s), shared with 8 file(s):
+ /file18.txt (inode #32, mod time Mon Mar 5 20:30:04 2018)
+ /file6.txt (inode #31, mod time Mon Mar 5 20:30:04 2018)
+ /file12.txt (inode #30, mod time Mon Mar 5 20:30:04 2018)
+ /file3.txt (inode #29, mod time Mon Mar 5 20:30:04 2018)
+ /file9.txt (inode #28, mod time Mon Mar 5 20:30:04 2018)
+ /file8.txt (inode #27, mod time Mon Mar 5 20:30:04 2018)
+ /file15.txt (inode #26, mod time Mon Mar 5 20:30:04 2018)
+ /file20.txt (inode #25, mod time Mon Mar 5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file20.txt (inode #25, mod time Mon Mar 5 20:30:04 2018)
+ has 4 multiply-claimed block(s), shared with 8 file(s):
+ /file18.txt (inode #32, mod time Mon Mar 5 20:30:04 2018)
+ /file6.txt (inode #31, mod time Mon Mar 5 20:30:04 2018)
+ /file12.txt (inode #30, mod time Mon Mar 5 20:30:04 2018)
+ /file3.txt (inode #29, mod time Mon Mar 5 20:30:04 2018)
+ /file9.txt (inode #28, mod time Mon Mar 5 20:30:04 2018)
+ /file8.txt (inode #27, mod time Mon Mar 5 20:30:04 2018)
+ /file15.txt (inode #26, mod time Mon Mar 5 20:30:04 2018)
+ /file4.txt (inode #24, mod time Mon Mar 5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file15.txt (inode #26, mod time Mon Mar 5 20:30:04 2018)
+ has 4 multiply-claimed block(s), shared with 8 file(s):
+ /file18.txt (inode #32, mod time Mon Mar 5 20:30:04 2018)
+ /file6.txt (inode #31, mod time Mon Mar 5 20:30:04 2018)
+ /file12.txt (inode #30, mod time Mon Mar 5 20:30:04 2018)
+ /file3.txt (inode #29, mod time Mon Mar 5 20:30:04 2018)
+ /file9.txt (inode #28, mod time Mon Mar 5 20:30:04 2018)
+ /file8.txt (inode #27, mod time Mon Mar 5 20:30:04 2018)
+ /file20.txt (inode #25, mod time Mon Mar 5 20:30:04 2018)
+ /file4.txt (inode #24, mod time Mon Mar 5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file8.txt (inode #27, mod time Mon Mar 5 20:30:04 2018)
+ has 4 multiply-claimed block(s), shared with 8 file(s):
+ /file18.txt (inode #32, mod time Mon Mar 5 20:30:04 2018)
+ /file6.txt (inode #31, mod time Mon Mar 5 20:30:04 2018)
+ /file12.txt (inode #30, mod time Mon Mar 5 20:30:04 2018)
+ /file3.txt (inode #29, mod time Mon Mar 5 20:30:04 2018)
+ /file9.txt (inode #28, mod time Mon Mar 5 20:30:04 2018)
+ /file15.txt (inode #26, mod time Mon Mar 5 20:30:04 2018)
+ /file20.txt (inode #25, mod time Mon Mar 5 20:30:04 2018)
+ /file4.txt (inode #24, mod time Mon Mar 5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file9.txt (inode #28, mod time Mon Mar 5 20:30:04 2018)
+ has 4 multiply-claimed block(s), shared with 8 file(s):
+ /file18.txt (inode #32, mod time Mon Mar 5 20:30:04 2018)
+ /file6.txt (inode #31, mod time Mon Mar 5 20:30:04 2018)
+ /file12.txt (inode #30, mod time Mon Mar 5 20:30:04 2018)
+ /file3.txt (inode #29, mod time Mon Mar 5 20:30:04 2018)
+ /file8.txt (inode #27, mod time Mon Mar 5 20:30:04 2018)
+ /file15.txt (inode #26, mod time Mon Mar 5 20:30:04 2018)
+ /file20.txt (inode #25, mod time Mon Mar 5 20:30:04 2018)
+ /file4.txt (inode #24, mod time Mon Mar 5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file3.txt (inode #29, mod time Mon Mar 5 20:30:04 2018)
+ has 4 multiply-claimed block(s), shared with 8 file(s):
+ /file18.txt (inode #32, mod time Mon Mar 5 20:30:04 2018)
+ /file6.txt (inode #31, mod time Mon Mar 5 20:30:04 2018)
+ /file12.txt (inode #30, mod time Mon Mar 5 20:30:04 2018)
+ /file9.txt (inode #28, mod time Mon Mar 5 20:30:04 2018)
+ /file8.txt (inode #27, mod time Mon Mar 5 20:30:04 2018)
+ /file15.txt (inode #26, mod time Mon Mar 5 20:30:04 2018)
+ /file20.txt (inode #25, mod time Mon Mar 5 20:30:04 2018)
+ /file4.txt (inode #24, mod time Mon Mar 5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file12.txt (inode #30, mod time Mon Mar 5 20:30:04 2018)
+ has 4 multiply-claimed block(s), shared with 8 file(s):
+ /file18.txt (inode #32, mod time Mon Mar 5 20:30:04 2018)
+ /file6.txt (inode #31, mod time Mon Mar 5 20:30:04 2018)
+ /file3.txt (inode #29, mod time Mon Mar 5 20:30:04 2018)
+ /file9.txt (inode #28, mod time Mon Mar 5 20:30:04 2018)
+ /file8.txt (inode #27, mod time Mon Mar 5 20:30:04 2018)
+ /file15.txt (inode #26, mod time Mon Mar 5 20:30:04 2018)
+ /file20.txt (inode #25, mod time Mon Mar 5 20:30:04 2018)
+ /file4.txt (inode #24, mod time Mon Mar 5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file6.txt (inode #31, mod time Mon Mar 5 20:30:04 2018)
+ has 4 multiply-claimed block(s), shared with 8 file(s):
+ /file18.txt (inode #32, mod time Mon Mar 5 20:30:04 2018)
+ /file12.txt (inode #30, mod time Mon Mar 5 20:30:04 2018)
+ /file3.txt (inode #29, mod time Mon Mar 5 20:30:04 2018)
+ /file9.txt (inode #28, mod time Mon Mar 5 20:30:04 2018)
+ /file8.txt (inode #27, mod time Mon Mar 5 20:30:04 2018)
+ /file15.txt (inode #26, mod time Mon Mar 5 20:30:04 2018)
+ /file20.txt (inode #25, mod time Mon Mar 5 20:30:04 2018)
+ /file4.txt (inode #24, mod time Mon Mar 5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+File /file18.txt (inode #32, mod time Mon Mar 5 20:30:04 2018)
+ has 4 multiply-claimed block(s), shared with 8 file(s):
+ /file6.txt (inode #31, mod time Mon Mar 5 20:30:04 2018)
+ /file12.txt (inode #30, mod time Mon Mar 5 20:30:04 2018)
+ /file3.txt (inode #29, mod time Mon Mar 5 20:30:04 2018)
+ /file9.txt (inode #28, mod time Mon Mar 5 20:30:04 2018)
+ /file8.txt (inode #27, mod time Mon Mar 5 20:30:04 2018)
+ /file15.txt (inode #26, mod time Mon Mar 5 20:30:04 2018)
+ /file20.txt (inode #25, mod time Mon Mar 5 20:30:04 2018)
+ /file4.txt (inode #24, mod time Mon Mar 5 20:30:04 2018)
+clone_file: Could not allocate block in ext2 filesystem returned from clone_file_block
+Couldn't clone file: Could not allocate block in ext2 filesystem
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+
+test_filesys: ********** WARNING: Filesystem still has errors **********
+
+test_filesys: 32/32 files (34.4% non-contiguous), 64/64 blocks
+Exit status is 4