Lines Matching full:pctx
67 static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
96 struct problem_context *pctx;
288 struct problem_context *pctx)
290 if (!(pctx->inode->i_flags & BAD_SPECIAL_FLAGS))
293 if (!fix_problem(ctx, PR_1_SPECIAL_EXTENTS_IDATA, pctx))
296 pctx->inode->i_flags &= ~BAD_SPECIAL_FLAGS;
297 e2fsck_write_inode(ctx, pctx->ino, pctx->inode, "pass1");
306 static void check_immutable(e2fsck_t ctx, struct problem_context *pctx)
308 if (!(pctx->inode->i_flags & BAD_SPECIAL_FLAGS))
311 if (!fix_problem(ctx, PR_1_SET_IMMUTABLE, pctx))
314 pctx->inode->i_flags &= ~BAD_SPECIAL_FLAGS;
315 e2fsck_write_inode(ctx, pctx->ino, pctx->inode, "pass1");
322 static void check_size(e2fsck_t ctx, struct problem_context *pctx)
324 struct ext2_inode *inode = pctx->inode;
329 if (!fix_problem(ctx, PR_1_SET_NONZSIZE, pctx))
333 e2fsck_write_inode(ctx, pctx->ino, pctx->inode, "pass1");
336 static void check_ea_in_inode(e2fsck_t ctx, struct problem_context *pctx)
346 inode = (struct ext2_inode_large *) pctx->inode;
361 fix_problem(ctx, PR_1_EA_ALLOC_REGION_ABORT, pctx);
386 pctx->num = entry->e_name_len;
396 pctx->num = entry->e_value_size;
403 pctx->num = entry->e_value_block;
420 pctx->num = entry->e_hash;
442 if (problem == 0 || !fix_problem(ctx, problem, pctx))
447 e2fsck_write_inode_full(ctx, pctx->ino, pctx->inode,
466 static void check_inode_extra_space(e2fsck_t ctx, struct problem_context *pctx)
473 inode = (struct ext2_inode_large *) pctx->inode;
480 printf("inode #%u, i_extra_size %d\n", pctx->ino,
493 if (!fix_problem(ctx, PR_1_EXTRA_ISIZE, pctx))
499 e2fsck_write_inode_full(ctx, pctx->ino, pctx->inode,
512 check_ea_in_inode(ctx, pctx);
527 if (!fix_problem(ctx, PR_1_EA_TIME_OUT_OF_RANGE, pctx))
538 e2fsck_write_inode_full(ctx, pctx->ino, pctx->inode,
552 static void check_is_really_dir(e2fsck_t ctx, struct problem_context *pctx,
555 struct ext2_inode *inode = pctx->inode;
602 if (ext2fs_inline_data_size(ctx->fs, pctx->ino, &size))
634 if (ext2fs_bmap2(ctx->fs, pctx->ino, inode, 0, 0, 0, 0,
667 retval = ext2fs_read_dir_block4(ctx->fs, blk, buf, 0, pctx->ino);
678 (dirent->inode != pctx->ino) ||
696 if (fix_problem(ctx, PR_1_TREAT_AS_DIRECTORY, pctx)) {
698 e2fsck_write_inode_full(ctx, pctx->ino, inode,
744 struct problem_context *pctx)
766 if (!fix_problem(ctx, PR_1_INODE_ONLY_CSUM_INVALID, pctx))
835 struct problem_context *pctx,
846 pctx->errcode = recheck_bad_inode_checksum(ctx->fs, ino, ctx, pctx);
847 if (pctx->errcode)
850 #define FINISH_INODE_LOOP(ctx, ino, pctx, failed_csum) \
852 finish_processing_inode((ctx), (ino), (pctx), (failed_csum)); \
882 struct problem_context *pctx)
898 check_extents_inlinedata(ctx, pctx);
905 fix_problem(ctx, PR_1_CLEAR_INLINE_DATA_FOR_EXTENT, pctx)) {
920 fix_problem(ctx, PR_1_CLEAR_EXTENT_FOR_INLINE_DATA, pctx)) {
931 fix_problem(ctx, PR_1_CLEAR_EXTENT_INLINE_DATA_FLAGS, pctx)) {
945 if (fix_problem(ctx, PR_1_CLEAR_EXTENT_INLINE_DATA_INODE, pctx)) {
1059 struct problem_context pctx;
1071 clear_problem_context(&pctx);
1081 fix_problem(ctx, PR_1_PASS_HEADER, &pctx);
1111 pctx.errcode = e2fsck_allocate_inode_bitmap(fs, _("in-use inode map"),
1115 if (pctx.errcode) {
1116 pctx.num = 1;
1117 fix_problem(ctx, PR_1_ALLOCATE_IBITMAP_ERROR, &pctx);
1121 pctx.errcode = e2fsck_allocate_inode_bitmap(fs,
1125 if (pctx.errcode) {
1126 pctx.num = 2;
1127 fix_problem(ctx, PR_1_ALLOCATE_IBITMAP_ERROR, &pctx);
1131 pctx.errcode = e2fsck_allocate_inode_bitmap(fs,
1134 if (pctx.errcode) {
1135 pctx.num = 6;
1136 pctx);
1140 pctx.errcode = e2fsck_allocate_subcluster_bitmap(fs,
1143 if (pctx.errcode) {
1144 pctx.num = 1;
1145 fix_problem(ctx, PR_1_ALLOCATE_BBITMAP_ERROR, &pctx);
1149 pctx.errcode = e2fsck_allocate_block_bitmap(fs,
1152 if (pctx.errcode) {
1153 pctx.num = 1;
1154 fix_problem(ctx, PR_1_ALLOCATE_BBITMAP_ERROR, &pctx);
1158 pctx.errcode = e2fsck_setup_icount(ctx, "inode_link_info", 0, NULL,
1160 if (pctx.errcode) {
1161 fix_problem(ctx, PR_1_ALLOCATE_ICOUNT, &pctx);
1175 pctx.errcode = ext2fs_init_dblist(fs, 0);
1176 if (pctx.errcode) {
1177 fix_problem(ctx, PR_1_ALLOCATE_DBCOUNT, &pctx);
1197 pctx.errcode = ext2fs_convert_subcluster_bitmap(fs,
1199 if (pctx.errcode) {
1200 fix_problem(ctx, PR_1_CONVERT_SUBCLUSTER, &pctx);
1210 pctx.errcode = ext2fs_open_inode_scan(fs, ctx->inode_buffer_blocks,
1213 if (pctx.errcode) {
1214 fix_problem(ctx, PR_1_ISCAN_ERROR, &pctx);
1248 pctx.errcode = ext2fs_get_next_inode_full(scan, &ino,
1255 if (pctx.errcode == EXT2_ET_BAD_BLOCK_IN_INODE_TABLE) {
1263 &pctx)) {
1273 &pctx);
1281 &pctx);
1293 if (pctx.errcode &&
1294 pctx.errcode != EXT2_ET_INODE_CSUM_INVALID &&
1295 pctx.errcode != EXT2_ET_INODE_IS_GARBAGE) {
1296 fix_problem(ctx, PR_1_ISCAN_ERROR, &pctx);
1302 pctx.ino = ino;
1303 pctx.inode = inode;
1307 if (pctx.errcode == EXT2_ET_INODE_IS_GARBAGE &&
1309 fix_problem(ctx, PR_1_INODE_IS_GARBAGE, &pctx)) {
1310 pctx.errcode = 0;
1313 failed_csum = pctx.errcode != 0;
1316 pctx.errcode = ext2fs_icount_store(ctx->inode_link_info,
1318 if (pctx.errcode) {
1319 pctx.num = inode->i_links_count;
1320 fix_problem(ctx, PR_1_ICOUNT_STORE, &pctx);
1331 &pctx);
1343 pctx.errcode = ext2fs_inline_data_size(fs, ino, &size);
1344 if (!pctx.errcode && size &&
1345 fix_problem(ctx, PR_1_INLINE_DATA_FEATURE, &pctx)) {
1349 } else if (fix_problem(ctx, PR_1_INLINE_DATA_SET, &pctx)) {
1391 &pctx)) {
1395 pctx.errcode = err;
1408 pctx.errcode = err;
1434 fix_problem(ctx, PR_1_EXTENT_FEATURE, &pctx)) {
1438 } else if (fix_problem(ctx, PR_1_EXTENTS_SET, &pctx)) {
1474 (fix_problem(ctx, PR_1_UNSET_EXTENT_FL, &pctx))) {
1492 fix_problem(ctx, PR_1_INVALID_BAD_INODE, &pctx)) {
1499 pctx.errcode = ext2fs_copy_bitmap(ctx->block_found_map,
1501 if (pctx.errcode) {
1502 pctx.num = 4;
1503 fix_problem(ctx, PR_1_ALLOCATE_BBITMAP_ERROR, &pctx);
1514 pb.pctx = &pctx;
1516 pctx.errcode = ext2fs_block_iterate3(fs, ino, 0,
1519 if (pctx.errcode) {
1520 fix_problem(ctx, PR_1_BLOCK_ITERATE, &pctx);
1525 if (!fix_problem(ctx, PR_1_BBINODE_BAD_METABLOCK_PROMPT, &pctx)) {
1530 clear_problem_context(&pctx);
1531 FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
1540 if (fix_problem(ctx, PR_1_ROOT_NO_DIR, &pctx))
1553 if (fix_problem(ctx, PR_1_ROOT_DTIME, &pctx)) {
1565 &pctx)) {
1571 check_blocks(ctx, &pctx, block_buf);
1572 FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
1578 &pctx)) {
1592 &pctx)) {
1598 check_blocks(ctx, &pctx, block_buf);
1599 FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
1605 &pctx)) {
1629 if (fix_problem(ctx, problem, &pctx)) {
1636 check_blocks(ctx, &pctx, block_buf);
1637 FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
1660 if (fix_problem(ctx, PR_1_LOW_DTIME, &pctx)) {
1676 PR_1_ZERO_DTIME, &pctx)) {
1683 FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
1697 if (fix_problem(ctx, PR_1_SET_DTIME, &pctx)) {
1732 if (fix_problem(ctx, PR_1_SET_IMAGIC, &pctx)) {
1741 check_inode_extra_space(ctx, &pctx);
1742 check_is_really_dir(ctx, &pctx, block_buf);
1751 fix_problem(ctx, PR_1_FAST_SYMLINK_EXTENT_FL, &pctx)) {
1768 check_extents_inlinedata(ctx, &pctx);
1769 check_immutable(ctx, &pctx);
1770 check_size(ctx, &pctx);
1774 check_extents_inlinedata(ctx, &pctx);
1775 check_immutable(ctx, &pctx);
1776 check_size(ctx, &pctx);
1781 check_immutable(ctx, &pctx);
1784 FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
1788 check_blocks(ctx, &pctx, block_buf);
1789 FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
1795 check_extents_inlinedata(ctx, &pctx);
1796 check_immutable(ctx, &pctx);
1797 check_size(ctx, &pctx);
1801 check_extents_inlinedata(ctx, &pctx);
1802 check_immutable(ctx, &pctx);
1803 check_size(ctx, &pctx);
1832 check_blocks(ctx, &pctx, block_buf);
1834 FINISH_INODE_LOOP(ctx, ino, &pctx, failed_csum);
1880 clear_problem_context(&pctx);
1881 pctx.errcode = ext2fs_create_resize_inode(fs);
1882 if (pctx.errcode) {
1884 &pctx)) {
1888 pctx.errcode = 0;
1890 if (!pctx.errcode) {
1914 clear_problem_context(&pctx);
1915 fix_problem(ctx, PR_1_DUP_BLOCKS_PREENSTOP, &pctx);
1978 struct problem_context pctx;
1990 clear_problem_context(&pctx);
1992 pctx.inode = ctx->stashed_inode =
1994 pctx.ino = ctx->stashed_ino = inodes_to_process[i].ino;
1997 printf("%u ", pctx.ino);
2000 pctx.ino);
2002 check_blocks(ctx, &pctx, block_buf);
2043 struct problem_context pctx;
2046 clear_problem_context(&pctx);
2048 pctx.errcode = e2fsck_allocate_inode_bitmap(ctx->fs,
2051 if (pctx.errcode) {
2052 pctx.num = 3;
2053 fix_problem(ctx, PR_1_ALLOCATE_IBITMAP_ERROR, &pctx);
2064 struct problem_context pctx;
2067 pctx.errcode = ext2fs_u32_list_create(&ctx->encrypted_dirs, 0);
2068 if (pctx.errcode)
2071 pctx.errcode = ext2fs_u32_list_add(ctx->encrypted_dirs, ino);
2072 if (pctx.errcode == 0)
2075 fix_problem(ctx, PR_1_ALLOCATE_ENCRYPTED_DIRLIST, &pctx);
2085 struct problem_context pctx;
2087 clear_problem_context(&pctx);
2088 pctx.errcode = e2fsck_allocate_inode_bitmap(ctx->fs,
2091 if (pctx.errcode) {
2092 pctx.num = 4;
2093 fix_problem(ctx, PR_1_ALLOCATE_IBITMAP_ERROR, &pctx);
2105 struct problem_context pctx;
2107 clear_problem_context(&pctx);
2108 pctx.errcode = e2fsck_allocate_inode_bitmap(ctx->fs,
2111 if (pctx.errcode) {
2112 pctx.num = 5;
2113 fix_problem(ctx, PR_1_ALLOCATE_IBITMAP_ERROR, &pctx);
2129 struct problem_context pctx;
2131 clear_problem_context(&pctx);
2135 pctx.errcode = e2fsck_allocate_block_bitmap(ctx->fs,
2139 if (pctx.errcode) {
2140 pctx.num = 3;
2142 &pctx);
2175 struct problem_context pctx;
2181 clear_problem_context(&pctx);
2187 pctx.blk = blk;
2188 pctx.errcode = ext2fs_read_ext_attr3(fs, blk, block_buf,
2189 pctx.ino);
2190 if (pctx.errcode) {
2191 fix_problem(ctx, PR_1_EXTATTR_READ_ABORT, &pctx);
2195 pctx.blkcount = header->h_refcount;
2197 pctx.num = should_be;
2198 if (fix_problem(ctx, PR_1_EXTATTR_REFCOUNT, &pctx)) {
2200 pctx.errcode = ext2fs_write_ext_attr3(fs, blk,
2202 pctx.ino);
2203 if (pctx.errcode) {
2205 &pctx);
2215 static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
2219 ext2_ino_t ino = pctx->ino;
2220 struct ext2_inode *inode = pctx->inode;
2249 pctx->errcode = e2fsck_allocate_block_bitmap(fs,
2253 if (pctx->errcode) {
2254 pctx->num = 2;
2255 fix_problem(ctx, PR_1_ALLOCATE_BBITMAP_ERROR, pctx);
2263 pctx->errcode = ea_refcount_create(0, &ctx->refcount);
2264 if (pctx->errcode) {
2265 pctx->num = 1;
2266 fix_problem(ctx, PR_1_ALLOCATE_REFCOUNT, pctx);
2283 pctx->errcode = ea_refcount_create(0,
2285 if (pctx->errcode) {
2286 pctx->num = 2;
2287 fix_problem(ctx, PR_1_ALLOCATE_REFCOUNT, pctx);
2300 pctx->blk = blk;
2301 pctx->errcode = ext2fs_read_ext_attr3(fs, blk, block_buf, pctx->ino);
2302 if (pctx->errcode == EXT2_ET_EXT_ATTR_CSUM_INVALID) {
2303 pctx->errcode = 0;
2305 } else if (pctx->errcode == EXT2_ET_BAD_EA_HEADER)
2306 pctx->errcode = 0;
2308 if (pctx->errcode &&
2309 fix_problem(ctx, PR_1_READ_EA_BLOCK, pctx)) {
2310 pctx->errcode = 0;
2314 pctx->blk = ext2fs_file_acl_block(fs, inode);
2319 if (fix_problem(ctx, PR_1_BAD_EA_BLOCK, pctx))
2324 if (fix_problem(ctx, PR_1_EA_MULTI_BLOCK, pctx))
2328 if (pctx->errcode && fix_problem(ctx, PR_1_READ_EA_BLOCK, pctx))
2333 fix_problem(ctx, PR_1_EA_ALLOC_REGION_ABORT, pctx);
2338 if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION, pctx))
2349 if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION, pctx))
2357 if (fix_problem(ctx, PR_1_EA_BAD_NAME, pctx))
2362 if (fix_problem(ctx, PR_1_EA_BAD_VALUE, pctx))
2366 if (fix_problem(ctx, PR_1_EA_BAD_VALUE, pctx))
2373 if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION, pctx))
2381 pctx->num = entry->e_hash;
2382 if (fix_problem(ctx, PR_1_ATTR_HASH, pctx))
2390 if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION, pctx))
2400 fix_problem(ctx, PR_1_EA_BLOCK_ONLY_CSUM_INVALID, pctx)) {
2401 pctx->errcode = ext2fs_write_ext_attr3(fs, blk, block_buf,
2402 pctx->ino);
2403 if (pctx->errcode)
2423 static int handle_htree(e2fsck_t ctx, struct problem_context *pctx,
2433 fix_problem(ctx, PR_1_HTREE_NODIR, pctx)) ||
2435 fix_problem(ctx, PR_1_HTREE_SET, pctx)))
2438 pctx->errcode = ext2fs_bmap2(fs, ino, inode, 0, 0, 0, 0, &blk);
2440 if ((pctx->errcode) ||
2444 if (fix_problem(ctx, PR_1_HTREE_BADROOT, pctx))
2451 if (retval && fix_problem(ctx, PR_1_HTREE_BADROOT, pctx))
2458 fix_problem(ctx, PR_1_HTREE_BADROOT, pctx))
2461 pctx->num = root->hash_version;
2465 fix_problem(ctx, PR_1_HTREE_HASHV, pctx))
2469 fix_problem(ctx, PR_1_HTREE_INCOMPAT, pctx))
2472 pctx->num = root->indirect_levels;
2474 fix_problem(ctx, PR_1_HTREE_DEPTH, pctx))
2552 static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
2568 if (pctx->errcode == EXT2_ET_EXTENT_CSUM_INVALID)
2571 pctx->errcode = ext2fs_extent_get_info(ehandle, &info);
2572 if (pctx->errcode)
2592 pctx->errcode = ext2fs_extent_get(ehandle, EXT2_EXTENT_FIRST_SIB,
2594 while ((pctx->errcode == 0 ||
2595 pctx->errcode == EXT2_ET_EXTENT_CSUM_INVALID) &&
2598 is_dir = LINUX_S_ISDIR(pctx->inode->i_mode);
2602 pctx->blk = extent.e_pblk;
2603 pctx->blk2 = extent.e_lblk;
2604 pctx->num = extent.e_len;
2605 pctx->blkcount = extent.e_lblk + extent.e_len;
2638 fix_problem(ctx, PR_1_UNINIT_DBLOCK, pctx)) {
2641 pctx->errcode = ext2fs_extent_replace(ehandle, 0,
2643 if (pctx->errcode)
2650 if (fix_problem(ctx, problem, pctx)) {
2659 pctx->errcode = ext2fs_extent_get(
2664 if (pctx->errcode ==
2666 pctx->errcode = 0;
2673 pctx->errcode =
2675 if (pctx->errcode) {
2676 pctx->str = "ext2fs_extent_delete";
2679 pctx->errcode = ext2fs_extent_fix_parents(ehandle);
2680 if (pctx->errcode &&
2681 pctx->errcode != EXT2_ET_NO_CURRENT_NODE) {
2682 pctx->str = "ext2fs_extent_fix_parents";
2685 pctx->errcode = ext2fs_extent_get(ehandle,
2688 if (pctx->errcode == EXT2_ET_NO_CURRENT_NODE) {
2689 pctx->errcode = 0;
2713 pctx->blk = blk;
2716 pctx);
2719 pctx->errcode = ext2fs_extent_get(ehandle,
2721 if (pctx->errcode &&
2722 pctx->errcode != EXT2_ET_EXTENT_CSUM_INVALID) {
2723 pctx->str = "EXT2_EXTENT_DOWN";
2727 if (pctx->errcode == EXT2_ET_EXTENT_HEADER_BAD)
2736 pctx->blk = lblk;
2737 pctx->blk2 = extent.e_lblk;
2738 pctx->num = e_info.curr_level - 1;
2740 if (fix_problem(ctx, problem, pctx)) {
2742 pctx->errcode =
2744 if (pctx->errcode) {
2745 pctx->str = "ext2fs_extent_fix_parents";
2750 scan_extent_node(ctx, pctx, pb, extent.e_lblk,
2753 if (pctx->errcode)
2755 pctx->errcode = ext2fs_extent_get(ehandle,
2757 if (pctx->errcode) {
2758 pctx->str = "EXT2_EXTENT_UP";
2779 (unsigned long) pctx->ino, type,
2804 pctx
2805 pctx->blk2 = new_lblk;
2806 if (fix_problem(ctx, PR_1_COLLAPSE_DBLOCK, pctx)) {
2809 pctx->errcode = ext2fs_extent_replace(ehandle,
2811 if (pctx->errcode) {
2812 pctx->errcode = 0;
2815 pctx->errcode = ext2fs_extent_fix_parents(ehandle);
2816 if (pctx->errcode)
2818 pctx->errcode = ext2fs_extent_goto(ehandle,
2820 if (pctx->errcode)
2829 pctx->errcode = ext2fs_add_dir_block2(ctx->fs->dblist,
2832 if (pctx->errcode) {
2833 pctx->blk = 0;
2834 pctx->num = pb->last_db_block;
2857 pctx->blk = blockcnt;
2858 pctx->blk2 = blk;
2859 fix_problem(ctx, PR_1_MISALIGNED_CLUSTER, pctx);
2867 pctx->errcode = ext2fs_add_dir_block2(ctx->fs->dblist, pctx->ino, blk, blockcnt);
2868 if (pctx->errcode) {
2869 pctx->blk = blk;
2870 pctx->num = blockcnt;
2872 fix_problem(ctx, PR_1_ADD_DBLOCK, pctx);
2887 pctx->errcode = ext2fs_extent_get(ehandle,
2894 fix_problem(ctx, PR_1_EXTENT_ONLY_CSUM_INVALID, pctx)) {
2896 pctx->errcode = ext2fs_extent_replace(ehandle, 0, &extent);
2897 if (pctx->errcode)
2901 if (pctx->errcode == EXT2_ET_EXTENT_NO_NEXT)
2902 pctx->errcode = 0;
2905 static void check_blocks_extents(e2fsck_t ctx, struct problem_context *pctx,
2909 struct ext2_inode *inode = pctx->inode;
2912 ext2_ino_t ino = pctx->ino;
2921 if (fix_problem(ctx, PR_1_MISSING_EXTENT_HEADER, pctx))
2924 pctx->errcode = 0;
2929 pctx->errcode = ext2fs_extent_open2(fs, ino, inode, &ehandle);
2930 if (pctx->errcode) {
2931 if (fix_problem(ctx, PR_1_READ_EXTENT, pctx))
2934 pctx->errcode = 0;
2948 pctx->blk = info.max_depth;
2949 pctx->blk2 = ext2fs_max_extent_depth(ehandle);
2950 if (pctx->blk2 < pctx->blk &&
2951 fix_problem(ctx, PR_1_EXTENT_BAD_MAX_DEPTH, pctx))
2955 pctx->blk = MAX_EXTENT_DEPTH_COUNT;
2956 if (pctx->blk2 > pctx->blk)
2957 fix_problem(ctx, PR_1E_MAX_EXTENT_TREE_DEPTH, pctx);
2964 fix_problem(ctx, PR_1_EXTENT_ALLOC_REGION_ABORT, pctx);
2971 scan_extent_node(ctx, pctx, pb, 0, 0, eof_lblk, ehandle, 1);
2972 if (pctx->errcode &&
2973 fix_problem(ctx, PR_1_EXTENT_ITERATE_FAILURE, pctx)) {
2978 pctx->errcode = 0;
2992 e2fsck_should_rebuild_extents(ctx, pctx, &pb->eti, &info);
3000 static void check_blocks_inline_data(e2fsck_t ctx, struct problem_context *pctx,
3007 pctx->errcode = 0;
3012 pctx->errcode = ext2fs_add_dir_block2(ctx->fs->dblist, pb->ino, 0, 0);
3013 if (pctx->errcode)
3019 pctx->errcode = ext2fs_inline_data_size(ctx->fs, pb->ino,
3023 if (pctx->errcode) {
3024 pctx->errcode = 0;
3031 pctx->errcode = ext2fs_add_dir_block2(ctx->fs->dblist, pb->ino, 0, 1);
3032 if (pctx->errcode)
3037 pctx->blk = 0;
3038 pctx->num = 0;
3039 fix_problem(ctx, PR_1_ADD_DBLOCK, pctx);
3047 static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
3052 ext2_ino_t ino = pctx->ino;
3053 struct ext2_inode *inode = pctx->inode;
3074 pb.pctx = pctx;
3078 pctx->ino = ino;
3079 pctx->errcode = 0;
3084 if (check_ext_attr(ctx, pctx, block_buf)) {
3091 check_blocks_inline_data(ctx, pctx, &pb);
3094 check_blocks_extents(ctx, pctx, &pb);
3108 pctx->errcode = ext2fs_block_iterate3(fs, ino,
3142 if (pctx->errcode)
3143 fix_problem(ctx, PR_1_BLOCK_ITERATE, pctx);
3159 if (handle_htree(ctx, pctx, ino, inode, block_buf)) {
3169 if (fix_problem(ctx, PR_1_ZERO_LENGTH_DIR, pctx)) {
3202 err = ext2fs_inline_data_size(ctx->fs, pctx->ino,
3210 pctx->num = sz;
3244 /* Did inline_data set pctx->num earlier? */
3246 pctx->num = (pb.last_block + 1) * fs->blocksize;
3247 pctx->group = bad_size;
3248 if (fix_problem(ctx, PR_1_BAD_I_SIZE, pctx)) {
3250 pctx->num &= 0xFFFFFFFFULL;
3251 ext2fs_inode_size_set(fs, inode, pctx->num);
3260 pctx->num = 0;
3270 pctx->num = pb.num_blocks;
3271 if (fix_problem(ctx, PR_1_BAD_I_BLOCKS, pctx)) {
3276 pctx->num = 0;
3289 fix_problem(ctx, PR_1_NO_BIGALLOC_BLOCKMAP_FILES, pctx)) {
3290 pctx->errcode = e2fsck_rebuild_extents_later(ctx, ino);
3291 if (pctx->errcode)
3369 struct problem_context *pctx;
3376 pctx = p->pctx;
3385 pctx->errcode = ext2fs_add_dir_block2(fs->dblist, p->ino, 0, 0);
3386 if (pctx->errcode) {
3387 pctx->blk = blk;
3388 pctx->num = blockcnt;
3419 (unsigned long) pctx->ino, type,
3448 pctx->blk = blk;
3449 fix_problem(ctx, PR_1_CRITICAL_METADATA_COLLISION, pctx);
3478 if (fix_problem(ctx, PR_1_TOO_MANY_BAD_BLOCKS, pctx)) {
3482 if (fix_problem(ctx, PR_1_SUPPRESS_MESSAGES, pctx)) {
3488 pctx->blk = blk;
3489 pctx->blkcount = blockcnt;
3490 if (fix_problem(ctx, problem, pctx)) {
3531 pctx->blk = blockcnt;
3532 pctx->blk2 = blk;
3533 fix_problem(ctx, PR_1_MISALIGNED_CLUSTER, pctx);
3543 pctx->errcode = ext2fs_add_dir_block2(fs->dblist,
3546 if (pctx->errcode) {
3547 pctx->blk = 0;
3548 pctx->num = p->last_db_block;
3552 pctx->errcode = ext2fs_add_dir_block2(fs->dblist, p->ino,
3554 if (pctx->errcode) {
3555 pctx->blk = blk;
3556 pctx->num = blockcnt;
3558 fix_problem(ctx, PR_1_ADD_DBLOCK, pctx);
3578 struct problem_context *pctx;
3586 pctx = p->pctx;
3588 pctx->ino = EXT2_BAD_INO;
3589 pctx->blk = blk;
3590 pctx->blkcount = blockcnt;
3594 if (fix_problem(ctx, PR_1_BB_ILLEGAL_BLOCK_NUM, pctx)) {
3604 if (fix_problem(ctx, PR_1_BB_FS_BLOCK, pctx)) {
3612 pctx)) {
3642 pctx->group = i;
3643 pctx->blk = blk;
3650 pctx)) {
3656 fix_problem(ctx, PR_1_BAD_SUPERBLOCK, pctx);
3662 pctx->blk = *block_nr;
3664 PR_1_BAD_PRIMARY_GROUP_DESCRIPTOR, pctx)) {
3670 fix_problem(ctx, PR_1_BAD_GROUP_DESCRIPTORS, pctx);
3675 if (fix_problem(ctx, PR_1_BB_BAD_BLOCK, pctx)) {
3682 if (fix_problem(ctx, PR_1_IB_BAD_BLOCK, pctx)) {
3709 if (fix_problem(ctx, PR_1_BBINODE_BAD_METABLOCK, pctx)) {
3718 pctx->group = -1;
3721 fix_problem(ctx, PR_1_PROGERR_CLAIMED_BLOCK, pctx);
3737 struct problem_context pctx;
3739 clear_problem_context(&pctx);
3741 pctx.group = group;
3742 pctx.blk = old_block;
3743 pctx.str = name;
3762 pctx.errcode = ext2fs_get_free_blocks2(fs, first_block, last_block,
3765 if (is_flexbg && (pctx.errcode == EXT2_ET_BLOCK_ALLOC_FAIL))
3766 pctx.errcode = ext2fs_get_free_blocks2(fs,
3770 if (pctx.errcode) {
3771 pctx.num = num;
3772 fix_problem(ctx, PR_1_RELOC_BLOCK_ALLOCATE, &pctx);
3777 pctx.errcode = ext2fs_get_mem(fs->blocksize, &buf);
3778 if (pctx.errcode) {
3779 fix_problem(ctx, PR_1_RELOC_MEMORY_ALLOCATE, &pctx);
3786 pctx.blk2 = *new_block;
3788 PR_1_RELOC_TO), &pctx);
3789 pctx.blk2 = 0;
3791 pctx.blk = i;
3794 pctx.errcode = io_channel_read_blk64(fs->io,
3796 if (pctx.errcode)
3797 fix_problem(ctx, PR_1_RELOC_READ_ERR, &pctx);
3798 pctx.blk = (*new_block) + i;
3799 pctx.errcode = io_channel_write_blk64(fs->io, pctx.blk,
3802 pctx.blk = (*new_block) + i;
3803 pctx.errcode = ext2fs_zero_blocks2(fs, pctx.blk, 1,
3807 if (pctx.errcode)
3808 fix_problem(ctx, PR_1_RELOC_WRITE_ERR, &pctx);
3864 struct problem_context pctx;
3866 clear_problem_context(&pctx);
3869 pctx.group = i;
3883 pctx.blk = b;
3886 PR_1_ITABLE_CONFLICT, &pctx)) {
3905 pctx.blk = ext2fs_block_bitmap_loc(fs, i);
3906 if (fix_problem(ctx, PR_1_BB_CONFLICT, &pctx)) {
3923 pctx.blk = ext2fs_inode_bitmap_loc(fs, i);
3924 if (fix_problem(ctx, PR_1_IB_CONFLICT, &pctx)) {