ext4: fix quota charging for shared xattr blocks
ext4_xattr_block_set() calls dquot_alloc_block() to charge for an xattr block when new references are made. However if dquot_initialize() hasn't been called on an inode, request for charging is effectively ignored because ext4_inode_info->i_dquot is not initialized yet. Add dquot_initialize() to call paths that lead to ext4_xattr_block_set(). Signed-off-by: Tahsin Erdogan <tahsin@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Jan Kara <jack@suse.cz>
This commit is contained in:
@@ -1512,6 +1512,22 @@ int dquot_initialize(struct inode *inode)
|
||||
}
|
||||
EXPORT_SYMBOL(dquot_initialize);
|
||||
|
||||
bool dquot_initialize_needed(struct inode *inode)
|
||||
{
|
||||
struct dquot **dquots;
|
||||
int i;
|
||||
|
||||
if (!dquot_active(inode))
|
||||
return false;
|
||||
|
||||
dquots = i_dquot(inode);
|
||||
for (i = 0; i < MAXQUOTAS; i++)
|
||||
if (!dquots[i] && sb_has_quota_active(inode->i_sb, i))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
EXPORT_SYMBOL(dquot_initialize_needed);
|
||||
|
||||
/*
|
||||
* Release all quotas referenced by inode.
|
||||
*
|
||||
|
Reference in New Issue
Block a user