aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-07-02 12:39:34 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-07-02 12:39:34 -0400
commit9e239bb93914e1c832d54161c7f8f398d0c914ab (patch)
tree0fe11e8e717152660ad77d77e66bf0f1695d7ed1 /fs/xfs
parent63580e51bb3e7ec459501165884e5f815a7a9322 (diff)
parent6ae06ff51eab5dcbbf959b05ce0f11003a305ba5 (diff)
Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
Pull ext4 update from Ted Ts'o: "Lots of bug fixes, cleanups and optimizations. In the bug fixes category, of note is a fix for on-line resizing file systems where the block size is smaller than the page size (i.e., file systems 1k blocks on x86, or more interestingly file systems with 4k blocks on Power or ia64 systems.) In the cleanup category, the ext4's punch hole implementation was significantly improved by Lukas Czerner, and now supports bigalloc file systems. In addition, Jan Kara significantly cleaned up the write submission code path. We also improved error checking and added a few sanity checks. In the optimizations category, two major optimizations deserve mention. The first is that ext4_writepages() is now used for nodelalloc and ext3 compatibility mode. This allows writes to be submitted much more efficiently as a single bio request, instead of being sent as individual 4k writes into the block layer (which then relied on the elevator code to coalesce the requests in the block queue). Secondly, the extent cache shrink mechanism, which was introduce in 3.9, no longer has a scalability bottleneck caused by the i_es_lru spinlock. Other optimizations include some changes to reduce CPU usage and to avoid issuing empty commits unnecessarily." * tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (86 commits) ext4: optimize starting extent in ext4_ext_rm_leaf() jbd2: invalidate handle if jbd2_journal_restart() fails ext4: translate flag bits to strings in tracepoints ext4: fix up error handling for mpage_map_and_submit_extent() jbd2: fix theoretical race in jbd2__journal_restart ext4: only zero partial blocks in ext4_zero_partial_blocks() ext4: check error return from ext4_write_inline_data_end() ext4: delete unnecessary C statements ext3,ext4: don't mess with dir_file->f_pos in htree_dirblock_to_tree() jbd2: move superblock checksum calculation to jbd2_write_superblock() ext4: pass inode pointer instead of file pointer to punch hole ext4: improve free space calculation for inline_data ext4: reduce object size when !CONFIG_PRINTK ext4: improve extent cache shrink mechanism to avoid to burn CPU time ext4: implement error handling of ext4_mb_new_preallocation() ext4: fix corruption when online resizing a fs with 1K block size ext4: delete unused variables ext4: return FIEMAP_EXTENT_UNKNOWN for delalloc extents jbd2: remove debug dependency on debug_fs and update Kconfig help text jbd2: use a single printk for jbd_debug() ...
Diffstat (limited to 'fs/xfs')
-rw-r--r--fs/xfs/xfs_aops.c14
-rw-r--r--fs/xfs/xfs_trace.h15
2 files changed, 18 insertions, 11 deletions
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 41a695048be7..596ec71da00e 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -843,10 +843,12 @@ xfs_cluster_write(
843STATIC void 843STATIC void
844xfs_vm_invalidatepage( 844xfs_vm_invalidatepage(
845 struct page *page, 845 struct page *page,
846 unsigned long offset) 846 unsigned int offset,
847 unsigned int length)
847{ 848{
848 trace_xfs_invalidatepage(page->mapping->host, page, offset); 849 trace_xfs_invalidatepage(page->mapping->host, page, offset,
849 block_invalidatepage(page, offset); 850 length);
851 block_invalidatepage(page, offset, length);
850} 852}
851 853
852/* 854/*
@@ -910,7 +912,7 @@ next_buffer:
910 912
911 xfs_iunlock(ip, XFS_ILOCK_EXCL); 913 xfs_iunlock(ip, XFS_ILOCK_EXCL);
912out_invalidate: 914out_invalidate:
913 xfs_vm_invalidatepage(page, 0); 915 xfs_vm_invalidatepage(page, 0, PAGE_CACHE_SIZE);
914 return; 916 return;
915} 917}
916 918
@@ -940,7 +942,7 @@ xfs_vm_writepage(
940 int count = 0; 942 int count = 0;
941 int nonblocking = 0; 943 int nonblocking = 0;
942 944
943 trace_xfs_writepage(inode, page, 0); 945 trace_xfs_writepage(inode, page, 0, 0);
944 946
945 ASSERT(page_has_buffers(page)); 947 ASSERT(page_has_buffers(page));
946 948
@@ -1171,7 +1173,7 @@ xfs_vm_releasepage(
1171{ 1173{
1172 int delalloc, unwritten; 1174 int delalloc, unwritten;
1173 1175
1174 trace_xfs_releasepage(page->mapping->host, page, 0); 1176 trace_xfs_releasepage(page->mapping->host, page, 0, 0);
1175 1177
1176 xfs_count_page_state(page, &delalloc, &unwritten); 1178 xfs_count_page_state(page, &delalloc, &unwritten);
1177 1179
diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h
index aa4db3307d36..a04701de6bbd 100644
--- a/fs/xfs/xfs_trace.h
+++ b/fs/xfs/xfs_trace.h
@@ -974,14 +974,16 @@ DEFINE_RW_EVENT(xfs_file_splice_read);
974DEFINE_RW_EVENT(xfs_file_splice_write); 974DEFINE_RW_EVENT(xfs_file_splice_write);
975 975
976DECLARE_EVENT_CLASS(xfs_page_class, 976DECLARE_EVENT_CLASS(xfs_page_class,
977 TP_PROTO(struct inode *inode, struct page *page, unsigned long off), 977 TP_PROTO(struct inode *inode, struct page *page, unsigned long off,
978 TP_ARGS(inode, page, off), 978 unsigned int len),
979 TP_ARGS(inode, page, off, len),
979 TP_STRUCT__entry( 980 TP_STRUCT__entry(
980 __field(dev_t, dev) 981 __field(dev_t, dev)
981 __field(xfs_ino_t, ino) 982 __field(xfs_ino_t, ino)
982 __field(pgoff_t, pgoff) 983 __field(pgoff_t, pgoff)
983 __field(loff_t, size) 984 __field(loff_t, size)
984 __field(unsigned long, offset) 985 __field(unsigned long, offset)
986 __field(unsigned int, length)
985 __field(int, delalloc) 987 __field(int, delalloc)
986 __field(int, unwritten) 988 __field(int, unwritten)
987 ), 989 ),
@@ -995,24 +997,27 @@ DECLARE_EVENT_CLASS(xfs_page_class,
995 __entry->pgoff = page_offset(page); 997 __entry->pgoff = page_offset(page);
996 __entry->size = i_size_read(inode); 998 __entry->size = i_size_read(inode);
997 __entry->offset = off; 999 __entry->offset = off;
1000 __entry->length = len;
998 __entry->delalloc = delalloc; 1001 __entry->delalloc = delalloc;
999 __entry->unwritten = unwritten; 1002 __entry->unwritten = unwritten;
1000 ), 1003 ),
1001 TP_printk("dev %d:%d ino 0x%llx pgoff 0x%lx size 0x%llx offset %lx " 1004 TP_printk("dev %d:%d ino 0x%llx pgoff 0x%lx size 0x%llx offset %lx "
1002 "delalloc %d unwritten %d", 1005 "length %x delalloc %d unwritten %d",
1003 MAJOR(__entry->dev), MINOR(__entry->dev), 1006 MAJOR(__entry->dev), MINOR(__entry->dev),
1004 __entry->ino, 1007 __entry->ino,
1005 __entry->pgoff, 1008 __entry->pgoff,
1006 __entry->size, 1009 __entry->size,
1007 __entry->offset, 1010 __entry->offset,
1011 __entry->length,
1008 __entry->delalloc, 1012 __entry->delalloc,
1009 __entry->unwritten) 1013 __entry->unwritten)
1010) 1014)
1011 1015
1012#define DEFINE_PAGE_EVENT(name) \ 1016#define DEFINE_PAGE_EVENT(name) \
1013DEFINE_EVENT(xfs_page_class, name, \ 1017DEFINE_EVENT(xfs_page_class, name, \
1014 TP_PROTO(struct inode *inode, struct page *page, unsigned long off), \ 1018 TP_PROTO(struct inode *inode, struct page *page, unsigned long off, \
1015 TP_ARGS(inode, page, off)) 1019 unsigned int len), \
1020 TP_ARGS(inode, page, off, len))
1016DEFINE_PAGE_EVENT(xfs_writepage); 1021DEFINE_PAGE_EVENT(xfs_writepage);
1017DEFINE_PAGE_EVENT(xfs_releasepage); 1022DEFINE_PAGE_EVENT(xfs_releasepage);
1018DEFINE_PAGE_EVENT(xfs_invalidatepage); 1023DEFINE_PAGE_EVENT(xfs_invalidatepage);