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;
}