diff options
author | JP Abgrall <jpa@google.com> | 2014-03-31 15:33:01 -0700 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk.kim@samsung.com> | 2014-04-07 12:14:32 +0900 |
commit | a35529fce0c5171562ec0ebebcc6120d1604924b (patch) | |
tree | 91d1161060d6e80bbb4b79da5590e342f8e61059 | |
parent | 15ea79b3ae7f0474ade43ba8b6eb328806e01e15 (diff) | |
download | android_external_f2fs-tools-a35529fce0c5171562ec0ebebcc6120d1604924b.tar.gz android_external_f2fs-tools-a35529fce0c5171562ec0ebebcc6120d1604924b.tar.bz2 android_external_f2fs-tools-a35529fce0c5171562ec0ebebcc6120d1604924b.zip |
format: add support for dev_fill() and extra dev_*() debugging.
Support an fs_io dev_fill().
This helps with devices that actually already return 0 on uninitialized
data. It also helps with in memory devices using sparse libs: don't
allocate a block of 0s.
Signed-off-by: JP Abgrall <jpa@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
-rw-r--r-- | include/f2fs_fs.h | 2 | ||||
-rw-r--r-- | lib/libf2fs_io.c | 12 | ||||
-rw-r--r-- | mkfs/f2fs_format.c | 21 |
3 files changed, 33 insertions, 2 deletions
diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h index 7210604..095d755 100644 --- a/include/f2fs_fs.h +++ b/include/f2fs_fs.h @@ -665,6 +665,8 @@ extern int f2fs_get_device_info(struct f2fs_configuration *); extern int dev_read(void *, __u64, size_t); extern int dev_write(void *, __u64, size_t); +/* All bytes in the buffer must be 0 use dev_fill(). */ +extern int dev_fill(void *, __u64, size_t); extern int dev_read_block(void *, __u64); extern int dev_read_blocks(void *, __u64, __u32 ); diff --git a/lib/libf2fs_io.c b/lib/libf2fs_io.c index e48dd1a..5f0a547 100644 --- a/lib/libf2fs_io.c +++ b/lib/libf2fs_io.c @@ -49,6 +49,18 @@ int dev_write(void *buf, __u64 offset, size_t len) return 0; } +int dev_fill(void *buf, __u64 offset, size_t len) +{ + /* Only allow fill to zero */ + if (*((__u8*)buf)) + return -1; + if (lseek64(config.fd, (off64_t)offset, SEEK_SET) < 0) + return -1; + if (write(config.fd, buf, len) < 0) + return -1; + return 0; +} + int dev_read_block(void *buf, __u64 blk_addr) { return dev_read(buf, blk_addr * F2FS_BLKSIZE, F2FS_BLKSIZE); diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c index a46e60e..31b4422 100644 --- a/mkfs/f2fs_format.c +++ b/mkfs/f2fs_format.c @@ -376,10 +376,11 @@ static int f2fs_init_sit_area(void) sit_seg_addr = le32_to_cpu(super_block.sit_blkaddr); sit_seg_addr *= blk_size; + DBG(1, "\tFilling sit area at offset 0x%08"PRIx64"\n", sit_seg_addr); for (index = 0; index < (le32_to_cpu(super_block.segment_count_sit) / 2); index++) { - if (dev_write(zero_buf, sit_seg_addr, seg_size)) { + if (dev_fill(zero_buf, sit_seg_addr, seg_size)) { MSG(1, "\tError: While zeroing out the sit area \ on disk!!!\n"); return -1; @@ -411,10 +412,11 @@ static int f2fs_init_nat_area(void) nat_seg_addr = le32_to_cpu(super_block.nat_blkaddr); nat_seg_addr *= blk_size; + DBG(1, "\tFilling nat area at offset 0x%08"PRIx64"\n", nat_seg_addr); for (index = 0; index < (le32_to_cpu(super_block.segment_count_nat) / 2); index++) { - if (dev_write(nat_buf, nat_seg_addr, seg_size)) { + if (dev_fill(nat_buf, nat_seg_addr, seg_size)) { MSG(1, "\tError: While zeroing out the nat area \ on disk!!!\n"); return -1; @@ -510,6 +512,7 @@ static int f2fs_write_check_point_pack(void) cp_seg_blk_offset = le32_to_cpu(super_block.segment0_blkaddr); cp_seg_blk_offset *= blk_size_bytes; + DBG(1, "\tWriting main segments, ckp at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); if (dev_write(ckp, cp_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the ckp to disk!!!\n"); return -1; @@ -523,6 +526,7 @@ static int f2fs_write_check_point_pack(void) sum->entries[0].ofs_in_node = 0; cp_seg_blk_offset += blk_size_bytes; + DBG(1, "\tWriting segment summary for data, ckp at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); if (dev_write(sum, cp_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the sum_blk to disk!!!\n"); return -1; @@ -533,6 +537,7 @@ static int f2fs_write_check_point_pack(void) SET_SUM_TYPE((&sum->footer), SUM_TYPE_DATA); cp_seg_blk_offset += blk_size_bytes; + DBG(1, "\tWriting segment summary, ckp at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); if (dev_write(sum, cp_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the sum_blk to disk!!!\n"); return -1; @@ -562,6 +567,7 @@ static int f2fs_write_check_point_pack(void) sum->sit_j.entries[5].se.vblocks = cpu_to_le16((CURSEG_COLD_DATA << 10)); cp_seg_blk_offset += blk_size_bytes; + DBG(1, "\tWriting data sit for root, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); if (dev_write(sum, cp_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the sum_blk to disk!!!\n"); return -1; @@ -575,6 +581,7 @@ static int f2fs_write_check_point_pack(void) sum->entries[0].ofs_in_node = 0; cp_seg_blk_offset += blk_size_bytes; + DBG(1, "\tWriting Segment summary for node blocks, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); if (dev_write(sum, cp_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the sum_blk to disk!!!\n"); return -1; @@ -585,6 +592,7 @@ static int f2fs_write_check_point_pack(void) SET_SUM_TYPE((&sum->footer), SUM_TYPE_NODE); cp_seg_blk_offset += blk_size_bytes; + DBG(1, "\tWriting Segment summary for data block (1/2), at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); if (dev_write(sum, cp_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the sum_blk to disk!!!\n"); return -1; @@ -594,6 +602,7 @@ static int f2fs_write_check_point_pack(void) memset(sum, 0, sizeof(struct f2fs_summary_block)); SET_SUM_TYPE((&sum->footer), SUM_TYPE_NODE); cp_seg_blk_offset += blk_size_bytes; + DBG(1, "\tWriting Segment summary for data block (2/2), at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); if (dev_write(sum, cp_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the sum_blk to disk!!!\n"); return -1; @@ -601,6 +610,7 @@ static int f2fs_write_check_point_pack(void) /* 8. cp page2 */ cp_seg_blk_offset += blk_size_bytes; + DBG(1, "\tWriting cp page2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); if (dev_write(ckp, cp_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the ckp to disk!!!\n"); return -1; @@ -617,6 +627,7 @@ static int f2fs_write_check_point_pack(void) cp_seg_blk_offset = (le32_to_cpu(super_block.segment0_blkaddr) + config.blks_per_seg) * blk_size_bytes; + DBG(1, "\tWriting cp page 1 of checkpoint pack 2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); if (dev_write(ckp, cp_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the ckp to disk!!!\n"); return -1; @@ -624,6 +635,7 @@ static int f2fs_write_check_point_pack(void) /* 10. cp page 2 of check point pack 2 */ cp_seg_blk_offset += blk_size_bytes * (le32_to_cpu(ckp->cp_pack_total_block_count) - 1); + DBG(1, "\tWriting cp page 2 of checkpoint pack 2, at offset 0x%08"PRIx64"\n", cp_seg_blk_offset); if (dev_write(ckp, cp_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the ckp to disk!!!\n"); return -1; @@ -643,6 +655,7 @@ static int f2fs_write_super_block(void) memcpy(zero_buff + F2FS_SUPER_OFFSET, &super_block, sizeof(super_block)); + DBG(1, "\tWriting super block, at offset 0x%08x\n", 0); for (index = 0; index < 2; index++) { if (dev_write(zero_buff, index * F2FS_BLKSIZE, F2FS_BLKSIZE)) { MSG(1, "\tError: While while writing supe_blk \ @@ -709,6 +722,7 @@ static int f2fs_write_root_inode(void) config.blks_per_seg; main_area_node_seg_blk_offset *= blk_size_bytes; + DBG(1, "\tWriting root inode (hot node), at offset 0x%08"PRIx64"\n", main_area_node_seg_blk_offset); if (dev_write(raw_node, main_area_node_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the raw_node to disk!!!\n"); return -1; @@ -722,6 +736,7 @@ static int f2fs_write_root_inode(void) config.blks_per_seg; main_area_node_seg_blk_offset *= blk_size_bytes; + DBG(1, "\tWriting root inode (warm node), at offset 0x%08"PRIx64"\n", main_area_node_seg_blk_offset); if (dev_write(raw_node, main_area_node_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the raw_node to disk!!!\n"); return -1; @@ -759,6 +774,7 @@ static int f2fs_update_nat_root(void) nat_seg_blk_offset = le32_to_cpu(super_block.nat_blkaddr); nat_seg_blk_offset *= blk_size_bytes; + DBG(1, "\tWriting nat root, at offset 0x%08"PRIx64"\n", nat_seg_blk_offset); if (dev_write(nat_blk, nat_seg_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the nat_blk set0 to disk!\n"); return -1; @@ -799,6 +815,7 @@ static int f2fs_add_default_dentry_root(void) config.blks_per_seg; data_blk_offset *= blk_size_bytes; + DBG(1, "\tWriting default dentry root, at offset 0x%08"PRIx64"\n", data_blk_offset); if (dev_write(dent_blk, data_blk_offset, F2FS_BLKSIZE)) { MSG(1, "\tError: While writing the dentry_blk to disk!!!\n"); return -1; |