Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp
[sfrench/cifs-2.6.git] / fs / gfs2 / aops.c
index a739a0a480670698cb06ed9106a9f710981f3a96..5e96cbd8a454a532c058a0880fec8a6b38571ddf 100644 (file)
@@ -136,10 +136,7 @@ static int gfs2_writeback_writepage(struct page *page,
        if (ret <= 0)
                return ret;
 
-       ret = mpage_writepage(page, gfs2_get_block_noalloc, wbc);
-       if (ret == -EAGAIN)
-               ret = block_write_full_page(page, gfs2_get_block_noalloc, wbc);
-       return ret;
+       return nobh_writepage(page, gfs2_get_block_noalloc, wbc);
 }
 
 /**
@@ -637,9 +634,7 @@ static int gfs2_write_begin(struct file *file, struct address_space *mapping,
                }
        }
 
-       error = gfs2_write_alloc_required(ip, pos, len, &alloc_required);
-       if (error)
-               goto out_unlock;
+       alloc_required = gfs2_write_alloc_required(ip, pos, len);
 
        if (alloc_required || gfs2_is_jdata(ip))
                gfs2_write_calc_reserv(ip, len, &data_blocks, &ind_blocks);
@@ -700,8 +695,14 @@ out:
                return 0;
 
        page_cache_release(page);
+
+       /*
+        * XXX(hch): the call below should probably be replaced with
+        * a call to the gfs2-specific truncate blocks helper to actually
+        * release disk blocks..
+        */
        if (pos + len > ip->i_inode.i_size)
-               vmtruncate(&ip->i_inode, ip->i_inode.i_size);
+               simple_setsize(&ip->i_inode, ip->i_inode.i_size);
 out_endtrans:
        gfs2_trans_end(sdp);
 out_trans_fail: