mirror of https://gitee.com/openkylin/linux.git
gfs2: Use resource group glock sharing
This patch takes advantage of the new glock holder sharing feature for resource groups. We have already introduced local resource group locking in a previous patch, so competing accesses of local processes are already under control. Signed-off-by: Bob Peterson <rpeterso@redhat.com> Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
This commit is contained in:
parent
06e908cd9e
commit
4fc7ec31c3
|
@ -1538,7 +1538,7 @@ static int sweep_bh_for_rgrps(struct gfs2_inode *ip, struct gfs2_holder *rd_gh,
|
|||
goto out;
|
||||
}
|
||||
ret = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE,
|
||||
0, rd_gh);
|
||||
LM_FLAG_NODE_SCOPE, rd_gh);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
|
|
|
@ -1145,7 +1145,7 @@ static int gfs2_unlink(struct inode *dir, struct dentry *dentry)
|
|||
if (!rgd)
|
||||
goto out_inodes;
|
||||
|
||||
gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + 2);
|
||||
gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, LM_FLAG_NODE_SCOPE, ghs + 2);
|
||||
|
||||
|
||||
error = gfs2_glock_nq(ghs); /* parent */
|
||||
|
@ -1450,8 +1450,8 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
|
|||
error = -ENOENT;
|
||||
goto out_gunlock;
|
||||
}
|
||||
error = gfs2_glock_nq_init(nrgd->rd_gl, LM_ST_EXCLUSIVE, 0,
|
||||
&rd_gh);
|
||||
error = gfs2_glock_nq_init(nrgd->rd_gl, LM_ST_EXCLUSIVE,
|
||||
LM_FLAG_NODE_SCOPE, &rd_gh);
|
||||
if (error)
|
||||
goto out_gunlock;
|
||||
}
|
||||
|
|
|
@ -1442,7 +1442,8 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
|
|||
|
||||
while (1) {
|
||||
|
||||
ret = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &gh);
|
||||
ret = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE,
|
||||
LM_FLAG_NODE_SCOPE, &gh);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
|
@ -2055,7 +2056,7 @@ int gfs2_inplace_reserve(struct gfs2_inode *ip, struct gfs2_alloc_parms *ap)
|
|||
struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
|
||||
struct gfs2_rgrpd *begin = NULL;
|
||||
struct gfs2_blkreserv *rs = &ip->i_res;
|
||||
int error = 0, flags = 0;
|
||||
int error = 0, flags = LM_FLAG_NODE_SCOPE;
|
||||
bool rg_locked;
|
||||
u64 last_unlinked = NO_BLOCK;
|
||||
u32 target = ap->target;
|
||||
|
@ -2736,9 +2737,8 @@ void gfs2_rlist_alloc(struct gfs2_rgrp_list *rlist)
|
|||
sizeof(struct gfs2_holder),
|
||||
GFP_NOFS | __GFP_NOFAIL);
|
||||
for (x = 0; x < rlist->rl_rgrps; x++)
|
||||
gfs2_holder_init(rlist->rl_rgd[x]->rd_gl,
|
||||
LM_ST_EXCLUSIVE, 0,
|
||||
&rlist->rl_ghs[x]);
|
||||
gfs2_holder_init(rlist->rl_rgd[x]->rd_gl, LM_ST_EXCLUSIVE,
|
||||
LM_FLAG_NODE_SCOPE, &rlist->rl_ghs[x]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1229,7 +1229,8 @@ static int gfs2_dinode_dealloc(struct gfs2_inode *ip)
|
|||
goto out_qs;
|
||||
}
|
||||
|
||||
error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &gh);
|
||||
error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE,
|
||||
LM_FLAG_NODE_SCOPE, &gh);
|
||||
if (error)
|
||||
goto out_qs;
|
||||
|
||||
|
|
|
@ -259,7 +259,8 @@ static int ea_dealloc_unstuffed(struct gfs2_inode *ip, struct buffer_head *bh,
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &rg_gh);
|
||||
error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE,
|
||||
LM_FLAG_NODE_SCOPE, &rg_gh);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
@ -1385,7 +1386,8 @@ static int ea_dealloc_block(struct gfs2_inode *ip)
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &gh);
|
||||
error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE,
|
||||
LM_FLAG_NODE_SCOPE, &gh);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
|
Loading…
Reference in New Issue