diff options
author | Lennart Poettering <lennart@poettering.net> | 2023-03-06 12:07:18 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2023-03-09 16:40:55 +0100 |
commit | d2430d50970deda19ac851669e685a1cc72a8200 (patch) | |
tree | b2ff9c16e4daca9b04ec8780c69dc1b9b5c1be3c /src/shared/loop-util.c | |
parent | 4d2a9e3ea6f1dbfb702abfd5312b1c8c719f4ecf (diff) | |
download | systemd-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.c | 19 |
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; +} |