示例#1
0
/**
 * Initialize permanently existing procfs files.
 */
static int init_permanent_files(void)
{
    struct procfs_file ** file;

    procfs_read_funcs = kcalloc(SET_COUNT(procfs_files),
            sizeof(procfs_readfn_t *));
    procfs_write_funcs = kcalloc(SET_COUNT(procfs_files),
            sizeof(procfs_writefn_t *));
    procfs_rele_funcs = kcalloc(SET_COUNT(procfs_files),
            sizeof(procfs_relefn_t *));

    if (!(procfs_read_funcs && procfs_write_funcs && procfs_rele_funcs))
        return -ENOMEM;

    SET_FOREACH(file, procfs_files) {
        enum procfs_filetype filetype = (*file)->filetype;

        procfs_read_funcs[filetype] = (*file)->readfn;
        procfs_write_funcs[filetype] = (*file)->writefn;
        procfs_rele_funcs[filetype] = (*file)->relefn;

        if (filetype > PROCFS_KERNEL_SEPARATOR) {
            const char * filename = (*file)->filename;

            create_proc_file(vn_procfs, 0, filename, filetype);
        }
    }

    return 0;
}
示例#2
0
int procfs_mkentry(const struct proc_info * proc)
{
    char name[PROCFS_NAMELEN_MAX];
    vnode_t * pdir = NULL;
    struct procfs_file ** file;
    int err;

    if (!vn_procfs)
        return 0; /* Not yet initialized. */

    uitoa32(name, proc->pid);

    KERROR_DBG("%s(pid = %s)\n", __func__, name);

    err = vn_procfs->vnode_ops->mkdir(vn_procfs, name, PROCFS_PERMS);
    if (err == -EEXIST) {
        return 0;
    } else if (err) {
        goto fail;
    }

    err = vn_procfs->vnode_ops->lookup(vn_procfs, name, &pdir);
    if (err) {
        pdir = NULL;
        goto fail;
    }

    SET_FOREACH(file, procfs_files) {
        const enum procfs_filetype filetype = (*file)->filetype;

        if (filetype < PROCFS_KERNEL_SEPARATOR) {
            const char * filename = (*file)->filename;

            err = create_proc_file(pdir, proc->pid, filename, filetype);
            if (err)
                goto fail;
        }
    }

fail:
    if (pdir)
        vrele(pdir);
    if (err)
        KERROR_DBG("Failed to create a procfs entry\n");
    return err;
}
示例#3
0
void create_proc_registry(void) {
	create_proc_file();
}