diff options
Diffstat (limited to 'fs/ocfs2/resize.c')
| -rw-r--r-- | fs/ocfs2/resize.c | 22 | 
1 files changed, 11 insertions, 11 deletions
diff --git a/fs/ocfs2/resize.c b/fs/ocfs2/resize.c index ec55add7604..d5da6f62414 100644 --- a/fs/ocfs2/resize.c +++ b/fs/ocfs2/resize.c @@ -53,8 +53,6 @@   */  static u16 ocfs2_calc_new_backup_super(struct inode *inode,  				       struct ocfs2_group_desc *gd, -				       int new_clusters, -				       u32 first_new_cluster,  				       u16 cl_cpg,  				       int set)  { @@ -127,8 +125,6 @@ static int ocfs2_update_last_group_and_inode(handle_t *handle,  				     OCFS2_FEATURE_COMPAT_BACKUP_SB)) {  		backups = ocfs2_calc_new_backup_super(bm_inode,  						     group, -						     new_clusters, -						     first_new_cluster,  						     cl_cpg, 1);  		le16_add_cpu(&group->bg_free_bits_count, -1 * backups);  	} @@ -157,7 +153,7 @@ static int ocfs2_update_last_group_and_inode(handle_t *handle,  	spin_lock(&OCFS2_I(bm_inode)->ip_lock);  	OCFS2_I(bm_inode)->ip_clusters = le32_to_cpu(fe->i_clusters); -	le64_add_cpu(&fe->i_size, new_clusters << osb->s_clustersize_bits); +	le64_add_cpu(&fe->i_size, (u64)new_clusters << osb->s_clustersize_bits);  	spin_unlock(&OCFS2_I(bm_inode)->ip_lock);  	i_size_write(bm_inode, le64_to_cpu(fe->i_size)); @@ -167,8 +163,6 @@ out_rollback:  	if (ret < 0) {  		ocfs2_calc_new_backup_super(bm_inode,  					    group, -					    new_clusters, -					    first_new_cluster,  					    cl_cpg, 0);  		le16_add_cpu(&group->bg_free_bits_count, backups);  		le16_add_cpu(&group->bg_bits, -1 * num_bits); @@ -469,6 +463,7 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input)  	struct ocfs2_chain_list *cl;  	struct ocfs2_chain_rec *cr;  	u16 cl_bpc; +	u64 bg_ptr;  	if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb))  		return -EROFS; @@ -513,7 +508,7 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input)  	ret = ocfs2_verify_group_and_input(main_bm_inode, fe, input, group_bh);  	if (ret) {  		mlog_errno(ret); -		goto out_unlock; +		goto out_free_group_bh;  	}  	trace_ocfs2_group_add((unsigned long long)input->group, @@ -523,7 +518,7 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input)  	if (IS_ERR(handle)) {  		mlog_errno(PTR_ERR(handle));  		ret = -EINVAL; -		goto out_unlock; +		goto out_free_group_bh;  	}  	cl_bpc = le16_to_cpu(fe->id2.i_chain.cl_bpc); @@ -538,12 +533,14 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input)  	}  	group = (struct ocfs2_group_desc *)group_bh->b_data; +	bg_ptr = le64_to_cpu(group->bg_next_group);  	group->bg_next_group = cr->c_blkno;  	ocfs2_journal_dirty(handle, group_bh);  	ret = ocfs2_journal_access_di(handle, INODE_CACHE(main_bm_inode),  				      main_bm_bh, OCFS2_JOURNAL_ACCESS_WRITE);  	if (ret < 0) { +		group->bg_next_group = cpu_to_le64(bg_ptr);  		mlog_errno(ret);  		goto out_commit;  	} @@ -566,7 +563,7 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input)  	spin_lock(&OCFS2_I(main_bm_inode)->ip_lock);  	OCFS2_I(main_bm_inode)->ip_clusters = le32_to_cpu(fe->i_clusters); -	le64_add_cpu(&fe->i_size, input->clusters << osb->s_clustersize_bits); +	le64_add_cpu(&fe->i_size, (u64)input->clusters << osb->s_clustersize_bits);  	spin_unlock(&OCFS2_I(main_bm_inode)->ip_lock);  	i_size_write(main_bm_inode, le64_to_cpu(fe->i_size)); @@ -574,8 +571,11 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input)  out_commit:  	ocfs2_commit_trans(osb, handle); -out_unlock: + +out_free_group_bh:  	brelse(group_bh); + +out_unlock:  	brelse(main_bm_bh);  	ocfs2_inode_unlock(main_bm_inode, 1);  | 
