summaryrefslogtreecommitdiff
path: root/f2fs_utils
diff options
context:
space:
mode:
authorJin Qian <jinqian@google.com>2017-04-28 15:00:57 -0700
committerJin Qian <jinqian@google.com>2017-05-05 11:13:13 -0700
commitd1f884a979b68ab17ba1de9851b02d6ec3cb1765 (patch)
treef4947671c7ba2a0a0334ad7b77bb42c83796b16e /f2fs_utils
parent8ebd2b14a2cbcc42dc7c5fe97f9b4c6be6f701e3 (diff)
downloadextras-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.c10
-rw-r--r--f2fs_utils/f2fs_ioutils.c16
-rw-r--r--f2fs_utils/f2fs_sparseblock.c39
-rw-r--r--f2fs_utils/f2fs_utils.c17
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);