From aa5481a87d69909c2fbb1eac64dbda613e026b20 Mon Sep 17 00:00:00 2001 From: Thomas Schoebel-Theuer Date: Mon, 30 Jan 2017 08:55:08 +0100 Subject: [PATCH] main: fetch only metadata of interesting resources --- kernel/sy_old/mars_main.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/kernel/sy_old/mars_main.c b/kernel/sy_old/mars_main.c index 4a83102f..2081f707 100644 --- a/kernel/sy_old/mars_main.c +++ b/kernel/sy_old/mars_main.c @@ -1679,7 +1679,6 @@ struct list_head peer_anchor = LIST_HEAD_INIT(peer_anchor); struct mars_peerinfo { struct mars_global *global; char *peer; - char *path; struct mars_socket socket; struct task_struct *peer_thread; spinlock_t lock; @@ -2208,7 +2207,6 @@ int peer_thread(void *data) LIST_HEAD(old_list); unsigned long flags; struct mars_cmd cmd = { - .cmd_str1 = peer->path, .cmd_int1 = peer->maxdepth, }; @@ -2287,6 +2285,14 @@ int peer_thread(void *data) if (likely(status >= 0)) { cmd.cmd_code = CMD_GETENTS; + if ((!peer->do_additional || peer->do_communicate) && + mars_resource_list) { + down_read(&mars_resource_sem); + cmd.cmd_str1 = brick_strdup(mars_resource_list); + up_read(&mars_resource_sem); + } else { + cmd.cmd_str1 = brick_strdup("/mars"); + } status = mars_send_struct(&peer->socket, &cmd, mars_cmd_meta, false); } if (unlikely(status < 0)) { @@ -2295,8 +2301,7 @@ int peer_thread(void *data) do_kill = false; _peer_cleanup(peer); } - brick_msleep(1000); - continue; + goto free_and_restart; } MARS_DBG("fetching remote dentry list\n"); @@ -2308,9 +2313,6 @@ int peer_thread(void *data) _peer_cleanup(peer); } goto free_and_restart; - mars_free_dent_all(NULL, &tmp_global.dent_anchor); - brick_msleep(2000); - continue; } if (likely(!list_empty(&tmp_global.dent_anchor))) { @@ -2354,6 +2356,7 @@ int peer_thread(void *data) mars_free_dent_all(NULL, &old_list); } + brick_string_free(cmd.cmd_str1); brick_msleep(100); if (!peer->to_terminate && !brick_thread_should_stop()) { if (peer->do_additional && !peer->do_communicate) { @@ -2373,6 +2376,7 @@ int peer_thread(void *data) continue; free_and_restart: + brick_string_free(cmd.cmd_str1); mars_free_dent_all(NULL, &tmp_global.dent_anchor); /* additional threads should give up immediately */ if (peer->do_additional && !peer->do_communicate) @@ -2537,7 +2541,6 @@ static int _kill_peer(struct mars_global *global, struct mars_peerinfo *peer) mars_running_additional_peers--; } brick_string_free(peer->peer); - brick_string_free(peer->path); return 0; } @@ -2549,7 +2552,8 @@ void peer_destruct(void *_peer) _kill_peer(peer->global, peer); } -static int _make_peer(struct mars_global *global, struct mars_dent *dent, char *path) +static +int _make_peer(struct mars_global *global, struct mars_dent *dent) { static int serial = 0; struct mars_peerinfo *peer; @@ -2582,7 +2586,6 @@ static int _make_peer(struct mars_global *global, struct mars_dent *dent, char * peer = dent->d_private; peer->global = global; peer->peer = brick_strdup(mypeer); - peer->path = brick_strdup(path); peer->maxdepth = 2; spin_lock_init(&peer->lock); INIT_LIST_HEAD(&peer->peer_head); @@ -2652,7 +2655,7 @@ static int make_scan(void *buf, struct mars_dent *dent) if (!strcmp(dent->d_rest, my_id())) { return 0; } - return _make_peer(buf, dent, "/mars"); + return _make_peer(buf, dent); }