void exit_mars_proc(void) { MARS_INF("exit_proc()\n"); if (header) { unregister_sysctl_table(header); header = NULL; } }
int __init init_mars_proc(void) { MARS_INF("init_proc()\n"); header = register_sysctl_table(mars_root_table); return 0; }
int __init init_mars(void) { MARS_INF("init_mars()\n"); set_fake(); #ifdef MARS_TRACING { int flags = O_CREAT | O_TRUNC | O_RDWR | O_LARGEFILE; int prot = 0600; mm_segment_t oldfs; oldfs = get_fs(); set_fs(get_ds()); mars_log_file = filp_open("/mars/trace.csv", flags, prot); set_fs(oldfs); if (IS_ERR(mars_log_file)) { MARS_ERR("cannot create trace logfile, status = %ld\n", PTR_ERR(mars_log_file)); mars_log_file = NULL; } } #endif mars_tfm = crypto_alloc_hash("md5", 0, CRYPTO_ALG_ASYNC); if (!mars_tfm) { MARS_ERR("cannot alloc crypto hash\n"); return -ENOMEM; } if (IS_ERR(mars_tfm)) { MARS_ERR("alloc crypto hash failed, status = %d\n", (int)PTR_ERR(mars_tfm)); return PTR_ERR(mars_tfm); } #if 0 if (crypto_tfm_alg_type(crypto_hash_tfm(mars_tfm)) != CRYPTO_ALG_TYPE_DIGEST) { MARS_ERR("bad crypto hash type\n"); return -EINVAL; } #endif mars_digest_size = crypto_hash_digestsize(mars_tfm); MARS_INF("digest_size = %d\n", mars_digest_size); return 0; }
void exit_mars(void) { MARS_INF("exit_mars()\n"); put_fake(); if (mars_tfm) { crypto_free_hash(mars_tfm); } #ifdef MARS_TRACING if (mars_log_file) { filp_close(mars_log_file, NULL); mars_log_file = NULL; } #endif if (id) { brick_string_free(id); id = NULL; } }
void exit_sy_net(void) { MARS_INF("exit_sy_net()\n"); }
int __init init_sy_net(void) { MARS_INF("init_sy_net()\n"); mars_translate_hostname = _mars_translate_hostname; return 0; }
void exit_mars_dummy(void) { MARS_INF("exit_dummy()\n"); dummy_unregister_brick_type(); }
int __init init_mars_dummy(void) { MARS_INF("init_dummy()\n"); return dummy_register_brick_type(); }
void exit_mars_usebuf(void) { MARS_INF("exit_usebuf()\n"); usebuf_unregister_brick_type(); }
int __init init_mars_usebuf(void) { MARS_INF("init_usebuf()\n"); return usebuf_register_brick_type(); }
static int usebuf_ref_get(struct usebuf_output *output, struct mref_object *mref) { struct usebuf_input *input = output->brick->inputs[0]; struct usebuf_mref_aspect *mref_a; struct usebuf_mref_aspect *sub_mref_a; struct mref_object *sub_mref; int status = 0; might_sleep(); mref_a = usebuf_mref_get_aspect(output->brick, mref); if (unlikely(!mref_a)) { MARS_FAT("cannot get aspect\n"); return -EILSEQ; } sub_mref_a = mref_a->sub_mref_a; if (!sub_mref_a) { sub_mref = usebuf_alloc_mref(output->brick); if (unlikely(!sub_mref)) { MARS_FAT("cannot get sub_mref\n"); return -ENOMEM; } sub_mref_a = usebuf_mref_get_aspect(output->brick, sub_mref); if (unlikely(!sub_mref_a)) { MARS_FAT("cannot get aspect\n"); return -EILSEQ; } mref_a->sub_mref_a = sub_mref_a; sub_mref->ref_pos = mref->ref_pos; sub_mref->ref_len = mref->ref_len; sub_mref->ref_may_write = mref->ref_may_write; #ifdef DIRECT_IO // shortcut solely for testing: do direct IO if (!mref->ref_data) MARS_ERR("NULL.......\n"); sub_mref->ref_data = mref->ref_data; #else // normal case: buffered IO sub_mref->ref_data = NULL; #endif SETUP_CALLBACK(sub_mref, _usebuf_endio, mref_a); mref->ref_flags = 0; } else { sub_mref = sub_mref_a->object; #if 1 MARS_ERR("please do not use this broken feature\n"); #endif } status = GENERIC_INPUT_CALL(input, mref_get, sub_mref); if (status < 0) { return status; } mref->ref_len = sub_mref->ref_len; //MARS_INF("GOT %p %p flags = %d\n", mref, sub_mref, sub_mref->ref_flags); if (!mref->ref_data) { MARS_INF("uiiiiiiiiiii\n"); mref->ref_data = sub_mref->ref_data; } _mref_get(mref); return status; }
void __exit exit_mars_client(void) { MARS_INF("exit_client()\n"); client_unregister_brick_type(); }
int __init init_mars_client(void) { MARS_INF("init_client()\n"); _client_brick_type = (void*)&client_brick_type; return client_register_brick_type(); }
static int _connect(struct client_output *output, const char *str) { struct sockaddr_storage sockaddr = {}; int status; if (unlikely(!output->path)) { output->path = brick_strdup(str); status = -ENOMEM; if (!output->path) { MARS_DBG("no mem\n"); goto done; } status = -EINVAL; output->host = strchr(output->path, '@'); if (!output->host) { brick_string_free(output->path); output->path = NULL; MARS_ERR("parameter string '%s' contains no remote specifier with '@'-syntax\n", str); goto done; } *output->host++ = '\0'; } if (unlikely(output->receiver.thread)) { MARS_WRN("receiver thread unexpectedly not dead\n"); _kill_thread(&output->receiver, "receiver"); } status = mars_create_sockaddr(&sockaddr, output->host); if (unlikely(status < 0)) { MARS_DBG("no sockaddr, status = %d\n", status); goto done; } status = mars_create_socket(&output->socket, &sockaddr, false); if (unlikely(status < 0)) { MARS_DBG("no socket, status = %d\n", status); goto really_done; } output->socket.s_shutdown_on_err = true; output->receiver.thread = brick_thread_create(receiver_thread, output, "mars_receiver%d", thread_count++); if (unlikely(!output->receiver.thread)) { MARS_ERR("cannot start receiver thread, status = %d\n", status); status = -ENOENT; goto done; } { struct mars_cmd cmd = { .cmd_code = CMD_CONNECT, .cmd_str1 = output->path, }; status = mars_send_struct(&output->socket, &cmd, mars_cmd_meta); if (unlikely(status < 0)) { MARS_DBG("send of connect failed, status = %d\n", status); goto done; } } if (status >= 0) { status = _request_info(output); } done: if (status < 0) { MARS_INF("cannot connect to remote host '%s' (status = %d) -- retrying\n", output->host ? output->host : "NULL", status); _kill_socket(output); } really_done: return status; } ////////////////// own brick / input / output operations ////////////////// static int client_get_info(struct client_output *output, struct mars_info *info) { int status; output->got_info = false; output->get_info = true; wake_up_interruptible(&output->event); wait_event_interruptible_timeout(output->info_event, output->got_info, 60 * HZ); status = -EIO; if (output->got_info && info) { memcpy(info, &output->info, sizeof(*info)); status = 0; } //done: return status; }