gfs2: Move GIF_ALLOC_FAILED check out of gfs2_ea_dealloc

Don't check for the GIF_ALLOC_FAILED flag in gfs2_ea_dealloc() and pass
that information explicitly instead.  This allows for a cleaner
follow-up patch.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
This commit is contained in:
Andreas Gruenbacher 2025-04-18 01:09:32 +02:00
parent bcd18105fb
commit 0cc617a54d
3 changed files with 8 additions and 7 deletions

View File

@ -1314,7 +1314,7 @@ static int evict_unlinked_inode(struct inode *inode)
}
if (ip->i_eattr) {
ret = gfs2_ea_dealloc(ip);
ret = gfs2_ea_dealloc(ip, !test_bit(GIF_ALLOC_FAILED, &ip->i_flags));
if (ret)
goto out;
}

View File

@ -1383,7 +1383,7 @@ out:
return error;
}
static int ea_dealloc_block(struct gfs2_inode *ip)
static int ea_dealloc_block(struct gfs2_inode *ip, bool initialized)
{
struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
struct gfs2_rgrpd *rgd;
@ -1416,7 +1416,7 @@ static int ea_dealloc_block(struct gfs2_inode *ip)
ip->i_eattr = 0;
gfs2_add_inode_blocks(&ip->i_inode, -1);
if (likely(!test_bit(GIF_ALLOC_FAILED, &ip->i_flags))) {
if (initialized) {
error = gfs2_meta_inode_buffer(ip, &dibh);
if (!error) {
gfs2_trans_add_meta(ip->i_gl, dibh);
@ -1435,11 +1435,12 @@ out_gunlock:
/**
* gfs2_ea_dealloc - deallocate the extended attribute fork
* @ip: the inode
* @initialized: xattrs have been initialized
*
* Returns: errno
*/
int gfs2_ea_dealloc(struct gfs2_inode *ip)
int gfs2_ea_dealloc(struct gfs2_inode *ip, bool initialized)
{
int error;
@ -1451,7 +1452,7 @@ int gfs2_ea_dealloc(struct gfs2_inode *ip)
if (error)
return error;
if (likely(!test_bit(GIF_ALLOC_FAILED, &ip->i_flags))) {
if (initialized) {
error = ea_foreach(ip, ea_dealloc_unstuffed, NULL);
if (error)
goto out_quota;
@ -1463,7 +1464,7 @@ int gfs2_ea_dealloc(struct gfs2_inode *ip)
}
}
error = ea_dealloc_block(ip);
error = ea_dealloc_block(ip, initialized);
out_quota:
gfs2_quota_unhold(ip);

View File

@ -54,7 +54,7 @@ int __gfs2_xattr_set(struct inode *inode, const char *name,
const void *value, size_t size,
int flags, int type);
ssize_t gfs2_listxattr(struct dentry *dentry, char *buffer, size_t size);
int gfs2_ea_dealloc(struct gfs2_inode *ip);
int gfs2_ea_dealloc(struct gfs2_inode *ip, bool initialized);
/* Exported to acl.c */