loop-util: introduce reference counter for LoopDevice
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user