Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ocfs2: kill endianness abuses in blockcheck.c

ocfs2_block_check is for little-endian contents; if we just want to
its fields converted to host-endian in a couple of functions, just
put those values into local u32 and u16...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro 1db5df98 f6a56903

+22 -20
+22 -20
fs/ocfs2/blockcheck.c
··· 422 422 struct ocfs2_blockcheck_stats *stats) 423 423 { 424 424 int rc = 0; 425 - struct ocfs2_block_check check; 425 + u32 bc_crc32e; 426 + u16 bc_ecc; 426 427 u32 crc, ecc; 427 428 428 429 ocfs2_blockcheck_inc_check(stats); 429 430 430 - check.bc_crc32e = le32_to_cpu(bc->bc_crc32e); 431 - check.bc_ecc = le16_to_cpu(bc->bc_ecc); 431 + bc_crc32e = le32_to_cpu(bc->bc_crc32e); 432 + bc_ecc = le16_to_cpu(bc->bc_ecc); 432 433 433 434 memset(bc, 0, sizeof(struct ocfs2_block_check)); 434 435 435 436 /* Fast path - if the crc32 validates, we're good to go */ 436 437 crc = crc32_le(~0, data, blocksize); 437 - if (crc == check.bc_crc32e) 438 + if (crc == bc_crc32e) 438 439 goto out; 439 440 440 441 ocfs2_blockcheck_inc_failure(stats); 441 442 mlog(ML_ERROR, 442 443 "CRC32 failed: stored: 0x%x, computed 0x%x. Applying ECC.\n", 443 - (unsigned int)check.bc_crc32e, (unsigned int)crc); 444 + (unsigned int)bc_crc32e, (unsigned int)crc); 444 445 445 446 /* Ok, try ECC fixups */ 446 447 ecc = ocfs2_hamming_encode_block(data, blocksize); 447 - ocfs2_hamming_fix_block(data, blocksize, ecc ^ check.bc_ecc); 448 + ocfs2_hamming_fix_block(data, blocksize, ecc ^ bc_ecc); 448 449 449 450 /* And check the crc32 again */ 450 451 crc = crc32_le(~0, data, blocksize); 451 - if (crc == check.bc_crc32e) { 452 + if (crc == bc_crc32e) { 452 453 ocfs2_blockcheck_inc_recover(stats); 453 454 goto out; 454 455 } 455 456 456 457 mlog(ML_ERROR, "Fixed CRC32 failed: stored: 0x%x, computed 0x%x\n", 457 - (unsigned int)check.bc_crc32e, (unsigned int)crc); 458 + (unsigned int)bc_crc32e, (unsigned int)crc); 458 459 459 460 rc = -EIO; 460 461 461 462 out: 462 - bc->bc_crc32e = cpu_to_le32(check.bc_crc32e); 463 - bc->bc_ecc = cpu_to_le16(check.bc_ecc); 463 + bc->bc_crc32e = cpu_to_le32(bc_crc32e); 464 + bc->bc_ecc = cpu_to_le16(bc_ecc); 464 465 465 466 return rc; 466 467 } ··· 529 528 struct ocfs2_blockcheck_stats *stats) 530 529 { 531 530 int i, rc = 0; 532 - struct ocfs2_block_check check; 531 + u32 bc_crc32e; 532 + u16 bc_ecc; 533 533 u32 crc, ecc, fix; 534 534 535 535 BUG_ON(nr < 0); ··· 540 538 541 539 ocfs2_blockcheck_inc_check(stats); 542 540 543 - check.bc_crc32e = le32_to_cpu(bc->bc_crc32e); 544 - check.bc_ecc = le16_to_cpu(bc->bc_ecc); 541 + bc_crc32e = le32_to_cpu(bc->bc_crc32e); 542 + bc_ecc = le16_to_cpu(bc->bc_ecc); 545 543 546 544 memset(bc, 0, sizeof(struct ocfs2_block_check)); 547 545 548 546 /* Fast path - if the crc32 validates, we're good to go */ 549 547 for (i = 0, crc = ~0; i < nr; i++) 550 548 crc = crc32_le(crc, bhs[i]->b_data, bhs[i]->b_size); 551 - if (crc == check.bc_crc32e) 549 + if (crc == bc_crc32e) 552 550 goto out; 553 551 554 552 ocfs2_blockcheck_inc_failure(stats); 555 553 mlog(ML_ERROR, 556 554 "CRC32 failed: stored: %u, computed %u. Applying ECC.\n", 557 - (unsigned int)check.bc_crc32e, (unsigned int)crc); 555 + (unsigned int)bc_crc32e, (unsigned int)crc); 558 556 559 557 /* Ok, try ECC fixups */ 560 558 for (i = 0, ecc = 0; i < nr; i++) { ··· 567 565 bhs[i]->b_size * 8, 568 566 bhs[i]->b_size * 8 * i); 569 567 } 570 - fix = ecc ^ check.bc_ecc; 568 + fix = ecc ^ bc_ecc; 571 569 for (i = 0; i < nr; i++) { 572 570 /* 573 571 * Try the fix against each buffer. It will only affect ··· 580 578 /* And check the crc32 again */ 581 579 for (i = 0, crc = ~0; i < nr; i++) 582 580 crc = crc32_le(crc, bhs[i]->b_data, bhs[i]->b_size); 583 - if (crc == check.bc_crc32e) { 581 + if (crc == bc_crc32e) { 584 582 ocfs2_blockcheck_inc_recover(stats); 585 583 goto out; 586 584 } 587 585 588 586 mlog(ML_ERROR, "Fixed CRC32 failed: stored: %u, computed %u\n", 589 - (unsigned int)check.bc_crc32e, (unsigned int)crc); 587 + (unsigned int)bc_crc32e, (unsigned int)crc); 590 588 591 589 rc = -EIO; 592 590 593 591 out: 594 - bc->bc_crc32e = cpu_to_le32(check.bc_crc32e); 595 - bc->bc_ecc = cpu_to_le16(check.bc_ecc); 592 + bc->bc_crc32e = cpu_to_le32(bc_crc32e); 593 + bc->bc_ecc = cpu_to_le16(bc_ecc); 596 594 597 595 return rc; 598 596 }