X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=btrfs-sb-mod.c;h=ccefc98c1fc74f9b2c2fe8c79a6d1e57a31a1fc8;hb=22d39a9e0f048b9241b0fc22e6ef2151da07cfb4;hp=8f5beadf5222059bb1a2c8ad297fd6c6bb821168;hpb=d04d25fb14ab7eb9a6f29dd877431f1afb58192e;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/btrfs-sb-mod.c b/btrfs-sb-mod.c index 8f5bead..ccefc98 100644 --- a/btrfs-sb-mod.c +++ b/btrfs-sb-mod.c @@ -110,6 +110,7 @@ struct fspec { enum field_type { TYPE_UNKNOWN, TYPE_U64, + TYPE_U16, }; struct sb_field { @@ -123,21 +124,40 @@ struct sb_field { { .name = "chunk_root_generation", .type = TYPE_U64 }, { .name = "cache_generation", .type = TYPE_U64 }, { .name = "uuid_tree_generation", .type = TYPE_U64 }, + { .name = "csum_type", .type = TYPE_U16 }, }; -#define MOD_FIELD(fname, set, val) \ +#define MOD_FIELD_XX(fname, set, val, bits, f_dec, f_hex, f_type) \ else if (strcmp(name, #fname) == 0) { \ if (set) { \ - printf("SET: %s %llu (0x%llx)\n", #fname, \ - (unsigned long long)*val, (unsigned long long)*val); \ - sb->fname = cpu_to_le64(*val); \ + printf("SET: "#fname" "f_dec" (0x"f_hex")\n", \ + (f_type)*val, (f_type)*val); \ + sb->fname = cpu_to_le##bits(*val); \ } else { \ - *val = le64_to_cpu(sb->fname); \ - printf("GET: %s %llu (0x%llx)\n", #fname, \ - (unsigned long long)*val, (unsigned long long)*val); \ + *val = le##bits##_to_cpu(sb->fname); \ + printf("GET: "#fname" "f_dec" (0x"f_hex")\n", \ + (f_type)*val, (f_type)*val); \ } \ } +#define MOD_FIELD64(fname, set, val) \ + MOD_FIELD_XX(fname, set, val, 64, "%llu", "%llx", unsigned long long) + +/* Alias for u64 */ +#define MOD_FIELD(fname, set, val) MOD_FIELD64(fname, set, val) + +/* + * Support only GET and SET properly, ADD and SUB may work + */ +#define MOD_FIELD32(fname, set, val) \ + MOD_FIELD_XX(fname, set, val, 32, "%u", "%x", unsigned int) + +#define MOD_FIELD16(fname, set, val) \ + MOD_FIELD_XX(fname, set, val, 16, "%hu", "%hx", unsigned short int) + +#define MOD_FIELD8(fname, set, val) \ + MOD_FIELD_XX(fname, set, val, 8, "%hhu", "%hhx", unsigned char) + static void mod_field_by_name(struct btrfs_super_block *sb, int set, const char *name, u64 *val) { @@ -149,6 +169,7 @@ static void mod_field_by_name(struct btrfs_super_block *sb, int set, const char MOD_FIELD(chunk_root_generation, set, val) MOD_FIELD(cache_generation, set, val) MOD_FIELD(uuid_tree_generation, set, val) + MOD_FIELD16(csum_type, set, val) else { printf("ERROR: unhandled field: %s\n", name); exit(1);