@@ -842,7 +842,7 @@ libxfs_mount(
if (error) {
fprintf(stderr, _("%s: data size check failed\n"), progname);
if (!xfs_is_debugger(mp))
- return NULL;
+ goto out_da;
} else
libxfs_buf_relse(bp);
@@ -856,7 +856,7 @@ libxfs_mount(
fprintf(stderr, _("%s: log size checks failed\n"),
progname);
if (!xfs_is_debugger(mp))
- return NULL;
+ goto out_da;
}
if (bp)
libxfs_buf_relse(bp);
@@ -865,8 +865,8 @@ libxfs_mount(
/* Initialize realtime fields in the mount structure */
if (rtmount_init(mp)) {
fprintf(stderr, _("%s: realtime device init failed\n"),
- progname);
- return NULL;
+ progname);
+ goto out_da;
}
/*
@@ -884,7 +884,7 @@ libxfs_mount(
fprintf(stderr, _("%s: read of AG %u failed\n"),
progname, sbp->sb_agcount);
if (!xfs_is_debugger(mp))
- return NULL;
+ goto out_da;
fprintf(stderr, _("%s: limiting reads to AG 0\n"),
progname);
sbp->sb_agcount = 1;
@@ -902,6 +902,9 @@ libxfs_mount(
xfs_set_perag_data_loaded(mp);
return mp;
+out_da:
+ xfs_da_unmount(mp);
+ return NULL;
}
void
@@ -1024,9 +1027,7 @@ libxfs_umount(
if (xfs_is_perag_data_loaded(mp))
libxfs_free_perag(mp);
- kmem_free(mp->m_attr_geo);
- kmem_free(mp->m_dir_geo);
-
+ xfs_da_unmount(mp);
kmem_free(mp->m_rtdev_targp);
if (mp->m_logdev_targp != mp->m_ddev_targp)
kmem_free(mp->m_logdev_targp);