[ostree] deploy: Drop a fsync, use fd-relative APIs
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] deploy: Drop a fsync, use fd-relative APIs
- Date: Tue, 21 Apr 2015 01:06:35 +0000 (UTC)
commit e0b73d074283b79c0192731b014a9ecbc291c45b
Author: Colin Walters <walters verbum org>
Date: Mon Apr 20 11:41:54 2015 -0400
deploy: Drop a fsync, use fd-relative APIs
Now that we can rely on `syncfs()`, drop another fsync in the deploy
path. While we're here, convert it to fd-relative.
libglnx | 2 +-
src/libostree/ostree-sysroot-deploy.c | 52 +++++++++++++++-----------------
2 files changed, 25 insertions(+), 29 deletions(-)
---
diff --git a/libglnx b/libglnx
index 371172b..381ca54 160000
--- a/libglnx
+++ b/libglnx
@@ -1 +1 @@
-Subproject commit 371172bcfd869867cf1c2847fcbbb3aa22adddb6
+Subproject commit 381ca54ee3a47de291d26a5db8772732fb4a9d59
diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c
index 62ea6fa..c95187a 100644
--- a/src/libostree/ostree-sysroot-deploy.c
+++ b/src/libostree/ostree-sysroot-deploy.c
@@ -467,45 +467,39 @@ merge_etc_changes (GFile *orig_etc,
static gboolean
checkout_deployment_tree (OstreeSysroot *sysroot,
OstreeRepo *repo,
- OstreeDeployment *deployment,
- GFile **out_deployment_path,
+ OstreeDeployment *deployment,
+ int *out_deployment_dfd,
GCancellable *cancellable,
GError **error)
{
gboolean ret = FALSE;
+ OstreeRepoCheckoutOptions checkout_opts = { 0, };
const char *csum = ostree_deployment_get_csum (deployment);
- gs_unref_object GFile *root = NULL;
- gs_unref_object GFileInfo *file_info = NULL;
gs_free char *checkout_target_name = NULL;
- gs_unref_object GFile *osdeploy_path = NULL;
- gs_unref_object GFile *deploy_target_path = NULL;
- gs_unref_object GFile *deploy_parent = NULL;
+ g_autofree char *osdeploy_path = NULL;
+ gs_unref_object GFile *ret_deploy_target_path = NULL;
+ glnx_fd_close int osdeploy_dfd = -1;
+ int ret_fd;
- if (!ostree_repo_read_commit (repo, csum, &root, NULL, cancellable, error))
+ osdeploy_path = g_strconcat ("ostree/deploy/", ostree_deployment_get_osname (deployment), "/deploy", NULL);
+ checkout_target_name = g_strdup_printf ("%s.%d", csum, ostree_deployment_get_deployserial (deployment));
+
+ if (!glnx_shutil_mkdir_p_at (sysroot->sysroot_fd, osdeploy_path, 0775, cancellable, error))
goto out;
- file_info = g_file_query_info (root, OSTREE_GIO_FAST_QUERYINFO,
- G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
- cancellable, error);
- if (!file_info)
+ if (!glnx_opendirat (sysroot->sysroot_fd, osdeploy_path, TRUE, &osdeploy_dfd, error))
goto out;
- osdeploy_path = ot_gfile_get_child_build_path (sysroot->path, "ostree", "deploy",
- ostree_deployment_get_osname (deployment),
- "deploy", NULL);
- checkout_target_name = g_strdup_printf ("%s.%d", csum, ostree_deployment_get_deployserial (deployment));
- deploy_target_path = g_file_get_child (osdeploy_path, checkout_target_name);
+ if (!ostree_repo_checkout_tree_at (repo, &checkout_opts, osdeploy_dfd,
+ checkout_target_name, csum,
+ cancellable, error))
+ goto out;
- deploy_parent = g_file_get_parent (deploy_target_path);
- if (!ot_util_ensure_directory_and_fsync (deploy_parent, cancellable, error))
+ if (!glnx_opendirat (osdeploy_dfd, checkout_target_name, TRUE, &ret_fd, error))
goto out;
- if (!ostree_repo_checkout_tree (repo, 0, 0, deploy_target_path, OSTREE_REPO_FILE (root),
- file_info, cancellable, error))
- goto out;
-
ret = TRUE;
- ot_transfer_out_value (out_deployment_path, &deploy_target_path);
+ *out_deployment_dfd = ret_fd;
out:
return ret;
}
@@ -734,12 +728,14 @@ static gboolean
merge_configuration (OstreeSysroot *sysroot,
OstreeDeployment *previous_deployment,
OstreeDeployment *deployment,
- GFile *deployment_path,
+ int deployment_dfd,
OstreeSePolicy **out_sepolicy,
GCancellable *cancellable,
GError **error)
{
gboolean ret = FALSE;
+ g_autofree char *deployment_abspath = glnx_fdrel_abspath (deployment_dfd, ".");
+ gs_unref_object GFile *deployment_path = g_file_new_for_path (deployment_abspath);
gs_unref_object GFile *source_etc_path = NULL;
gs_unref_object GFile *source_etc_pristine_path = NULL;
gs_unref_object GFile *deployment_usretc_path = NULL;
@@ -1777,7 +1773,7 @@ ostree_sysroot_deploy_tree (OstreeSysroot *self,
gs_unref_object GFile *commit_root = NULL;
gs_unref_object GFile *tree_kernel_path = NULL;
gs_unref_object GFile *tree_initramfs_path = NULL;
- gs_unref_object GFile *new_deployment_path = NULL;
+ glnx_fd_close int deployment_dfd = -1;
gs_unref_object OstreeSePolicy *sepolicy = NULL;
gs_free char *new_bootcsum = NULL;
gs_unref_object OstreeBootconfigParser *bootconfig = NULL;
@@ -1830,7 +1826,7 @@ ostree_sysroot_deploy_tree (OstreeSysroot *self,
ostree_deployment_set_origin (new_deployment, origin);
/* Check out the userspace tree onto the filesystem */
- if (!checkout_deployment_tree (self, repo, new_deployment, &new_deployment_path,
+ if (!checkout_deployment_tree (self, repo, new_deployment, &deployment_dfd,
cancellable, error))
{
g_prefix_error (error, "Checking out tree: ");
@@ -1844,7 +1840,7 @@ ostree_sysroot_deploy_tree (OstreeSysroot *self,
ostree_deployment_set_bootconfig (new_deployment, bootconfig);
if (!merge_configuration (self, merge_deployment, new_deployment,
- new_deployment_path,
+ deployment_dfd,
&sepolicy,
cancellable, error))
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]