Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 76021
b: refs/heads/master
c: c41d4f0
h: refs/heads/master
i:
  76019: 4d8c36b
v: v3
  • Loading branch information
Steven Whitehouse committed Jan 25, 2008
1 parent 0dce1d6 commit cfd37ad
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 27 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b8e7cbb65bcc99630e123422c6829ce3c0fcdf14
refs/heads/master: c41d4f09f13671f98ba4b82fdc94420cdc09be08
51 changes: 25 additions & 26 deletions trunk/fs/gfs2/ops_address.c
Original file line number Diff line number Diff line change
Expand Up @@ -657,18 +657,10 @@ static int gfs2_write_begin(struct file *file, struct address_space *mapping,
if (unlikely(error))
goto out_uninit;

error = -ENOMEM;
page = __grab_cache_page(mapping, index);
*pagep = page;
if (!page)
goto out_unlock;

gfs2_write_calc_reserv(ip, len, &data_blocks, &ind_blocks);

error = gfs2_write_alloc_required(ip, pos, len, &alloc_required);
if (error)
goto out_putpage;

goto out_unlock;

ip->i_alloc.al_requested = 0;
if (alloc_required) {
Expand Down Expand Up @@ -699,40 +691,47 @@ static int gfs2_write_begin(struct file *file, struct address_space *mapping,
if (error)
goto out_trans_fail;

error = -ENOMEM;
page = __grab_cache_page(mapping, index);
*pagep = page;
if (unlikely(!page))
goto out_endtrans;

if (gfs2_is_stuffed(ip)) {
error = 0;
if (pos + len > sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode)) {
error = gfs2_unstuff_dinode(ip, page);
if (error == 0)
goto prepare_write;
} else if (!PageUptodate(page))
} else if (!PageUptodate(page)) {
error = stuffed_readpage(ip, page);
}
goto out;
}

prepare_write:
error = block_prepare_write(page, from, to, gfs2_get_block);

out:
if (error) {
gfs2_trans_end(sdp);
if (error == 0)
return 0;

page_cache_release(page);
if (pos + len > ip->i_inode.i_size)
vmtruncate(&ip->i_inode, ip->i_inode.i_size);
out_endtrans:
gfs2_trans_end(sdp);
out_trans_fail:
if (alloc_required) {
gfs2_inplace_release(ip);
if (alloc_required) {
gfs2_inplace_release(ip);
out_qunlock:
gfs2_quota_unlock(ip);
gfs2_quota_unlock(ip);
out_alloc_put:
gfs2_alloc_put(ip);
}
out_putpage:
page_cache_release(page);
if (pos + len > ip->i_inode.i_size)
vmtruncate(&ip->i_inode, ip->i_inode.i_size);
gfs2_alloc_put(ip);
}
out_unlock:
gfs2_glock_dq_m(1, &ip->i_gh);
gfs2_glock_dq(&ip->i_gh);
out_uninit:
gfs2_holder_uninit(&ip->i_gh);
}

gfs2_holder_uninit(&ip->i_gh);
return error;
}

Expand Down

0 comments on commit cfd37ad

Please sign in to comment.