** Changed in: linux (Ubuntu)
   Importance: Undecided => High

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1789435

Title:
  kernel 3.13.0-157+158: ext4: wrong error message »invalid block
  bitmap«

Status in linux package in Ubuntu:
  Incomplete

Bug description:
  W're getting the »invalid block bitmap« error since kernel 3.13.0-157

  see 
  
https://github.com/torvalds/linux/commit/22be37acce25d66ecf6403fc8f44df9c5ded2372

  and in this diff the error is within
  »if (offset < 0 || EXT4_B2C(sbi, offset) >= sb->s_blocksize ||«

  Kind regards, J. Barth

  *** linux_3.13.0-155.205.diff 2018-08-28 14:56:04.357521118 +0200
  --- linux_3.13.0-157.207.diff 2018-08-28 14:48:27.168863046 +0200
  ***************
  *** 31,37 ****
     }
     
     /* Return the number of free blocks in a block group.  It is used when
  ! @@ -419,11 +420,15 @@
        }
        ext4_lock_group(sb, block_group);
        if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {
  --- 31,102 ----
     }
     
     /* Return the number of free blocks in a block group.  It is used when
  ! @@ -307,6 +308,7 @@
  !                                         ext4_group_t block_group,
  !                                         struct buffer_head *bh)
  !  {
  ! +   struct ext4_sb_info *sbi = EXT4_SB(sb);
  !     ext4_grpblk_t offset;
  !     ext4_grpblk_t next_zero_bit;
  !     ext4_fsblk_t blk;
  ! @@ -326,24 +328,30 @@
  !     /* check whether block bitmap block number is set */
  !     blk = ext4_block_bitmap(sb, desc);
  !     offset = blk - group_first_block;
  ! -   if (!ext4_test_bit(offset, bh->b_data))
  ! +   if (offset < 0 || EXT4_B2C(sbi, offset) >= sb->s_blocksize ||
  ! +       !ext4_test_bit(EXT4_B2C(sbi, offset), bh->b_data))
  !             /* bad block bitmap */
  !             return blk;
  !  
  !     /* check whether the inode bitmap block number is set */
  !     blk = ext4_inode_bitmap(sb, desc);
  !     offset = blk - group_first_block;
  ! -   if (!ext4_test_bit(offset, bh->b_data))
  ! +   if (offset < 0 || EXT4_B2C(sbi, offset) >= sb->s_blocksize ||
  ! +       !ext4_test_bit(EXT4_B2C(sbi, offset), bh->b_data))
  !             /* bad block bitmap */
  !             return blk;
  !  
  !     /* check whether the inode table block number is set */
  !     blk = ext4_inode_table(sb, desc);
  !     offset = blk - group_first_block;
  ! +   if (offset < 0 || EXT4_B2C(sbi, offset) >= sb->s_blocksize ||
  ! +       EXT4_B2C(sbi, offset + sbi->s_itb_per_group) >= sb->s_blocksize)
  ! +           return blk;
  !     next_zero_bit = ext4_find_next_zero_bit(bh->b_data,
  ! -                           offset + EXT4_SB(sb)->s_itb_per_group,
  ! -                           offset);
  ! -   if (next_zero_bit < offset + EXT4_SB(sb)->s_itb_per_group)
  ! +                   EXT4_B2C(sbi, offset + EXT4_SB(sb)->s_itb_per_group),
  ! +                   EXT4_B2C(sbi, offset));
  ! +   if (next_zero_bit <
  ! +       EXT4_B2C(sbi, offset + EXT4_SB(sb)->s_itb_per_group))
  !             /* bad bitmap for inode tables */
  !             return blk;
  !     return 0;
  ! @@ -394,6 +402,7 @@
  !  ext4_read_block_bitmap_nowait(struct super_block *sb, ext4_group_t 
block_group)
  !  {
  !     struct ext4_group_desc *desc;
  ! +   struct ext4_sb_info *sbi = EXT4_SB(sb);
  !     struct buffer_head *bh;
  !     ext4_fsblk_t bitmap_blk;
  !  
  ! @@ -401,6 +410,12 @@
  !     if (!desc)
  !             return NULL;
  !     bitmap_blk = ext4_block_bitmap(sb, desc);
  ! +   if ((bitmap_blk <= le32_to_cpu(sbi->s_es->s_first_data_block)) ||
  ! +       (bitmap_blk >= ext4_blocks_count(sbi->s_es))) {
  ! +           ext4_error(sb, "Invalid block bitmap block %llu in "
  ! +                      "block_group %u", bitmap_blk, block_group);
  ! +           return ERR_PTR(-EIO);
  ! +   }
  !     bh = sb_getblk(sb, bitmap_blk);
  !     if (unlikely(!bh)) {
  !             ext4_error(sb, "Cannot get buffer for block bitmap - "
  ! @@ -419,11 +434,15 @@
        }
        ext4_lock_group(sb, block_group);
        if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1789435/+subscriptions

-- 
Mailing list: https://launchpad.net/~kernel-packages
Post to     : kernel-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kernel-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to