ocfs2: Add ecc and checksums to ocfs2 xattr buckets.
authorJoel Becker <joel.becker@oracle.com>
Fri, 5 Dec 2008 19:19:37 +0000 (11:19 -0800)
committerMark Fasheh <mfasheh@suse.com>
Mon, 5 Jan 2009 16:40:32 +0000 (08:40 -0800)
The xattr bucket can span multiple blocks on disk.  We have wrappers
for this structure in the code.  We use the new multi-block ecc calls to
calculate and validate the bucket.

Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
fs/ocfs2/xattr.c

index bc822d6ba5420def312f496c04ed10fccf6c19b7..7c2f4c9d1bd92b741622715f6f5a66c7f12ab9bb 100644 (file)
@@ -273,6 +273,15 @@ static int ocfs2_read_xattr_bucket(struct ocfs2_xattr_bucket *bucket,
        rc = ocfs2_read_blocks(bucket->bu_inode, xb_blkno,
                               bucket->bu_blocks, bucket->bu_bhs, 0,
                               NULL);
+       if (!rc) {
+               rc = ocfs2_validate_meta_ecc_bhs(bucket->bu_inode->i_sb,
+                                                bucket->bu_bhs,
+                                                bucket->bu_blocks,
+                                                &bucket_xh(bucket)->xh_check);
+               if (rc)
+                       mlog_errno(rc);
+       }
+
        if (rc)
                ocfs2_xattr_bucket_relse(bucket);
        return rc;
@@ -301,6 +310,10 @@ static void ocfs2_xattr_bucket_journal_dirty(handle_t *handle,
 {
        int i;
 
+       ocfs2_compute_meta_ecc_bhs(bucket->bu_inode->i_sb,
+                                  bucket->bu_bhs, bucket->bu_blocks,
+                                  &bucket_xh(bucket)->xh_check);
+
        for (i = 0; i < bucket->bu_blocks; i++)
                ocfs2_journal_dirty(handle, bucket->bu_bhs[i]);
 }