فهرست منبع

Btrfs: Handle writeback under high memory pressure better

Signed-off-by: Chris Mason <chris.mason@oracle.com>
Chris Mason 17 سال پیش
والد
کامیت
015a739c7c
2فایلهای تغییر یافته به همراه13 افزوده شده و 1 حذف شده
  1. 1 1
      fs/btrfs/extent-tree.c
  2. 12 0
      fs/btrfs/extent_map.c

+ 1 - 1
fs/btrfs/extent-tree.c

@@ -961,7 +961,7 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
 
 	level = btrfs_header_level(root->node);
 
-	if (num_bytes >= 96 * 1024 * 1024 && hint_byte) {
+	if (num_bytes >= 32 * 1024 * 1024 && hint_byte) {
 		data = BTRFS_BLOCK_GROUP_MIXED;
 	}
 

+ 12 - 0
fs/btrfs/extent_map.c

@@ -1861,13 +1861,25 @@ int extent_write_full_page(struct extent_map_tree *tree, struct page *page,
 			  struct writeback_control *wbc)
 {
 	int ret;
+	struct address_space *mapping = page->mapping;
 	struct extent_page_data epd = {
 		.bio = NULL,
 		.tree = tree,
 		.get_extent = get_extent,
 	};
+	struct writeback_control wbc_writepages = {
+		.bdi		= wbc->bdi,
+		.sync_mode	= WB_SYNC_NONE,
+		.older_than_this = NULL,
+		.nr_to_write	= 64,
+		.range_start	= page_offset(page) + PAGE_CACHE_SIZE,
+		.range_end	= (loff_t)-1,
+	};
+
 
 	ret = __extent_writepage(page, wbc, &epd);
+
+	write_cache_pages(mapping, &wbc_writepages, __extent_writepage, &epd);
 	if (epd.bio)
 		submit_one_bio(WRITE, epd.bio);
 	return ret;