Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 71f890f7 authored by Steven Whitehouse's avatar Steven Whitehouse
Browse files

GFS2: Remove rs_requested field from reservations



The rs_requested field is left over from the original allocation
code, however this should have been a parameter passed to the
various functions from gfs2_inplace_reserve() and not a member of the
reservation structure as the value is not required after the
initial allocation.

This also helps simplify the code since we no longer need to set
the rs_requested to zero. Also the gfs2_inplace_release()
function can also be simplified since the reservation structure
will always be defined when it is called, and the only remaining
task is to unlock the rgrp if required. It can also now be
called unconditionally too, resulting in a further simplification.

Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
parent 1f981697
Loading
Loading
Loading
Loading
+5 −4
Original line number Original line Diff line number Diff line
@@ -612,6 +612,7 @@ static int gfs2_write_begin(struct file *file, struct address_space *mapping,
	struct gfs2_sbd *sdp = GFS2_SB(mapping->host);
	struct gfs2_sbd *sdp = GFS2_SB(mapping->host);
	struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
	struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
	unsigned int data_blocks = 0, ind_blocks = 0, rblocks;
	unsigned int data_blocks = 0, ind_blocks = 0, rblocks;
	unsigned requested = 0;
	int alloc_required;
	int alloc_required;
	int error = 0;
	int error = 0;
	pgoff_t index = pos >> PAGE_CACHE_SHIFT;
	pgoff_t index = pos >> PAGE_CACHE_SHIFT;
@@ -641,7 +642,8 @@ static int gfs2_write_begin(struct file *file, struct address_space *mapping,
		if (error)
		if (error)
			goto out_unlock;
			goto out_unlock;


		error = gfs2_inplace_reserve(ip, data_blocks + ind_blocks);
		requested = data_blocks + ind_blocks;
		error = gfs2_inplace_reserve(ip, requested);
		if (error)
		if (error)
			goto out_qunlock;
			goto out_qunlock;
	}
	}
