aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/inode.c
diff options
context:
space:
mode:
authorJoel Becker <joel.becker@oracle.com>2008-10-17 22:25:01 -0400
committerMark Fasheh <mfasheh@suse.com>2009-01-05 11:40:32 -0500
commit13723d00e374c2a6d6ccb5af6de965e89c3e1b01 (patch)
tree70dcd8f3d188bf2f62e4bf4b44a0662d8cd527ca /fs/ocfs2/inode.c
parentffdd7a54631f07918b75e324d86713a08c11ec06 (diff)
ocfs2: Use metadata-specific ocfs2_journal_access_*() functions.
The per-metadata-type ocfs2_journal_access_*() functions hook up jbd2 commit triggers and allow us to compute metadata ecc right before the buffers are written out. This commit provides ecc for inodes, extent blocks, group descriptors, and quota blocks. It is not safe to use extened attributes and metaecc at the same time yet. The ocfs2_extent_tree and ocfs2_path abstractions in alloc.c both hide the type of block at their root. Before, it didn't matter, but now the root block must use the appropriate ocfs2_journal_access_*() function. To keep this abstract, the structures now have a pointer to the matching journal_access function and a wrapper call to call it. A few places use naked ocfs2_write_block() calls instead of adding the blocks to the journal. We make sure to calculate their checksum and ecc before the write. Since we pass around the journal_access functions. Let's typedef them in ocfs2.h. Signed-off-by: Joel Becker <joel.becker@oracle.com> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs/ocfs2/inode.c')
-rw-r--r--fs/ocfs2/inode.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c
index 9370b652ab94..229e707bc050 100644
--- a/fs/ocfs2/inode.c
+++ b/fs/ocfs2/inode.c
@@ -537,8 +537,8 @@ static int ocfs2_truncate_for_delete(struct ocfs2_super *osb,
537 goto out; 537 goto out;
538 } 538 }
539 539
540 status = ocfs2_journal_access(handle, inode, fe_bh, 540 status = ocfs2_journal_access_di(handle, inode, fe_bh,
541 OCFS2_JOURNAL_ACCESS_WRITE); 541 OCFS2_JOURNAL_ACCESS_WRITE);
542 if (status < 0) { 542 if (status < 0) {
543 mlog_errno(status); 543 mlog_errno(status);
544 goto out; 544 goto out;
@@ -621,8 +621,8 @@ static int ocfs2_remove_inode(struct inode *inode,
621 } 621 }
622 622
623 /* set the inodes dtime */ 623 /* set the inodes dtime */
624 status = ocfs2_journal_access(handle, inode, di_bh, 624 status = ocfs2_journal_access_di(handle, inode, di_bh,
625 OCFS2_JOURNAL_ACCESS_WRITE); 625 OCFS2_JOURNAL_ACCESS_WRITE);
626 if (status < 0) { 626 if (status < 0) {
627 mlog_errno(status); 627 mlog_errno(status);
628 goto bail_commit; 628 goto bail_commit;
@@ -1190,8 +1190,8 @@ int ocfs2_mark_inode_dirty(handle_t *handle,
1190 mlog_entry("(inode %llu)\n", 1190 mlog_entry("(inode %llu)\n",
1191 (unsigned long long)OCFS2_I(inode)->ip_blkno); 1191 (unsigned long long)OCFS2_I(inode)->ip_blkno);
1192 1192
1193 status = ocfs2_journal_access(handle, inode, bh, 1193 status = ocfs2_journal_access_di(handle, inode, bh,
1194 OCFS2_JOURNAL_ACCESS_WRITE); 1194 OCFS2_JOURNAL_ACCESS_WRITE);
1195 if (status < 0) { 1195 if (status < 0) {
1196 mlog_errno(status); 1196 mlog_errno(status);
1197 goto leave; 1197 goto leave;
@@ -1277,8 +1277,11 @@ int ocfs2_validate_inode_block(struct super_block *sb,
1277 * local to this block. 1277 * local to this block.
1278 */ 1278 */
1279 rc = ocfs2_validate_meta_ecc(sb, bh->b_data, &di->i_check); 1279 rc = ocfs2_validate_meta_ecc(sb, bh->b_data, &di->i_check);
1280 if (rc) 1280 if (rc) {
1281 mlog(ML_ERROR, "Checksum failed for dinode %llu\n",
1282 (unsigned long long)bh->b_blocknr);
1281 goto bail; 1283 goto bail;
1284 }
1282 1285
1283 /* 1286 /*
1284 * Errors after here are fatal. 1287 * Errors after here are fatal.