Commit 40d0c090 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:
 "Bug fixes and regressions for ext4, the most serious of which is a
  potential deadlock during directory renames that was introduced during
  the merge window discovered by a combination of syzbot and lockdep"

* tag 'ext4_for_linus_stable' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:
  ext4: zero i_disksize when initializing the bootloader inode
  ext4: make sure fs error flag setted before clear journal error
  ext4: commit super block if fs record error when journal record without error
  ext4, jbd2: add an optimized bmap for the journal inode
  ext4: fix WARNING in ext4_update_inline_data
  ext4: move where set the MAY_INLINE_DATA flag is set
  ext4: Fix deadlock during directory rename
  ext4: Fix comment about the 64BIT feature
  docs: ext4: modify the group desc size to 64
  ext4: fix another off-by-one fsmap error on 1k block filesystems
  ext4: fix RENAME_WHITEOUT handling for inline directories
  ext4: make kobj_type structures constant
  ext4: fix cgroup writeback accounting with fs-layer encryption
parents e7304080 f5361da1
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -105,9 +105,9 @@ descriptors. Instead, the superblock and a single block group descriptor
block is placed at the beginning of the first, second, and last block
block is placed at the beginning of the first, second, and last block
groups in a meta-block group. A meta-block group is a collection of
groups in a meta-block group. A meta-block group is a collection of
block groups which can be described by a single block group descriptor
block groups which can be described by a single block group descriptor
block. Since the size of the block group descriptor structure is 32
block. Since the size of the block group descriptor structure is 64
bytes, a meta-block group contains 32 block groups for filesystems with
bytes, a meta-block group contains 16 block groups for filesystems with
a 1KB block size, and 128 block groups for filesystems with a 4KB
a 1KB block size, and 64 block groups for filesystems with a 4KB
blocksize. Filesystems can either be created using this new block group
blocksize. Filesystems can either be created using this new block group
descriptor layout, or existing filesystems can be resized on-line, and
descriptor layout, or existing filesystems can be resized on-line, and
the field s_first_meta_bg in the superblock will indicate the first
the field s_first_meta_bg in the superblock will indicate the first
+1 −1
Original line number Original line Diff line number Diff line
@@ -1387,7 +1387,7 @@ struct ext4_super_block {
	__le32	s_first_meta_bg;	/* First metablock block group */
	__le32	s_first_meta_bg;	/* First metablock block group */
	__le32	s_mkfs_time;		/* When the filesystem was created */
	__le32	s_mkfs_time;		/* When the filesystem was created */
	__le32	s_jnl_blocks[17];	/* Backup of the journal inode */
	__le32	s_jnl_blocks[17];	/* Backup of the journal inode */
	/* 64bit support valid if EXT4_FEATURE_COMPAT_64BIT */
	/* 64bit support valid if EXT4_FEATURE_INCOMPAT_64BIT */
/*150*/	__le32	s_blocks_count_hi;	/* Blocks count */
/*150*/	__le32	s_blocks_count_hi;	/* Blocks count */
	__le32	s_r_blocks_count_hi;	/* Reserved blocks count */
	__le32	s_r_blocks_count_hi;	/* Reserved blocks count */
	__le32	s_free_blocks_count_hi;	/* Free blocks count */
	__le32	s_free_blocks_count_hi;	/* Free blocks count */
+2 −0
Original line number Original line Diff line number Diff line
@@ -486,6 +486,8 @@ static int ext4_getfsmap_datadev(struct super_block *sb,
		keys[0].fmr_physical = bofs;
		keys[0].fmr_physical = bofs;
	if (keys[1].fmr_physical >= eofs)
	if (keys[1].fmr_physical >= eofs)
		keys[1].fmr_physical = eofs - 1;
		keys[1].fmr_physical = eofs - 1;
	if (keys[1].fmr_physical < keys[0].fmr_physical)
		return 0;
	start_fsb = keys[0].fmr_physical;
	start_fsb = keys[0].fmr_physical;
	end_fsb = keys[1].fmr_physical;
	end_fsb = keys[1].fmr_physical;


+0 −1
Original line number Original line Diff line number Diff line
@@ -159,7 +159,6 @@ int ext4_find_inline_data_nolock(struct inode *inode)
					(void *)ext4_raw_inode(&is.iloc));
					(void *)ext4_raw_inode(&is.iloc));
		EXT4_I(inode)->i_inline_size = EXT4_MIN_INLINE_DATA_SIZE +
		EXT4_I(inode)->i_inline_size = EXT4_MIN_INLINE_DATA_SIZE +
				le32_to_cpu(is.s.here->e_value_size);
				le32_to_cpu(is.s.here->e_value_size);
		ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA);
	}
	}
out:
out:
	brelse(is.iloc.bh);
	brelse(is.iloc.bh);
+6 −1
Original line number Original line Diff line number Diff line
@@ -4797,8 +4797,13 @@ static inline int ext4_iget_extra_inode(struct inode *inode,


	if (EXT4_INODE_HAS_XATTR_SPACE(inode)  &&
	if (EXT4_INODE_HAS_XATTR_SPACE(inode)  &&
	    *magic == cpu_to_le32(EXT4_XATTR_MAGIC)) {
	    *magic == cpu_to_le32(EXT4_XATTR_MAGIC)) {
		int err;

		ext4_set_inode_state(inode, EXT4_STATE_XATTR);
		ext4_set_inode_state(inode, EXT4_STATE_XATTR);
		return ext4_find_inline_data_nolock(inode);
		err = ext4_find_inline_data_nolock(inode);
		if (!err && ext4_has_inline_data(inode))
			ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA);
		return err;
	} else
	} else
		EXT4_I(inode)->i_inline_off = 0;
		EXT4_I(inode)->i_inline_off = 0;
	return 0;
	return 0;
Loading