block: Change direct_access calling convention
[cascardo/linux.git] / fs / ext2 / xip.c
index e98171a..bbc5fec 100644 (file)
 #include "ext2.h"
 #include "xip.h"
 
-static inline int
-__inode_direct_access(struct inode *inode, sector_t block,
-                     void **kaddr, unsigned long *pfn)
+static inline long __inode_direct_access(struct inode *inode, sector_t block,
+                               void **kaddr, unsigned long *pfn, long size)
 {
        struct block_device *bdev = inode->i_sb->s_bdev;
-       const struct block_device_operations *ops = bdev->bd_disk->fops;
-       sector_t sector;
-
-       sector = block * (PAGE_SIZE / 512); /* ext2 block to bdev sector */
-
-       BUG_ON(!ops->direct_access);
-       return ops->direct_access(bdev, sector, kaddr, pfn);
+       sector_t sector = block * (PAGE_SIZE / 512);
+       return bdev_direct_access(bdev, sector, kaddr, pfn, size);
 }
 
 static inline int
@@ -53,12 +47,13 @@ ext2_clear_xip_target(struct inode *inode, sector_t block)
 {
        void *kaddr;
        unsigned long pfn;
-       int rc;
+       long size;
 
-       rc = __inode_direct_access(inode, block, &kaddr, &pfn);
-       if (!rc)
-               clear_page(kaddr);
-       return rc;
+       size = __inode_direct_access(inode, block, &kaddr, &pfn, PAGE_SIZE);
+       if (size < 0)
+               return size;
+       clear_page(kaddr);
+       return 0;
 }
 
 void ext2_xip_verify_sb(struct super_block *sb)
@@ -77,7 +72,7 @@ void ext2_xip_verify_sb(struct super_block *sb)
 int ext2_get_xip_mem(struct address_space *mapping, pgoff_t pgoff, int create,
                                void **kmem, unsigned long *pfn)
 {
-       int rc;
+       long rc;
        sector_t block;
 
        /* first, retrieve the sector number */
@@ -86,6 +81,6 @@ int ext2_get_xip_mem(struct address_space *mapping, pgoff_t pgoff, int create,
                return rc;
 
        /* retrieve address of the target data */
-       rc = __inode_direct_access(mapping->host, block, kmem, pfn);
-       return rc;
+       rc = __inode_direct_access(mapping->host, block, kmem, pfn, PAGE_SIZE);
+       return (rc < 0) ? rc : 0;
 }