Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=03f981cf2ec95dd8bc43d2ecccaec4e83c8375e2
Commit:     03f981cf2ec95dd8bc43d2ecccaec4e83c8375e2
Parent:     e6c352dbc0f4dc7e3f82feafb9e6207c5814a189
Author:     Joel Becker <[EMAIL PROTECTED]>
AuthorDate: Thu Jan 4 14:54:41 2007 -0800
Committer:  Mark Fasheh <[EMAIL PROTECTED]>
CommitDate: Wed Mar 14 14:37:16 2007 -0700

    ocfs2: add some missing address space callbacks
    
    Under load, OCFS2 would crash in invalidate_inode_pages2_range() because
    invalidate_complete_page2() was unable to invalidate a page.  It would
    appear that JBD is holding on to the page.  ext3 has a specific
    ->releasepage() handler to cover this case.
    
    Steal ext3's ->releasepage(), ->invalidatepage(), and ->migratepage(), as
    they appear completely appropriate for OCFS2.
    
    Signed-off-by: Joel Becker <[EMAIL PROTECTED]>
    Signed-off-by: Mark Fasheh <[EMAIL PROTECTED]>
---
 fs/ocfs2/aops.c |   26 +++++++++++++++++++++++++-
 1 files changed, 25 insertions(+), 1 deletions(-)

diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
index 93628b0..875c114 100644
--- a/fs/ocfs2/aops.c
+++ b/fs/ocfs2/aops.c
@@ -614,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,
@@ -661,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,
 };
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to