[GFS2] Fix crc32 calculation in recovery.c
Commit "[GFS2] split and annotate gfs2_log_head" resulted in an incorrect checksum calculation for log headers. This patch corrects the problem without resorting to copying the whole log header as the previous code used to. Cc: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
Родитель
5516762261
Коммит
2a2c98247b
|
@ -136,6 +136,7 @@ static int get_log_header(struct gfs2_jdesc *jd, unsigned int blk,
|
|||
{
|
||||
struct buffer_head *bh;
|
||||
struct gfs2_log_header_host lh;
|
||||
static const u32 nothing = 0;
|
||||
u32 hash;
|
||||
int error;
|
||||
|
||||
|
@ -143,11 +144,11 @@ static int get_log_header(struct gfs2_jdesc *jd, unsigned int blk,
|
|||
if (error)
|
||||
return error;
|
||||
|
||||
memcpy(&lh, bh->b_data, sizeof(struct gfs2_log_header)); /* XXX */
|
||||
lh.lh_hash = 0;
|
||||
hash = gfs2_disk_hash((char *)&lh, sizeof(struct gfs2_log_header));
|
||||
hash = crc32_le((u32)~0, bh->b_data, sizeof(struct gfs2_log_header) -
|
||||
sizeof(u32));
|
||||
hash = crc32_le(hash, (unsigned char const *)¬hing, sizeof(nothing));
|
||||
hash ^= (u32)~0;
|
||||
gfs2_log_header_in(&lh, bh->b_data);
|
||||
|
||||
brelse(bh);
|
||||
|
||||
if (lh.lh_header.mh_magic != GFS2_MAGIC ||
|
||||
|
|
Загрузка…
Ссылка в новой задаче