]> err.no Git - linux-2.6/blobdiff - fs/ocfs2/aops.c
ocfs2: remove unused code
[linux-2.6] / fs / ocfs2 / aops.c
index ef6cd30108a9fb153a244c97050420f93a9efb0e..875c1144381752be4bfa7df83788b104c3b05b7f 100644 (file)
@@ -540,8 +540,7 @@ static int ocfs2_direct_IO_get_blocks(struct inode *inode, sector_t iblock,
                                     struct buffer_head *bh_result, int create)
 {
        int ret;
-       u64 vbo_max; /* file offset, max_blocks from iblock */
-       u64 p_blkno;
+       u64 p_blkno, inode_blocks;
        int contig_blocks;
        unsigned char blocksize_bits = inode->i_sb->s_blocksize_bits;
        unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits;
@@ -550,12 +549,23 @@ static int ocfs2_direct_IO_get_blocks(struct inode *inode, sector_t iblock,
         * nicely aligned and of the right size, so there's no need
         * for us to check any of that. */
 
-       vbo_max = ((u64)iblock + max_blocks) << blocksize_bits;
-
        spin_lock(&OCFS2_I(inode)->ip_lock);
-       if ((iblock + max_blocks) >
-           ocfs2_clusters_to_blocks(inode->i_sb,
-                                    OCFS2_I(inode)->ip_clusters)) {
+       inode_blocks = ocfs2_clusters_to_blocks(inode->i_sb,
+                                               OCFS2_I(inode)->ip_clusters);
+
+       /*
+        * For a read which begins past the end of file, we return a hole.
+        */
+       if (!create && (iblock >= inode_blocks)) {
+               spin_unlock(&OCFS2_I(inode)->ip_lock);
+               ret = 0;
+               goto bail;
+       }
+
+       /*
+        * Any write past EOF is not allowed because we'd be extending.
+        */
+       if (create && (iblock + max_blocks) > inode_blocks) {
                spin_unlock(&OCFS2_I(inode)->ip_lock);
                ret = -EIO;
                goto bail;
@@ -604,6 +614,27 @@ static void ocfs2_dio_end_io(struct kiocb *iocb,
        ocfs2_rw_unlock(inode, 0);
 }
 
+/*
+ * ocfs2_invalidatepage() and ocfs2_releasepage() are shamelessly stolen
+ * from ext3.  PageChecked() bits have been removed as OCFS2 does not
+ * do journalled data.
+ */
+static void ocfs2_invalidatepage(struct page *page, unsigned long offset)
+{
+       journal_t *journal = OCFS2_SB(page->mapping->host->i_sb)->journal->j_journal;
+
+       journal_invalidatepage(journal, page, offset);
+}
+
+static int ocfs2_releasepage(struct page *page, gfp_t wait)
+{
+       journal_t *journal = OCFS2_SB(page->mapping->host->i_sb)->journal->j_journal;
+
+       if (!page_has_buffers(page))
+               return 0;
+       return journal_try_to_free_buffers(journal, page, wait);
+}
+
 static ssize_t ocfs2_direct_IO(int rw,
                               struct kiocb *iocb,
                               const struct iovec *iov,
@@ -651,5 +682,8 @@ const struct address_space_operations ocfs2_aops = {
        .commit_write   = ocfs2_commit_write,
        .bmap           = ocfs2_bmap,
        .sync_page      = block_sync_page,
-       .direct_IO      = ocfs2_direct_IO
+       .direct_IO      = ocfs2_direct_IO,
+       .invalidatepage = ocfs2_invalidatepage,
+       .releasepage    = ocfs2_releasepage,
+       .migratepage    = buffer_migrate_page,
 };