Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0e4e0263 authored by Chris Mason's avatar Chris Mason
Browse files

Merge branch 'for-linus' into raid56-experimental



Conflicts:
	fs/btrfs/volumes.c

Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
parents 1f0905ec 1eafa6c7
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -4061,7 +4061,7 @@ static int reserve_metadata_bytes(struct btrfs_root *root,
	 * We make the other tasks wait for the flush only when we can flush
	 * We make the other tasks wait for the flush only when we can flush
	 * all things.
	 * all things.
	 */
	 */
	if (ret && flush == BTRFS_RESERVE_FLUSH_ALL) {
	if (ret && flush != BTRFS_RESERVE_NO_FLUSH) {
		flushing = true;
		flushing = true;
		space_info->flush = 1;
		space_info->flush = 1;
	}
	}
@@ -5631,7 +5631,7 @@ static noinline int find_free_extent(struct btrfs_trans_handle *trans,
	int empty_cluster = 2 * 1024 * 1024;
	int empty_cluster = 2 * 1024 * 1024;
	struct btrfs_space_info *space_info;
	struct btrfs_space_info *space_info;
	int loop = 0;
	int loop = 0;
	int index = 0;
	int index = __get_raid_index(data);
	int alloc_type = (data & BTRFS_BLOCK_GROUP_DATA) ?
	int alloc_type = (data & BTRFS_BLOCK_GROUP_DATA) ?
		RESERVE_ALLOC_NO_ACCOUNT : RESERVE_ALLOC;
		RESERVE_ALLOC_NO_ACCOUNT : RESERVE_ALLOC;
	bool found_uncached_bg = false;
	bool found_uncached_bg = false;
@@ -6867,11 +6867,13 @@ static noinline int walk_up_proc(struct btrfs_trans_handle *trans,
						       &wc->flags[level]);
						       &wc->flags[level]);
			if (ret < 0) {
			if (ret < 0) {
				btrfs_tree_unlock_rw(eb, path->locks[level]);
				btrfs_tree_unlock_rw(eb, path->locks[level]);
				path->locks[level] = 0;
				return ret;
				return ret;
			}
			}
			BUG_ON(wc->refs[level] == 0);
			BUG_ON(wc->refs[level] == 0);
			if (wc->refs[level] == 1) {
			if (wc->refs[level] == 1) {
				btrfs_tree_unlock_rw(eb, path->locks[level]);
				btrfs_tree_unlock_rw(eb, path->locks[level]);
				path->locks[level] = 0;
				return 1;
				return 1;
			}
			}
		}
		}
+12 −1
Original line number Original line Diff line number Diff line
@@ -171,6 +171,10 @@ static int mergable_maps(struct extent_map *prev, struct extent_map *next)
	if (test_bit(EXTENT_FLAG_COMPRESSED, &prev->flags))
	if (test_bit(EXTENT_FLAG_COMPRESSED, &prev->flags))
		return 0;
		return 0;


	if (test_bit(EXTENT_FLAG_LOGGING, &prev->flags) ||
	    test_bit(EXTENT_FLAG_LOGGING, &next->flags))
		return 0;

	if (extent_map_end(prev) == next->start &&
	if (extent_map_end(prev) == next->start &&
	    prev->flags == next->flags &&
	    prev->flags == next->flags &&
	    prev->bdev == next->bdev &&
	    prev->bdev == next->bdev &&
@@ -256,6 +260,7 @@ int unpin_extent_cache(struct extent_map_tree *tree, u64 start, u64 len,
	if (!em)
	if (!em)
		goto out;
		goto out;


	if (!test_bit(EXTENT_FLAG_LOGGING, &em->flags))
		list_move(&em->list, &tree->modified_extents);
		list_move(&em->list, &tree->modified_extents);
	em->generation = gen;
	em->generation = gen;
	clear_bit(EXTENT_FLAG_PINNED, &em->flags);
	clear_bit(EXTENT_FLAG_PINNED, &em->flags);
@@ -281,6 +286,12 @@ int unpin_extent_cache(struct extent_map_tree *tree, u64 start, u64 len,


}
}


void clear_em_logging(struct extent_map_tree *tree, struct extent_map *em)
{
	clear_bit(EXTENT_FLAG_LOGGING, &em->flags);
	try_merge_map(tree, em);
}

/**
/**
 * add_extent_mapping - add new extent map to the extent tree
 * add_extent_mapping - add new extent map to the extent tree
 * @tree:	tree to insert new map in
 * @tree:	tree to insert new map in
+1 −0
Original line number Original line Diff line number Diff line
@@ -69,6 +69,7 @@ void free_extent_map(struct extent_map *em);
int __init extent_map_init(void);
int __init extent_map_init(void);
void extent_map_exit(void);
void extent_map_exit(void);
int unpin_extent_cache(struct extent_map_tree *tree, u64 start, u64 len, u64 gen);
int unpin_extent_cache(struct extent_map_tree *tree, u64 start, u64 len, u64 gen);
void clear_em_logging(struct extent_map_tree *tree, struct extent_map *em);
struct extent_map *search_extent_mapping(struct extent_map_tree *tree,
struct extent_map *search_extent_mapping(struct extent_map_tree *tree,
					 u64 start, u64 len);
					 u64 start, u64 len);
#endif
#endif
+2 −2
Original line number Original line Diff line number Diff line
@@ -460,8 +460,8 @@ int btrfs_csum_one_bio(struct btrfs_root *root, struct inode *inode,
		if (!contig)
		if (!contig)
			offset = page_offset(bvec->bv_page) + bvec->bv_offset;
			offset = page_offset(bvec->bv_page) + bvec->bv_offset;


		if (!contig && (offset >= ordered->file_offset + ordered->len ||
		if (offset >= ordered->file_offset + ordered->len ||
		    offset < ordered->file_offset)) {
		    offset < ordered->file_offset) {
			unsigned long bytes_left;
			unsigned long bytes_left;
			sums->len = this_sum_bytes;
			sums->len = this_sum_bytes;
			this_sum_bytes = 0;
			this_sum_bytes = 0;
+7 −3
Original line number Original line Diff line number Diff line
@@ -2242,6 +2242,7 @@ static int find_desired_extent(struct inode *inode, loff_t *offset, int origin)
	if (lockend <= lockstart)
	if (lockend <= lockstart)
		lockend = lockstart + root->sectorsize;
		lockend = lockstart + root->sectorsize;


	lockend--;
	len = lockend - lockstart + 1;
	len = lockend - lockstart + 1;


	len = max_t(u64, len, root->sectorsize);
	len = max_t(u64, len, root->sectorsize);
@@ -2308,11 +2309,14 @@ static int find_desired_extent(struct inode *inode, loff_t *offset, int origin)
					}
					}
				}
				}


				if (!test_bit(EXTENT_FLAG_PREALLOC,
					      &em->flags)) {
					*offset = start;
					*offset = start;
					free_extent_map(em);
					free_extent_map(em);
					break;
					break;
				}
				}
			}
			}
		}


		start = em->start + em->len;
		start = em->start + em->len;
		last_end = em->start + em->len;
		last_end = em->start + em->len;
Loading