The reason I want to fix it in the freeing function is that many otherI agree with you. However, cleanup functions should(/must?) check for NULL etc and
functions in the kernel that free resources are safe to call with NULL
pointers and this would make xfs_free_buftarg() follow that
convention. This would perhaps also allow for some cleanups in other
places that call the function since then there's no longer a need for
explicit NULL checks any more (haven't checked if there's anything to
gain there though).
I don't think the function call overhead matters much since this is in
a case of a failed mount, so it should happen very rarely.
void
xfs_unmountfs_close(xfs_mount_t *mp, struct cred *cr)
{
if (mp->m_logdev_targp && (mp->m_logdev_targp != mp->m_ddev_targp))
xfs_free_buftarg(mp->m_logdev_targp, 1);
if (mp->m_rtdev_targp)
xfs_free_buftarg(mp->m_rtdev_targp, 1);
xfs_free_buftarg(mp->m_ddev_targp, 0);
}