xfs: use delete helper for items expected to be in AIL
Various intent log items call xfs_trans_ail_remove() with a log I/O error shutdown type, but this helper historically checks whether an item is in the AIL before calling xfs_trans_ail_delete(). This means the shutdown check is essentially a no-op for users of xfs_trans_ail_remove(). It is possible that some items might not be AIL resident when the AIL remove attempt occurs, but this should be isolated to cases where the filesystem has already shutdown. For example, this includes abort of the transaction committing the intent and I/O error of the iclog buffer committing the intent to the log. Therefore, update these callsites to use xfs_trans_ail_delete() to provide AIL state validation for the common path of items being released and removed when associated done items commit to the physical log. Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Allison Collins <allison.henderson@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
Родитель
849274c103
Коммит
655879290c
|
@ -51,7 +51,7 @@ xfs_bui_release(
|
||||||
{
|
{
|
||||||
ASSERT(atomic_read(&buip->bui_refcount) > 0);
|
ASSERT(atomic_read(&buip->bui_refcount) > 0);
|
||||||
if (atomic_dec_and_test(&buip->bui_refcount)) {
|
if (atomic_dec_and_test(&buip->bui_refcount)) {
|
||||||
xfs_trans_ail_remove(&buip->bui_item, SHUTDOWN_LOG_IO_ERROR);
|
xfs_trans_ail_delete(&buip->bui_item, SHUTDOWN_LOG_IO_ERROR);
|
||||||
xfs_bui_item_free(buip);
|
xfs_bui_item_free(buip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ xfs_efi_release(
|
||||||
{
|
{
|
||||||
ASSERT(atomic_read(&efip->efi_refcount) > 0);
|
ASSERT(atomic_read(&efip->efi_refcount) > 0);
|
||||||
if (atomic_dec_and_test(&efip->efi_refcount)) {
|
if (atomic_dec_and_test(&efip->efi_refcount)) {
|
||||||
xfs_trans_ail_remove(&efip->efi_item, SHUTDOWN_LOG_IO_ERROR);
|
xfs_trans_ail_delete(&efip->efi_item, SHUTDOWN_LOG_IO_ERROR);
|
||||||
xfs_efi_item_free(efip);
|
xfs_efi_item_free(efip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ xfs_cui_release(
|
||||||
{
|
{
|
||||||
ASSERT(atomic_read(&cuip->cui_refcount) > 0);
|
ASSERT(atomic_read(&cuip->cui_refcount) > 0);
|
||||||
if (atomic_dec_and_test(&cuip->cui_refcount)) {
|
if (atomic_dec_and_test(&cuip->cui_refcount)) {
|
||||||
xfs_trans_ail_remove(&cuip->cui_item, SHUTDOWN_LOG_IO_ERROR);
|
xfs_trans_ail_delete(&cuip->cui_item, SHUTDOWN_LOG_IO_ERROR);
|
||||||
xfs_cui_item_free(cuip);
|
xfs_cui_item_free(cuip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ xfs_rui_release(
|
||||||
{
|
{
|
||||||
ASSERT(atomic_read(&ruip->rui_refcount) > 0);
|
ASSERT(atomic_read(&ruip->rui_refcount) > 0);
|
||||||
if (atomic_dec_and_test(&ruip->rui_refcount)) {
|
if (atomic_dec_and_test(&ruip->rui_refcount)) {
|
||||||
xfs_trans_ail_remove(&ruip->rui_item, SHUTDOWN_LOG_IO_ERROR);
|
xfs_trans_ail_delete(&ruip->rui_item, SHUTDOWN_LOG_IO_ERROR);
|
||||||
xfs_rui_item_free(ruip);
|
xfs_rui_item_free(ruip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче