mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
xfs: wire up zoned block freeing in xfs_rtextent_free_finish_item
Make xfs_rtextent_free_finish_item call into the zoned allocator to free blocks on zoned RT devices. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
This commit is contained in:
parent
2e23834058
commit
859b692711
|
|
@ -29,6 +29,7 @@
|
|||
#include "xfs_inode.h"
|
||||
#include "xfs_rtbitmap.h"
|
||||
#include "xfs_rtgroup.h"
|
||||
#include "xfs_zone_alloc.h"
|
||||
|
||||
struct kmem_cache *xfs_efi_cache;
|
||||
struct kmem_cache *xfs_efd_cache;
|
||||
|
|
@ -767,21 +768,35 @@ xfs_rtextent_free_finish_item(
|
|||
|
||||
trace_xfs_extent_free_deferred(mp, xefi);
|
||||
|
||||
if (!(xefi->xefi_flags & XFS_EFI_CANCELLED)) {
|
||||
if (*rtgp != to_rtg(xefi->xefi_group)) {
|
||||
*rtgp = to_rtg(xefi->xefi_group);
|
||||
xfs_rtgroup_lock(*rtgp, XFS_RTGLOCK_BITMAP);
|
||||
xfs_rtgroup_trans_join(tp, *rtgp,
|
||||
XFS_RTGLOCK_BITMAP);
|
||||
}
|
||||
error = xfs_rtfree_blocks(tp, *rtgp,
|
||||
xefi->xefi_startblock, xefi->xefi_blockcount);
|
||||
if (xefi->xefi_flags & XFS_EFI_CANCELLED)
|
||||
goto done;
|
||||
|
||||
if (*rtgp != to_rtg(xefi->xefi_group)) {
|
||||
unsigned int lock_flags;
|
||||
|
||||
if (xfs_has_zoned(mp))
|
||||
lock_flags = XFS_RTGLOCK_RMAP;
|
||||
else
|
||||
lock_flags = XFS_RTGLOCK_BITMAP;
|
||||
|
||||
*rtgp = to_rtg(xefi->xefi_group);
|
||||
xfs_rtgroup_lock(*rtgp, lock_flags);
|
||||
xfs_rtgroup_trans_join(tp, *rtgp, lock_flags);
|
||||
}
|
||||
|
||||
if (xfs_has_zoned(mp)) {
|
||||
error = xfs_zone_free_blocks(tp, *rtgp, xefi->xefi_startblock,
|
||||
xefi->xefi_blockcount);
|
||||
} else {
|
||||
error = xfs_rtfree_blocks(tp, *rtgp, xefi->xefi_startblock,
|
||||
xefi->xefi_blockcount);
|
||||
}
|
||||
|
||||
if (error == -EAGAIN) {
|
||||
xfs_efd_from_efi(efdp);
|
||||
return error;
|
||||
}
|
||||
|
||||
done:
|
||||
xfs_efd_add_extent(efdp, xefi);
|
||||
xfs_extent_free_cancel_item(item);
|
||||
return error;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user