|
@@ -1302,15 +1302,21 @@ static inline int jbd_space_needed(journal_t *journal)
|
|
|
|
|
|
extern int jbd_blocks_per_page(struct inode *inode);
|
|
|
|
|
|
+/* JBD uses a CRC32 checksum */
|
|
|
+#define JBD_MAX_CHECKSUM_SIZE 4
|
|
|
+
|
|
|
static inline u32 jbd2_chksum(journal_t *journal, u32 crc,
|
|
|
const void *address, unsigned int length)
|
|
|
{
|
|
|
struct {
|
|
|
struct shash_desc shash;
|
|
|
- char ctx[crypto_shash_descsize(journal->j_chksum_driver)];
|
|
|
+ char ctx[JBD_MAX_CHECKSUM_SIZE];
|
|
|
} desc;
|
|
|
int err;
|
|
|
|
|
|
+ BUG_ON(crypto_shash_descsize(journal->j_chksum_driver) >
|
|
|
+ JBD_MAX_CHECKSUM_SIZE);
|
|
|
+
|
|
|
desc.shash.tfm = journal->j_chksum_driver;
|
|
|
desc.shash.flags = 0;
|
|
|
*(u32 *)desc.ctx = crc;
|