Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cbfa0e72 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'ext4_for_linus_stable' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4

Pull ext4 fixes from Ted Ts'o:
 "Unfortunately, we introduced some big-endian bugs during the last
  merge window.  Fortunately, Cai and Christian noticed before 3.9
  shipped."

* tag 'ext4_for_linus_stable' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:
  ext4: fix big-endian bugs which could cause fs corruptions
parents cd0e4a9d 8cde7ad1
Loading
Loading
Loading
Loading
+7 −4
Original line number Original line Diff line number Diff line
@@ -2999,20 +2999,23 @@ static int ext4_split_extent_at(handle_t *handle,
			if (split_flag & EXT4_EXT_DATA_VALID1) {
			if (split_flag & EXT4_EXT_DATA_VALID1) {
				err = ext4_ext_zeroout(inode, ex2);
				err = ext4_ext_zeroout(inode, ex2);
				zero_ex.ee_block = ex2->ee_block;
				zero_ex.ee_block = ex2->ee_block;
				zero_ex.ee_len = ext4_ext_get_actual_len(ex2);
				zero_ex.ee_len = cpu_to_le16(
						ext4_ext_get_actual_len(ex2));
				ext4_ext_store_pblock(&zero_ex,
				ext4_ext_store_pblock(&zero_ex,
						      ext4_ext_pblock(ex2));
						      ext4_ext_pblock(ex2));
			} else {
			} else {
				err = ext4_ext_zeroout(inode, ex);
				err = ext4_ext_zeroout(inode, ex);
				zero_ex.ee_block = ex->ee_block;
				zero_ex.ee_block = ex->ee_block;
				zero_ex.ee_len = ext4_ext_get_actual_len(ex);
				zero_ex.ee_len = cpu_to_le16(
						ext4_ext_get_actual_len(ex));
				ext4_ext_store_pblock(&zero_ex,
				ext4_ext_store_pblock(&zero_ex,
						      ext4_ext_pblock(ex));
						      ext4_ext_pblock(ex));
			}
			}
		} else {
		} else {
			err = ext4_ext_zeroout(inode, &orig_ex);
			err = ext4_ext_zeroout(inode, &orig_ex);
			zero_ex.ee_block = orig_ex.ee_block;
			zero_ex.ee_block = orig_ex.ee_block;
			zero_ex.ee_len = ext4_ext_get_actual_len(&orig_ex);
			zero_ex.ee_len = cpu_to_le16(
						ext4_ext_get_actual_len(&orig_ex));
			ext4_ext_store_pblock(&zero_ex,
			ext4_ext_store_pblock(&zero_ex,
					      ext4_ext_pblock(&orig_ex));
					      ext4_ext_pblock(&orig_ex));
		}
		}
@@ -3272,7 +3275,7 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,
		if (err)
		if (err)
			goto out;
			goto out;
		zero_ex.ee_block = ex->ee_block;
		zero_ex.ee_block = ex->ee_block;
		zero_ex.ee_len = ext4_ext_get_actual_len(ex);
		zero_ex.ee_len = cpu_to_le16(ext4_ext_get_actual_len(ex));
		ext4_ext_store_pblock(&zero_ex, ext4_ext_pblock(ex));
		ext4_ext_store_pblock(&zero_ex, ext4_ext_pblock(ex));


		err = ext4_ext_get_access(handle, inode, path + depth);
		err = ext4_ext_get_access(handle, inode, path + depth);
+2 −2
Original line number Original line Diff line number Diff line
@@ -1539,9 +1539,9 @@ static int free_hole_blocks(handle_t *handle, struct inode *inode,
		blk = *i_data;
		blk = *i_data;
		if (level > 0) {
		if (level > 0) {
			ext4_lblk_t first2;
			ext4_lblk_t first2;
			bh = sb_bread(inode->i_sb, blk);
			bh = sb_bread(inode->i_sb, le32_to_cpu(blk));
			if (!bh) {
			if (!bh) {
				EXT4_ERROR_INODE_BLOCK(inode, blk,
				EXT4_ERROR_INODE_BLOCK(inode, le32_to_cpu(blk),
						       "Read failure");
						       "Read failure");
				return -EIO;
				return -EIO;
			}
			}