예제 #1
0
void mp_list_bins_files_1_svc_nb(void * pt_req,
                                 rozorpc_srv_ctx_t *rozorpc_srv_ctx_p, 
				 void * pt_resp, 
				 uint32_t cnx_id) {

    mp_list_bins_files_ret_t * ret = (mp_list_bins_files_ret_t *) pt_resp;
    mp_list_bins_files_arg_t * args = (mp_list_bins_files_arg_t*)  pt_req;

    storage_t *st = 0;

    ret->status = MP_FAILURE;

    START_PROFILING(list_bins_files);

    DEBUG_FUNCTION;

    if ((st = get_storage(args->cid, args->sid, cnx_id)) == 0) {
        ret->mp_list_bins_files_ret_t_u.error = errno;
        goto out;
    }

    // It's necessary
    memset(ret, 0, sizeof(mp_list_bins_files_ret_t));

    if (storage_list_bins_files_to_rebuild(st, args->rebuild_sid,
            &args->device,
            &args->spare,
	    &args->slice,
            &args->cookie,
            (bins_file_rebuild_t **)
            & ret->mp_list_bins_files_ret_t_u.reply.children,
            (uint8_t *) & ret->mp_list_bins_files_ret_t_u.reply.eof) != 0) {
      ret->mp_list_bins_files_ret_t_u.error = errno;
      goto out;
    }

    ret->mp_list_bins_files_ret_t_u.reply.cookie = args->cookie;
    ret->mp_list_bins_files_ret_t_u.reply.spare = args->spare;    
    ret->mp_list_bins_files_ret_t_u.reply.device = args->device;
    ret->mp_list_bins_files_ret_t_u.reply.slice = args->slice;

    ret->status = MP_SUCCESS;

out:
    STOP_PROFILING(list_bins_files);
}
예제 #2
0
mp_list_bins_files_ret_t *mp_list_bins_files_1_svc(
        mp_list_bins_files_arg_t * args,
        struct svc_req * req) {

    static mp_list_bins_files_ret_t ret;
    storage_t *st = 0;

    DEBUG_FUNCTION;

    xdr_free((xdrproc_t) xdr_mp_list_bins_files_ret_t, (char *) &ret);

    if ((st = storaged_lookup(args->cid, args->sid)) == 0) {
        ret.mp_list_bins_files_ret_t_u.error = errno;
        goto out;
    }

    if (storage_list_bins_files_to_rebuild(st, args->rebuild_sid,
            &args->layout,
            (sid_t *) & args->dist_set,
            &args->spare,
            &args->cookie,
            (bins_file_rebuild_t **)
            & ret.mp_list_bins_files_ret_t_u.reply.children,
            (uint8_t *) & ret.mp_list_bins_files_ret_t_u.reply.eof) != 0) {
        goto error;
    }

    ret.mp_list_bins_files_ret_t_u.reply.cookie = args->cookie;
    memcpy(&ret.mp_list_bins_files_ret_t_u.reply.dist_set, &args->dist_set,
            sizeof (sid_t) * ROZOFS_SAFE_MAX);
    ret.mp_list_bins_files_ret_t_u.reply.layout = args->layout;
    ret.mp_list_bins_files_ret_t_u.reply.spare = args->spare;

    ret.status = MP_SUCCESS;
    goto out;
error:
    ret.status = MP_FAILURE;
    ret.mp_list_bins_files_ret_t_u.error = errno;
out:
    return &ret;
}