From ac44d1c308ee6f044a2ceb89551fb62ddedc3fe4 Mon Sep 17 00:00:00 2001 From: Alexander Block Date: Thu, 8 Nov 2012 21:27:24 +0000 Subject: [PATCH] --- yaml --- r: 346671 b: refs/heads/master c: 3ef5969cd8a42a78ccdbc53f7abb2e6136b2ec65 h: refs/heads/master i: 346669: 977329ee5bac63c057ecd647f9c8b5746e59869e 346667: d52a1f9e12467b1dc361d854e58595b797f30f07 346663: 62b32409e847aa9b01461e67858bb8b0737259c1 346655: 49353f9ed6db720ba1054d897aab497681ae4905 v: v3 --- [refs] | 2 +- trunk/fs/btrfs/backref.c | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 6978f76b8c2e..238918c9ffd0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e1f5790e0588bc5b11eb57f95bfde8702049dd0d +refs/heads/master: 3ef5969cd8a42a78ccdbc53f7abb2e6136b2ec65 diff --git a/trunk/fs/btrfs/backref.c b/trunk/fs/btrfs/backref.c index a3219523ebc9..04edf69be875 100644 --- a/trunk/fs/btrfs/backref.c +++ b/trunk/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); }