diff options
Diffstat (limited to 'fs/ext4/ialloc.c')
| -rw-r--r-- | fs/ext4/ialloc.c | 17 | 
1 files changed, 11 insertions, 6 deletions
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index 17bc043308f3..98ac2f1f23b3 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c @@ -1098,6 +1098,17 @@ got:  	if (err)  		goto fail_drop; +	/* +	 * Since the encryption xattr will always be unique, create it first so +	 * that it's less likely to end up in an external xattr block and +	 * prevent its deduplication. +	 */ +	if (encrypt) { +		err = fscrypt_inherit_context(dir, inode, handle, true); +		if (err) +			goto fail_free_drop; +	} +  	err = ext4_init_acl(handle, inode, dir);  	if (err)  		goto fail_free_drop; @@ -1119,12 +1130,6 @@ got:  		ei->i_datasync_tid = handle->h_transaction->t_tid;  	} -	if (encrypt) { -		err = fscrypt_inherit_context(dir, inode, handle, true); -		if (err) -			goto fail_free_drop; -	} -  	err = ext4_mark_inode_dirty(handle, inode);  	if (err) {  		ext4_std_error(sb, err);  |