]> err.no Git - linux-2.6/commitdiff
xfs: convert to new aops
authorNick Piggin <npiggin@suse.de>
Tue, 16 Oct 2007 08:25:06 +0000 (01:25 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 16 Oct 2007 16:42:55 +0000 (09:42 -0700)
Signed-off-by: Nick Piggin <npiggin@suse.de>
Cc: David Chinner <dgc@sgi.com>
Cc: Timothy Shimmin <tes@sgi.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/xfs/linux-2.6/xfs_aops.c
fs/xfs/linux-2.6/xfs_lrw.c

index 6f4c29e9c3d9e6209e5c999df4e61b10ba2dd902..354d68a32d4a4e4aa9e701c327bdd95d9139be1c 100644 (file)
@@ -1508,13 +1508,18 @@ xfs_vm_direct_IO(
 }
 
 STATIC int
-xfs_vm_prepare_write(
+xfs_vm_write_begin(
        struct file             *file,
-       struct page             *page,
-       unsigned int            from,
-       unsigned int            to)
+       struct address_space    *mapping,
+       loff_t                  pos,
+       unsigned                len,
+       unsigned                flags,
+       struct page             **pagep,
+       void                    **fsdata)
 {
-       return block_prepare_write(page, from, to, xfs_get_blocks);
+       *pagep = NULL;
+       return block_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
+                                                               xfs_get_blocks);
 }
 
 STATIC sector_t
@@ -1568,8 +1573,8 @@ const struct address_space_operations xfs_address_space_operations = {
        .sync_page              = block_sync_page,
        .releasepage            = xfs_vm_releasepage,
        .invalidatepage         = xfs_vm_invalidatepage,
-       .prepare_write          = xfs_vm_prepare_write,
-       .commit_write           = generic_commit_write,
+       .write_begin            = xfs_vm_write_begin,
+       .write_end              = generic_write_end,
        .bmap                   = xfs_vm_bmap,
        .direct_IO              = xfs_vm_direct_IO,
        .migratepage            = buffer_migrate_page,
index 765ec16a6e392d3406d1891c6a58bfc456f1d23a..7e7aeb4c8a082decef5d1f9f59baff627ec1ab55 100644 (file)
@@ -134,45 +134,34 @@ xfs_iozero(
        loff_t                  pos,    /* offset in file               */
        size_t                  count)  /* size of data to zero         */
 {
-       unsigned                bytes;
        struct page             *page;
        struct address_space    *mapping;
        int                     status;
 
        mapping = ip->i_mapping;
        do {
-               unsigned long index, offset;
+               unsigned offset, bytes;
+               void *fsdata;
 
                offset = (pos & (PAGE_CACHE_SIZE -1)); /* Within page */
-               index = pos >> PAGE_CACHE_SHIFT;
                bytes = PAGE_CACHE_SIZE - offset;
                if (bytes > count)
                        bytes = count;
 
-               status = -ENOMEM;
-               page = grab_cache_page(mapping, index);
-               if (!page)
-                       break;
-
-               status = mapping->a_ops->prepare_write(NULL, page, offset,
-                                                       offset + bytes);
+               status = pagecache_write_begin(NULL, mapping, pos, bytes,
+                                       AOP_FLAG_UNINTERRUPTIBLE,
+                                       &page, &fsdata);
                if (status)
-                       goto unlock;
+                       break;
 
                zero_user_page(page, offset, bytes, KM_USER0);
 
-               status = mapping->a_ops->commit_write(NULL, page, offset,
-                                                       offset + bytes);
-               if (!status) {
-                       pos += bytes;
-                       count -= bytes;
-               }
-
-unlock:
-               unlock_page(page);
-               page_cache_release(page);
-               if (status)
-                       break;
+               status = pagecache_write_end(NULL, mapping, pos, bytes, bytes,
+                                       page, fsdata);
+               WARN_ON(status <= 0); /* can't return less than zero! */
+               pos += bytes;
+               count -= bytes;
+               status = 0;
        } while (count);
 
        return (-status);