diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-09-11 15:41:03 +0200 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-09-18 00:56:32 +0200 |
commit | 36d5eb0bffc3cc7b8e4be1e41ee3cbd4ddd8c870 (patch) | |
tree | 7fb09d94831cf34c776ed57e8e200f114620c3d0 /src/shared | |
parent | dissect-image: take reference of DecryptedImage into DissectedImage (diff) | |
download | systemd-36d5eb0bffc3cc7b8e4be1e41ee3cbd4ddd8c870.tar.xz systemd-36d5eb0bffc3cc7b8e4be1e41ee3cbd4ddd8c870.zip |
loop-util: introduce reference counter for LoopDevice
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/loop-util.c | 6 | ||||
-rw-r--r-- | src/shared/loop-util.h | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/shared/loop-util.c b/src/shared/loop-util.c index 49f4b2bf6e..54251f0fb7 100644 --- a/src/shared/loop-util.c +++ b/src/shared/loop-util.c @@ -369,6 +369,7 @@ static int loop_configure( return -ENOMEM; *d = (LoopDevice) { + .n_ref = 1, .fd = TAKE_FD(loop_with_fd), .lock_fd = TAKE_FD(lock_fd), .node = TAKE_PTR(node), @@ -624,7 +625,7 @@ int loop_device_make_by_path( return loop_device_make_internal(path, fd, open_flags, 0, 0, loop_flags, lock_op, ret); } -LoopDevice* loop_device_unref(LoopDevice *d) { +static LoopDevice* loop_device_free(LoopDevice *d) { _cleanup_close_ int control = -1; int r; @@ -696,6 +697,8 @@ LoopDevice* loop_device_unref(LoopDevice *d) { return mfree(d); } +DEFINE_TRIVIAL_REF_UNREF_FUNC(LoopDevice, loop_device, loop_device_free); + void loop_device_relinquish(LoopDevice *d) { assert(d); @@ -796,6 +799,7 @@ int loop_device_open_full( return -ENOMEM; *d = (LoopDevice) { + .n_ref = 1, .fd = TAKE_FD(fd), .lock_fd = TAKE_FD(lock_fd), .nr = nr, diff --git a/src/shared/loop-util.h b/src/shared/loop-util.h index cb0183ba07..756041adaa 100644 --- a/src/shared/loop-util.h +++ b/src/shared/loop-util.h @@ -11,6 +11,7 @@ typedef struct LoopDevice LoopDevice; /* Some helpers for setting up loopback block devices */ struct LoopDevice { + unsigned n_ref; int fd; int lock_fd; int nr; /* The loopback device index (i.e. 4 for /dev/loop4); if this object encapsulates a non-loopback block device, set to -1 */ @@ -34,6 +35,7 @@ static inline int loop_device_open(const char *loop_path, int open_flags, int lo return loop_device_open_full(loop_path, -1, open_flags, lock_op, ret); } +LoopDevice* loop_device_ref(LoopDevice *d); LoopDevice* loop_device_unref(LoopDevice *d); DEFINE_TRIVIAL_CLEANUP_FUNC(LoopDevice*, loop_device_unref); |