mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 07:33:19 +02:00
xfs: insert the pag structures into the xarray later
Cleaning up is much easier if a structure can't be looked up yet, so only insert the pag once it is fully set up. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
parent
201c5fa342
commit
d66496578b
|
|
@ -307,15 +307,6 @@ xfs_perag_alloc(
|
|||
if (!pag)
|
||||
return -ENOMEM;
|
||||
|
||||
pag->pag_agno = index;
|
||||
pag->pag_mount = mp;
|
||||
|
||||
error = xa_insert(&mp->m_perags, index, pag, GFP_KERNEL);
|
||||
if (error) {
|
||||
WARN_ON_ONCE(error == -EBUSY);
|
||||
goto out_free_pag;
|
||||
}
|
||||
|
||||
#ifdef __KERNEL__
|
||||
/* Place kernel structure only init below this point. */
|
||||
spin_lock_init(&pag->pag_ici_lock);
|
||||
|
|
@ -331,10 +322,7 @@ xfs_perag_alloc(
|
|||
|
||||
error = xfs_buf_cache_init(&pag->pag_bcache);
|
||||
if (error)
|
||||
goto out_remove_pag;
|
||||
|
||||
/* Active ref owned by mount indicates AG is online. */
|
||||
atomic_set(&pag->pag_active_ref, 1);
|
||||
goto out_defer_drain_free;
|
||||
|
||||
/*
|
||||
* Pre-calculated geometry
|
||||
|
|
@ -344,12 +332,23 @@ xfs_perag_alloc(
|
|||
__xfs_agino_range(mp, pag->block_count, &pag->agino_min,
|
||||
&pag->agino_max);
|
||||
|
||||
pag->pag_agno = index;
|
||||
pag->pag_mount = mp;
|
||||
/* Active ref owned by mount indicates AG is online. */
|
||||
atomic_set(&pag->pag_active_ref, 1);
|
||||
|
||||
error = xa_insert(&mp->m_perags, index, pag, GFP_KERNEL);
|
||||
if (error) {
|
||||
WARN_ON_ONCE(error == -EBUSY);
|
||||
goto out_buf_cache_destroy;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out_remove_pag:
|
||||
out_buf_cache_destroy:
|
||||
xfs_buf_cache_destroy(&pag->pag_bcache);
|
||||
out_defer_drain_free:
|
||||
xfs_defer_drain_free(&pag->pag_intents_drain);
|
||||
pag = xa_erase(&mp->m_perags, index);
|
||||
out_free_pag:
|
||||
kfree(pag);
|
||||
return error;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user