[Ocfs2-tools-devel] [PATCH 10/12] mkfs.ocfs2: Support the metaecc feature.
Joel Becker
joel.becker at oracle.com
Mon Dec 29 19:23:46 PST 2008
mkfs.ocfs2 can now create filesystems with the metaecc feature enabled.
It will compute checksums and error correction codes during the mkfs
process.
Signed-off-by: Joel Becker <joel.becker at oracle.com>
---
mkfs.ocfs2/mkfs.c | 15 +++++++++++++++
1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/mkfs.ocfs2/mkfs.c b/mkfs.ocfs2/mkfs.c
index d2690cb..033af88 100644
--- a/mkfs.ocfs2/mkfs.c
+++ b/mkfs.ocfs2/mkfs.c
@@ -86,6 +86,8 @@ static void create_lost_found_dir(State *s, ocfs2_filesys *fs);
static void format_journals(State *s, ocfs2_filesys *fs);
static void format_slotmap(State *s, ocfs2_filesys *fs);
static int format_backup_super(State *s, ocfs2_filesys *fs);
+static void mkfs_compute_meta_ecc(State *s, void *data,
+ struct ocfs2_block_check *bc);
extern char *optarg;
extern int optind, opterr, optopt;
@@ -2011,6 +2013,7 @@ format_superblock(State *s, SystemFileDiskRecord *rec,
memcpy(di->id2.i_super.s_uuid, s->uuid, 16);
ocfs2_swap_inode_from_cpu(di);
+ mkfs_compute_meta_ecc(s, di, &di->i_check);
do_pwrite(s, di, s->blocksize, super_off);
free(di);
}
@@ -2176,6 +2179,7 @@ format_file(State *s, SystemFileDiskRecord *rec)
write_out:
ocfs2_swap_inode_from_cpu(di);
+ mkfs_compute_meta_ecc(s, di, &di->i_check);
do_pwrite(s, di, s->blocksize, rec->fe_off);
free(di);
}
@@ -2220,6 +2224,7 @@ write_bitmap_data(State *s, AllocBitmap *bitmap)
memcpy(buf, gd, s->blocksize);
gd_buf = (struct ocfs2_group_desc *)buf;
ocfs2_swap_group_desc(gd_buf);
+ mkfs_compute_meta_ecc(s, buf, &gd_buf->bg_check);
do_pwrite(s, buf, s->cluster_size,
gd->bg_blkno << s->blocksize_bits);
}
@@ -2231,6 +2236,7 @@ write_group_data(State *s, AllocGroup *group)
{
uint64_t blkno = group->gd->bg_blkno;
ocfs2_swap_group_desc(group->gd);
+ mkfs_compute_meta_ecc(s, group->gd, &group->gd->bg_check);
do_pwrite(s, group->gd, s->blocksize, blkno << s->blocksize_bits);
ocfs2_swap_group_desc(group->gd);
}
@@ -2258,6 +2264,8 @@ static void mkfs_swap_dir(State *s, DirData *dir,
swap_entry_func(p, end);
if (end != s->blocksize)
ocfs2_swap_dir_trailer(trailer);
+ /* Remember, this does nothing if the feature isn't set */
+ ocfs2_compute_meta_ecc(&fake_fs, p, &trailer->db_check);
offset += s->blocksize;
p += offset;
}
@@ -2585,3 +2593,10 @@ error:
clear_both_ends(s);
exit(1);
}
+
+static void mkfs_compute_meta_ecc(State *s, void *data,
+ struct ocfs2_block_check *bc)
+{
+ if (s->feature_flags.opt_incompat & OCFS2_FEATURE_INCOMPAT_META_ECC)
+ ocfs2_block_check_compute(data, s->blocksize, bc);
+}
--
1.5.6.5
More information about the Ocfs2-tools-devel
mailing list