Commit 4520fb3c3690f2643006d85f09ecb74554c10e95

Authored by Jan Kara
Committed by Theodore Ts'o
1 parent d7961c7fa4

ext4: split off ext4_journalled_invalidatepage()

In data=journal mode we don't need delalloc or DIO handling in invalidatepage
and similarly in other modes we don't need the journal handling. So split
invalidatepage implementations.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

Showing 2 changed files with 29 additions and 8 deletions Side-by-side Diff

... ... @@ -2880,8 +2880,6 @@
2880 2880  
2881 2881 static void ext4_invalidatepage(struct page *page, unsigned long offset)
2882 2882 {
2883   - journal_t *journal = EXT4_JOURNAL(page->mapping->host);
2884   -
2885 2883 trace_ext4_invalidatepage(page, offset);
2886 2884  
2887 2885 /*
2888 2886  
... ... @@ -2889,16 +2887,27 @@
2889 2887 */
2890 2888 if (ext4_should_dioread_nolock(page->mapping->host))
2891 2889 ext4_invalidatepage_free_endio(page, offset);
  2890 +
  2891 + /* No journalling happens on data buffers when this function is used */
  2892 + WARN_ON(page_has_buffers(page) && buffer_jbd(page_buffers(page)));
  2893 +
  2894 + block_invalidatepage(page, offset);
  2895 +}
  2896 +
  2897 +static void ext4_journalled_invalidatepage(struct page *page,
  2898 + unsigned long offset)
  2899 +{
  2900 + journal_t *journal = EXT4_JOURNAL(page->mapping->host);
  2901 +
  2902 + trace_ext4_journalled_invalidatepage(page, offset);
  2903 +
2892 2904 /*
2893 2905 * If it's a full truncate we just forget about the pending dirtying
2894 2906 */
2895 2907 if (offset == 0)
2896 2908 ClearPageChecked(page);
2897 2909  
2898   - if (journal)
2899   - jbd2_journal_invalidatepage(journal, page, offset);
2900   - else
2901   - block_invalidatepage(page, offset);
  2910 + jbd2_journal_invalidatepage(journal, page, offset);
2902 2911 }
2903 2912  
2904 2913 static int ext4_releasepage(struct page *page, gfp_t wait)
... ... @@ -3264,7 +3273,7 @@
3264 3273 .write_end = ext4_journalled_write_end,
3265 3274 .set_page_dirty = ext4_journalled_set_page_dirty,
3266 3275 .bmap = ext4_bmap,
3267   - .invalidatepage = ext4_invalidatepage,
  3276 + .invalidatepage = ext4_journalled_invalidatepage,
3268 3277 .releasepage = ext4_releasepage,
3269 3278 .direct_IO = ext4_direct_IO,
3270 3279 .is_partially_uptodate = block_is_partially_uptodate,
include/trace/events/ext4.h
... ... @@ -451,7 +451,7 @@
451 451 TP_ARGS(page)
452 452 );
453 453  
454   -TRACE_EVENT(ext4_invalidatepage,
  454 +DECLARE_EVENT_CLASS(ext4_invalidatepage_op,
455 455 TP_PROTO(struct page *page, unsigned long offset),
456 456  
457 457 TP_ARGS(page, offset),
... ... @@ -475,6 +475,18 @@
475 475 MAJOR(__entry->dev), MINOR(__entry->dev),
476 476 (unsigned long) __entry->ino,
477 477 (unsigned long) __entry->index, __entry->offset)
  478 +);
  479 +
  480 +DEFINE_EVENT(ext4_invalidatepage_op, ext4_invalidatepage,
  481 + TP_PROTO(struct page *page, unsigned long offset),
  482 +
  483 + TP_ARGS(page, offset)
  484 +);
  485 +
  486 +DEFINE_EVENT(ext4_invalidatepage_op, ext4_journalled_invalidatepage,
  487 + TP_PROTO(struct page *page, unsigned long offset),
  488 +
  489 + TP_ARGS(page, offset)
478 490 );
479 491  
480 492 TRACE_EVENT(ext4_discard_blocks,