diff options
author | Jin Qian <jinqian@google.com> | 2017-04-28 15:00:57 -0700 |
---|---|---|
committer | Jin Qian <jinqian@google.com> | 2017-05-05 11:13:13 -0700 |
commit | d1f884a979b68ab17ba1de9851b02d6ec3cb1765 (patch) | |
tree | f4947671c7ba2a0a0334ad7b77bb42c83796b16e /f2fs_utils | |
parent | 8ebd2b14a2cbcc42dc7c5fe97f9b4c6be6f701e3 (diff) | |
download | extras-d1f884a979b68ab17ba1de9851b02d6ec3cb1765.tar.gz |
f2fs_utils: update f2fs utils to match 1.8.0
Expose f2fs_configuration via dlsym and use first device for output.
Test: format userdata to f2fs and boot
Bug: 37758867
Change-Id: Iee011f551f192f643f7b6443b37f65d354491f20
Diffstat (limited to 'f2fs_utils')
-rw-r--r-- | f2fs_utils/f2fs_dlutils.c | 10 | ||||
-rw-r--r-- | f2fs_utils/f2fs_ioutils.c | 16 | ||||
-rw-r--r-- | f2fs_utils/f2fs_sparseblock.c | 39 | ||||
-rw-r--r-- | f2fs_utils/f2fs_utils.c | 17 |
4 files changed, 45 insertions, 37 deletions
diff --git a/f2fs_utils/f2fs_dlutils.c b/f2fs_utils/f2fs_dlutils.c index 40be4161..2ba3f7cc 100644 --- a/f2fs_utils/f2fs_dlutils.c +++ b/f2fs_utils/f2fs_dlutils.c @@ -38,15 +38,16 @@ #define F2FS_DYN_LIB "libf2fs_fmt_host_dyn.so" int (*f2fs_format_device_dl)(void); -void (*f2fs_init_configuration_dl)(struct f2fs_configuration *); +void (*f2fs_init_configuration_dl)(void); +struct f2fs_configuration *c_dl; int f2fs_format_device(void) { assert(f2fs_format_device_dl); return f2fs_format_device_dl(); } -void f2fs_init_configuration(struct f2fs_configuration *config) { +void f2fs_init_configuration(void) { assert(f2fs_init_configuration_dl); - f2fs_init_configuration_dl(config); + f2fs_init_configuration_dl(); } int dlopenf2fs() { @@ -58,7 +59,8 @@ int dlopenf2fs() { } f2fs_format_device_dl = dlsym(f2fs_lib, "f2fs_format_device"); f2fs_init_configuration_dl = dlsym(f2fs_lib, "f2fs_init_configuration"); - if (!f2fs_format_device_dl || !f2fs_init_configuration_dl) { + c_dl = dlsym(f2fs_lib, "c"); + if (!f2fs_format_device_dl || !f2fs_init_configuration_dl || !c_dl) { return -1; } return 0; diff --git a/f2fs_utils/f2fs_ioutils.c b/f2fs_utils/f2fs_ioutils.c index 4c120966..d3bc727d 100644 --- a/f2fs_utils/f2fs_ioutils.c +++ b/f2fs_utils/f2fs_ioutils.c @@ -83,7 +83,7 @@ struct selabel_handle; #endif -struct f2fs_configuration config; +extern struct f2fs_configuration *c_dl; struct sparse_file *f2fs_sparse_file; struct buf_item { @@ -96,9 +96,9 @@ struct buf_item *buf_list; static int dev_write_fd(void *buf, __u64 offset, size_t len) { - if (lseek64(config.fd, (off64_t)offset, SEEK_SET) < 0) + if (lseek64(c_dl->devices[0].fd, (off64_t)offset, SEEK_SET) < 0) return -1; - ssize_t written = write(config.fd, buf, len); + ssize_t written = write(c_dl->devices[0].fd, buf, len); if (written == -1) return -1; if ((size_t)written != len) @@ -138,7 +138,7 @@ static int dev_write_sparse(void *buf, __u64 byte_offset, size_t byte_len) return 0; } -void f2fs_finalize_device(struct f2fs_configuration *c) +void f2fs_finalize_device() { } @@ -162,18 +162,22 @@ int dev_read(void *buf, __u64 offset, size_t len) int dev_write(void *buf, __u64 offset, size_t len) { - if (config.fd >= 0) { + if (c_dl->devices[0].fd >= 0) { return dev_write_fd(buf, offset, len); } else { return dev_write_sparse(buf, offset, len); } } +int dev_write_block(void *buf, __u64 offset) +{ + return dev_write(buf, offset << F2FS_BLKSIZE_BITS, F2FS_BLKSIZE); +} int dev_fill(void *buf, __u64 offset, size_t len) { int ret; - if (config.fd >= 0) { + if (c_dl->devices[0].fd >= 0) { return dev_write_fd(buf, offset, len); } // sparse file fills with zero by default. diff --git a/f2fs_utils/f2fs_sparseblock.c b/f2fs_utils/f2fs_sparseblock.c index d5c1f3a2..27225c62 100644 --- a/f2fs_utils/f2fs_sparseblock.c +++ b/f2fs_utils/f2fs_sparseblock.c @@ -28,9 +28,9 @@ #member, le64_to_cpu((ptr)->member), le64_to_cpu((ptr)->member) ); \ } while (0); -#define segno_in_journal(sum, i) ((sum)->sit_j.entries[i].segno) +#define segno_in_journal(jnl, i) ((jnl)->sit_j.entries[i].segno) -#define sit_in_journal(sum, i) ((sum)->sit_j.entries[i].se) +#define sit_in_journal(jnl, i) ((jnl)->sit_j.entries[i].se) static void dbg_print_raw_sb_info(struct f2fs_super_block *sb) { @@ -132,27 +132,28 @@ static void dbg_print_info_struct(struct f2fs_info *info) SLOGD("+--------------------------------------------------------+\n"); SLOGD("| F2FS_INFO |\n"); SLOGD("+--------------------------------------------------------+\n"); - SLOGD("blocks_per_segment: %"PRIu64, info->blocks_per_segment); + SLOGD("blocks_per_segment: %" PRIu64, info->blocks_per_segment); SLOGD("block_size: %d", info->block_size); SLOGD("sit_bmp loc: %p", info->sit_bmp); SLOGD("sit_bmp_size: %d", info->sit_bmp_size); - SLOGD("blocks_per_sit: %"PRIu64, info->blocks_per_sit); + SLOGD("blocks_per_sit: %" PRIu64, info->blocks_per_sit); SLOGD("sit_blocks loc: %p", info->sit_blocks); SLOGD("sit_sums loc: %p", info->sit_sums); - SLOGD("sit_sums num: %d", le16_to_cpu(info->sit_sums->n_sits)); + SLOGD("sit_sums num: %d", le16_to_cpu(info->sit_sums->journal.n_sits)); unsigned int i; - for(i = 0; i < (le16_to_cpu(info->sit_sums->n_sits)); i++) { - SLOGD("entry %d in journal entries is for segment %d",i, le32_to_cpu(segno_in_journal(info->sit_sums, i))); + for(i = 0; i < (le16_to_cpu(info->sit_sums->journal.n_sits)); i++) { + SLOGD("entry %d in journal entries is for segment %d", i, + le32_to_cpu(segno_in_journal(&info->sit_sums->journal, i))); } - SLOGD("cp_blkaddr: %"PRIu64, info->cp_blkaddr); - SLOGD("cp_valid_cp_blkaddr: %"PRIu64, info->cp_valid_cp_blkaddr); - SLOGD("sit_blkaddr: %"PRIu64, info->sit_blkaddr); - SLOGD("nat_blkaddr: %"PRIu64, info->nat_blkaddr); - SLOGD("ssa_blkaddr: %"PRIu64, info->ssa_blkaddr); - SLOGD("main_blkaddr: %"PRIu64, info->main_blkaddr); - SLOGD("total_user_used: %"PRIu64, info->total_user_used); - SLOGD("total_blocks: %"PRIu64, info->total_blocks); + SLOGD("cp_blkaddr: %" PRIu64, info->cp_blkaddr); + SLOGD("cp_valid_cp_blkaddr: %" PRIu64, info->cp_valid_cp_blkaddr); + SLOGD("sit_blkaddr: %" PRIu64, info->sit_blkaddr); + SLOGD("nat_blkaddr: %" PRIu64, info->nat_blkaddr); + SLOGD("ssa_blkaddr: %" PRIu64, info->ssa_blkaddr); + SLOGD("main_blkaddr: %" PRIu64, info->main_blkaddr); + SLOGD("total_user_used: %" PRIu64, info->total_user_used); + SLOGD("total_blocks: %" PRIu64, info->total_blocks); SLOGD("\n\n"); } @@ -362,7 +363,7 @@ static int get_sit_summary(int fd, struct f2fs_info *info, struct f2fs_checkpoin if (is_set_ckpt_flags(cp, CP_COMPACT_SUM_FLAG)) { if (read_structure_blk(fd, info->cp_valid_cp_blkaddr + le32_to_cpu(cp->cp_pack_start_sum), buffer, 1)) return -1; - memcpy(&info->sit_sums->n_sits, &buffer[SUM_JOURNAL_SIZE], SUM_JOURNAL_SIZE); + memcpy(&info->sit_sums->journal.n_sits, &buffer[SUM_JOURNAL_SIZE], SUM_JOURNAL_SIZE); } else { u64 blk_addr; if (is_set_ckpt_flags(cp, CP_UMOUNT_FLAG)) @@ -505,9 +506,9 @@ int run_on_used_blocks(u64 startblock, struct f2fs_info *info, int (*func)(u64 p /* check the SIT entries in the journal */ found = 0; - for(i = 0; i < le16_to_cpu(info->sit_sums->n_sits); i++) { - if (le32_to_cpu(segno_in_journal(info->sit_sums, i)) == segnum) { - sit_entry = &sit_in_journal(info->sit_sums, i); + for(i = 0; i < le16_to_cpu(info->sit_sums->journal.n_sits); i++) { + if (le32_to_cpu(segno_in_journal(&info->sit_sums->journal, i)) == segnum) { + sit_entry = &sit_in_journal(&info->sit_sums->journal, i); found = 1; break; } diff --git a/f2fs_utils/f2fs_utils.c b/f2fs_utils/f2fs_utils.c index 6254c080..52236801 100644 --- a/f2fs_utils/f2fs_utils.c +++ b/f2fs_utils/f2fs_utils.c @@ -42,15 +42,11 @@ struct selabel_handle; extern void flush_sparse_buffs(); -struct f2fs_configuration config; +extern struct f2fs_configuration *c_dl; struct sparse_file *f2fs_sparse_file; extern int dlopenf2fs(); static void reset_f2fs_info() { - // Reset all the global data structures used by make_f2fs so it - // can be called again. - memset(&config, 0, sizeof(config)); - config.fd = -1; if (f2fs_sparse_file) { sparse_file_destroy(f2fs_sparse_file); f2fs_sparse_file = NULL; @@ -64,10 +60,15 @@ int make_f2fs_sparse_fd(int fd, long long len, return -1; } reset_f2fs_info(); - f2fs_init_configuration(&config); + f2fs_init_configuration(); len &= ~((__u64)(F2FS_BLKSIZE - 1)); - config.total_sectors = len / config.sector_size; - config.start_sector = 0; + c_dl->ndevs = 1; + c_dl->devices[0].total_sectors = len / c_dl->devices[0].sector_size; + c_dl->sector_size = c_dl->devices[0].sector_size; + c_dl->sectors_per_blk = F2FS_BLKSIZE / c_dl->sector_size; + c_dl->total_sectors = c_dl->devices[0].total_sectors; + c_dl->start_sector = 0; + c_dl->trim = 0; f2fs_sparse_file = sparse_file_new(F2FS_BLKSIZE, len); f2fs_format_device(); sparse_file_write(f2fs_sparse_file, fd, /*gzip*/0, /*sparse*/1, /*crc*/0); |