diff options
author | Tahsin Erdogan <tahsin@google.com> | 2017-08-24 14:25:02 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2017-08-24 14:25:02 -0400 |
commit | a6d05676047ec9ef7b98087f8b19a5283dd5a8ce (patch) | |
tree | 664504732c0aaf3905bc3964c2c3773ac40f15f2 /fs/ext4/inode.c | |
parent | eaa093d2c0d15ad48f66eee414452e4eaa2be3d2 (diff) |
ext4: backward compatibility support for Lustre ea_inode implementation
Original Lustre ea_inode feature did not have ref counts on xattr inodes
because there was always one parent that referenced it. New
implementation expects ref count to be initialized which is not true for
Lustre case. Handle this by detecting Lustre created xattr inode and set
its ref count to 1.
The quota handling of xattr inodes have also changed with deduplication
support. New implementation manually manages quotas to support sharing
across multiple users. A consequence is that, a referencing inode
incorporates the blocks of xattr inode into its own i_block field.
We need to know how a xattr inode was created so that we can reverse the
block charges during reference removal. This is handled by introducing a
EXT4_STATE_LUSTRE_EA_INODE flag. The flag is set on a xattr inode if
inode appears to have been created by Lustre. During xattr inode reference
removal, the manual quota uncharge is skipped if the flag is set.
Signed-off-by: Tahsin Erdogan <tahsin@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/inode.c')
-rw-r--r-- | fs/ext4/inode.c | 8 |
1 files changed, 0 insertions, 8 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index c774bdc22759..714396760616 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -4897,14 +4897,6 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino) brelse(iloc.bh); ext4_set_inode_flags(inode); - if (ei->i_flags & EXT4_EA_INODE_FL) { - ext4_xattr_inode_set_class(inode); - - inode_lock(inode); - inode->i_flags |= S_NOQUOTA; - inode_unlock(inode); - } - unlock_new_inode(inode); return inode; |