Commit 845f3ee9 authored by Pavel Emelyanov's avatar Pavel Emelyanov

fd: Indirect fd opening states engine

Put the states into in one place.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 1ea03bf8
...@@ -469,37 +469,23 @@ static int receive_fd(int pid, struct fdinfo_list_entry *fle) ...@@ -469,37 +469,23 @@ static int receive_fd(int pid, struct fdinfo_list_entry *fle)
return 0; return 0;
} }
static char *fdinfo_states[FD_STATE_MAX] = { struct fd_open_state {
[FD_STATE_PREP] = "prepare", char *name;
[FD_STATE_CREATE] = "create", int (*cb)(int, struct fdinfo_list_entry *);
[FD_STATE_POST_CREATE] = "post_create", };
[FD_STATE_RECV] = "receive",
static struct fd_open_state states[] = {
{ "prepare", open_transport_fd, },
{ "create", open_fd, },
{ "receive", receive_fd, },
{ "post_create", post_open_fd, },
}; };
static int open_fdinfo(int pid, struct fdinfo_list_entry *fle, int state) static int open_fdinfo(int pid, struct fdinfo_list_entry *fle, int state)
{ {
int ret = 0;
BUG_ON(state >= FD_STATE_MAX);
pr_info("\tRestoring fd %d (state -> %s)\n", pr_info("\tRestoring fd %d (state -> %s)\n",
fle->fe->fd, fdinfo_states[state]); fle->fe->fd, states[state].name);
return states[state].cb(pid, fle);
switch (state) {
case FD_STATE_PREP:
ret = open_transport_fd(pid, fle);
break;
case FD_STATE_CREATE:
ret = open_fd(pid, fle);
break;
case FD_STATE_RECV:
ret = receive_fd(pid, fle);
break;
case FD_STATE_POST_CREATE:
ret = post_open_fd(pid, fle);
break;
}
return ret;
} }
static int open_fdinfos(int pid, struct list_head *list, int state) static int open_fdinfos(int pid, struct list_head *list, int state)
...@@ -544,7 +530,7 @@ int prepare_fds(struct pstree_item *me) ...@@ -544,7 +530,7 @@ int prepare_fds(struct pstree_item *me)
pr_info("Opening fdinfo-s\n"); pr_info("Opening fdinfo-s\n");
for (state = 0; state < FD_STATE_MAX; state++) { for (state = 0; state < ARRAY_SIZE(states); state++) {
ret = open_fdinfos(me->pid.virt, &me->rst->fds, state); ret = open_fdinfos(me->pid.virt, &me->rst->fds, state);
if (ret) if (ret)
break; break;
......
...@@ -32,15 +32,6 @@ struct fd_parms { ...@@ -32,15 +32,6 @@ struct fd_parms {
.fown = FOWN_ENTRY__INIT, \ .fown = FOWN_ENTRY__INIT, \
} }
enum fdinfo_states {
FD_STATE_PREP, /* Create unix sockets */
FD_STATE_CREATE, /* Create and send fd */
FD_STATE_RECV, /* Receive fd */
FD_STATE_POST_CREATE, /* Execute actions, when everyone was created */
FD_STATE_MAX
};
struct file_desc; struct file_desc;
struct fdinfo_list_entry { struct fdinfo_list_entry {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment