/* PR rtl-optimization/45593 */ /* Testcase by Arnaud Lacombe */ typedef unsigned int __u32; typedef __u32 __be32; static inline __attribute__((always_inline)) int __attribute__((__cold__)) printk(const char *s, ...) { return 0; } typedef struct journal_s journal_t; typedef struct journal_header_s { __be32 h_magic; __be32 h_blocktype; __be32 h_sequence; } journal_header_t; typedef struct journal_superblock_s { journal_header_t s_header; __be32 s_blocksize; __be32 s_maxlen; } journal_superblock_t; struct journal_s { struct buffer_head *j_sb_buffer; journal_superblock_t *j_superblock; int j_format_version; int j_blocksize; unsigned int j_maxlen; }; static void journal_fail_superblock (journal_t *journal) { journal->j_sb_buffer = ((void *)0); } static int journal_get_superblock(journal_t *journal) { struct buffer_head *bh; journal_superblock_t *sb; int err = -100; bh = journal->j_sb_buffer; if (!buffer_uptodate(bh)) { if (!buffer_uptodate(bh)) { printk ("JBD: IO error reading journal superblock\n"); goto out; } } err = -101; if (sb->s_header.h_magic != (( __be32)(__u32)(0)) || sb->s_blocksize != (( __be32)(__u32)(journal->j_blocksize))) { printk("JBD: no valid journal superblock found\n"); goto out; } switch((( __u32)(__be32)(sb->s_header.h_blocktype))) { case 0: case 1: break; default: goto out; } if ((( __u32)(__be32)(sb->s_maxlen)) < journal->j_maxlen) journal->j_maxlen = (( __u32)(__be32)(sb->s_maxlen)); else if ((( __u32)(__be32)(sb->s_maxlen)) > journal->j_maxlen) { printk ("JBD: journal file too short\n"); goto out; } return 0; out: journal_fail_superblock(journal); return err; } static int load_superblock(journal_t *journal) { journal_get_superblock(journal); return 0; } int jbd2_journal_update_format (journal_t *journal) { journal_get_superblock(journal); return 0; } int jbd2_journal_wipe(journal_t *journal, int write) { load_superblock(journal); return 0; }