From a435ec3449694a8fa299337197cc09624960a3a6 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Thu, 21 Aug 2003 00:40:26 -0400 Subject: [PATCH] Add support for backing up the journal inode location in the superblock. E2fsck will automatically save the journal information in the superblock if it is not there already, and will use it if the journal inode appears to be corrupted. ext2fs_add_journal_inode() will also save the backup information, so that new filesystems created by mke2fs and filesystems that have journals added via tune2fs will also have journal location written to the superblock as well. Debugfs's logdump command has been enhanced so that it can use the journal information in the superblock. The debugfs man page has been improved to more fully describe the logdump command. Added two new functions, ext2fs_file_open2() and ext2fs_inode_io_intern2() which take a pointer to an inode structure; this is needed so that e2fsck and debugfs can synthesize a fake journal inode and use it to access the journal. --- debugfs/ChangeLog | 8 ++++ debugfs/debugfs.8.in | 32 +++++++++++++- debugfs/logdump.c | 31 +++++++++++--- e2fsck/ChangeLog | 12 ++++++ e2fsck/journal.c | 93 ++++++++++++++++++++++++++++++++--------- e2fsck/problem.c | 5 +++ e2fsck/problem.h | 3 ++ lib/e2p/ChangeLog | 4 ++ lib/e2p/ls.c | 10 +++++ lib/ext2fs/ChangeLog | 15 +++++++ lib/ext2fs/ext2_fs.h | 10 ++++- lib/ext2fs/ext2fs.h | 6 +++ lib/ext2fs/fileio.c | 31 ++++++++++---- lib/ext2fs/inode_io.c | 24 +++++++++-- lib/ext2fs/mkjournal.c | 5 +++ tests/ChangeLog | 11 +++++ tests/f_bad_local_jnl/expect.1 | 6 ++- tests/f_badorphan/expect.1 | 2 + tests/f_h_badroot/expect.1 | 2 + tests/f_h_reindex/expect.1 | 2 + tests/f_journal/expect.1 | 2 + tests/f_journal/image.gz | Bin 36607 -> 36380 bytes tests/f_journal/name | 2 +- tests/f_special_ea/expect.1 | 4 ++ 24 files changed, 275 insertions(+), 45 deletions(-) diff --git a/debugfs/ChangeLog b/debugfs/ChangeLog index cdac00a..ec0af88 100644 --- a/debugfs/ChangeLog +++ b/debugfs/ChangeLog @@ -1,3 +1,11 @@ +2003-08-21 Theodore Ts'o + + * debugfs.8.in: Fully document the logdump command in the debugfs + man page. + + * logdump.c (do_logdump): Add -s option which will use the journal + inode information in the superblock. + 2003-07-25 Theodore Ts'o * Release of E2fsprogs 1.34 diff --git a/debugfs/debugfs.8.in b/debugfs/debugfs.8.in index f51f8fe..fa7e3fb 100644 --- a/debugfs/debugfs.8.in +++ b/debugfs/debugfs.8.in @@ -270,8 +270,36 @@ which is a link to .IR filespec . Note this does not adjust the inode reference counts. .TP -.I logdump [-ac] [-b] [-i] [-f] [output_file] -Dump the contents of the ext3 journal. +.I logdump [-acs] [-b] [-i] [-f] [output_file] +Dump the contents of the ext3 journal. By default, the journal inode as +specified in the superblock. However, this can be overridden with the +.I \-i +option, which uses an inode specifier to specify the journal to be +used. A file containing journal data can be specified using the +.I \-f +option. Finally, the +.I \-s +option utilizes the backup information in the superblock to locate the +journal. +.IP +The +.I \-a +option causes the +.I logdump +program to print the contents of all of the descriptor blocks. +The +.I \-b +option causes +.I logdump +to print all journal records that are refer to the specified block. +The +.I \-c +option will print out the contents of all of the data blocks selected by +the +.I \-a +and +.I \-b +options. .TP .I ls [-l] [-d] filespec Print a listing of the files in the directory diff --git a/debugfs/logdump.c b/debugfs/logdump.c index f3f2e5d..fcc12f0 100644 --- a/debugfs/logdump.c +++ b/debugfs/logdump.c @@ -79,6 +79,7 @@ void do_logdump(int argc, char **argv) char *inode_spec = NULL; char *journal_fn = NULL; int journal_fd = 0; + int use_sb = 0; ext2_ino_t journal_inum; struct ext2_inode journal_inode; ext2_file_t journal_file; @@ -101,7 +102,7 @@ void do_logdump(int argc, char **argv) inode_to_dump = -1; reset_getopt(); - while ((c = getopt (argc, argv, "ab:ci:f:")) != EOF) { + while ((c = getopt (argc, argv, "ab:ci:f:s")) != EOF) { switch (c) { case 'a': dump_all++; @@ -125,6 +126,9 @@ void do_logdump(int argc, char **argv) inode_spec = optarg; dump_descriptors = 0; break; + case 's': + use_sb++; + break; default: com_err(argv[0], 0, logdump_usage); return; @@ -199,11 +203,26 @@ void do_logdump(int argc, char **argv) journal_source.where = JOURNAL_IS_EXTERNAL; journal_source.fd = journal_fd; } else if ((journal_inum = es->s_journal_inum)) { - if (debugfs_read_inode(journal_inum, &journal_inode, argv[0])) - return; - - retval = ext2fs_file_open(current_fs, journal_inum, - 0, &journal_file); + if (use_sb) { + if (es->s_jnl_backup_type != EXT3_JNL_BACKUP_BLOCKS) { + com_err(argv[0], 0, + "no journal backup in super block\n"); + return; + } + memset(&journal_inode, 0, sizeof(struct ext2_inode)); + memcpy(&journal_inode.i_block[0], es->s_jnl_blocks, + EXT2_N_BLOCKS*4); + journal_inode.i_size = es->s_jnl_blocks[16]; + journal_inode.i_links_count = 1; + journal_inode.i_mode = LINUX_S_IFREG | 0600; + } else { + if (debugfs_read_inode(journal_inum, &journal_inode, + argv[0])) + return; + } + + retval = ext2fs_file_open2(current_fs, journal_inum, + &journal_inode, 0, &journal_file); if (retval) { com_err(argv[0], retval, "while opening ext2 file"); return; diff --git a/e2fsck/ChangeLog b/e2fsck/ChangeLog index e32d0b5..2a8b9c8 100644 --- a/e2fsck/ChangeLog +++ b/e2fsck/ChangeLog @@ -1,3 +1,15 @@ +2003-08-20 Theodore Ts'o + + * journal.c (e2fsck_move_ext3_journal): If the superblock's backup + journal information is not set, copy the journal inode + information to the superblock. + (e2fsck_get_journal): If the journal inode is corrupted, + synthesize one from the backup information in the + superblock. + + * problem.c, problem.h (PR_0_BACKUP_JNL): Add new problem code + which is used when we make a backup of the journal inode. + 2003-08-19 Theodore Ts'o * e2fsck.h, unix.c (PRS, e2fsck_clear_progbar, diff --git a/e2fsck/journal.c b/e2fsck/journal.c index 1ca7366..8ef4a36 100644 --- a/e2fsck/journal.c +++ b/e2fsck/journal.c @@ -188,7 +188,10 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal) errcode_t retval = 0; io_manager io_ptr = 0; unsigned long start = 0; + blk_t blk; int ext_journal = 0; + int tried_backup_jnl = 0; + int i; clear_problem_context(&pctx); @@ -228,24 +231,50 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal) if ((retval = ext2fs_read_inode(ctx->fs, sb->s_journal_inum, - &j_inode->i_ext2))) - goto errout; + &j_inode->i_ext2))) { + try_backup_journal: + if (sb->s_jnl_backup_type != EXT3_JNL_BACKUP_BLOCKS || + tried_backup_jnl) + goto errout; + memset(&j_inode->i_ext2, 0, sizeof(struct ext2_inode)); + memcpy(&j_inode->i_ext2.i_block[0], sb->s_jnl_blocks, + EXT2_N_BLOCKS*4); + j_inode->i_ext2.i_size = sb->s_jnl_blocks[16]; + j_inode->i_ext2.i_links_count = 1; + j_inode->i_ext2.i_mode = LINUX_S_IFREG | 0600; + tried_backup_jnl++; + } if (!j_inode->i_ext2.i_links_count || !LINUX_S_ISREG(j_inode->i_ext2.i_mode)) { retval = EXT2_ET_NO_JOURNAL; - goto errout; + goto try_backup_journal; } if (j_inode->i_ext2.i_size / journal->j_blocksize < JFS_MIN_JOURNAL_BLOCKS) { retval = EXT2_ET_JOURNAL_TOO_SMALL; - goto errout; + goto try_backup_journal; + } + for (i=0; i < EXT2_N_BLOCKS; i++) { + blk = j_inode->i_ext2.i_block[i]; + if (!blk) { + if (i < EXT2_NDIR_BLOCKS) { + retval = EXT2_ET_JOURNAL_TOO_SMALL; + goto try_backup_journal; + } + continue; + } + if (blk < sb->s_first_data_block || + blk >= sb->s_blocks_count) { + retval = EXT2_ET_BAD_BLOCK_NUM; + goto try_backup_journal; + } } - journal->j_maxlen = j_inode->i_ext2.i_size / journal->j_blocksize; #ifdef USE_INODE_IO - retval = ext2fs_inode_io_intern(ctx->fs, sb->s_journal_inum, - &journal_name); + retval = ext2fs_inode_io_intern2(ctx->fs, sb->s_journal_inum, + &j_inode->i_ext2, + &journal_name); if (retval) goto errout; @@ -439,7 +468,7 @@ static errcode_t e2fsck_journal_load(journal_t *journal) case JFS_SUPERBLOCK_V2: journal->j_format_version = 2; if (ntohl(jsb->s_nr_users) > 1 && - (ctx->fs->io == ctx->journal_io)) + uuid_is_null(ctx->fs->super->s_journal_uuid)) clear_v2_journal_fields(journal); if (ntohl(jsb->s_nr_users) > 1) { fix_problem(ctx, PR_0_JOURNAL_UNSUPP_MULTIFS, &pctx); @@ -807,18 +836,51 @@ void e2fsck_move_ext3_journal(e2fsck_t ctx) const char * const * cpp; int group, mount_flags; + clear_problem_context(&pctx); + /* * If the filesystem is opened read-only, or there is no - * journal, or the journal is already in the hidden inode, - * then do nothing. + * journal, then do nothing. */ if ((ctx->options & E2F_OPT_READONLY) || (sb->s_journal_inum == 0) || - (sb->s_journal_inum == EXT2_JOURNAL_INO) || !(sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL)) return; /* + * Read in the journal inode + */ + if (ext2fs_read_inode(fs, sb->s_journal_inum, &inode) != 0) + return; + + /* + * If it's necessary to backup the journal inode, do so. + */ + if ((sb->s_jnl_backup_type == 0) || + ((sb->s_jnl_backup_type == EXT3_JNL_BACKUP_BLOCKS) && + memcmp(inode.i_block, sb->s_jnl_blocks, EXT2_N_BLOCKS*4))) { + if (fix_problem(ctx, PR_0_BACKUP_JNL, &pctx)) { + memcpy(sb->s_jnl_blocks, inode.i_block, + EXT2_N_BLOCKS*4); + sb->s_jnl_blocks[16] = inode.i_size; + sb->s_jnl_backup_type = EXT3_JNL_BACKUP_BLOCKS; + ext2fs_mark_super_dirty(fs); + } + } + + /* + * If the journal is already the hidden inode, then do nothing + */ + if (sb->s_journal_inum == EXT2_JOURNAL_INO) + return; + + /* + * The journal inode had better have only one link and not be readable. + */ + if (inode.i_links_count != 1) + return; + + /* * If the filesystem is mounted, or we can't tell whether * or not it's mounted, do nothing. */ @@ -839,20 +901,11 @@ void e2fsck_move_ext3_journal(e2fsck_t ctx) if (*cpp == 0) return; - /* - * The inode had better have only one link and not be readable. - */ - if (ext2fs_read_inode(fs, ino, &inode) != 0) - return; - if (inode.i_links_count != 1) - return; - /* We need the inode bitmap to be loaded */ retval = ext2fs_read_bitmaps(fs); if (retval) return; - clear_problem_context(&pctx); pctx.str = *cpp; if (!fix_problem(ctx, PR_0_MOVE_JOURNAL, &pctx)) return; diff --git a/e2fsck/problem.c b/e2fsck/problem.c index b8187c9..cc50bf1 100644 --- a/e2fsck/problem.c +++ b/e2fsck/problem.c @@ -309,6 +309,11 @@ static const struct e2fsck_problem problem_table[] = { "Clearing fields beyond the V1 @j @S...\n\n"), PROMPT_NONE, 0 }, + /* Backup journal inode blocks */ + { PR_0_BACKUP_JNL, + N_("Backing up @j @i @b information.\n\n"), + PROMPT_NONE, 0 }, + /* Pass 1 errors */ /* Pass 1: Checking inodes, blocks, and sizes */ diff --git a/e2fsck/problem.h b/e2fsck/problem.h index 8626f7f..b8e6c13 100644 --- a/e2fsck/problem.h +++ b/e2fsck/problem.h @@ -172,6 +172,9 @@ struct problem_context { /* Run journal anyway by default */ #define PR_0_JOURNAL_RUN_DEFAULT 0x00002C +/* Backup journal inode blocks */ +#define PR_0_BACKUP_JNL 0x00002D + /* * Pass 1 errors */ diff --git a/lib/e2p/ChangeLog b/lib/e2p/ChangeLog index cf73b71..388e4c8 100644 --- a/lib/e2p/ChangeLog +++ b/lib/e2p/ChangeLog @@ -1,3 +1,7 @@ +2003-08-20 Theodore Ts'o + + * ls.c (list_super2): Display the journal backup type. + 2003-07-25 Theodore Ts'o * Release of E2fsprogs 1.34 diff --git a/lib/e2p/ls.c b/lib/e2p/ls.c index d5a112c..3f71eb0 100644 --- a/lib/e2p/ls.c +++ b/lib/e2p/ls.c @@ -259,6 +259,16 @@ void list_super2(struct ext2_super_block * sb, FILE *f) if (!e2p_is_null_uuid(sb->s_hash_seed)) fprintf(f, "Directory Hash Seed: %s\n", e2p_uuid2str(sb->s_hash_seed)); + if (sb->s_jnl_backup_type) { + fprintf(f, "Journal backup: "); + switch (sb->s_jnl_backup_type) { + case 1: + fprintf(f, "inode blocks\n"); + break; + default: + fprintf(f, "type %u\n", sb->s_jnl_backup_type); + } + } } void list_super (struct ext2_super_block * s) diff --git a/lib/ext2fs/ChangeLog b/lib/ext2fs/ChangeLog index 7181f98..52b2944 100644 --- a/lib/ext2fs/ChangeLog +++ b/lib/ext2fs/ChangeLog @@ -1,3 +1,18 @@ +2003-08-20 Theodore Ts'o + + * inode_io.c (ext2fs_inode_io_intern2), ext2fs.h: Add new function + allows the caller to pass in the inode data structure. + + * fileio.c (ext2fs_file_open2), ext2fs.h: Add new function which + allows the caller to pass in the inode to be used in the + file I/O. + + * ext2_fs.h: Add a backup of the location of the journal inode + blocks to the superblock. + + * mkjournal.c (write_journal_inode): Save the location of the + journal inode to the backup location in the superblock. + 2003-08-01 Philipp Thomas * alloc.c, badblocks.c, bb_inode.c, bitmaps.c, block.c, bmap.c, diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h index 6ace0a9..f9f96b5 100644 --- a/lib/ext2fs/ext2_fs.h +++ b/lib/ext2fs/ext2_fs.h @@ -441,12 +441,13 @@ struct ext2_super_block { __u32 s_last_orphan; /* start of list of inodes to delete */ __u32 s_hash_seed[4]; /* HTREE hash seed */ __u8 s_def_hash_version; /* Default hash version to use */ - __u8 s_reserved_char_pad; + __u8 s_jnl_backup_type; /* Default type of journal backup */ __u16 s_reserved_word_pad; __u32 s_default_mount_opts; __u32 s_first_meta_bg; /* First metablock group */ __u32 s_mkfs_time; /* When the filesystem was created */ - __u32 s_reserved[189]; /* Padding to the end of the block */ + __u32 s_jnl_blocks[16]; /* Backup of the journal inode */ + __u32 s_reserved[173]; /* Padding to the end of the block */ }; /* @@ -470,6 +471,11 @@ struct ext2_super_block { #define EXT2_GOOD_OLD_INODE_SIZE 128 /* + * Journal inode backup types + */ +#define EXT3_JNL_BACKUP_BLOCKS 1 + +/* * Feature set definitions */ diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h index 8087fa2..77b2de7 100644 --- a/lib/ext2fs/ext2fs.h +++ b/lib/ext2fs/ext2fs.h @@ -686,6 +686,9 @@ extern errcode_t ext2fs_adjust_ea_refcount(ext2_filsys fs, blk_t blk, int adjust, __u32 *newcount); /* fileio.c */ +extern errcode_t ext2fs_file_open2(ext2_filsys fs, ext2_ino_t ino, + struct ext2_inode *inode, + int flags, ext2_file_t *ret); extern errcode_t ext2fs_file_open(ext2_filsys fs, ext2_ino_t ino, int flags, ext2_file_t *ret); extern ext2_filsys ext2fs_file_get_fs(ext2_file_t file); @@ -784,6 +787,9 @@ extern errcode_t ext2fs_check_directory(ext2_filsys fs, ext2_ino_t ino); extern io_manager inode_io_manager; extern errcode_t ext2fs_inode_io_intern(ext2_filsys fs, ext2_ino_t ino, char **name); +extern errcode_t ext2fs_inode_io_intern2(ext2_filsys fs, ext2_ino_t ino, + struct ext2_inode *inode, + char **name); /* ismounted.c */ extern errcode_t ext2fs_check_if_mounted(const char *file, int *mount_flags); diff --git a/lib/ext2fs/fileio.c b/lib/ext2fs/fileio.c index 39455b9..3e42cbc 100644 --- a/lib/ext2fs/fileio.c +++ b/lib/ext2fs/fileio.c @@ -32,8 +32,9 @@ struct ext2_file { #define BMAP_BUFFER (file->buf + fs->blocksize) -errcode_t ext2fs_file_open(ext2_filsys fs, ext2_ino_t ino, - int flags, ext2_file_t *ret) +errcode_t ext2fs_file_open2(ext2_filsys fs, ext2_ino_t ino, + struct ext2_inode *inode, + int flags, ext2_file_t *ret) { ext2_file_t file; errcode_t retval; @@ -56,9 +57,13 @@ errcode_t ext2fs_file_open(ext2_filsys fs, ext2_ino_t ino, file->ino = ino; file->flags = flags & EXT2_FILE_MASK; - retval = ext2fs_read_inode(fs, ino, &file->inode); - if (retval) - goto fail; + if (inode) { + memcpy(&file->inode, inode, sizeof(struct ext2_inode)); + } else { + retval = ext2fs_read_inode(fs, ino, &file->inode); + if (retval) + goto fail; + } retval = ext2fs_get_mem(fs->blocksize * 3, &file->buf); if (retval) @@ -74,6 +79,12 @@ fail: return retval; } +errcode_t ext2fs_file_open(ext2_filsys fs, ext2_ino_t ino, + int flags, ext2_file_t *ret) +{ + return ext2fs_file_open2(fs, ino, NULL, flags, ret); +} + /* * This function returns the filesystem handle of a file from the structure */ @@ -106,7 +117,7 @@ errcode_t ext2fs_file_flush(ext2_file_t file) */ if (!file->physblock) { retval = ext2fs_bmap(fs, file->ino, &file->inode, - BMAP_BUFFER, BMAP_ALLOC, + BMAP_BUFFER, file->ino ? BMAP_ALLOC : 0, file->blockno, &file->physblock); if (retval) return retval; @@ -353,9 +364,11 @@ errcode_t ext2fs_file_set_size(ext2_file_t file, ext2_off_t size) file->inode.i_size = size; file->inode.i_size_high = 0; - retval = ext2fs_write_inode(file->fs, file->ino, &file->inode); - if (retval) - return retval; + if (file->ino) { + retval = ext2fs_write_inode(file->fs, file->ino, &file->inode); + if (retval) + return retval; + } /* * XXX truncate inode if necessary diff --git a/lib/ext2fs/inode_io.c b/lib/ext2fs/inode_io.c index 5126bae..b5c08b9 100644 --- a/lib/ext2fs/inode_io.c +++ b/lib/ext2fs/inode_io.c @@ -36,10 +36,13 @@ struct inode_private_data { ext2_file_t file; ext2_filsys fs; ext2_ino_t ino; + struct ext2_inode inode; int flags; struct inode_private_data *next; }; +#define CHANNEL_HAS_INODE 0x8000 + static struct inode_private_data *top_intern; static int ino_unique = 0; @@ -68,8 +71,9 @@ static struct struct_io_manager struct_inode_manager = { io_manager inode_io_manager = &struct_inode_manager; -errcode_t ext2fs_inode_io_intern(ext2_filsys fs, ext2_ino_t ino, - char **name) +errcode_t ext2fs_inode_io_intern2(ext2_filsys fs, ext2_ino_t ino, + struct ext2_inode *inode, + char **name) { struct inode_private_data *data; errcode_t retval; @@ -83,12 +87,22 @@ errcode_t ext2fs_inode_io_intern(ext2_filsys fs, ext2_ino_t ino, data->fs = fs; data->ino = ino; data->flags = 0; + if (inode) { + memcpy(&data->inode, inode, sizeof(struct ext2_inode)); + data->flags |= CHANNEL_HAS_INODE; + } data->next = top_intern; top_intern = data; *name = data->name; return 0; } +errcode_t ext2fs_inode_io_intern(ext2_filsys fs, ext2_ino_t ino, + char **name) +{ + return ext2fs_inode_io_intern2(fs, ino, NULL, name); +} + static errcode_t inode_open(const char *name, int flags, io_channel *channel) { @@ -130,8 +144,10 @@ static errcode_t inode_open(const char *name, int flags, io_channel *channel) io->refcount = 1; open_flags = (flags & IO_FLAG_RW) ? EXT2_FILE_WRITE : 0; - retval = ext2fs_file_open(data->fs, data->ino, open_flags, - &data->file); + retval = ext2fs_file_open2(data->fs, data->ino, + (data->flags & CHANNEL_HAS_INODE) ? + &data->inode : 0, open_flags, + &data->file); if (retval) goto cleanup; diff --git a/lib/ext2fs/mkjournal.c b/lib/ext2fs/mkjournal.c index 8a44071..abf162e 100644 --- a/lib/ext2fs/mkjournal.c +++ b/lib/ext2fs/mkjournal.c @@ -236,6 +236,11 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino, goto errout; retval = 0; + memcpy(fs->super->s_jnl_blocks, inode.i_block, EXT2_N_BLOCKS*4); + fs->super->s_jnl_blocks[16] = inode.i_size; + fs->super->s_jnl_backup_type = EXT3_JNL_BACKUP_BLOCKS; + ext2fs_mark_super_dirty(fs); + errout: ext2fs_free_mem(&buf); return retval; diff --git a/tests/ChangeLog b/tests/ChangeLog index d20b018..455ae13 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,14 @@ +2003-08-20 Theodore Ts'o + + * f_bad_local_jnl, f_badorphan, f_h_badroot, f_h_reindex, + f_special_ea: Update tests to reflect that e2fsck will + backup the journal inode. + + * f_journal: Change test to include a backed up journal location + in the superblock, and then corrupt the inode table so the + journal inode is trashed. Make sure e2fsck can recover + from it. + 2003-08-01 Theodore Ts'o * f_salveage_dir: Remove HTREE flag from the test image's diff --git a/tests/f_bad_local_jnl/expect.1 b/tests/f_bad_local_jnl/expect.1 index d8f6551..10140b5 100644 --- a/tests/f_bad_local_jnl/expect.1 +++ b/tests/f_bad_local_jnl/expect.1 @@ -1,10 +1,14 @@ Found invalid V2 journal superblock fields (from V1 journal). Clearing fields beyond the V1 journal superblock... +Backing up journal inode block information. + Pass 1: Checking inodes, blocks, and sizes 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: 11/256 files (0.0% non-contiguous), 1080/8192 blocks -Exit status is 0 +Exit status is 1 diff --git a/tests/f_badorphan/expect.1 b/tests/f_badorphan/expect.1 index c75d592..ecf0bf7 100644 --- a/tests/f_badorphan/expect.1 +++ b/tests/f_badorphan/expect.1 @@ -2,6 +2,8 @@ Clearing orphaned inode 54 (uid=0, gid=0, mode=0100600, size=44610) Clearing orphaned inode 32 (uid=0, gid=0, mode=040700, size=1024) Clearing orphaned inode 67 (uid=0, gid=0, mode=040700, size=1024) Clearing orphaned inode 55 (uid=0, gid=0, mode=040700, size=1024) +Backing up journal inode block information. + Pass 1: Checking inodes, blocks, and sizes Inodes that were part of a corrupted orphan linked list found. Fix? yes diff --git a/tests/f_h_badroot/expect.1 b/tests/f_h_badroot/expect.1 index 398eea2..cd49ccf 100644 --- a/tests/f_h_badroot/expect.1 +++ b/tests/f_h_badroot/expect.1 @@ -1,3 +1,5 @@ +Backing up journal inode block information. + Pass 1: Checking inodes, blocks, and sizes HTREE directory inode 13345 has an invalid root node. Clear HTree index? yes diff --git a/tests/f_h_reindex/expect.1 b/tests/f_h_reindex/expect.1 index 7a31517..1d4eff2 100644 --- a/tests/f_h_reindex/expect.1 +++ b/tests/f_h_reindex/expect.1 @@ -1,3 +1,5 @@ +Backing up journal inode block information. + Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Problem in HTREE directory inode 16001: node (1) has bad max hash diff --git a/tests/f_journal/expect.1 b/tests/f_journal/expect.1 index 8859a6d..a202c80 100644 --- a/tests/f_journal/expect.1 +++ b/tests/f_journal/expect.1 @@ -47,6 +47,8 @@ Clearing orphaned inode 73 (uid=0, gid=0, mode=040700, size=1024) Clearing orphaned inode 55 (uid=0, gid=0, mode=0100600, size=4096) Clearing orphaned inode 24 (uid=0, gid=0, mode=0100600, size=4096) Clearing orphaned inode 59 (uid=0, gid=0, mode=0100600, size=4096) +Backing up journal inode block information. + Moving journal from /journal to hidden inode. Pass 1: Checking inodes, blocks, and sizes diff --git a/tests/f_journal/image.gz b/tests/f_journal/image.gz index b4e056f4aed37270af950e1c7375ed10f59c2b82..512d9ec85637d74c482f4c05e4bcfac17c0c30e9 100644 GIT binary patch literal 36380 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
=e+G zru&AREo`Zy3DZ>{dwCwDa@VvORP<4ruATlw(r|%3Jz;aGGT)0cmZZ5jFBVPQJd8fe zd$4|GYLO1Z7UsgnC)%2S@^cek)#aV}qvU&oY03GJU<&qO;X#*VW@60{_gPiug= zglSHd3u|sdeFIZZqn%XAE?j=E_e%rD3Yg`aguck{_`rxkO6j`qJ9zQ5D2S~G1w!zH z`OXM^(`-1D!zXPuuCdh*rj_QpvX%)->t}+8f^(RuTinmq++$o2J=>!rvmD`#Mf%2l z&apV_dJ}tnX=rFw9_OpGFWQsRz*v+6lVYkrvO7^yWnz;RIW zG8Wcm0=l8@d7|C!gX3eGmSy64%qDu{~u7}}ZC!>QPS)XJ!& zqjf?@)AZcT518MYB(9({;jz>-j;uueqB>^#-1nTrmou+N_*yqyx!gdx_|Ty9yI5-1 zetSt`+I}CZjMwLOe|&DZ^@_A1HR<0?8XrqerpaEu`bto$sL_;btMNVEn>I@PX{qF@ZuI4S4Gq*VaDg}Ov8fALgChcL zgJj2cjee~!Wu{@3{;6>n)WE~pu-(s4rX7oX4f8=2nS3S+vPNueT|Kw5soW_uVN*Rh z2jEuUZ=!_eL38`(j|N;F>gGM5Pki1yQ`OZZW@s7xs3w6HLcT zQ%Et)4Oc{AbMx#gH8;zPexENj$0lgnTI`KMu9~V2vN;T$we^}{Fjj& z*91z7{}C+n;XIwdp#XZTXn6xY0VIJ)zF6!g>U11tx1{kpqBxn`hp8IYmDV0mgMO zX&V5Ij0Wc?Z@G+2F$b#Eq!_cU45%*Gj6*7arA~|r*ut0de&9Exkv=t9)sj~`1;Ppy z;eRoYS~_1EVU+-c?8`Fo2Kxq<+D08?mKn(lDEhXjCt|ftwjb(w!yQLsQ6&}UXH_adib1`tCneWq^KjgAMYJ&fZ{;;jN znTE)^b}BBX7A-A|X+R)_?WcVf{;NJ%F=`p=yQW1aoHp{YA#r? z`AnGm-~pN=+$o2lc#vkq@bub*lVT4KBLqkt?Ce+APv6vaVtB35g-LGQAAj5kQA$WD z@^LcD{6{jChw~~HtISuaxTt)fV217l@$TaTE{NIv3FC6(_q3?B1ntFg<>_t#S~|i(#@}|dydvzU}NCR}C2;Ru^lCrzc=Rl%EOVeW}kiE47Y??Batd)-4ZG`Sg zq%gy^7AnhQ(w*7cQJ0xgu?I|MtD5}w>$uoO4S)r+o_jDK+X(K#c1Gq&X?zK52XFvS zKSe@LSe!UnEAc&DJ4LrYCN%^Lb(3&N)EfR+X8LDF}Tr z6`a<=X_EP~q@6P+9}OhKix@KBL}?)t2Wj#LLK)ng73=zK7Ii_PXX4RBuwSnz@SyB6BxVAZps zV^LxNZbnzkHp}jh|4+hSgGk$Yj55?Hq7hNj7?(AwAFHaWDy!njNp)2fRZ{Z5l2<3= zH&3kfPu8*4SFGcjaq%{$8TUowxJC0}OWmJb)Pe&B?>7$7wAU)EC3sj`R%?morIz+u zZLOTOIa;1;J+&ri{n*z?03Nly94kY*f(F zi*ZpYH}l;&SVv3TMNtbT`X9R}s=)^aJ7`_IDC*_J16|9|+?!hU`E-4w4$aWKe@!q^ zENhjT_Y=w7MxvP3_O%=&01Cu21iznt>{AvU9o$J%vNR*=Q2g}Ag{__bqcL+Wof@`& znh1*1*yd&=(YJ$FXnN)~Yeahob7)A6l-1a^)-^6nYr3VenubuNR)eluT!?c_-)s!j zl6Rd3SI|fn5ub|A4-&Bgg1n@KeJpYs9HF`H()>~S)pSlHQ;YSJ2?2)CQZkPqWLX;7 z0@a@8(#YnTRH^MCqJ>aR{w=Z^eA;+#cW072;pe8w*2dy~)4$U)|Gk5VapIyS{b67` z{ke$X=s+ELlq(d@qtVQXAwFxqlY*jG_y9%ZJ_ARBB;VP&f{`Fgp_U8oSNE_Q;O2t& zzpx}CnTPFXF2`MeHh4K=)D6{PP6ys!$i~x*MDb`w6jYKLRf5ZNvIjP9DS(Z87s?Bf zQ)f{bpm?nIMn~5Z`B1Ly?23%uE&3gMvi9vO-rA9MT9n>8Q{=FqL+aZ2J7qW7AEAwT z+E?p$bYbxWdZze_18KLvcecRpCVgz(chx>kZoMY3yEky(@DNc{ zy^W;}k^V6Yc}q8m#*;5kzTTnU*^>0tg>S5fNhM?x<6oVdIVO0MA?moewXr1Et^7N$ zfs@v3vSFCh>GH5Q5$YK0MPIx}!_5ECD_Ghvb7PvnvfJd?@4Yn9SF~dQ$0^=Ss<^d| zMVbKaU~|%zkg$l*%v~Xg|2wDP$L$~f4VOzg5E?MdmFrvZNSO<7@W9nBqo;WNKa1D@ z-9l3XJcieig%_3g2#KtQ=`$=QE%;-B%(R)rr%az4brRfzjqtB9oGLX3DX zXkgBS2DWqX=iN*&iiR3lTwr_-s@H4BY{l5q6@_wc&h;|`diJsdH<0}|P@8NehM1m( zZqq46fT+`(8UX>mjx5SAW5roDpDp-{uZ@xH-vYkQ7#-Z!pE{;)7w(o_di{*Onyq~W z-KN^khLdWGeFbAwV5gBb9N7O@ltsBVb}5T;eXI^ZU;Zbu)9o~FzQ%e+ z3vTZlFRLh0Q9_=VBs@+{jVM79hp0Y}?h}rzGoXL{`uTtAUuU1+yo~E#kAWSucR){e z=f(K})(+|^9|CO$*(o+mPrEGGM2NKp;5je_xt=Td_>0hAr~Y7K#bD6D@y3Qvv4x;g z&Dq@Axj;wd0i^Ah5Gjd_%3dbl({KIsw6|_2W)(#*!|owrEfW4%$2mlJvod6&ucMDg zBMW<{5-%T7RE*ow2Q6VGNSk1pipBx6;`4$CmQUFT8?0zlZqQ7DrDw`c6O$J&GI1@8 z|K$pjpnf=_^TYNyskuef^9o!G8<_R-8y!UTH!vRhT0Zpr#YEyB?eV9`nKko})$}i@ z#%NjV^umMQ`q1^HF6o0BXN>Xy5@!Y`t@)NCWEF?)SY=j>fUfO%4lTYD zBfv@`WpNPy%7Q%49U$6zD$Bq!#Zy{gjuE+d96kro*l2h+EP0SNsJ=YjBf>uP50Y}0`RC3I+krQ9O;S86vqja=$z03QjtO-`C_BOhy>%H~ zt<{CYm*YY7$UTy8q~2c8{Jx^wa9UyTgPGZZX+zpdofh6I!O62pz~YPeQo}K=G=TG) z$aC6|PW=LV{Ys=TqNldH?aCv;FjceQOdlA1OH6$1d5>sbB7Rz%dw=RwVb^B%UZ2kx z!9;amWXf2PASt<*+HMqK4zN7BknNwdv^^~|fIkmfAex4QU5U42s80m_O8 z%U6yW`iEGvwYmM*Rio;g52vs?wSh(Iae|lc?lkJ-k`b)FN=Myb8&_BCpKOR%`fbNU ze9J9~O8+rGDPp`P*Y%0f9V{t{awx59o8Nw3MVNDFKyZJ_+>o0E*l7!ff<4!tJydMs z`npe-WgIk`6f0t}s_&Zkv_5R%d5my+l7}RQm0rB0Z=&49)6>3!hPbmwO4l)LH?f_! zogBU2DXmWF1goz9>zD%3Oa{#?gOg%>YVdxn!CzFb;!C*d)m5O;rDU{q+rw?WN$=ZE ziI5Bd6WAR>%8@7mGq6s?24=Zszx|}ks|o0JSEa{H*=EKGa8NJL++u44uh= z+Ph}?0BehwOqgfjcS_V|SVkcfVrmBbX&}6WI)bC~I9UAjOUemC05~2Y^24`3CQ+x< z&9ZY8=14#X^8m2+6;Lk9m8l4(CSxg!fC{~gZ^e!rpdUOYWq}Em_Yswq@%ubkRYnGA z_Mic18D-#9GtOC!{R~?b>$?@H1vk?JONFKv(QqZn0cBY%>Lj_fK%*zTS^huB*$x z@I4O}PcLv)Uj2yUY6XQW0}59bYts5Pc+VX zg>|ZpW6tRqVOfH~JO3YWoIH53OzxE+Alzibb@WpTB8fj&{43HPL zL?0YF)C5 z2>FbH>0aF&vso8B+jD9&i1$@dFm1&09z;;p&%i4$9r|E(h^O>Lm9DHwcxzjl;k?gP zY~yQ8S{oWD#XZX39Iuq1mARq&o2TmP$Gue5_`@vij4;IO#_B;2e%eEuPAk zc-{to+Zr5gzv%U#zJBKCR-Ap{&3mQeH$57ql^LIqvOPq0bxx`{s_>{u(Yf%{>sQhi z;nN{b3i<5hRaMc%>?QyZi291{1zc!X_q|fh=_(pz8D};5rkBjP{)`xoCJ{tQ8;vi| zJ}i-bu-p?q=k0VlW9V>#(z7S`H!(O(O*({3SLK5~tEsLGoVmI6)M%@6`f(%dNv+m1 zqhXsvrKf&N-Lp+$?1u#rq=`8pLVXslSg7YGiEA?&mzfrs8Eu4HZT7AAth>u}`&zV3 zuW49VRh(gvLBG%>zTl*bS=IhM0Qf8o0^%uYiFvN=vY_mrtf>n4 z4+d$saJEG%0gZA|!jcjL@t-&HH}BrauFgcEV1?HRA$ZY92y=22Fj(zees;Iv->q_J zGqy@xp{8du+ml5}7#qr>(8eMiR2bk@tIOz}x#z&&J^L)HW<$2%qxXVhY#!mkJ~?`I zTvC5x!N2$RS#vRy1-TzV9O`m>fhvLwawiI~Pd0a&YG@g?T^p;#3z1mMjL~|B(CcS* zj$B|nDD7@i+SdjZt9Hi+_Fns%6!-X_%9abDwwdB&2Xe~TV+a18S-;T$r9Ev#4H}`} zp_effl4-`anGMb|BX{K3J)^x-v$V7HXT7Y$)$O_U?WI$A)UAWbkif@A<9H*>J40fK z;AJ=5={3{|Jdr(m{>K|d)-tY-bYi}r@!2UM(%@lfrQt3VL3xBExuR(6p zC!kVE^q(LYo+~Z%AcPF-R$Ou6I^^OHJEgs3UN83KmE79AOoBj!-cNgmPvRkj0TQLuD%Zt~gOdk!YJM=SskiWYj{{Iwkdr2TWS08>M#Z(TYV!2rW?EHPxW8}@-G;)N? z&OV2-wu*hOoQ-pFnygvlm=EiAh%sGFOpfTO^*ZJWd4P0Srvzgz?;@M2^TG&AE(A`5 z5GC(Xo@0?1PRwuDdhBUd*J_zpM{kl^IX-Uanse1bOirO^k6wViN>WcTlvFHUM^;V6YbJK z_9mf*soU%gs^@D_;Kx2=l*8Wb38+=Qdj@|)`Ry$}V;7HUm9#Xw+FqBu(@6N6C!fuz z$*+MzYE9vCog)>;9juvGOj`5Y`hW1hvb;HY(EW4&lM!rZXCr}doUnJbyld~eKYrID z?h})a5iAdK^fiukHNtGQRAlQzk!|U2VPnKH_NAKdCZ(Q7FHK?KWrS60MEp>2K}rtR zq62`zYuqG8%3v{+i~^KS(C6VoglcewV;MSC^-4t0j~bny`9NHB$UUdG5%BejiOaPodU z-{YC!k)iajw^dz3!iWyfFr=w5N)8uyvOq%?fxhWeQJ z!fC+`AbjTO>}1%C)8ox{Ck@X!vyMHOdtcv_+2=OeoV-&qG-6u_FQh{y$6v&YNV|=1 znfOdxvoY8(Os_O5F!AZA*!qde2yf>0bk%oJj*4n2+|G92xE_TrW@_(^$MLPc=_~H_ z+;?|3(%ai)qge*3=GKgsYQOS510He7Y0MG9Bf&x4WQ_d0L1yy~01v?o`Halxopc7ktxW(lcl6`diNXreAK-uqM8dt}CLz@z= zCSN0KHe65S7#(Z>Sy>&Il?PTE1V1SXGfo0`q;yZrg zZ?qD-M}OmpszOFfG^mfFh_Tc>S7rJCo}vu=&n{%Nyv`r_(n$%fC3>g z^f5efx*X3-Wp=ewZ06)V`Cl@G@bSY;G#pwRgCn##QQ^+k)w(?UNH~4oo!A&%5td_ zVR(+B znJ5HslVLEdx*-u})0Y}m6y~t6!LOH|-Hn>r0m}5h>P_%9Iqbl`m<#w)=ejAr@-hkC z^~JoO?^X;AJy(Ec9(;w}1kYqB)Fv|@$yi{Ev?Y>OC>OvOBWLnuLcm}UK3AZeDs>!{ zkTXD<)&^aw>h~%B#kVkzl@j$XtW^@NwJp{sB^8TA;rUndw&OZ_H_nOv5I3; z^i2`^?EUFCDfR>CLWZ4xKyNe5qkl_E*eH@r;^t(+^d=(z!{spLo>%`9WdngQGH&84 zx#2DJu1J#iOC=c(l5RMuDA<3`8eMt_>*E|Rp0yclfE z`(}anIUaX{wBdJv<>Q8@qg;6W&Wgx)ZFk~CL?ST+6Sj-tmS}i&KNc;%Pyb6 zEeZ{{EOHPDhuk1B-~0fdOA;Rdb>cBXj#&BbdM_TtgmBCQTLBn<8FCj=YliL20sObX z3-|6Uk<7(b%;v=5xmQan)uZoqppd?=};=S?8 z<*;`CKl+k za$3eBZ6yt*vKMHF`&r8gMn^kriLbP=cxjk#%Ce zVmzw38Jaf~8$66mP7ro-u#9gXKF1mrKLI zpBBm>t|vJj1ujwe>vDtRyT>9QfH#*O88(vtc;52ddHG6a-&LBU-PO*eevb<%ziJlY z)n#k}Az+!YiLMgdK^DXC1RySpi(MFn_+gFP0pgn~Z_n}DgHL`Z8@AB7f@*T(U%$Hm zcOln!oWS#|IUV>=M!%_WL2C0P+?+aZdjgA{u#1_@r|^N_R3COAU$K2S+wO-G2DC1M54t@V*)E`#&8F zXXR)a{>SmJBdqIV@6?_*d$FuqQV|rk*KkXJdhE^B&FQ^&c_2M1y7^_AhVdKm*}t;n zO3|B+$LW1SajMV7YZo)Nur97YUa>MU?cRloJ>FemiL4SA6CYP=37vZHyJp=GZa^Vv z<@?0eiy-G|NM-1oz<`#VK5pfu4#{ldc&yGE-@{^|PIPl+he^2yiS6O!=#PH+X#&ar zqMI_7m*G3V!jc``{b)!I@>5vFho1zFOXZTLTOKVM7rLxlH1>>lzsx=7_-09jww{0V z*)Z0!@HtX3t1Jrb{mAdXbsH_s{Zbh0GnmAl|PB=?8_(r<6DPx9w#%GP}e}of5Qya353<%Xi4G!Oyr=&{01$ zlo(GX;dvuWV~Uq}@LU#wH-8W?e`5ZbvKqU^_SobJS${}---{Vz$FJz4{#1`CttRfR z0(W@kuHXPduC5CHhsf_%jdI7P!Kzdgw&%UB}Mkf=f-oIxX4-cM!;~MK?2k> zfa@pZn)fm9!1^XpiS`U2&D0o);+RG&=8!Au?LbcJME7#eDzxlCoW7R*&TaFj`;Qlc zUuMcCm8|&C=u^CLrkPp?7=k~)Ethj0oD0AqlheTB8E9oXQ+zZd4K>vB>Hysto4-5}xloTLJD&zyY+3iQxi-gkbRyB}<={wuC(1n?gMw2H zV(|KgG8ukFv|GbG?nI23>SGW1HW?c#s|LJCf$+_eCK>pF7eldFZl#rf`6Ke4CxSMeV+pOQb0^V~m7}b;!bS=Ydi|(FrF9yGA7l4kpdnMh>7K%H( znfrdlfd2eEAe@Ooo$^O;WdkzA?j|1$eFB;k7dubqsTcb*2j=aa_o3;h8>Wfgus1(! zhdAm9_?<{j>BSKrijDoEjFPylYzPJ@^5E)UxlU(bk38!Laf$)i{dqka=BO#>u2`N3=9l+y zdoqEAzA(NfAGW~7`soUMC#b_W%$u&!0gB~=#Jd53XT6Vm2h~pq?`ZoY`R5h+SU-Kg z6-9B`YI5qCa|%ps1|~7`ucA*klpSlv8MGe(uE`wPSF(j5QIoTFzEY;Uo|6mQ8|K0e z!J&L>go|z49eljLDLATrnwVF2IIUgF|;tJ08eCfn^koT{M2`Mep$#l###(VHB=CdOXPexP zCX;obIuk_b3lnPS175DDVw6Hx=XjuipFx^V!{J0Xn6qkB;9)X?SjU4#<_fIQ_E$UC zwx3lJoEu~~`oO$V-jp1y{sit*9Br*Urd|}}*UP}s8HK-h7_SK4ver1_eRCSw86IsV zy2;d9F(-UpF9t)~Ge81tAEz(#9r>}ShE@%*D10rWu9ho$nKcI^>XpdR9h1P0rD0>W zt}^p1Xi<~n3SZARy_I1$tk+skn5tYyh?&NHYl&=-dhlRNGD^+@j%FjnqFw4iVcA*{ zf|SI<`gyR%D|)Ml&wQiS1gdT*Z#%C8VO}4&alNah(e=|BMxDr|n`qDZ4?S25eTx-| zAnk^d>iHCOJmYs@xpyL8o&^&o*HQ4TB`^?iDY&)cfY!tTp9T@9naB`cI}^@raJqg_ zn5`*848o%=MCr`16?0tI7%rTu({g^5_I|MB8Bi^ia3Nt8)z3Q?oma5(>gU56jQJ_d zGKyfi9#XV(A4<|}#RWe9T?SHaDBTTaaAmQxpa%XrH~$$B`+WomZ3J;rmkINp0ReCW zdMVPW|kQj|vgs&V+a+?D)u1J)^(HpSF`6$)W4-^5`1Ro`I-bO3Pugc0I zE_X3r06D#rs!W{=0iNBzy z)ZEotyL3T9DF1D!WTa*X7F)jsM3*_&*y(c~u>2G{&aEi4~i+%ecKOwc^Ec)T0 zanvzV2cEml8&A4v|)z+Tm%cPc_X`)COc$6l$Ap&CxJo zrJ7wBiQOh;RTnF2dwc?QyUlm!kPTRZ&XSAMW17abCHskeQ?@UY49TP7X7MR?f+Zu$ z^C)X#FY$BApLc6D&AbifZp**c>iYew5E*4CsVs1P?fKJ3sV6c_&vo@Cjk3LD&qb2N z&f>G}cN7sm50g{PLcjbbJ#t=FAPSy{x$S@YF)r!d(9o@KQcR1nge|+P3S(9kzC7h9 zj11Is4g8e2O4qC7?aZp7p|uX{IeWu?JX-NE+1)sDd`vy{e0Tt<^1>4PiOw`oQ$Ivv z+sAttUk^Dd5zf^bxVtS4j2r#BuRO-sqEVygJ9g96RMT@G6p4|RxU!zkz42}xDdck( zNtGuuD@qgI@zuApQcKQHcRRQ=%-9Z*Lbj~jz|co(-ZbNg%->vH5(rxC=J(>gM(g+Z zUa3oO*~#*ITpjeKAhLFU_I~2)IkPu8J7P!k`pVxOGH7SL&%OO1c|-X*H~CED2BL6p zqFHKtk?Xf?Y;}Oq{fe@0Hmqi2s}ceRdxug*{IIK}{zqK~72kBPXXidd`sd1ygsp6$ z3cZ@e?PZ1O3`4>)b~D%Fc@(K>AX32(6&Oc#wkOUS_vQ9nD=wR*-IeaWdOnNb+h07| zd@+HLJ_q`N4*=GzHdN#D-I#(u6@w*n$Zx1dC-_>9I}4VLgP)Wb)r$k~&Ptf=shKl| znEy1_SgP*I$Aw&a^_%vMB^_xG^Y>D}1MXMfCtXObNGpltbYI9d>?-yDlyu>Uqic=$ z!48Au^b+4svTR*JMx}pKiNldo0iNZf57bl5Px-r*7A2Q0OlQZHj;u&@+2{PHbI5b| zNwDOruYUWPD0yBW-od~Ms|(8vvgtD;HJHw!9tY={b>*t^tjMpVRijAQkDQft*Y_o* zu2TBgU9`QZ6=}GzkmGNnaoR8auXrEw_Vs#!R%neAWQX5m%7A{OqM1q8XTVhqGm#DI ztUxvGI!ZVlq{!S}09f|G$fj~#ttuD1FM6NyRuzlh zo>`W=a3y~!`99c{Ct~i_cd^M>U%9JfYstQnzn1JNF)Z0%qF=JBWP6Eu$>x&1B|A&3 z+E#Ua+qJH1O_xsBcU{_DYrFKiR&}kf+%76$zQnTb?l%n%^>*Q@)^vSV+5i?i?_W!b;OSDr?D{oHs`AmUUyFqBmQXb8ChtUU6@6ja>thlW);uqY1r|e&)EB*D z=IT=uBR7k>n3GJ^W{8pg$cv*G+1BYu5A*UVNW6lBcE`rPpg1_TKgUGXf=GL( zq$t(>FYiZ`$Li%QueOdVF5-ErLCK%f?nM};GVoUsk%Ab_pRRL<1@0P4U?wu65H-g^ zm-YboD4KOkb|B0!{||fjxd&fy*73Cp!`ZR%ot0U}Jr3S`FtI=T`lt&+5`)wrP%R z2+z1T=HjGm!UF=0aAa1H7mei*bHc-D;K3L!S7wwKZNMSs%F^+S)G^7)+ASPmt}F(R zoTeqv56^P)`X7w>os0^gndZt$@zjj5(Yy@G*yFtZdt-u=QBgGF!Pzf(NmkSS?CxJL zlkpKb;m2vX!=WUa!AXzDV>CQ4;he}r_i-dSvN}8$!wJ>>K{p62+}g@WX+oqBEE)Tx zlp37h;aXlSDJ=BZ7L{$^PVWhp8eD0i#9(jRgxiMOuT0QcYqq~_OPgu1&6_$2Lz$vr zM7<37Q~}qZJ>In|cN&FxD?ViE+uJAJ)!AUSv&|?tG7Itkf%gmZF6F-d7RlBqp_yRv zwCuDp%!A!!wSfe|xyR@jw=in&Q{(2%cAITCo33?lI&!P9vicxk!*L+t>R49Tl-rfV z-hzc+vdajdjY!9s4is30gNE7}ZaNWJ=IjP6OZ57*{KFMJ^Bs~luq_%`_gyZ74pCmmNu7<`9-8dy2=U zjoF{9HRVvVWW+o)B5!Y<0Vgb1mVxJ{jz#66`W!-zEPp1%%}GhdBPnC7lS&e8l)opN z%6<@i%&CJV4aM_~;B?cK0C?5E%`yaV=>E&do@1=oMFlHn$JW4G+#y+<1dDIGE;@pM z-H3oSJsm8C}-{lT0idy_94c&y1uX+xtPops8KHor`_u6RY+# zV)qw)603bxHlXTfo%zkSiLEPr*O`Kv(72?)zI|I6TfUWsvRX;aZaq2W39+MPLqnSj zbw8VLqPFspr=`8GHoBLGeMlV5h4sf(PG`CozhQ>0Pu#l0)c1&d#`TR?_#xh{wwi=E zi(xte!;U+`?ZFNwJl;z}Z$yTB@ZM*ni-$ivt_mM6eUzd3*iF{2=H9UblY;B_v9WuQ zlxlHds(AhG^XA~=efDATwVgdRPeP9#Wm-k&f zkiIxe&w%QM7W-)nBMnyy}bh^OD-0o`jMox^A<#YT7ZT8H@ylW1UZJZodmaGdOmK*Nk zHd&01$n7@ZykQ4ZkIahmqBnAka)wqql$o`FlQcrB-mIBgg78T5tOHxys-> z!&6hoIC+zYXH)QWhuNyg^p0>jj))T?nR8+^Y$93@X(9+P5%p@4zV_~ixw&-R-hfJa zL(=Rl(^Q}94+$svN0TtE(LZXLjp3+j_cH7R&g6WM*#vS%q{GZYN(EduUTkcT5!{}F zif8-^Ecb3?#aWOZu^vEHD^o&9WZ3h+&Tii3Kt|-%MN3)WrxD~w-dpA&HB9qMzwgoe z`RhQ)C~A;;1|8Jl@l?_;0w8!4cAO?4=!k!;64`nu`+I1s%wnEhR0b<9aatf>(j^knReTl~37Nh-CM9VyJP+=7doOKwzXAWuaM z=~mIBd!S}TGq*ZwxczD2ZZFv@QBC3wzqNGFRcr%@Ce#Ug{N9NkSuyq#Ia3^Qk67zR z{tu8J;qe zwzA%5x>)nZqIZXlMsofOELUQ0#oa^*?E3A5#a=#+7)0uyS>@&OO}`FXSsf*OpOo}- zk0?U?e+|vCa0VA$N&Ul{Vm9w+t$5irMA{LewKMG@JvsLQ-=WjWr?XTMhJFt0;bmzG ze1_Q8@0-$^3-J zwZY9#(v73sr2GIv^;P~yh19BiKhdM7TiPrN{k~RF8`GT}_DyRO;#r}`z8x^Z#Bp;R zD<;nR37l7p1GXadul^3`YLmr~lWhfBF4MB6hbGsRL-pHbjH;zds*5eSVlu)gh!xO% z)mS*kydYFsJ_6>LkST=Kq73qUPksb+dlu2AZhd9-Sr83J`K#qUVA^>WsnPG zbWPt*OBSiP>xQ1EW4H_#=PQc8adE=`11?UH>7uE`^fxPsK(!67jC?rB_yB9+Xpo(4 z+^oW0kf{r^QJ=&WUVdM~p_ow0)Py$;cXR^Y@g9er}>p$zc3B3AC0{CPl1yn|ZmTVj_%Vyr_;2RvFnNcCv&bIkM$0@G4R zWs+d4jcS%N@-smZ(}d!;!YXMaWa9{{1)z+Qimg}^xpQ;JStX>9l}1GeK%Vmq)h$Sg z%X}>cq7e|wG{Dlg!`l7C0t_8Tww!ta5(?^NRM!Uh6EnfsA#;p7O8&5Q{&e^9IYz;2 zF>%D&YgeMpaj7Nan<&Y4o~NcfnHNl60rCGYu3SlvpuGaKH*O5#>R!)D=0-pw z(*i48Xm-~i#SYCmh7r6DbttFc^3MYXYz#BaMlim;5m&r)5OCpqDqkw+7L4F5c5T^J z0V#IZ9ag{~ynk_PkTYH_6@Vz%P^oa=T#*TEDRJ23HIatIt)0k^HwRgdU$nAf({#;p z2V{&$Bc)M`o>GcKMqFhI%)oCQfv}){2)@oMVrlg3dJ%OwdZJc8g7>niy!CNqfFHX4 zQgU+g2Da6?_793zS8PfB9~_!<1K#lqw;{xy*b5dGBGxDOGoFFsCszvDBG&%uS2ev= z+nUSEc$ojJtEo97zwssiBA<#4`>}$=z8F?8ac5K!(w{RouINADzQw_fisZPV8Jtzw zq>$Wi^!9q$g-7N-9G*B+PCCGsSBY8nf}WQ%(qG(@;@v4oqX)VhGj>8Y{+sKDTjc>2 zuE)0|&dM=kr(n;q;cobd{pdmnR;)jvCPd=%8sv;j{xW?`eD8^3Fbp~CQ|A<3DJA~? z-e*Yp+aPTa9#wTJKaf&*qp}`qh^?E+6$(&&zs$}w46oEoW{Zr3>(6B{yNUsLw z2`ZhrLN(LNE$2-m}z?+{0NC$vV z|97;Tab3!li6qER;a3q%>K2gX zMgeC+<2Rl4IPr7lCyJMTlU-umOq>p86tn(YvyH*$d0EVNqZ*f}FDDbT$sB|L&|{3o zk=5{@k537?rJo0c2)W>QAtEWN=VG+mA6$5Y#p)NT0kjoLYdHOIz4d0>gRj=3^eG7f zZ{=Rh^+42oS2i!Xd3R|?Cm^sD+h6yZOZFU9dkUXtiS_H4mdcQn}-^5sJY<;8sp$> zavr*!L&yzBXyEY}@nrhLv2i><%Y2amFvoG!^7JT|-KY-s+2L1d8dlSJs5b9Gykl#1O1`$;=WUavR3wc1&Qa`eX1L9F$z7!7HjztTfsv?6NEy=lbC! z!rEk1o+@9s*`R^^86kZ*n;r@zE~fZtA-!nZypZ9xpgfFDOAt?WRM{n=jX*JI22i)l zxcC?}0zQ>7+HnzARnV;Zmf|6TXt_P(KMBmc034~a9ZkSy4t(&G(cdfN$a9zb3z#>l z3p@=hEQb)+%?r-R&=(LiCrQAc{(TJ1%fqe>bHNX_!76^?AIQb`vE+|e$5`90v>}&S zh7s=%w5xqib@BqpVO}1Et?wAO-!eFy7tef5d8zMX-+DJ~gPBoqbk?R_-|yPGYu~QF z?%K1(*!M zv$4DNcVl1bzr=>QWSq%`X%+h?q*)E9kVKBU-E8Yr76*^~>EA&MsDA;p=Z z+88OJlvzq5^A@v_nZq1rCNbNY<;*!|B2%R*+h*vJj`1of`Pgdx4x6HcGg>51o|K|x zQ$+6lw$fPini;2WlvwjuQ5&;a--ukJFM7|+*QY1;t|2+_RJ)&zrxq!Sr%o}o>t91s zX;JzWw*A_bmZEZI4_0`mX1Az_S&d!X6qs@>=1%1I!S+0BiiW+_chXBdj6No=cfIsF zZ#Biy&Pr2ymA9M1vb$zK85_A%BxP#p6XGMciH4Xi`h*097Z2Fht(AuJHc*ImlZgr^ z9u*6|lb+)BP=q#h8>F7R45kE&yQBDCl*we+MXQ8yCc_rB6k#Y-yXdu25>F+M$1Apr z1WXk&*ev>iS3z0a(0B}epeyy_)iZ$&YAVWQT2pZLdWqxjh~*8!zFP;$2U*Mml*WTj zS^wqIaYsirlX;JrFDQfhO8q8#nf+3mV|UWlnQaRW<~_(rM7}ys{{P_W_D^Trlfs>v z-rfxdY^7=tF01Rqx)T%IzI~j0!2!6F@*1fZ(kqs2Kr;RyP~aj!JsGu?1DUuWT11;j zD<}K}O)EG25G~m*6!|*ito?;aU|nnedV%><(I*2ku8QQ@FD-0dV22+5F&!-oLV(7Y zvrIvb?4bGt{NOPOqZl67hWzUS@o3hOJ za<2GR*5&DC43iyaU+n?E?y)rH9LhU(Ec7sqeq?qwuWlp9G=~~uL%W^bomPiFz*AF( zC5OtkwcvJeakdE2KDk0+7c(-2V(>H+gY+4JU4BuFt2VCr!Tv^ zbSGyv?^;&XMoz*%xJ4hUu)Ly~c^n_yzL+hB)GW?i!0`%b8s6b!Bam=c*X=hYQW{|v#53?=KzF16fQFI|a1eXqqU$D!+2OzEwpc`oi97u3gA)NETdp2UZnC&4au&B| z34Yr{>`gS8Fz{)dQHWUXmEmpkuF^pPA*15_g(JACj(#isdl?&oEBP;KkZ ziT7nSRnvOCK9-D5#E9#5H#a9}*JcNNh<{X9x}SKU`M1#>7GAPvqMFLpw-X2y&=;F1 zV)c}VutkN^YbH50y-9fi7N)~w>E}Sf*|Dkw_VC4QM#TN$MF3`NY?;5G$ZYExwCD8< z{wk_Dw;`v@5#u7W?J}W9wdR!ht$jN)9?X^M4z3O5dAYY23VRzexA1xzcUM`~y@=V& z(pk%ns|xV*OG@-i!zJ!+=0X9++shSjs00Yg%WW-H-(sb{dRK zT>aGEp1*mxr}5rFMjI=2*QHBMuiJ~3{D5vyJTR=@6#WMLWiK&FDBlnPNsyP7i%o@ z2kyGul@6hq)|QH!9vu&&ublZ-9_n&TcJsPYm z_+2900!#0h!K!(cTWlCQXU@D%C2$Ce43078NUX`xNsX zpbuJP3a1og+V4_??I{yV5?W#|UEi1V${?wh_q0_=3`$z|P=jH4Wf0m%>;-|w6@e0!o6qOX^2%>te8>3 z89?9svwLXkb>+)Ch$I~~SpYhSkh8GQCq4m{ez!o4y<956v_d;h4O2=1M2o1Ze$wyfE^>ShzBp&!$T}Ex5Q|OyVH|UI&`5%GulUSuSLc|3f zc)9oyT+X&;Rkfs5qqVngDV^~zE}W%w9HuAjLX)k`Hqq$1(Kr<%5nRI~Osv986a>Gw z=qw1?4oxiy0h5bB;4SXtslz>#aRlF?PjrD_~@F z9Yln-mo0todAva>oP&Uq_IjRyQ6k?;&++Ub#j0-73B-;zm+#EnnK66?kQW0o>dA9T zK!d~bp0*CsudC#)CJ}j2@VzBB02a~hW)J56OIqb?Uc!R_$&S?Lk?&E<|Q+ac4cOa ziFj^58dAI05R!he4mZqS(D|SVKaJi-XmFtD75uK?b4>PusJ|2;(Tf%-`prqh>!|6o z*HUiD_98}(rVb!!7U4GAfkTvclx?t80@PTH|IJM}7v_3%7KzmC;l^s8K@7>p^g9Ld z1>5(b5BnEj;8&q7s%l1Oer{H2WNLDu%TFJ!lxL=DzlB5ykf$x!EdRwn1)KiMIDAzI z<_~MahoE{1_h`ZQsCDYgag_$F#*LeOsI8EbGildBhbh!%R~W=2KNJ9!1iXFz%>L@7 zLYze@34|bkgx{P%u4(pwksAUqwOoK)k0;q=nFJrGpGNAIHZiD>@<{cYlJiR;zflW4 zaz#@LK-6pkknT|s3ZDV3%Rvgic+`P1%&dp)J_${nE}bZKEei_Hx%RDFU+t*LT-rok zk;z{qJjTJT8_F&Cb>QFl4si>M0b*oVpF%{1qFjOnAbF;V7mWvMEaVzzKp|<|-U=9= zF=DP@FimianLyE6yC2Bx>e1cX(?DTdh5)NeQHTCH#(+OSdxrELd>< zz1e;S2`Kno#$RIc3RMPcDoxwZ$}OIo71is*tG^*R&nQhsXD3mGl=!Yh#bO@r5Obma z>!ALkAG^$c<=vUsnM56JGsEEPS&msm-km=ocB69&DOvrj`^?0`oAY~?2K|rfZ?5`$ zT4B9K@8@ASf6k2wp?$8m1m4x!`_C4#oF5@ z?(77b5u-?!80x0|s(Stp*0?wESgtq{njPIK5ZJa{P@8 zz-(wPnKSgO$`+k;AiOgtYV4gmGCPl#=bHcJpYi-=&a#ur02<@StR%bpY9MX2+?y@U zE6+0jo>QN<@=)j{+MAOBN6WTxhVdH5lu)z^$&0q)7-bEuJXGdFt97#6!}*ezc(BZb zv*M)ka^5wxzELlm@t025KiCBaa)p^?|M1N9RQ6!NF>n6Pry5w`&R;i|6i_%^F$hWr!R(hmmoues6D|glt12DrB5T z=7`-aWdt-h)=JtCq-R6|h4w=WxA_t>4~!152;O|j24w=w;PS~^ZC{>_HsT4VX)P*J zr70`ipVpM!ZNwQAHyiuuqE^=d6ujZ4n6wDnxC^(9U$||$O56U~s21QDvmJqp_>2J_ zQ!gYmSvH`Qo zJJy_@mLtyzKTW&+;PRlBlM)J~$7T(DD?7YOop;u*Q ztDVvxjPdZfS>`63pYv884h^DNpA0w>>PBNbrBlW};C-^qEjVU*tq!4{w28b{$It_` z6;8E=oMv{oFXUqiszUs(9endj%1`KCphN5Gi|**8>$YKs1JZYg^t49~elY!2H+!hD z)bWwYZfL)Jk7z=?-a)31xk@Fu?tVzmI+0ft`tIC)^f!(QAz}4MTc@9K)XW z63d+AWW-ZNixTgSuGV*%Gi*uSTkREqk}e3|b1g0jvJMHv=~M5Scc9$u=CYFeIR%%P zC<<=A=&;_x7?2#BHMFy-rany3P=4dvnOjV2OLM+Mcd_@!nr(akJZ6ig&MqPW$vE`_ z@zPFZ3G#N^wims|P})u5Kk3Z>m#hY09{MpU`jGJOmSqmUX!;wXnWU<*+<;i+H+HuL zr&FvXn$$oX-M3pEc`6XIst}aR)JD+0+jC#UVCVHe$r<4o8ICf@;L~S?@)2}(wQdT= zEV1E=ba9))#Z4PTjB=$?vg6deu%E>OA#>*zthfBhH)1XaM=#XO03KItqa1kM%+Lg= z97FcaW9?jBS(yRSJjhaJ9$sSk#i%`s(JH>ZGvUg2SI&4X{roYb#HT-K^xW+J=;s!e z?9gyDzsv`i?x9Zn`k$eL!XYuBG6gK6vP{4LyV0UgVHiMzfe6r}CMOpaqmH!mO2lUb zRmzuG0U(r!!4adnWT50ebsgn`A<5Lg`CQ$qlKV~l0#En72xZG`{VWLMj&yp9Yn`_| zMN!A043S>$ZNXR?5-0&(Sh}DvwWBIZo(PrEjE-Faf<$#`a8oiPY_P=ae#bDqIsK$( zV8gF!Z%l{j##Wj8iM_NTr(46^2v=!DQ-ykZ`5vTR5g&*nHuhE;h_u*_P}Y3nxm7mf|IG2p&f4|+5k zSN8Pp-GeB_uc6P?t@PsCctyfjjz&hN#O4PNdqh|E7w#9*-o5GYXEsH^Po#B)lm~vm zh?x)x7YDU8ZuB}*L8(e|FZHr%>QtC~#J+Fdk+O>xF!@XCsQqvu##~AxNrQbti|DPS z!D|J+gvX3eXQQS3!ZVh>iUNg$y0Y35^M~72ZHRQ=t-?Vk2{)XZ#CPyZ-IZgB5e|rI zTm@SGp7+UNr%C-ecV8|$){Nn1!*tL`@~dA*tI6^V8ic3VKB&O{OZ(>lfqNJcYPCF?D|^v-?qo6G~d)LtIz0 zSy)*aBHs~!tUl$Cx<~vjMA;KL0x?-sONM3C|-l}#7oqxBg)77*&lOR z8PL%XNpxf_o15tk4OLi8JT`f26-~6ZF3Bcm#ITB36*3RF5nLitS2d*eP*7?Tn(W+UiX!De@ z-l;6JEekt{2Op=E6~b7dH>lwIIHw`pGcjTY8#3T?+A~D@GY|!ZLC*G89OHP5fQoxN z|3^aLjFzP1tfIpC1u9ungLa+%qL9BHK~C^~XKsR}-UbM!HC&8QE<|xPuV*D6x0f?m zYkJX@`Nb$<%^-4x2gSIxXS9$aC{(&M%!3LjH@h{6L3va!S{-}_mg4U5ppepoB^tci zS=4!ZI*bc)oIBCUJc!I8ZpWN_3VLBih6PJZOH&zD%M90ca_U8mpOLa+AKZ0uKp3r9 zfBMUO*b&Vpt_Ej7!X?u7q0t2c(-P5g2H1IbnxMU2bG=89hvE_j0hThE;FDlc^|X#H z1Wz?(EO_%qm#5@J+Zn=oS4~%#`cTjY<|?vZ&y$OOSGvFy60YJ$Z~_XGrkt}%%<3M6 zij`d+2sEI``O|W!6~+#-h<-r|vxOqQT8)k~Dhg6aqvQXGtps_%*a{y9vXWHHFHE?^ zsgV&@0W70w@E2fg1py(sw-K`iEg|bHK%k<1@#Zu}r>VwTzgE9?g&wFo6Ep1?Z|oR*H1X)R zeJFL!ICB2xG%G$sB_F_?h_8Ag&Zyw`dGT?WW3tEu)%wE3n%n`eQR9NsVEw~(WL&)X z)=2<7f|OL(FB0Kr*p&>}h>UGAhFP#5ZwDMhbf^-;=n>{*gS06Zas&>LA*rwhzLZhQ zdKd}o@sv4UflP9HogUIN_-OZn$GLc5n(t_`4`rAnN*67~pSZRVJMmMtCxT__2G>v= z??y5P z=1e1T2-@a;c}l@BY*dJt2Kscvedz5KbByP&Ww^hVS1y9DK!lp#AOOy30IgXnKn~0h z)>Rq?lOUPWd}EO6{6!(DhwKm)3ecavWsy{LKZGBG6^RIh>A+EQ5IEHHA=v5xQ|rWc z4*Kz+gx*MuR{DyrKg1wOA4Yv|#9l-o;XKi>Wv;+YU|07SE)2 zyHK!pkP&616tj9~P|R~jl^g$G1=M+YGAPsn=(4f1{d@#!;D~$J%d5-c18>JtGwcj%y z0ea}~K#yt9+NcFx*1BCVAPTl`WbKD?=zk-kklQ2~f9R}XR%lF#KQF4H?Ap-10zdT! zQO~ER>4RK#j}Qp~_U%}DN78bo{i#n33FPdmazbWtmlb^I{cu-yRXVs{^W-TG9&vhs zVz{?at*jUP(Qvd{^3QT?XO9fi6&~XA(l8a4*9O~-IIl`(uI?#192!a^9-eK<>rWYT zKlyJu=;5-_M|iTs>?^!HJ3P`2wa$y)$029QKH?c(&DjPj#Z9}clTki+NvPnCd_fWq8i+UyCCbaZQYI88$!U6K z*x-x20%jK_M4xZh8kdIgz57l4H?iL&eslMmgm2=$A;;e-wcB|oKK{(Q%B{gyc=wpu zloOOs6l2N@$`#5q<U+{MJ4)u2M4)FHyj>^K8Y%DP@*;Zm!vZ=(RWJif* z3ASW+urtq<;$xqoqGp*Y#|^f_HbaXP%~PWYu%Kb6B4SW* zwt6Zi)7$Z{NK5AbNt7WrO~-6g@YsRLg&F*VKEj~g`fbmJUgfy z=%J6`d_RTzI~4ub<>Q~z1{v2U;D`JYZUS>ifBz8m_x~`I|HH=KbPkL)Tu;gPJ+FU1^L%x&8{jqL*M|PDJC-HgWYIudk)RyL6 zNS}s2UR;sjO9Q_p_k(1vES0#3ljVq(%}OM`Aw0*+#zp%iWI19EmpwIh2;=17X3>L4&$u9vb3?4nRAxG%QCpy$2NIH4cfvCJr%MHi2i{9}9C*deS6W zGUdqtbLa(jvfRXRVh2OJw|ZXS(NHH^s#D*+v37h#b`uGoa!ioFt&pBm>Y37ZJ+InmnC$jw7MsZGjl7IBhbc zsO&E%1W3dTcOff88}KrFaTe4;WT-gU_wDGa(XKNEK+6yAp3h;%{UmhRc)+?N6R6_# z(C~(Xlp%%~sTdTNB~LHtACXf_;NbzjuY#dV*rUS~*DLPFnc_O9esi3g@$U)^o%?}m zsbT7^ye9O073TP+EFyfepB*_HqjA-;vZLuc_1t~$t%u$aSXV_E7|+B}#9jQj{m-At ziob4&w(f8HRR~I)52;e1>!zFqCF_8Q8OwZs zLva3}`Xu5HbtC)FPrwD|8C=m)rHk_mrTUKR;GE}8xdz|v54z7PDNMajFbjyHxN%dV zbcSA3Ju^^cflmBvekyzwT_HqPwj2iN7ToQB*P}Ii>tf@IkR!?*Xpi^UcGjZ zd_~MkeHr;~&SbThj0w?O>M&U^2?Nz!miyjoZ=aFgoDaA0^|b!5;nn#;-opvwD5wM{ zG!Gy3Ol3U3b^+R2pIYa{XXvt7hAemULaz^x6b+?TL)41sneJ^pB8{!)HT#L}1JkK| zzEM!dakRgk({pWS${O~4nDBJeF}^gHb@ko-x-eP6C-&0e<`3h0i6h-*t3}2$2CUT5 z=qvI>Ma-{u5BX&+>uRsEKSMupuUB`@xz!cJM&D+5dIt8l9ZEg5Gj{YP%u5>f7+*hC zhZb!`gunZ;o5=3#*?bt_>@W`aP+r6TO;jUI-F&UUBLhtCK!ne>Wp)oAyE7X1Ufk_M z@7WW1^{C@EC>Wm|ol8>Oe7~Z)kWrYr85-Xt_3%my{C(FyqRZ9#+7AfI@4gZ7MfV`4 zuJW4t@Km}Yll@+N@u;uvzP$vOH}ARCzQ2$E%oa6;T_II&+EAWwdcS3k&()sx?kzi0 z(#U0*Jzo8gU~1PjwyfGuoTxfr;lmfqbOw`e-oIVupQ6cj+-78YPM&s-EgH&6O7^4f z^O=y{lvY}k`V$}C@9r6XJCoKL$~Gf@{%uZkg=oSG`7#qfKfqf;rkgrKse1xq-d*d^TX=OWd zOdlrqmEd6jH}0VK!JO>HJ~h{|M{Qua~x8nNVLYz@hCq(7c_~12r89hV@ums1kDG zL!FfA-Q-xEbZ%~fPAWzN`|qZfs-G-<`gD)Pok3O>1u3O{`{tsJf*pBsHS(L=?E^}U z1c&S}dlUPWJFgoJFtukex?Xy#*Kb(w0$rK%kKo2<3wpB4X<+~M5m|N62DAX4h><%^ zd1< z1^+>2>^Rxo`5C*$YJxi1dmE&RU8X#3EKueW9`6CFSevtbFntOMj zmshKdV`>!*gDWNxA9#Mp?R5aLMIjLbp)Lv)a=9&Q5Ua#4Sw4q36*I{CIAXToU3+#G zpe7^8!To%QII*|aMxx~IBM23!!5w#5ouW3|3Sh?Ab^QRntSMn2-{X*$*=V<)V?XPyMEI0rhjE7q&J1B)}P27rsIpp+B zrSPWnIHI8$sq_tp`gi&#;6Vwq?{}JdF|&0adRMa%iGbo68>+f54dUTR9$1mu>3=}o4nSX_hm_+_18aD;2eqhPK+Vhqi}E&ksGzn0eBBD+Pz&@o^mTWL z$yyC&9jfBAbU@lM3I(g$npiPCT1{Tzybq+hG|V=!AY9h<_@apT7yQX*EZH89oPY;n z{GyBmUka286g;CMmKCpM7y>-zqIzHse1;|vsJ=Vhb_VF6>Ts4Da&9FYxy#N|<*IT~ zs~1c{kNClxDEQ8jp(;VuxLA|+H- zaoBLrRiul&_cxTwG<(5j=T6XnqCrSqDqQH_pQ?scsnWlhBA2{9kj=PIb>Y1HvqJb= z5%WD#9oqUKz+H@x?*WGr-E78g^PH&H1&^iN>kdfrUaBcH|M?wYXZKMc-D z^8?V=He>2&s-fLs9^f}Cv=9^8j-Ov{GJnLXUw9((=Xcixqk5~@n+ z+cz~trGHT($EmFgK2&p+taBdL(uJx_<)V_kpnkpi*-sVB-($1Z+jX!QrWRMS%n5pz zbSRho^7igH92!BhINA4j%sH=aD@Q9=b`MWT8EZalVxjNA*w1mvlD)?h9{xR9n~+zx zjboY{9zi1>nVrb1!*arMu4FfLJ<{{>3QtQIy|OoF;R(SjJTk$9OuS0-I;opF_6pyW zYrc_lH}BZt*{Hla90yu|>pyQ%DjH|R8`v!3Q5?hgpPx*x&-0{=?RKi&#ZgGFo`Gq< zeP4O}N&+x3dgbqmA2ci;yno zyyda=i)R8%o|vY_Y@Zc=BH>D!1*v*q9knDGO&?_G^)VFdE)Qlrl~(|l+vr2M`b!uQ zm`0?2btf>Be~)e{0U@A!UY;c9m*tZrN}`KblE>=Gy}=&v^Z*xOHsf#3M-wp$uPkmM z+4@Jfaew{C#r{`FXB=6*n+m?3y<7q@N4rY#b6W5k|4Rb*pH*JSjKT~G*}vB8u(kJr zB$J&*HTc1M1>(VI}FshCpgWGptF8qb^5LO6#(C5y+4Yf@q%2?VRW%Y0i!_$ppUkc87#FOa9D^Epi*DgNQ@LT?h z(AsI8L7MYgEvJ$*UWZ6eWfkUins3UzegNBLlKxPpaM@a3_=wd@L9MpKH{}9rnzo}4rk;$Jgji2fmXBy>s)DEX6@RNP%V*lc(+eUsbBX66O8d2nrH4D^P zQ6mLqIay~7m$P1~*4-JTEmLngK|NOKv^<9CJJv3|Sv)}EjSLRj?YZQcRF;472gZO7 zYkm2-w(;AW?3_GDx@*+hSB~BdI^#4p+7f(jpugfVl=JNttGet?(+`QcO+O|Y2L50| z*-z`e9vgdL1sF&{7;?{x-{BEZnVUwH_HNBtRyQ;@`rty;DMQlP@SsgtenuV`+QyRy!hPF3$G~BHR#n!RXRUUanTyFj>r)|A`o%RbR zCBU^bpttP%g!b&l;ul4pUF`QG%Y31080jgJmYTcdy%ePsG#C#RQB?K+%xE5>cCEFE zOkx^voDNTn_q=hgDH+swo0hstT-Y6(l@@g(9`(x__7t;Qq2;;sq4RshHF!*r0L1p2 z7?V&HhZ($sdyH9HOl2!m@bF#qsvENrRELy)-PfBV2rRjZ?? zOPx=18hw6Haa<5{-}~uIV9f`fRce!bJ8vD9B(%y5Lpc{FsSzHwy%#%PuS#GToRo6h z{6fz;nyubg|ZuB$79H!+6?&>@`UaxL;_}bmK*4cHZs@uEew?(R^w^sg94ZRmJ zqMFB|wbbI_uI2)H=hP{s%x|!<6r>oftfmc7zDk|K&ROZDXL@6;P$zPMMaQwNDeaH| z>@4dWY|F85hG!L~ZaoZ9F-!nRGcMSPR$k{cL`0{3=i`%)k++q|g+TGjvzd~ilfz_H z^eIpe;%wKU$YCZiaf5+AxHCBz$FXMC7FUAu9%G?U);ijGNgG<H82k6p+R7w`97?rhs;&XDcc>9_ zUSF28^1LwpjO!Q|OicbCPfq~Pk@pSe4uF~Tjy^F_wmk$;-lOYNtVerMlx+*M!{jbP z-mD~jcK;Mb>2-dfTrQ|Ez;Nc*fWoIy2Lzxz8RlH?=X9;8#9Ex*iOBw|4bF*k*18fb`A9H?`KFkV=Bt+iO70e@5%#B~{vScdsEUzHK??VB{crVWKb88v z1|3fUK!-N$K5?>2S2uyYshXfvnS>L)-ZG7Gqy*xqXmrCkO3s16q-F_L2f88J0^l&bmi?ciQXaxW|c)FWUFqi7wG;m{fW(-CIV*G$&9-ce?V(_> zBWUPIbc$Nt{>Ubh(w4vHkEAOO;|{c(nOVcHikQSK9-6l;U|qfg9e^WPY})|h7MbHE zTfb3Whi8c((y9qiKG!Q#N?Gq`eO{2ql8wtyy(cr+?cEb-@M2-^HACd~P?QR>@~|KVvAU7h4IklJt)b$P5UM$_YugF^C2;j;IKnRA}E1q=Gz} z4!`j8=l#rbkh!y}ra-fnVJD;=?PyiGT%Oq{RXqp&ei$@T>aR~qrJ=(pzdkWK3VJ$c zXvE^I*CBQAqIZHA2T(rbb)MnR_xNU$*}kf}9quGmgn18>c|>I=mX@LwfR5_`t&6g* zj1k2sUfIL!LI@xd%)m#4`RiL_9|DvDT`9$ailj_DlPP8X`ZwOc<3%^KMyh1l!{U*G zMuUQo+*m4>CzIi4Mg^3QXn!S|-3<@1SUs$M&Y+wL<=1@Z@Yla-qihQvcphKl)->Vk z;3wn%7m;O%(e^cR7_28WJu|Iq4!G34aXmg5S-W2K&VSy)VU{X){%~i5YuF(?9DKDg zyzzQtWaG8Qh{mu&Jf^#Ujj2|c!zP;P!1el_YPP0p4y-YY-5-kwd(CY2+nCxMurX`j z-)`D|pxtcGX64PwY6+VY)a*Cgt95NAD1$g9VKwd2!0u?SX)cgt9f*o}fELX)bNbIx zlMDL>h;aAyas&P^_2z2YVdX}ABFlWee9r}|0o~{hQ_slmKhPWpgwgu@d)Lvd1^}n2 zM!D9#hUPvnQ{T0j5>>9oZ-yuX=*#N--g@cgxerwR#%QGjCMx3Z22!FKR|B?Ra2e>2 zw%l*BUTi(k7R}mkf*U`HfT$YzYJd)(5JRs8=<=hY(OR+Hz*sZ|&$AoyEu$HcGV=lZ zXo^|oDzWDP;pC2z{fS>)AGH~65EH3_&1j8SR6pmLAK*qyH#4uwcJQ<6^VCFU*iL>z z{jz9|Y0z46;DAyzx-Rn_h>BKFL#xD``sB?-EEO1;zv!MjvG1YTLzjVj-#I_r+WJq& zXZs`Z3D%wqhXy+9rq&D9rE)xKH7CSL?E|ptju`=$9N-Q*b&W4vxV*_~2{Z6{PEL8^!tFzk|n?l`)ys3hW$-}~2Yf{`O*Gm4^Ox|IkaYm&+ zTa+rntVuUU6|5@M*b7|)f%Ork5`j{!L&7JIoQem(oWMaxc0a-q4H7cbg5GQ-9;Ez- z5JYNcg^ff)D?zU@UN7Ltp&?2UX^-JUv&ODHE<;5*`%X*v^^w^=^S*eFe!u~|u3U&v zUu*nJ;M|O1sCN22RHB1=a}$O`WQWQ8zn?J7#NIaf>cUx8Yq@KIVf&@$(`9_o%C~!5 zTO}>x9noJJ8*-oKs#Ip^GE_D~y*zJ<#RkKD1h;^%LkkjKj)%)f{6vwi`o5}n_&9U^qkX~7-* zCGi9;eCV|B1ZUz27Ekbt&$3tz7Pkl2hjv7C-R%S$xYPZR%Tc`7^DoAW}NT}~x3d9{F_RzGj9dGE~T0@wR zmH|LxPO3y|jc$x)SygOhcRZB5wQkFQG8Jo0jvF1b3fz~WmpZizMh&mk*@czyk>3e{ z`;|1hJ|pRl+XmZ9KgL)7i5=}4)WItKh8=da!hmglv|<;Kz9J7(4`n*H^^^3CZC_u5 zeALYQXo8yqOs$oZMcv zLUxq_+{?&KR{Z?S32JnQS?{ak*{A>jw(J%`T0Nu$0QKThB_wH%(P0$n9v~Zo6w4Gu zHl$MOG?QS;LDD|~zT$h1)XZ{bOOlXT6uLKSK^V65*N&mo`%yg%7Kb?$ESh#LDdtWZ z2ZHJ~DR`AE8JGA}CxwKBZkP}#h5C$xG6PEYIYZgg0JF!{f|uWyzhx{uw{*Sz1!3toq-&kWIDWE_Q)Y+hfZP(%NGs*t62>W64==Uh=0v z5J6A|;05i-v1w-Z@_vT-YB@x$rAna(5MkGVNx2Ic%FL{FFlawymQlc^Yrc9HpOzLw zDV+IO?g3-mz>tY9A$mdelXWelW>3FAD&`=S_*?jp;$P8lLN03g5Uya4o?SluKg$k0 zR5KUQpZ~6YsmE}0I68js%49X^&fwy`^zQu?^W}BZzkr71Y?gE9@s>2pzp%Pmi|7~q zu?j9VL7(!zo2pUJy5g#9Z=>SIl(_Nmk*dK;kF4}U3kUXYd3|}!zFMujcSN@xlIFYn z*q|*J<>js#vBgh;q4j%ve=c=xUu$`6M1tOg${*WOUUIthoTpnY#4N*#^6r^0Zz@>6 z;F%|NdsKYUwZoq;yS)k0onM9->P0noOg)F24y`Ser^57eI;0Iw)7ZZ$8(tc4HYhNn zyt=&JutT%?AZ2uz-srPD?@dgU^QF?dpU-B+9d1U7o!&j0eC+G)StvWxPr@LfsoUsG zT}<{gucobheU4AM(o5djh`+GxTUwv|cq+)-cQ38?ZC2VLD0FRl8Bi(!kk6~Zem$5{&A>_9db8N`ZUV){ zB~F#oJu}fC@q=Jga(rL;C~-iBmL@}?162~7|h z?vziPL1N>Q`4%6;Dj3!yy}y0N@W!Zr<;sJ#A{6r@^v?adDnL#ik&Gp6o2jsE?~{xr zddmew9DS>w=5!IvyDK4jWeFJMxVqc6c-aJTq@6g1r7P#1)_?1L!0d-zpG>N4RU8bt z+|M{xg{_75SvFijpgXIkeDQMjTgWG6LiP}F>Et6`a_vm8Q?8MdH_;9Z+=32!z3w`c z459{34yQzT05}_}B<&J8$IeS;ndgN@;-HgvR;*>vrWr(G2cNnwxK+gugQ=ygUhw%0 z$1Zq+mk5@|7w}R8okIj602+P>`7y~?CMaiCi%5A}37qsod&RXiz~tuBhzQBUt*ipf zY^GpldvJY<0y;=LXj*5c5m9=<->!0dj3xjL-2h$I-YZial`cehX~M^NmC#O z|5r1PCIqbmt*sHW=CzK}S0fPiY0mM2NKZ43fEhrSnSKkaJ+X-AD!;$H zpZVna6!R$%SVH}pNoz`X@~5Czy$#gw%iD5Ez5vVLn2+i2*E7{y9iZg|(_WML8R)G^ zhDrj?jj6NE0#r=!eKrUA1zE*b0G((c1mZxRnN{*+W&H2rH*}-*>&6(sMnCf%bdrP6 zEdxrZ7d=>q2=D^9Tsu}fAj^!$@~1ZWa*vEE0lKzL5(Uo6qgSS)z-0O!rYza75ck+L z*%sW0CD-K?H$@3EmsKS`W65iGEa0iH0-UWR9$B^?*Cy1nG7b4qyEDth34?mZy zW}cQN11rT!V;cFbmix0$N|7gAD>lJcI%sth`@)3DCr-(WA+1|^pB;sAA-Pq!T#D|r z%y<7LvC#bkI9+VU9HtR)$||fHJcK?eTw1h1O%wR!%#)}E8n*9L5W&3E^xJOa2A)6X zM4(p$@(G;eg7b!;h5p23h+QJ2VCzdJvPKJ;8VKcF|0tBBQ0Yok9NXmb7o{WaJqR06 z&zhBH^}Br#kx0jDI7|n}4?JxXJi^H#2T;S&+_x*(gW)P$1!R1E>wJu&)yZ%I)Opr% zlm{zJzXDqU=wQTaaMsB=1VI99kg=ELc_4fS{)HZ7z>lssTQQ>wp@mg444N%KJQ^V0 zCCuCOiXd-AmH{d&TFxc!e1Hfm8vL?k!!-GiTxOV>`DXJKNh>%`!5Ax2hosK$u4h9t z?5vo}yo9TyAMzqd4zF?;Vx8BuJ|WnxDH2>Xh8IyJqr*v}%?IiY6xg`0aS<`&$A4@5 zL^!maQQ#Wu7<)D%YO0x8D=26#R?sVgkWIL?OWGa{_8ZsI{?_RNtH8sVEDPbNwQuSm zs5Li6YpwND>9(013+l|%YefkG|jf(!8nh-mv#agz~J<7_6ad-%nF!9FU4c&T#o-?T4{bk zd#-yE)AwNUVC{M3lI`ext9P`9|E1;xlOLZy+9+23qWxB!av`<#p)f^ocC*^S2BMgz zS{(9?iL)n^IvPh-5Gb7)A2*zj-dx1efl)5#qKO_2j&^Jow)nB}2{E*ZsA-@2 z<&^tmZV?(9F2${nIVVvE5UVF;V$!3dXw!)(&xW4%>Dl6ZeWN8EM>%t(u&eSjuR!SawVD7Mb0e>7DCD#3Sy;WtyV#+B!~uAU@7N zPVS;wxN48}GGW6SvyI_NoS3uPR~=MK?`IrG31FcB(pd$HZkdBfff4@)aBSEPlfG$3 z_v-uVZ(L^8G{D%Fv)Y)mk!Cqi@u`$S(Uxm?FdXg4q6x~6P+D}kze1~y!KghLLoL&@ zQgl*VE|SUJgC4^cK9fn$awiL<1^yC;*&mV}12^ObmYnjfo*Xh!n!c9D>3W=X|DA=c zzAX2Yh^n;9sI%PPGFf2{vmmP9aJ(irX=K2dRIWSCa1@lz8S!|KaZCM*g9^r}|FZK~ z2c3uPUvwVnw6s&nxug)=5)3Aa9i%bnJPJyn1<3%lAQHalQu~CWHVp?viNatP3^iLA zUaGIb_wD$*FI8Y*d%gC;K2GOC*h>=DnKE33~H5SPVt`<*k*VI4P z_3PPH5E8rTa3Wqm@YU5LhUd84RfCm;O(E!F<)JhCT}#_>k3#OXk%i2mw|Uvh;jV%L z-rcVn;_^1EYE#~ojFROg zpQ^ws-Pe7Rtgmtz^!;?xmD`}ujkw%F4hD}43(CuLin$DqeT|S)472kePRZ(QT96vx z47Gt97+$|R+GS0EmZt_@K}uCw*OFKf4jbPbdyHWIk4zw`WC+{zd<_!SNYkZ37BbwW z5r~m_%|2Ww$Vkc8YP4UV$zUO-igIeB>Kje#rk$+ot?u*9ag#MR; z<;@A4OY8xl#02D$Dm*5dH)b_(k@!M&XtqlESsO8ZGugA@*R3gag#%rVG^d82W7oTX zT{}&KodEQ`C(CY~7*YIrv8MwxkA_`su3a+AA9{xN7izJ*#=OtIj#F)TE!HTGNZil{ zUO+vT-BbGEAjh3qMtM2Z&hQt@3R;yvYx}*aTk+C37Q$iWTbM!dkVk8|ek?5SCHnU5 zi$U60sK*`S-3$(UE2yY?*$L&l$mwx0+=%sM=jvx=E*9FN+t2*^M@KwH?6zv^U;0qy z(Pfi9_Mou)b(Q-XOS0|T?q{(HJG>`L?uhA?_lzjQC!dP326g*Mg~2ZN~GHFQ3qVkdI;nSfU=Z}CvGIg_eil;+;y zZGX;lV+@I;IXI{namVm&nB9Z=M8n#{{SpJj=<_ov;e!)`gscW;rZ2XH$G$ zn@f!U`0(-Fp3`Zd4`aRFtGLCimw9H~{Z3Bt#bn8&5_yg zStt&amV8CyxLgWijJ&14A1+etIxPXH>MX9^@+XRNe9$&|`G~+af?_^)k6f0fx`SRb z^u~WT=HT#d*2fZpQ?_f2up%1+ta4`%nltQwj%m^DVXK>84suB#El30K&5*#fJItIT znL3v~!?#cR24lgf!nXtPG;PjOL*omk1C5uv-rK^?Kengjtf-_Fn^&mCtsdtb37%qX zX-9J|{!f#`ELV@??U7|-(-P)LcBf>?x$ngc+qtc_d{>V#PQbJ&1MGmi zYZ>MPFp^s9ur{y99Nh$hxuP($b&C7p^Sb1@byH@CSVy4#lhy`W)w^szr1o-qb zAz+5wAqkZZjjs1HDq^O9)<=$-Vi21ypAgKpO!FS(zcZ!Uyq|zHDH@Ehxddz<>Cqf7}=F@97OK*30{isaa4V}aSpIpha#bue0EF)IoUi$ zS5`-o(vJyv%+NJsc;mszcrRvV_06)Nw{t%>jR3&t0(kx&IE>uoT@0olHn(eBiDp0v z=-6!_YgQihlBsE^pq1Bz9AdW!Xeb{sFCguTAOp9C=Q9~%f3oeFsB+KJITxI0$O-(= zhonEB*eU2Zk@uIy82jLSh#j*NzUN;^P>66(jAgE5fIXRN73<;t0`2YN!v;AkLh|Ah znQH>((Vk7@eNALa;#)xr4>ge)pg<+!ME2$mA3>e3oojFN*@U%)LwVd>)+QR_m1vsR z=G2qpni=Qlh&O`+J>^Z9_vUdIFlZ7JWpRZQE@JI!{5_!o4;y$5BzKGn8ILU2;s81t z(Q_|!jFv&wJMk?C2Im3whaqwSIg!raU%=qQ##?ytH|m8)M2P;W?^oYBfntr61Q7o` z*fW4HV%`r*Jo8V+{$d%#KIFKFu^cZ=h4`R>ejRsL;gTItA8^>qJT?OUukS_mBF#>v zWRCoh)i#d$WE?RGo`C-`a-|Xc*#+04Ix`58DL>H%1&n(^rT;jfUjTAgyd+|{CqACb zj}!IvKKu=8;e+-CvtT4^G1#IqYwCjc9`PsP0ClU0-55Sm*iJYo7vB5azwtrD>ulsQ z7Fd%j11y{HmmxxR?KJ$~bpja3PZID9e)0ojInmMVfl$sOKZJmv;s^P`cR_42+#(RG z{$A~Kh8H^mkc!;!+JC`4=KKBPPYc^B`0)+53P5_?5z7egW2Fj#_V{TT*?kC1rgKfl!coKdYM4*?G_i=jg*epnis8)r4S85>CnXGFguUm-yvj_h_gTq!NoBKT!nv+I!ug#%NalXdqIjg z*0vqLN^@+aq=oBSA^Urxll*U!khyaO);)ZkI~gHoObA{gf}gzl1R~OXxQIU5Pvc|1 z-(!>*FP14S`W?N9-s|6fzoc;eE`5tY0xro?{6Rv$10Ey1_TuIGhQOf2rkkq5{qQB$km*Gy-$9<+0of31$8YaA1(W~XX>9!$<*=fPdI3A z&m;G48e(B9Ft-#U>EUm!O3M{R_(h4lCz|smVt-#U>EUm!O3M{R_(h4lCz&}}m QpYlFw*S{YMBF!iN1;!TPzyJUM diff --git a/tests/f_journal/name b/tests/f_journal/name index ce75ec5..ece2321 100644 --- a/tests/f_journal/name +++ b/tests/f_journal/name @@ -1 +1 @@ -recover journal +recover journal from corrupted inode table diff --git a/tests/f_special_ea/expect.1 b/tests/f_special_ea/expect.1 index 3c775d4..54076fe 100644 --- a/tests/f_special_ea/expect.1 +++ b/tests/f_special_ea/expect.1 @@ -1,7 +1,11 @@ +Backing up journal inode block information. + Pass 1: Checking inodes, blocks, and sizes 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: 17/1024 files (0.0% non-contiguous), 1180/4096 blocks Exit status is 1 -- 1.8.3.1