コード例 #1
0
static int
lst_nodes_add_ioctl(struct lstio_group_nodes_args *args)
{
	unsigned feats;
        int     rc;
        char   *name;

        if (args->lstio_grp_key != console_session.ses_key)
                return -EACCES;

        if (args->lstio_grp_idsp == NULL || /* array of ids */
            args->lstio_grp_count <= 0 ||
            args->lstio_grp_resultp == NULL ||
	    args->lstio_grp_featp == NULL ||
	    args->lstio_grp_namep == NULL ||
	    args->lstio_grp_nmlen <= 0 ||
            args->lstio_grp_nmlen > LST_NAME_SIZE)
                return -EINVAL;

        LIBCFS_ALLOC(name, args->lstio_grp_nmlen + 1);
        if (name == NULL)
                return -ENOMEM;

	if (copy_from_user(name, args->lstio_grp_namep,
                               args->lstio_grp_nmlen)) {
                LIBCFS_FREE(name, args->lstio_grp_nmlen + 1);

                return -EFAULT;
        }

        name[args->lstio_grp_nmlen] = 0;

        rc = lstcon_nodes_add(name, args->lstio_grp_count,
			      args->lstio_grp_idsp, &feats,
			      args->lstio_grp_resultp);

	LIBCFS_FREE(name, args->lstio_grp_nmlen + 1);
	if (rc == 0 &&
	    copy_to_user(args->lstio_grp_featp, &feats, sizeof(feats))) {
		return -EINVAL;
	}

        return rc;
}
コード例 #2
0
ファイル: conctl.c プロジェクト: DCteam/lustre
int
lst_nodes_add_ioctl(lstio_group_nodes_args_t *args)
{
        int     rc;
        char   *name;

        if (args->lstio_grp_key != console_session.ses_key)
                return -EACCES;

        if (args->lstio_grp_idsp == NULL || /* array of ids */
            args->lstio_grp_count <= 0 ||
            args->lstio_grp_resultp == NULL ||
            args->lstio_grp_namep == NULL ||
            args->lstio_grp_nmlen <= 0 || 
            args->lstio_grp_nmlen > LST_NAME_SIZE)
                return -EINVAL;

        LIBCFS_ALLOC(name, args->lstio_grp_nmlen + 1);
        if (name == NULL)
                return -ENOMEM;

        if (cfs_copy_from_user(name, args->lstio_grp_namep,
                               args->lstio_grp_nmlen)) {
                LIBCFS_FREE(name, args->lstio_grp_nmlen + 1);

                return -EFAULT;
        }

        name[args->lstio_grp_nmlen] = 0;

        rc = lstcon_nodes_add(name, args->lstio_grp_count,
                              args->lstio_grp_idsp,
                              args->lstio_grp_resultp);

        LIBCFS_FREE(name, args->lstio_grp_nmlen + 1);

        return rc;
}