cryptsetup中dm_task_create的实现在哪里?

时间:2015-04-25 17:32:32

标签: c linux encryption

cryptsetup(和其他dm_task_相关函数)中函数dm_task_create的实现在哪里?在cryptsetup的源代码中为这个函数打算我什么也没想到。我看到它在lib / libdevmapper.c中使用,并且它在libdevmapper.h中有一个函数原型。但是实施在哪里?作为旁注,cryptsetup编译好并执行。

只是为了检查,我也浏览了内核源代码,但它似乎也没有在内核中实现。

从以下链接http://www.saout.de/pipermail/dm-crypt/2009-December/000464.html看来,至少在过去它是在libdevmapper.c中实现的。

1 个答案:

答案 0 :(得分:2)

它在libdm-common.c中实现,它是libdm(lib device-mapper)的一部分。它不是作为cryptsetup本身的一部分实现的。

此代码与LVM2一起维护,如this page所述:

  

现在维护用户空间代码(dmsetup和libdevmapper)   与LVM2源一起提供   http://sources.redhat.com/lvm2/。在没有LVM2的情况下构建/安装它   使用' 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;
}