cryptsetup 中 dm_task_create 的实现在哪里?
Where is the implementation of dm_task_create in cryptsetup?
cryptsetup 中函数 dm_task_create
的实现在哪里(以及其他 dm_task_ 相关函数)?在 cryptsetup 的源代码中寻找这个函数,我一无所获。我看到它在 lib/libdevmapper.c 中使用,并且它在 libdevmapper.h 中有一个函数原型。但是实施在哪里?作为旁注,cryptsetup 可以很好地编译并执行。
为了检查,我也 grep 了内核源代码,但它似乎也没有在内核中实现。
从下面link http://www.saout.de/pipermail/dm-crypt/2009-December/000464.html看来至少在过去是在libdevmapper.c中实现的。
它在 libdm-common.c
中实现,它是 libdm
(lib 设备映射器)的一部分。它没有作为 cryptsetup
本身的一部分实现。
此代码与 LVM2 一起维护,如 this page:
中所述
The userspace code (dmsetup and libdevmapper) is now maintained
alongside the LVM2 source available from
http://sources.redhat.com/lvm2/. To build / install it without LVM2
use 'make device-mapper' / 'make device-mapper_install'.
实现如下:
struct dm_task *dm_task_create(int type)
{
struct dm_task *dmt = dm_zalloc(sizeof(*dmt));
if (!dmt) {
log_error("dm_task_create: malloc(%" PRIsize_t ") failed",
sizeof(*dmt));
return NULL;
}
if (!dm_check_version()) {
dm_free(dmt);
return_NULL;
}
dmt->type = type;
dmt->minor = -1;
dmt->major = -1;
dmt->allow_default_major_fallback = 1;
dmt->uid = DM_DEVICE_UID;
dmt->gid = DM_DEVICE_GID;
dmt->mode = DM_DEVICE_MODE;
dmt->no_open_count = 0;
dmt->read_ahead = DM_READ_AHEAD_AUTO;
dmt->read_ahead_flags = 0;
dmt->event_nr = 0;
dmt->cookie_set = 0;
dmt->query_inactive_table = 0;
dmt->new_uuid = 0;
dmt->secure_data = 0;
return dmt;
}
cryptsetup 中函数 dm_task_create
的实现在哪里(以及其他 dm_task_ 相关函数)?在 cryptsetup 的源代码中寻找这个函数,我一无所获。我看到它在 lib/libdevmapper.c 中使用,并且它在 libdevmapper.h 中有一个函数原型。但是实施在哪里?作为旁注,cryptsetup 可以很好地编译并执行。
为了检查,我也 grep 了内核源代码,但它似乎也没有在内核中实现。
从下面link http://www.saout.de/pipermail/dm-crypt/2009-December/000464.html看来至少在过去是在libdevmapper.c中实现的。
它在 libdm-common.c
中实现,它是 libdm
(lib 设备映射器)的一部分。它没有作为 cryptsetup
本身的一部分实现。
此代码与 LVM2 一起维护,如 this page:
中所述The userspace code (dmsetup and libdevmapper) is now maintained alongside the LVM2 source available from http://sources.redhat.com/lvm2/. To build / install it without LVM2 use 'make device-mapper' / 'make device-mapper_install'.
实现如下:
struct dm_task *dm_task_create(int type)
{
struct dm_task *dmt = dm_zalloc(sizeof(*dmt));
if (!dmt) {
log_error("dm_task_create: malloc(%" PRIsize_t ") failed",
sizeof(*dmt));
return NULL;
}
if (!dm_check_version()) {
dm_free(dmt);
return_NULL;
}
dmt->type = type;
dmt->minor = -1;
dmt->major = -1;
dmt->allow_default_major_fallback = 1;
dmt->uid = DM_DEVICE_UID;
dmt->gid = DM_DEVICE_GID;
dmt->mode = DM_DEVICE_MODE;
dmt->no_open_count = 0;
dmt->read_ahead = DM_READ_AHEAD_AUTO;
dmt->read_ahead_flags = 0;
dmt->event_nr = 0;
dmt->cookie_set = 0;
dmt->query_inactive_table = 0;
dmt->new_uuid = 0;
dmt->secure_data = 0;
return dmt;
}