diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-06 20:03:41 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-06 20:03:41 -0800 | 
| commit | 6a6662ced4153f6dbcfc40d7225c3cc45416039c (patch) | |
| tree | 77ad5d577333f02cd854e44827a407dd0388d4eb /fs/btrfs/relocation.c | |
| parent | 32aaeffbd4a7457bf2f7448b33b5946ff2a960eb (diff) | |
| parent | 7c7e82a77fe3d89ae50824aa7c897454675eb4c4 (diff) | |
| download | olio-linux-3.10-6a6662ced4153f6dbcfc40d7225c3cc45416039c.tar.xz olio-linux-3.10-6a6662ced4153f6dbcfc40d7225c3cc45416039c.zip  | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs: (114 commits)
  Btrfs: check for a null fs root when writing to the backup root log
  Btrfs: fix race during transaction joins
  Btrfs: fix a potential btrfs_bio leak on scrub fixups
  Btrfs: rename btrfs_bio multi -> bbio for consistency
  Btrfs: stop leaking btrfs_bios on readahead
  Btrfs: stop the readahead threads on failed mount
  Btrfs: fix extent_buffer leak in the metadata IO error handling
  Btrfs: fix the new inspection ioctls for 32 bit compat
  Btrfs: fix delayed insertion reservation
  Btrfs: ClearPageError during writepage and clean_tree_block
  Btrfs: be smarter about committing the transaction in reserve_metadata_bytes
  Btrfs: make a delayed_block_rsv for the delayed item insertion
  Btrfs: add a log of past tree roots
  btrfs: separate superblock items out of fs_info
  Btrfs: use the global reserve when truncating the free space cache inode
  Btrfs: release metadata from global reserve if we have to fallback for unlink
  Btrfs: make sure to flush queued bios if write_cache_pages waits
  Btrfs: fix extent pinning bugs in the tree log
  Btrfs: make sure btrfs_remove_free_space doesn't leak EAGAIN
  Btrfs: don't wait as long for more batches during SSD log commit
  ...
Diffstat (limited to 'fs/btrfs/relocation.c')
| -rw-r--r-- | fs/btrfs/relocation.c | 24 | 
1 files changed, 11 insertions, 13 deletions
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 59bb1764273..24d654ce7a0 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2041,8 +2041,7 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc,  		BUG_ON(IS_ERR(trans));  		trans->block_rsv = rc->block_rsv; -		ret = btrfs_block_rsv_check(trans, root, rc->block_rsv, -					    min_reserved, 0); +		ret = btrfs_block_rsv_refill(root, rc->block_rsv, min_reserved);  		if (ret) {  			BUG_ON(ret != -EAGAIN);  			ret = btrfs_commit_transaction(trans, root); @@ -2152,8 +2151,7 @@ int prepare_to_merge(struct reloc_control *rc, int err)  again:  	if (!err) {  		num_bytes = rc->merging_rsv_size; -		ret = btrfs_block_rsv_add(NULL, root, rc->block_rsv, -					  num_bytes); +		ret = btrfs_block_rsv_add(root, rc->block_rsv, num_bytes);  		if (ret)  			err = ret;  	} @@ -2427,7 +2425,7 @@ static int reserve_metadata_space(struct btrfs_trans_handle *trans,  	num_bytes = calcu_metadata_size(rc, node, 1) * 2;  	trans->block_rsv = rc->block_rsv; -	ret = btrfs_block_rsv_add(trans, root, rc->block_rsv, num_bytes); +	ret = btrfs_block_rsv_add(root, rc->block_rsv, num_bytes);  	if (ret) {  		if (ret == -EAGAIN)  			rc->commit_transaction = 1; @@ -2922,6 +2920,7 @@ static int relocate_file_extent_cluster(struct inode *inode,  	unsigned long last_index;  	struct page *page;  	struct file_ra_state *ra; +	gfp_t mask = btrfs_alloc_write_mask(inode->i_mapping);  	int nr = 0;  	int ret = 0; @@ -2956,7 +2955,7 @@ static int relocate_file_extent_cluster(struct inode *inode,  						  ra, NULL, index,  						  last_index + 1 - index);  			page = find_or_create_page(inode->i_mapping, index, -						   GFP_NOFS); +						   mask);  			if (!page) {  				btrfs_delalloc_release_metadata(inode,  							PAGE_CACHE_SIZE); @@ -3323,8 +3322,11 @@ static int find_data_references(struct reloc_control *rc,  	}  	key.objectid = ref_objectid; -	key.offset = ref_offset;  	key.type = BTRFS_EXTENT_DATA_KEY; +	if (ref_offset > ((u64)-1 << 32)) +		key.offset = 0; +	else +		key.offset = ref_offset;  	path->search_commit_root = 1;  	path->skip_locking = 1; @@ -3645,14 +3647,11 @@ int prepare_to_relocate(struct reloc_control *rc)  	 * btrfs_init_reloc_root will use them when there  	 * is no reservation in transaction handle.  	 */ -	ret = btrfs_block_rsv_add(NULL, rc->extent_root, rc->block_rsv, +	ret = btrfs_block_rsv_add(rc->extent_root, rc->block_rsv,  				  rc->extent_root->nodesize * 256);  	if (ret)  		return ret; -	rc->block_rsv->refill_used = 1; -	btrfs_add_durable_block_rsv(rc->extent_root->fs_info, rc->block_rsv); -  	memset(&rc->cluster, 0, sizeof(rc->cluster));  	rc->search_start = rc->block_group->key.objectid;  	rc->extents_found = 0; @@ -3777,8 +3776,7 @@ restart:  			}  		} -		ret = btrfs_block_rsv_check(trans, rc->extent_root, -					    rc->block_rsv, 0, 5); +		ret = btrfs_block_rsv_check(rc->extent_root, rc->block_rsv, 5);  		if (ret < 0) {  			if (ret != -EAGAIN) {  				err = ret;  |