diff options
author | Colin Walters <walters@verbum.org> | 2022-08-03 10:43:43 -0400 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2022-08-03 10:44:51 -0400 |
commit | 0a908a180fcce98c2565b9fb34470e5953918260 (patch) | |
tree | efe68289dae5cd993c8a1fe095c995ca771758ce | |
parent | edba4b33be10c05253bfa94895dfbc8477e44d76 (diff) | |
download | ostree-0a908a180fcce98c2565b9fb34470e5953918260.tar.gz |
Move FIFREEZE/FITHAW ioctl invocations into linuxfsutil.c
Should help avoid conflicts between glibc and linux headers.
Closes: https://github.com/ostreedev/ostree/issues/2685
-rw-r--r-- | src/libostree/ostree-linuxfsutil.c | 24 | ||||
-rw-r--r-- | src/libostree/ostree-linuxfsutil.h | 3 | ||||
-rw-r--r-- | src/libostree/ostree-sysroot-deploy.c | 7 |
3 files changed, 28 insertions, 6 deletions
diff --git a/src/libostree/ostree-linuxfsutil.c b/src/libostree/ostree-linuxfsutil.c index 97f93604..aa389aaa 100644 --- a/src/libostree/ostree-linuxfsutil.c +++ b/src/libostree/ostree-linuxfsutil.c @@ -24,10 +24,12 @@ #include <fcntl.h> #include <sys/ioctl.h> +// This should be the only file including linux/fs.h; see +// https://sourceware.org/glibc/wiki/Release/2.36#Usage_of_.3Clinux.2Fmount.h.3E_and_.3Csys.2Fmount.h.3E +// https://github.com/ostreedev/ostree/issues/2685 +#include <linux/fs.h> #include <ext2fs/ext2_fs.h> -#include "otutil.h" - /** * _ostree_linuxfs_fd_alter_immutable_flag: * @fd: A file descriptor @@ -88,3 +90,21 @@ _ostree_linuxfs_fd_alter_immutable_flag (int fd, return TRUE; } + +/* Wrapper for FIFREEZE ioctl. + * This is split into a separate wrapped API for + * reasons around conflicts between glibc and linux/fs.h + * includes; see above. + */ +int +_ostree_linuxfs_filesystem_freeze (int fd) +{ + return TEMP_FAILURE_RETRY (ioctl (fd, FIFREEZE, 0)); +} + +/* Wrapper for FITHAW ioctl. See above. */ +int +_ostree_linuxfs_filesystem_thaw (int fd) +{ + return TEMP_FAILURE_RETRY (ioctl (fd, FITHAW, 0)); +} diff --git a/src/libostree/ostree-linuxfsutil.h b/src/libostree/ostree-linuxfsutil.h index 0654b6fc..9011c9d8 100644 --- a/src/libostree/ostree-linuxfsutil.h +++ b/src/libostree/ostree-linuxfsutil.h @@ -29,4 +29,7 @@ _ostree_linuxfs_fd_alter_immutable_flag (int fd, GCancellable *cancellable, GError **error); +int _ostree_linuxfs_filesystem_freeze (int fd); +int _ostree_linuxfs_filesystem_thaw (int fd); + G_END_DECLS diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c index 2dc9f58b..d86de7dc 100644 --- a/src/libostree/ostree-sysroot-deploy.c +++ b/src/libostree/ostree-sysroot-deploy.c @@ -29,7 +29,6 @@ #include <sys/ioctl.h> #include <stdbool.h> #include <sys/poll.h> -#include <linux/fs.h> #include <err.h> #ifdef HAVE_LIBMOUNT @@ -1476,7 +1475,7 @@ fsfreeze_thaw_cycle (OstreeSysroot *self, * EOPNOTSUPP: If the filesystem doesn't support it */ int saved_errno = errno; - (void) TEMP_FAILURE_RETRY (ioctl (rootfs_dfd, FITHAW, 0)); + _ostree_linuxfs_filesystem_thaw (rootfs_dfd); errno = saved_errno; /* But if we got an error from poll, let's log it */ if (r < 0) @@ -1517,7 +1516,7 @@ fsfreeze_thaw_cycle (OstreeSysroot *self, return glnx_throw (error, "aborting due to test-fifreeze"); } /* Do a freeze/thaw cycle; TODO add a FIFREEZETHAW ioctl */ - if (ioctl (rootfs_dfd, FIFREEZE, 0) != 0) + if (_ostree_linuxfs_filesystem_freeze (rootfs_dfd) != 0) { /* Not supported, we're running in the unit tests (as non-root), or * the filesystem is already frozen (EBUSY). @@ -1539,7 +1538,7 @@ fsfreeze_thaw_cycle (OstreeSysroot *self, return glnx_throw_errno_prefix (error, "ioctl(FIFREEZE)"); } /* And finally thaw, then signal our completion to the watchdog */ - if (TEMP_FAILURE_RETRY (ioctl (rootfs_dfd, FITHAW, 0)) != 0) + if (_ostree_linuxfs_filesystem_thaw (rootfs_dfd) != 0) { /* Warn but don't error if the filesystem was already thawed */ if (errno == EINVAL) |