]> git.baikalelectronics.ru Git - kernel.git/commitdiff
hfs: convert to new aops
authorNick Piggin <npiggin@suse.de>
Tue, 16 Oct 2007 08:25:09 +0000 (01:25 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 16 Oct 2007 16:42:56 +0000 (09:42 -0700)
Signed-off-by: Nick Piggin <npiggin@suse.de>
Cc: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/hfs/extent.c
fs/hfs/inode.c

index 5ea6b3d45eaa608f9ab38887de18ccb8477dacc2..c176f67ba0a5488c116d283b444dc66f0844fa6d 100644 (file)
@@ -464,23 +464,20 @@ void hfs_file_truncate(struct inode *inode)
               (long long)HFS_I(inode)->phys_size, inode->i_size);
        if (inode->i_size > HFS_I(inode)->phys_size) {
                struct address_space *mapping = inode->i_mapping;
+               void *fsdata;
                struct page *page;
                int res;
 
+               /* XXX: Can use generic_cont_expand? */
                size = inode->i_size - 1;
-               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+1, 0,
+                               AOP_FLAG_UNINTERRUPTIBLE, &page, &fsdata);
+               if (!res) {
+                       res = pagecache_write_end(NULL, mapping, size+1, 0, 0,
+                                       page, fsdata);
+               }
                if (res)
                        inode->i_size = HFS_I(inode)->phys_size;
-               unlock_page(page);
-               page_cache_release(page);
-               mark_inode_dirty(inode);
                return;
        } else if (inode->i_size == HFS_I(inode)->phys_size)
                return;
index bc835f272a6e0a9e017aac7517e672a4ea0db5bb..97f8446c4ff415e8646a868ecce82d6ef77c20eb 100644 (file)
@@ -35,10 +35,14 @@ static int hfs_readpage(struct file *file, struct page *page)
        return block_read_full_page(page, hfs_get_block);
 }
 
-static int hfs_prepare_write(struct file *file, struct page *page, unsigned from, unsigned to)
+static int hfs_write_begin(struct file *file, struct address_space *mapping,
+                       loff_t pos, unsigned len, unsigned flags,
+                       struct page **pagep, void **fsdata)
 {
-       return cont_prepare_write(page, from, to, hfs_get_block,
-                                 &HFS_I(page->mapping->host)->phys_size);
+       *pagep = NULL;
+       return cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
+                               hfs_get_block,
+                               &HFS_I(mapping->host)->phys_size);
 }
 
 static sector_t hfs_bmap(struct address_space *mapping, sector_t block)
@@ -119,8 +123,8 @@ const struct address_space_operations hfs_btree_aops = {
        .readpage       = hfs_readpage,
        .writepage      = hfs_writepage,
        .sync_page      = block_sync_page,
-       .prepare_write  = hfs_prepare_write,
-       .commit_write   = generic_commit_write,
+       .write_begin    = hfs_write_begin,
+       .write_end      = generic_write_end,
        .bmap           = hfs_bmap,
        .releasepage    = hfs_releasepage,
 };
@@ -129,8 +133,8 @@ const struct address_space_operations hfs_aops = {
        .readpage       = hfs_readpage,
        .writepage      = hfs_writepage,
        .sync_page      = block_sync_page,
-       .prepare_write  = hfs_prepare_write,
-       .commit_write   = generic_commit_write,
+       .write_begin    = hfs_write_begin,
+       .write_end      = generic_write_end,
        .bmap           = hfs_bmap,
        .direct_IO      = hfs_direct_IO,
        .writepages     = hfs_writepages,