-+ /* @restart is true means htree-path has been changed, we need to
-+ * repeat dx_probe() to find out valid htree-path */
-+ if (restart && err == 0)
-+ goto again;
- return err;
- }
-
-@@ -2288,7 +2691,7 @@ int ext4_generic_delete_entry(handle_t *
- blocksize);
- else
- de->inode = 0;
-- dir->i_version++;
-+ inode_inc_iversion(dir);
- return 0;
- }
- i += ext4_rec_len_from_disk(de->rec_len, blocksize);
-@@ -2373,7 +2776,7 @@ EXPORT_SYMBOL(ext4_dec_count);
- static int ext4_add_nondir(handle_t *handle,
- struct dentry *dentry, struct inode *inode)
- {
-- int err = ext4_add_entry(handle, dentry, inode);
-+ int err = ext4_add_entry(handle, dentry, inode, NULL);
- if (!err) {
- ext4_mark_inode_dirty(handle, inode);
- unlock_new_inode(inode);
-@@ -2641,7 +3044,7 @@ retry:
- goto out_clear_inode;
- err = ext4_mark_inode_dirty(handle, inode);
- if (!err)
-- err = ext4_add_entry(handle, dentry, inode);
-+ err = ext4_add_entry(handle, dentry, inode, NULL);
- if (err) {
- out_clear_inode:
- clear_nlink(inode);
-@@ -2907,7 +3310,7 @@ static int ext4_rmdir(struct inode *dir,
- dquot_initialize(dentry->d_inode);
-
- retval = -ENOENT;
-- bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
-+ bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, NULL);
- if (IS_ERR(bh))
- return PTR_ERR(bh);
- if (!bh)
-@@ -2974,7 +3377,7 @@ static int ext4_unlink(struct inode *dir
- dquot_initialize(dentry->d_inode);
-
- retval = -ENOENT;
-- bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
-+ bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, NULL);
- if (IS_ERR(bh))
- return PTR_ERR(bh);
- if (!bh)
-@@ -3153,7 +3556,7 @@ retry:
- ext4_inc_count(handle, inode);
- ihold(inode);
-
-- err = ext4_add_entry(handle, dentry, inode);
-+ err = ext4_add_entry(handle, dentry, inode, NULL);
- if (!err) {
- ext4_mark_inode_dirty(handle, inode);
- d_instantiate(dentry, inode);
-@@ -3183,7 +3556,7 @@ retry:
- struct buffer_head *bh;
- struct ext4_dir_entry_2 *de;
-
-- bh = ext4_find_entry(dir, d_name, &de, NULL);
-+ bh = ext4_find_entry(dir, d_name, &de, NULL, NULL);
- if (IS_ERR(bh))
- return PTR_ERR(bh);
- if (bh) {
-@@ -3230,7 +3633,7 @@ static int ext4_rename(struct inode *old
- if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
- ext4_handle_sync(handle);
-
-- old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL);
-+ old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL, NULL);
- if (IS_ERR(old.bh))
- return PTR_ERR(old.bh);
- /*
-@@ -3244,7 +3647,7 @@ static int ext4_rename(struct inode *old
-
- new_inode = new_dentry->d_inode;
- new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
-- &new.de, &new.inlined);
-+ &new.de, &new.inlined, NULL);
- if (IS_ERR(new.bh)) {
- if (!new_inode) {
- brelse(new_bh);
-@@ -3275,7 +3678,7 @@ static int ext4_rename(struct inode *old
- goto end_rename;
- }
- if (!new.bh) {
-- retval = ext4_add_entry(handle, new.dentry, old.inode);
-+ retval = ext4_add_entry(handle, new.dentry, old.inode, NULL);
- if (retval)
- goto end_rename;
- } else {
-@@ -3375,7 +3678,7 @@ static int ext4_rename(struct inode *old
- dquot_initialize(new.dir);
-
- old.bh = ext4_find_entry(old.dir, &old.dentry->d_name,
-- &old.de, &old.inlined);
-+ &old.de, &old.inlined, NULL);
- /*
- * Check for inode number is _not_ due to possible IO errors.
- * We might rmdir the source, keep it as pwd of some process
-@@ -3475,7 +3678,7 @@ static int ext4_rename(struct inode *old
- goto end_rename;
-
- new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
-- &new.de, &new.inlined);
-+ &new.de, &new.inlined, NULL);
-
- /* RENAME_EXCHANGE case: old *and* new must both exist */
- if (!new.bh || le32_to_cpu(new.de->inode) != new.inode->i_ino)
-Index: linux-3.10.0-123.13.2.el7.x86_64/fs/ext4/inode.c
-===================================================================
---- linux-3.10.0-123.13.2.el7.x86_64.orig/fs/ext4/inode.c
-+++ linux-3.10.0-123.13.2.el7.x86_64/fs/ext4/inode.c
-@@ -4264,7 +4264,7 @@ struct inode *ext4_iget(struct super_blo
- if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_64BIT))
- ei->i_file_acl |=
- ((__u64)le16_to_cpu(raw_inode->i_file_acl_high)) << 32;
-- inode->i_size = ext4_isize(raw_inode);
-+ inode->i_size = ext4_isize(sb, raw_inode);
- ei->i_disksize = inode->i_size;
- #ifdef CONFIG_QUOTA
- ei->i_reserved_quota = 0;
-@@ -4499,7 +4499,7 @@ static int ext4_do_update_inode(handle_t
- raw_inode->i_file_acl_high =
- cpu_to_le16(ei->i_file_acl >> 32);
- raw_inode->i_file_acl_lo = cpu_to_le32(ei->i_file_acl);
-- if (ei->i_disksize != ext4_isize(raw_inode)) {
-+ if (ei->i_disksize != ext4_isize(inode->i_sb, raw_inode)) {
- ext4_isize_set(raw_inode, ei->i_disksize);
- need_datasync = 1;
- }
-Index: linux-3.10.0-123.13.2.el7.x86_64/fs/ext4/Makefile
-===================================================================
---- linux-3.10.0-123.13.2.el7.x86_64.orig/fs/ext4/Makefile
-+++ linux-3.10.0-123.13.2.el7.x86_64/fs/ext4/Makefile
-@@ -8,7 +8,7 @@ ext4-y := balloc.o bitmap.o dir.o file.o
- ioctl.o namei.o super.o symlink.o hash.o resize.o extents.o \
- ext4_jbd2.o migrate.o mballoc.o block_validity.o move_extent.o \
- mmp.o indirect.o extents_status.o xattr.o xattr_user.o \
-- xattr_trusted.o inline.o
-+ xattr_trusted.o inline.o htree_lock.o
-
- ext4-$(CONFIG_EXT4_FS_POSIX_ACL) += acl.o
- ext4-$(CONFIG_EXT4_FS_SECURITY) += xattr_security.o
-Index: linux-3.10.0-123.13.2.el7.x86_64/fs/ext4/super.c