@@ -654,7 +656,7 @@ static int gfs2_write_begin(struct file *file, struct address_space *mapping,
	if (&ip->i_inode == sdp->sd_rindex)
	if (&ip->i_inode == sdp->sd_rindex)
		rblocks += 2 * RES_STATFS;
		rblocks += 2 * RES_STATFS;
	if (alloc_required)
	if (alloc_required)
		rblocks += gfs2_rg_blocks(ip);
		rblocks += gfs2_rg_blocks(ip, requested);


	error = gfs2_trans_begin(sdp, rblocks,
	error = gfs2_trans_begin(sdp, rblocks,
				 PAGE_CACHE_SIZE/sdp->sd_sb.sb_bsize);
				 PAGE_CACHE_SIZE/sdp->sd_sb.sb_bsize);
@@ -868,7 +870,6 @@ static int gfs2_write_end(struct file *file, struct address_space *mapping,
	brelse(dibh);
	brelse(dibh);
failed:
failed:
	gfs2_trans_end(sdp);
	gfs2_trans_end(sdp);
	if (gfs2_mb_reserved(ip))
	gfs2_inplace_release(ip);
	gfs2_inplace_release(ip);
	if (ip->i_res->rs_qa_qd_num)
	if (ip->i_res->rs_qa_qd_num)
		gfs2_quota_unlock(ip);
		gfs2_quota_unlock(ip);
+2 −2
Original line number Original line Diff line number Diff line
@@ -441,7 +441,7 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
		rblocks += data_blocks ? data_blocks : 1;
		rblocks += data_blocks ? data_blocks : 1;
	if (ind_blocks || data_blocks) {
	if (ind_blocks || data_blocks) {
		rblocks += RES_STATFS + RES_QUOTA;
		rblocks += RES_STATFS + RES_QUOTA;
		rblocks += gfs2_rg_blocks(ip);
		rblocks += gfs2_rg_blocks(ip, data_blocks + ind_blocks);
	}
	}
	ret = gfs2_trans_begin(sdp, rblocks, 0);
	ret = gfs2_trans_begin(sdp, rblocks, 0);
	if (ret)
	if (ret)
@@ -845,7 +845,7 @@ static long gfs2_fallocate(struct file *file, int mode, loff_t offset,
				&max_bytes, &data_blocks, &ind_blocks);
				&max_bytes, &data_blocks, &ind_blocks);


		rblocks = RES_DINODE + ind_blocks + RES_STATFS + RES_QUOTA +
		rblocks = RES_DINODE + ind_blocks + RES_STATFS + RES_QUOTA +
			  RES_RG_HDR + gfs2_rg_blocks(ip);
			  RES_RG_HDR + gfs2_rg_blocks(ip, data_blocks + ind_blocks);
		if (gfs2_is_jdata(ip))
		if (gfs2_is_jdata(ip))
			rblocks += data_blocks ? data_blocks : 1;
			rblocks += data_blocks ? data_blocks : 1;


+0 −3
Original line number Original line Diff line number Diff line
@@ -250,9 +250,6 @@ struct gfs2_blkreserv {
	/* components used during write (step 1): */
	/* components used during write (step 1): */
	atomic_t rs_sizehint;         /* hint of the write size */
	atomic_t rs_sizehint;         /* hint of the write size */


	/* components used during inplace_reserve (step 2): */
	u32 rs_requested; /* Filled in by caller of gfs2_inplace_reserve() */

	/* components used during get_local_rgrp (step 3): */
	/* components used during get_local_rgrp (step 3): */
	struct gfs2_rgrpd *rs_rgd;    /* pointer to the gfs2_rgrpd */
	struct gfs2_rgrpd *rs_rgd;    /* pointer to the gfs2_rgrpd */
	struct gfs2_holder rs_rgd_gh; /* Filled in by get_local_rgrp */
	struct gfs2_holder rs_rgd_gh; /* Filled in by get_local_rgrp */
+3 −6
Original line number Original line Diff line number Diff line
@@ -737,9 +737,6 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
		brelse(bh);
		brelse(bh);


	gfs2_trans_end(sdp);
	gfs2_trans_end(sdp);
	/* Check if we reserved space in the rgrp. Function link_dinode may
	   not, depending on whether alloc is required. */
	if (gfs2_mb_reserved(dip))
	gfs2_inplace_release(dip);
	gfs2_inplace_release(dip);
	gfs2_quota_unlock(dip);
	gfs2_quota_unlock(dip);
	mark_inode_dirty(inode);
	mark_inode_dirty(inode);
@@ -897,7 +894,7 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
			goto out_gunlock_q;
			goto out_gunlock_q;


		error = gfs2_trans_begin(sdp, sdp->sd_max_dirres +
		error = gfs2_trans_begin(sdp, sdp->sd_max_dirres +
					 gfs2_rg_blocks(dip) +
					 gfs2_rg_blocks(dip, sdp->sd_max_dirres) +
					 2 * RES_DINODE + RES_STATFS +
					 2 * RES_DINODE + RES_STATFS +
					 RES_QUOTA, 0);
					 RES_QUOTA, 0);
		if (error)
		if (error)
@@ -1378,7 +1375,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
			goto out_gunlock_q;
			goto out_gunlock_q;


		error = gfs2_trans_begin(sdp, sdp->sd_max_dirres +
		error = gfs2_trans_begin(sdp, sdp->sd_max_dirres +
					 gfs2_rg_blocks(ndip) +
					 gfs2_rg_blocks(ndip, sdp->sd_max_dirres) +
					 4 * RES_DINODE + 4 * RES_LEAF +
					 4 * RES_DINODE + 4 * RES_LEAF +
					 RES_STATFS + RES_QUOTA + 4, 0);
					 RES_STATFS + RES_QUOTA + 4, 0);
		if (error)
		if (error)
+5 −4
Original line number Original line Diff line number Diff line
@@ -765,6 +765,7 @@ static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda)
	struct gfs2_holder *ghs, i_gh;
	struct gfs2_holder *ghs, i_gh;
	unsigned int qx, x;
	unsigned int qx, x;
	struct gfs2_quota_data *qd;
	struct gfs2_quota_data *qd;
	unsigned reserved;
	loff_t offset;
	loff_t offset;
	unsigned int nalloc = 0, blocks;
	unsigned int nalloc = 0, blocks;
	int error;
	int error;
@@ -811,13 +812,13 @@ static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda)
	 * two blocks need to be updated instead of 1 */
	 * two blocks need to be updated instead of 1 */
	blocks = num_qd * data_blocks + RES_DINODE + num_qd + 3;
	blocks = num_qd * data_blocks + RES_DINODE + num_qd + 3;


	error = gfs2_inplace_reserve(ip, 1 +
	reserved = 1 + (nalloc * (data_blocks + ind_blocks));
				     (nalloc * (data_blocks + ind_blocks)));
	error = gfs2_inplace_reserve(ip, reserved);
	if (error)
	if (error)
		goto out_alloc;
		goto out_alloc;


	if (nalloc)
	if (nalloc)
		blocks += gfs2_rg_blocks(ip) + nalloc * ind_blocks + RES_STATFS;
		blocks += gfs2_rg_blocks(ip, reserved) + nalloc * ind_blocks + RES_STATFS;


	error = gfs2_trans_begin(sdp, blocks, 0);
	error = gfs2_trans_begin(sdp, blocks, 0);
	if (error)
	if (error)
@@ -1598,7 +1599,7 @@ static int gfs2_set_dqblk(struct super_block *sb, int type, qid_t id,
		error = gfs2_inplace_reserve(ip, blocks);
		error = gfs2_inplace_reserve(ip, blocks);
		if (error)
		if (error)
			goto out_i;
			goto out_i;
		blocks += gfs2_rg_blocks(ip);
		blocks += gfs2_rg_blocks(ip, blocks);
	}
	}


	/* Some quotas span block boundaries and can update two blocks,
	/* Some quotas span block boundaries and can update two blocks,
Loading