xfs: fix uninitialized list head in struct xfs_refcount_recovery

We're supposed to initialize the list head of an object before adding it
to another list.  Fix that, and stop using the kmem_{alloc,free} calls
from the Irix days.

Fixes: 174edb0e46 ("xfs: store in-progress CoW allocations in the refcount btree")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
Darrick J. Wong 2022-10-26 14:55:04 -07:00
parent f1fdc82078
commit c1ccf967bf
1 changed files with 6 additions and 4 deletions

View File

@ -1767,12 +1767,14 @@ xfs_refcount_recover_extent(
be32_to_cpu(rec->refc.rc_refcount) != 1)) be32_to_cpu(rec->refc.rc_refcount) != 1))
return -EFSCORRUPTED; return -EFSCORRUPTED;
rr = kmem_alloc(sizeof(struct xfs_refcount_recovery), 0); rr = kmalloc(sizeof(struct xfs_refcount_recovery),
GFP_KERNEL | __GFP_NOFAIL);
INIT_LIST_HEAD(&rr->rr_list);
xfs_refcount_btrec_to_irec(rec, &rr->rr_rrec); xfs_refcount_btrec_to_irec(rec, &rr->rr_rrec);
if (XFS_IS_CORRUPT(cur->bc_mp, if (XFS_IS_CORRUPT(cur->bc_mp,
rr->rr_rrec.rc_domain != XFS_REFC_DOMAIN_COW)) { rr->rr_rrec.rc_domain != XFS_REFC_DOMAIN_COW)) {
kmem_free(rr); kfree(rr);
return -EFSCORRUPTED; return -EFSCORRUPTED;
} }
@ -1859,7 +1861,7 @@ xfs_refcount_recover_cow_leftovers(
goto out_free; goto out_free;
list_del(&rr->rr_list); list_del(&rr->rr_list);
kmem_free(rr); kfree(rr);
} }
return error; return error;
@ -1869,7 +1871,7 @@ out_free:
/* Free the leftover list */ /* Free the leftover list */
list_for_each_entry_safe(rr, n, &debris, rr_list) { list_for_each_entry_safe(rr, n, &debris, rr_list) {
list_del(&rr->rr_list); list_del(&rr->rr_list);
kmem_free(rr); kfree(rr);
} }
return error; return error;
} }