summaryrefslogtreecommitdiff
path: root/src/shared/loop-util.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2023-03-06 12:07:18 +0100
committerLennart Poettering <lennart@poettering.net>2023-03-09 16:40:55 +0100
commitd2430d50970deda19ac851669e685a1cc72a8200 (patch)
treeb2ff9c16e4daca9b04ec8780c69dc1b9b5c1be3c /src/shared/loop-util.c
parent4d2a9e3ea6f1dbfb702abfd5312b1c8c719f4ecf (diff)
downloadsystemd-d2430d50970deda19ac851669e685a1cc72a8200.tar.gz
loop-util: add call for setting the autoclear flag at arbitrary times
Diffstat (limited to 'src/shared/loop-util.c')
-rw-r--r--src/shared/loop-util.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/shared/loop-util.c b/src/shared/loop-util.c
index 96a42b4125..27a58952bb 100644
--- a/src/shared/loop-util.c
+++ b/src/shared/loop-util.c
@@ -1111,3 +1111,22 @@ int loop_device_sync(LoopDevice *d) {
return RET_NERRNO(fsync(d->fd));
}
+
+int loop_device_set_autoclear(LoopDevice *d, bool autoclear) {
+ struct loop_info64 info;
+
+ assert(d);
+
+ if (ioctl(d->fd, LOOP_GET_STATUS64, &info) < 0)
+ return -errno;
+
+ if (autoclear == FLAGS_SET(info.lo_flags, LO_FLAGS_AUTOCLEAR))
+ return 0;
+
+ SET_FLAG(info.lo_flags, LO_FLAGS_AUTOCLEAR, autoclear);
+
+ if (ioctl(d->fd, LOOP_SET_STATUS64, &info) < 0)
+ return -errno;
+
+ return 1;
+}