Merge branch 'akpm' (patches from Andrew)
[linux-2.6-microblaze.git] / fs / jbd2 / recovery.c
index d47a0d9..8ca3527 100644 (file)
@@ -179,8 +179,8 @@ static int jbd2_descriptor_block_csum_verify(journal_t *j, void *buf)
        if (!jbd2_journal_has_csum_v2or3(j))
                return 1;
 
-       tail = (struct jbd2_journal_block_tail *)(buf + j->j_blocksize -
-                       sizeof(struct jbd2_journal_block_tail));
+       tail = (struct jbd2_journal_block_tail *)((char *)buf +
+               j->j_blocksize - sizeof(struct jbd2_journal_block_tail));
        provided = tail->t_checksum;
        tail->t_checksum = 0;
        calculated = jbd2_chksum(j, j->j_csum_seed, buf, j->j_blocksize);
@@ -196,7 +196,7 @@ static int jbd2_descriptor_block_csum_verify(journal_t *j, void *buf)
 static int count_tags(journal_t *journal, struct buffer_head *bh)
 {
        char *                  tagp;
-       journal_block_tag_t *   tag;
+       journal_block_tag_t     tag;
        int                     nr = 0, size = journal->j_blocksize;
        int                     tag_bytes = journal_tag_bytes(journal);
 
@@ -206,14 +206,14 @@ static int count_tags(journal_t *journal, struct buffer_head *bh)
        tagp = &bh->b_data[sizeof(journal_header_t)];
 
        while ((tagp - bh->b_data + tag_bytes) <= size) {
-               tag = (journal_block_tag_t *) tagp;
+               memcpy(&tag, tagp, sizeof(tag));
 
                nr++;
                tagp += tag_bytes;
-               if (!(tag->t_flags & cpu_to_be16(JBD2_FLAG_SAME_UUID)))
+               if (!(tag.t_flags & cpu_to_be16(JBD2_FLAG_SAME_UUID)))
                        tagp += 16;
 
-               if (tag->t_flags & cpu_to_be16(JBD2_FLAG_LAST_TAG))
+               if (tag.t_flags & cpu_to_be16(JBD2_FLAG_LAST_TAG))
                        break;
        }
 
@@ -433,9 +433,9 @@ static int jbd2_commit_block_csum_verify(journal_t *j, void *buf)
 }
 
 static int jbd2_block_tag_csum_verify(journal_t *j, journal_block_tag_t *tag,
+                                     journal_block_tag3_t *tag3,
                                      void *buf, __u32 sequence)
 {
-       journal_block_tag3_t *tag3 = (journal_block_tag3_t *)tag;
        __u32 csum32;
        __be32 seq;
 
@@ -496,7 +496,7 @@ static int do_one_pass(journal_t *journal,
        while (1) {
                int                     flags;
                char *                  tagp;
-               journal_block_tag_t *   tag;
+               journal_block_tag_t     tag;
                struct buffer_head *    obh;
                struct buffer_head *    nbh;
 
@@ -613,8 +613,8 @@ static int do_one_pass(journal_t *journal,
                               <= journal->j_blocksize - descr_csum_size) {
                                unsigned long io_block;
 
-                               tag = (journal_block_tag_t *) tagp;
-                               flags = be16_to_cpu(tag->t_flags);
+                               memcpy(&tag, tagp, sizeof(tag));
+                               flags = be16_to_cpu(tag.t_flags);
 
                                io_block = next_log_block++;
                                wrap(journal, next_log_block);
@@ -632,7 +632,7 @@ static int do_one_pass(journal_t *journal,
 
                                        J_ASSERT(obh != NULL);
                                        blocknr = read_tag_block(journal,
-                                                                tag);
+                                                                &tag);
 
                                        /* If the block has been
                                         * revoked, then we're all done
@@ -647,8 +647,8 @@ static int do_one_pass(journal_t *journal,
 
                                        /* Look for block corruption */
                                        if (!jbd2_block_tag_csum_verify(
-                                               journal, tag, obh->b_data,
-                                               be32_to_cpu(tmp->h_sequence))) {
+                       journal, &tag, (journal_block_tag3_t *)tagp,
+                       obh->b_data, be32_to_cpu(tmp->h_sequence))) {
                                                brelse(obh);
                                                success = -EFSBADCRC;
                                                printk(KERN_ERR "JBD2: Invalid "
@@ -760,7 +760,6 @@ static int do_one_pass(journal_t *journal,
                                 */
                                jbd_debug(1, "JBD2: Invalid checksum ignored in transaction %u, likely stale data\n",
                                          next_commit_ID);
-                               err = 0;
                                brelse(bh);
                                goto done;
                        }
@@ -897,7 +896,7 @@ static int scan_revoke_records(journal_t *journal, struct buffer_head *bh,
 {
        jbd2_journal_revoke_header_t *header;
        int offset, max;
-       int csum_size = 0;
+       unsigned csum_size = 0;
        __u32 rcount;
        int record_len = 4;