diff options
| author | Tejun Heo <tj@kernel.org> | 2013-01-23 09:31:01 -0800 | 
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2013-01-23 09:31:01 -0800 | 
| commit | c14afb82ffff5903a701a9fb737ac20f36d1f755 (patch) | |
| tree | 304dcc7b1d7b9a5f564f7e978228e61ef41fbef2 /fs/btrfs/backref.c | |
| parent | 0fdff3ec6d87856cdcc99e69cf42143fdd6c56b4 (diff) | |
| parent | 1d8549085377674224bf30a368284c391a3ce40e (diff) | |
| download | olio-linux-3.10-c14afb82ffff5903a701a9fb737ac20f36d1f755.tar.xz olio-linux-3.10-c14afb82ffff5903a701a9fb737ac20f36d1f755.zip  | |
Merge branch 'master' into for-3.9-async
To receive f56c3196f251012de9b3ebaff55732a9074fdaae ("async: fix
__lowest_in_progress()").
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'fs/btrfs/backref.c')
| -rw-r--r-- | fs/btrfs/backref.c | 16 | 
1 files changed, 12 insertions, 4 deletions
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index 208d8aa5b07..04edf69be87 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -461,6 +461,7 @@ static int __merge_refs(struct list_head *head, int mode)  		     pos2 = n2, n2 = pos2->next) {  			struct __prelim_ref *ref2;  			struct __prelim_ref *xchg; +			struct extent_inode_elem *eie;  			ref2 = list_entry(pos2, struct __prelim_ref, list); @@ -472,12 +473,20 @@ static int __merge_refs(struct list_head *head, int mode)  					ref1 = ref2;  					ref2 = xchg;  				} -				ref1->count += ref2->count;  			} else {  				if (ref1->parent != ref2->parent)  					continue; -				ref1->count += ref2->count;  			} + +			eie = ref1->inode_list; +			while (eie && eie->next) +				eie = eie->next; +			if (eie) +				eie->next = ref2->inode_list; +			else +				ref1->inode_list = ref2->inode_list; +			ref1->count += ref2->count; +  			list_del(&ref2->list);  			kfree(ref2);  		} @@ -890,8 +899,7 @@ again:  	while (!list_empty(&prefs)) {  		ref = list_first_entry(&prefs, struct __prelim_ref, list);  		list_del(&ref->list); -		if (ref->count < 0) -			WARN_ON(1); +		WARN_ON(ref->count < 0);  		if (ref->count && ref->root_id && ref->parent == 0) {  			/* no parent == root of tree */  			ret = ulist_add(roots, ref->root_id, 0, GFP_NOFS);  |