diff options
Diffstat (limited to 'fs/btrfs/tree-log.c')
| -rw-r--r-- | fs/btrfs/tree-log.c | 7 | 
1 files changed, 5 insertions, 2 deletions
| diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 8ab33caf016f..6993dcdba6f1 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -1181,6 +1181,7 @@ again:  					     parent_objectid, victim_name,  					     victim_name_len);  			if (ret < 0) { +				kfree(victim_name);  				return ret;  			} else if (!ret) {  				ret = -ENOENT; @@ -2908,6 +2909,8 @@ static noinline int walk_up_log_tree(struct btrfs_trans_handle *trans,  						     path->nodes[*level]->len);  					if (ret)  						return ret; +					btrfs_redirty_list_add(trans->transaction, +							       next);  				} else {  					if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))  						clear_extent_buffer_dirty(next); @@ -2988,6 +2991,7 @@ static int walk_log_tree(struct btrfs_trans_handle *trans,  						next->start, next->len);  				if (ret)  					goto out; +				btrfs_redirty_list_add(trans->transaction, next);  			} else {  				if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))  					clear_extent_buffer_dirty(next); @@ -3438,8 +3442,6 @@ static void free_log_tree(struct btrfs_trans_handle *trans,  			  EXTENT_DIRTY | EXTENT_NEW | EXTENT_NEED_WAIT);  	extent_io_tree_release(&log->log_csum_range); -	if (trans && log->node) -		btrfs_redirty_list_add(trans->transaction, log->node);  	btrfs_put_root(log);  } @@ -3976,6 +3978,7 @@ search:  			goto done;  		}  		if (btrfs_header_generation(path->nodes[0]) != trans->transid) { +			ctx->last_dir_item_offset = min_key.offset;  			ret = overwrite_item(trans, log, dst_path,  					     path->nodes[0], path->slots[0],  					     &min_key); |