linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / fs / hfs / inode.c
index 2d4ced2..39fd85b 100644 (file)
@@ -17,7 +17,7 @@
 #include "hfs_fs.h"
 #include "btree.h"
 
-static const struct file_operations hfs_file_operations;
+static struct file_operations hfs_file_operations;
 static struct inode_operations hfs_file_inode_operations;
 
 /*================ Variable-like macros ================*/
@@ -98,6 +98,17 @@ static int hfs_releasepage(struct page *page, gfp_t mask)
        return res ? try_to_free_buffers(page) : 0;
 }
 
+static int hfs_get_blocks(struct inode *inode, sector_t iblock, unsigned long max_blocks,
+                         struct buffer_head *bh_result, int create)
+{
+       int ret;
+
+       ret = hfs_get_block(inode, iblock, bh_result, create);
+       if (!ret)
+               bh_result->b_size = (1 << inode->i_blkbits);
+       return ret;
+}
+
 static ssize_t hfs_direct_IO(int rw, struct kiocb *iocb,
                const struct iovec *iov, loff_t offset, unsigned long nr_segs)
 {
@@ -105,7 +116,7 @@ static ssize_t hfs_direct_IO(int rw, struct kiocb *iocb,
        struct inode *inode = file->f_dentry->d_inode->i_mapping->host;
 
        return blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov,
-                                 offset, nr_segs, hfs_get_block, NULL);
+                                 offset, nr_segs, hfs_get_blocks, NULL);
 }
 
 static int hfs_writepages(struct address_space *mapping,
@@ -601,7 +612,7 @@ int hfs_inode_setattr(struct dentry *dentry, struct iattr * attr)
 }
 
 
-static const struct file_operations hfs_file_operations = {
+static struct file_operations hfs_file_operations = {
        .llseek         = generic_file_llseek,
        .read           = generic_file_read,
        .write          = generic_file_write,