loop-util: introduce reference counter for LoopDevice

This commit is contained in:
Yu Watanabe
2022-09-18 07:56:32 +09:00
parent ac1e1b5fd7
commit 36d5eb0bff
2 changed files with 7 additions and 1 deletions
+5 -1
View File
@@ -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,
+2
View File
@@ -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);