Cc: [EMAIL PROTECTED]
Cc: Linux Filesystems <linux-fsdevel@vger.kernel.org>
Signed-off-by: Nick Piggin <[EMAIL PROTECTED]>

 fs/hfsplus/extents.c |   21 +++++++++------------
 fs/hfsplus/inode.c   |   20 ++++++++++++--------
 2 files changed, 21 insertions(+), 20 deletions(-)

Index: linux-2.6/fs/hfsplus/inode.c
===================================================================
--- linux-2.6.orig/fs/hfsplus/inode.c
+++ linux-2.6/fs/hfsplus/inode.c
@@ -27,10 +27,14 @@ static int hfsplus_writepage(struct page
        return block_write_full_page(page, hfsplus_get_block, wbc);
 }
 
-static int hfsplus_prepare_write(struct file *file, struct page *page, 
unsigned from, unsigned to)
-{
-       return cont_prepare_write(page, from, to, hfsplus_get_block,
-               &HFSPLUS_I(page->mapping->host).phys_size);
+static int hfsplus_write_begin(struct file *file, struct address_space 
*mapping,
+                       loff_t pos, unsigned len, unsigned flags,
+                       struct page **pagep, void **fsdata)
+{
+       *pagep = NULL;
+       return cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
+                               hfsplus_get_block,
+                               &HFSPLUS_I(mapping->host).phys_size);
 }
 
 static sector_t hfsplus_bmap(struct address_space *mapping, sector_t block)
@@ -114,8 +118,8 @@ const struct address_space_operations hf
        .readpage       = hfsplus_readpage,
        .writepage      = hfsplus_writepage,
        .sync_page      = block_sync_page,
-       .prepare_write  = hfsplus_prepare_write,
-       .commit_write   = generic_commit_write,
+       .write_begin    = hfsplus_write_begin,
+       .write_end      = generic_write_end,
        .bmap           = hfsplus_bmap,
        .releasepage    = hfsplus_releasepage,
 };
@@ -124,8 +128,8 @@ const struct address_space_operations hf
        .readpage       = hfsplus_readpage,
        .writepage      = hfsplus_writepage,
        .sync_page      = block_sync_page,
-       .prepare_write  = hfsplus_prepare_write,
-       .commit_write   = generic_commit_write,
+       .write_begin    = hfsplus_write_begin,
+       .write_end      = generic_write_end,
        .bmap           = hfsplus_bmap,
        .direct_IO      = hfsplus_direct_IO,
        .writepages     = hfsplus_writepages,
Index: linux-2.6/fs/hfsplus/extents.c
===================================================================
--- linux-2.6.orig/fs/hfsplus/extents.c
+++ linux-2.6/fs/hfsplus/extents.c
@@ -443,21 +443,18 @@ void hfsplus_file_truncate(struct inode 
        if (inode->i_size > HFSPLUS_I(inode).phys_size) {
                struct address_space *mapping = inode->i_mapping;
                struct page *page;
-               u32 size = inode->i_size - 1;
+               void *fsdata;
+               u32 size = inode->i_size;
                int res;
 
-               page = grab_cache_page(mapping, size >> PAGE_CACHE_SHIFT);
-               if (!page)
-                       return;
-               size &= PAGE_CACHE_SIZE - 1;
-               size++;
-               res = mapping->a_ops->prepare_write(NULL, page, size, size);
-               if (!res)
-                       res = mapping->a_ops->commit_write(NULL, page, size, 
size);
+               res = pagecache_write_begin(NULL, mapping, size, 0,
+                                               AOP_FLAG_UNINTERRUPTIBLE,
+                                               &page, &fsdata);
                if (res)
-                       inode->i_size = HFSPLUS_I(inode).phys_size;
-               unlock_page(page);
-               page_cache_release(page);
+                       return;
+               res = pagecache_write_end(NULL, mapping, size, 0, 0, page, 
fsdata);
+               if (res < 0)
+                       return;
                mark_inode_dirty(inode);
                return;
        } else if (inode->i_size == HFSPLUS_I(inode).phys_size)

-- 

-
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to