gfs2: Get rid of gfs2_alloc_blocks generation parameter
[ Upstream commit 4c7b3f7fb7c8c66d669d107e717f9de41ef81e92 ] Get rid of the generation parameter of gfs2_alloc_blocks(): we only ever set the generation of the current inode while creating it, so do so directly. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Stable-dep-of: d98779e68772 ("gfs2: Fix potential glock use-after-free on unmount") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
09f8c676e4
commit
d92445b239
@ -106,7 +106,7 @@ static int __gfs2_unstuff_inode(struct gfs2_inode *ip, struct page *page)
|
||||
and write it out to disk */
|
||||
|
||||
unsigned int n = 1;
|
||||
error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL);
|
||||
error = gfs2_alloc_blocks(ip, &block, &n, 0);
|
||||
if (error)
|
||||
goto out_brelse;
|
||||
if (isdir) {
|
||||
@ -702,7 +702,7 @@ static int __gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap,
|
||||
i = mp->mp_aheight;
|
||||
do {
|
||||
n = blks - alloced;
|
||||
ret = gfs2_alloc_blocks(ip, &bn, &n, 0, NULL);
|
||||
ret = gfs2_alloc_blocks(ip, &bn, &n, 0);
|
||||
if (ret)
|
||||
goto out;
|
||||
alloced += n;
|
||||
|
@ -868,7 +868,7 @@ static struct gfs2_leaf *new_leaf(struct inode *inode, struct buffer_head **pbh,
|
||||
struct gfs2_dirent *dent;
|
||||
struct timespec64 tv = current_time(inode);
|
||||
|
||||
error = gfs2_alloc_blocks(ip, &bn, &n, 0, NULL);
|
||||
error = gfs2_alloc_blocks(ip, &bn, &n, 0);
|
||||
if (error)
|
||||
return NULL;
|
||||
bh = gfs2_meta_new(ip->i_gl, bn);
|
||||
|
@ -417,7 +417,7 @@ static int alloc_dinode(struct gfs2_inode *ip, u32 flags, unsigned *dblocks)
|
||||
if (error)
|
||||
goto out_ipreserv;
|
||||
|
||||
error = gfs2_alloc_blocks(ip, &ip->i_no_addr, dblocks, 1, &ip->i_generation);
|
||||
error = gfs2_alloc_blocks(ip, &ip->i_no_addr, dblocks, 1);
|
||||
if (error)
|
||||
goto out_trans_end;
|
||||
|
||||
|
@ -2411,13 +2411,12 @@ static void gfs2_set_alloc_start(struct gfs2_rbm *rbm,
|
||||
* @bn: Used to return the starting block number
|
||||
* @nblocks: requested number of blocks/extent length (value/result)
|
||||
* @dinode: 1 if we're allocating a dinode block, else 0
|
||||
* @generation: the generation number of the inode
|
||||
*
|
||||
* Returns: 0 or error
|
||||
*/
|
||||
|
||||
int gfs2_alloc_blocks(struct gfs2_inode *ip, u64 *bn, unsigned int *nblocks,
|
||||
bool dinode, u64 *generation)
|
||||
bool dinode)
|
||||
{
|
||||
struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
|
||||
struct buffer_head *dibh;
|
||||
@ -2477,10 +2476,13 @@ int gfs2_alloc_blocks(struct gfs2_inode *ip, u64 *bn, unsigned int *nblocks,
|
||||
rbm.rgd->rd_free -= *nblocks;
|
||||
spin_unlock(&rbm.rgd->rd_rsspin);
|
||||
if (dinode) {
|
||||
u64 generation;
|
||||
|
||||
rbm.rgd->rd_dinodes++;
|
||||
*generation = rbm.rgd->rd_igeneration++;
|
||||
if (*generation == 0)
|
||||
*generation = rbm.rgd->rd_igeneration++;
|
||||
generation = rbm.rgd->rd_igeneration++;
|
||||
if (generation == 0)
|
||||
generation = rbm.rgd->rd_igeneration++;
|
||||
ip->i_generation = generation;
|
||||
}
|
||||
|
||||
gfs2_trans_add_meta(rbm.rgd->rd_gl, rbm.rgd->rd_bits[0].bi_bh);
|
||||
|
@ -42,7 +42,7 @@ extern int gfs2_inplace_reserve(struct gfs2_inode *ip,
|
||||
extern void gfs2_inplace_release(struct gfs2_inode *ip);
|
||||
|
||||
extern int gfs2_alloc_blocks(struct gfs2_inode *ip, u64 *bn, unsigned int *n,
|
||||
bool dinode, u64 *generation);
|
||||
bool dinode);
|
||||
|
||||
extern void gfs2_rs_deltree(struct gfs2_blkreserv *rs);
|
||||
extern void gfs2_rs_delete(struct gfs2_inode *ip);
|
||||
|
@ -639,7 +639,7 @@ static int ea_alloc_blk(struct gfs2_inode *ip, struct buffer_head **bhp)
|
||||
u64 block;
|
||||
int error;
|
||||
|
||||
error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL);
|
||||
error = gfs2_alloc_blocks(ip, &block, &n, 0);
|
||||
if (error)
|
||||
return error;
|
||||
gfs2_trans_remove_revoke(sdp, block, 1);
|
||||
@ -701,7 +701,7 @@ static int ea_write(struct gfs2_inode *ip, struct gfs2_ea_header *ea,
|
||||
int mh_size = sizeof(struct gfs2_meta_header);
|
||||
unsigned int n = 1;
|
||||
|
||||
error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL);
|
||||
error = gfs2_alloc_blocks(ip, &block, &n, 0);
|
||||
if (error)
|
||||
return error;
|
||||
gfs2_trans_remove_revoke(sdp, block, 1);
|
||||
@ -1002,7 +1002,7 @@ static int ea_set_block(struct gfs2_inode *ip, struct gfs2_ea_request *er,
|
||||
} else {
|
||||
u64 blk;
|
||||
unsigned int n = 1;
|
||||
error = gfs2_alloc_blocks(ip, &blk, &n, 0, NULL);
|
||||
error = gfs2_alloc_blocks(ip, &blk, &n, 0);
|
||||
if (error)
|
||||
return error;
|
||||
gfs2_trans_remove_revoke(sdp, blk, 1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user