From: Theodore Ts'o Date: Sat, 20 Jun 2015 02:01:16 +0000 (-0400) Subject: Merge branch 'maint' into next X-Git-Tag: v1.43-WIP-2016-03-15~89 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=83c799dea0fba4009fbb17cfda70006bc5cf0f4e;p=tools%2Fe2fsprogs.git Merge branch 'maint' into next --- 83c799dea0fba4009fbb17cfda70006bc5cf0f4e diff --cc debugfs/Makefile.in index 1a65c13,574897e..a768248 --- a/debugfs/Makefile.in +++ b/debugfs/Makefile.in @@@ -156,9 -127,16 +157,17 @@@ clean: mostlyclean: clean distclean: clean $(RM) -f debug_cmds.c .depend Makefile $(srcdir)/TAGS \ - $(srcdir)/Makefile.in.old + $(srcdir)/Makefile.in.old $(srcdir)/recovery.c \ + $(srcdir)/revoke.c + tst_set_fields: set_fields.c util.c + $(E) " LD $@" + $(Q) $(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(SYSLIBS) -DUNITTEST \ + -o tst_set_fields $(srcdir)/set_fields.c $(srcdir)/util.c $(LIBS) + + check:: tst_set_fields + $(TESTENV) ./tst_set_fields + # +++ Dependency line eater +++ # # Makefile dependencies follow. This must be the last section in diff --cc debugfs/set_fields.c index 7d1a355,8297e08..365a8dc --- a/debugfs/set_fields.c +++ b/debugfs/set_fields.c @@@ -165,11 -163,7 +165,11 @@@ static struct field_set_info super_fiel { "last_error_ino", &set_sb.s_last_error_ino, NULL, 4, parse_uint }, { "last_error_block", &set_sb.s_last_error_block, NULL, 8, parse_uint }, { "last_error_func", &set_sb.s_last_error_func, NULL, 32, parse_string }, - { "last_error_line", &set_sb.s_last_error_ino, NULL, 4, parse_uint }, + { "last_error_line", &set_sb.s_last_error_line, NULL, 4, parse_uint }, + { "encrypt_algos", &set_sb.s_encrypt_algos, NULL, 1, parse_uint, + FLAG_ARRAY, 4 }, + { "encrypt_pw_salt", &set_sb.s_encrypt_pw_salt, NULL, 16, parse_uuid }, + { "lpf_ino", &set_sb.s_lpf_ino, NULL, 4, parse_uint }, { 0, 0, 0, 0 } }; @@@ -274,9 -269,60 +275,61 @@@ static struct field_set_info mmp_fields { "bdevname", &set_mmp.mmp_bdevname, NULL, sizeof(set_mmp.mmp_bdevname), parse_string }, { "check_interval", &set_mmp.mmp_check_interval, NULL, 2, parse_uint }, + { "checksum", &set_mmp.mmp_checksum, NULL, 4, parse_uint }, + { 0, 0, 0, 0 } }; + #ifdef UNITTEST + + static void do_verify_field_set_info(struct field_set_info *fields, + const void *data, size_t size) + { + struct field_set_info *ss, *ss2; + const char *begin = (char *)data; + const char *end = begin + size; + + for (ss = fields ; ss->name ; ss++) { + const char *ptr; + + /* Check pointers */ + ptr = ss->ptr; + assert(!ptr || (ptr >= begin && ptr < end)); + ptr = ss->ptr2; + assert(!ptr || (ptr >= begin && ptr < end)); + + /* Check function */ + assert(ss->func); + + for (ss2 = fields ; ss2 != ss ; ss2++) { + /* Check duplicate names */ + assert(strcmp(ss->name, ss2->name)); + + if (ss->flags & FLAG_ALIAS || ss2->flags & FLAG_ALIAS) + continue; + /* Check false aliases, might be copy-n-paste error */ + assert(!ss->ptr || (ss->ptr != ss2->ptr && + ss->ptr != ss2->ptr2)); + assert(!ss->ptr2 || (ss->ptr2 != ss2->ptr && + ss->ptr2 != ss2->ptr2)); + } + } + } + + int main(int argc, char **argv) + { + do_verify_field_set_info(super_fields, &set_sb, sizeof(set_sb)); + do_verify_field_set_info(inode_fields, &set_inode, sizeof(set_inode)); + do_verify_field_set_info(ext2_bg_fields, &set_gd, sizeof(set_gd)); + do_verify_field_set_info(ext4_bg_fields, &set_gd4, sizeof(set_gd4)); + do_verify_field_set_info(mmp_fields, &set_mmp, sizeof(set_mmp)); + return 0; + } + + ext2_filsys current_fs; + ext2_ino_t root, cwd; + + #endif /* UNITTEST */ + static int check_suffix(const char *field) { int len = strlen(field); diff --cc misc/tune2fs.c index 54916c2,cd1d17f..4a38980 --- a/misc/tune2fs.c +++ b/misc/tune2fs.c @@@ -2964,10 -2279,11 +2964,10 @@@ retry_open if (U_flag) { int set_csum = 0; dgrp_t i; - char buf[SUPERBLOCK_SIZE]; + char buf[SUPERBLOCK_SIZE] __attribute__ ((aligned(8))); __u8 old_uuid[UUID_SIZE]; - if (sb->s_feature_ro_compat & - EXT4_FEATURE_RO_COMPAT_GDT_CSUM) { + if (ext2fs_has_group_desc_csum(fs)) { /* * Changing the UUID requires rewriting all metadata, * which can race with a mounted fs. Don't allow that.