code: public boolean reportChecksumFailure(Path f, 
      FSDataInputStream in, long inPos, 
      FSDataInputStream sums, long sumsPos) {
  
      LocatedBlock lblocks[] = new LocatedBlock[2];
  
      // Find block in data stream.
      DFSClient.DFSDataInputStream dfsIn = (DFSClient.DFSDataInputStream) in;
      Block dataBlock = dfsIn.getCurrentBlock();
      if (dataBlock == null) {
        LOG.error("Error: Current block in data stream is null! ");
        return false;
      }
      DatanodeInfo[] dataNode = {dfsIn.getCurrentDatanode()}; 
      lblocks[0] = new LocatedBlock(dataBlock, dataNode);
      LOG.info("Found checksum error in data stream at block="
          + dataBlock + " on datanode="
          + dataNode[0].getName());
  
      // Find block in checksum stream
      DFSClient.DFSDataInputStream dfsSums = (DFSClient.DFSDataInputStream) sums;
      Block sumsBlock = dfsSums.getCurrentBlock();
      if (sumsBlock == null) {
        LOG.error("Error: Current block in checksum stream is null! ");
        return false;
      }
      DatanodeInfo[] sumsNode = {dfsSums.getCurrentDatanode()}; 
      lblocks[1] = new LocatedBlock(sumsBlock, sumsNode);
      LOG.info("Found checksum error in checksum stream at block="
          + sumsBlock + " on datanode="
          + sumsNode[0].getName());
  
      // Ask client to delete blocks.
      dfs.reportChecksumFailure(f.toString(), lblocks);
  
      return true;
    }
docs: We need to find the blocks that didn't match.  Likely only one
  is corrupt but we will report both to the namenode.  In the future,
  we can consider figuring out exactly which block is corrupt.