Commit 2db18f5e authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Pavel Emelyanov

files: Use fdinfo_entry * in fdinfo_list_entry structure

We will need to use pointer here (to PB object) anyway
so better to make it in a separate patch for bisectability sake.
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 30f1aff6
...@@ -95,7 +95,7 @@ void show_saved_files(void) ...@@ -95,7 +95,7 @@ void show_saved_files(void)
pr_info(" `- type %d ID %#x\n", fd->ops->type, fd->id); pr_info(" `- type %d ID %#x\n", fd->ops->type, fd->id);
list_for_each_entry(le, &fd->fd_info_head, desc_list) list_for_each_entry(le, &fd->fd_info_head, desc_list)
pr_info(" `- FD %d pid %d\n", le->fe.fd, le->pid); pr_info(" `- FD %d pid %d\n", le->fe->fd, le->pid);
} }
} }
...@@ -168,7 +168,7 @@ static int collect_fd(int pid, struct fdinfo_entry *e, struct rst_info *rst_info ...@@ -168,7 +168,7 @@ static int collect_fd(int pid, struct fdinfo_entry *e, struct rst_info *rst_info
le->pid = pid; le->pid = pid;
futex_init(&le->real_pid); futex_init(&le->real_pid);
le->fe = *e; le->fe = e;
fdesc = find_file_desc(e); fdesc = find_file_desc(e);
if (fdesc == NULL) { if (fdesc == NULL) {
...@@ -183,7 +183,7 @@ static int collect_fd(int pid, struct fdinfo_entry *e, struct rst_info *rst_info ...@@ -183,7 +183,7 @@ static int collect_fd(int pid, struct fdinfo_entry *e, struct rst_info *rst_info
list_add_tail(&le->desc_list, &l->desc_list); list_add_tail(&le->desc_list, &l->desc_list);
le->desc = fdesc; le->desc = fdesc;
if (unlikely(le->fe.type == FDINFO_EVENTPOLL)) if (unlikely(le->fe->type == FDINFO_EVENTPOLL))
list_add_tail(&le->ps_list, &rst_info->eventpoll); list_add_tail(&le->ps_list, &rst_info->eventpoll);
else else
list_add_tail(&le->ps_list, &rst_info->fds); list_add_tail(&le->ps_list, &rst_info->fds);
...@@ -206,13 +206,17 @@ int prepare_fd_pid(int pid, struct rst_info *rst_info) ...@@ -206,13 +206,17 @@ int prepare_fd_pid(int pid, struct rst_info *rst_info)
} }
while (1) { while (1) {
struct fdinfo_entry e; struct fdinfo_entry *e = xmalloc(sizeof(*e));
if (!e) {
ret = -1;
break;
}
ret = read_img_eof(fdinfo_fd, &e); ret = read_img_eof(fdinfo_fd, e);
if (ret <= 0) if (ret <= 0)
break; break;
ret = collect_fd(pid, &e, rst_info); ret = collect_fd(pid, e, rst_info);
if (ret < 0) if (ret < 0)
break; break;
} }
...@@ -269,11 +273,11 @@ static int open_transport_fd(int pid, struct fdinfo_list_entry *fle) ...@@ -269,11 +273,11 @@ static int open_transport_fd(int pid, struct fdinfo_list_entry *fle)
flem = file_master(fle->desc); flem = file_master(fle->desc);
if (flem->pid == pid) { if (flem->pid == pid) {
if (flem->fe.fd != fle->fe.fd) if (flem->fe->fd != fle->fe->fd)
/* dup-ed file. Will be opened in the open_fd */ /* dup-ed file. Will be opened in the open_fd */
return 0; return 0;
if (!should_open_transport(&fle->fe, fle->desc)) if (!should_open_transport(fle->fe, fle->desc))
/* pure master file */ /* pure master file */
return 0; return 0;
...@@ -283,7 +287,7 @@ static int open_transport_fd(int pid, struct fdinfo_list_entry *fle) ...@@ -283,7 +287,7 @@ static int open_transport_fd(int pid, struct fdinfo_list_entry *fle)
*/ */
} }
transport_name_gen(&saddr, &sun_len, getpid(), fle->fe.fd); transport_name_gen(&saddr, &sun_len, getpid(), fle->fe->fd);
pr_info("\t\tCreate transport fd %s\n", saddr.sun_path + 1); pr_info("\t\tCreate transport fd %s\n", saddr.sun_path + 1);
...@@ -299,11 +303,11 @@ static int open_transport_fd(int pid, struct fdinfo_list_entry *fle) ...@@ -299,11 +303,11 @@ static int open_transport_fd(int pid, struct fdinfo_list_entry *fle)
return -1; return -1;
} }
ret = reopen_fd_as(fle->fe.fd, sock); ret = reopen_fd_as(fle->fe->fd, sock);
if (ret < 0) if (ret < 0)
return -1; return -1;
pr_info("\t\tWake up fdinfo pid=%d fd=%d\n", fle->pid, fle->fe.fd); pr_info("\t\tWake up fdinfo pid=%d fd=%d\n", fle->pid, fle->fe->fd);
futex_set_and_wake(&fle->real_pid, getpid()); futex_set_and_wake(&fle->real_pid, getpid());
return 0; return 0;
...@@ -314,10 +318,10 @@ int send_fd_to_peer(int fd, struct fdinfo_list_entry *fle, int tsk) ...@@ -314,10 +318,10 @@ int send_fd_to_peer(int fd, struct fdinfo_list_entry *fle, int tsk)
struct sockaddr_un saddr; struct sockaddr_un saddr;
int len; int len;
pr_info("\t\tWait fdinfo pid=%d fd=%d\n", fle->pid, fle->fe.fd); pr_info("\t\tWait fdinfo pid=%d fd=%d\n", fle->pid, fle->fe->fd);
futex_wait_while(&fle->real_pid, 0); futex_wait_while(&fle->real_pid, 0);
transport_name_gen(&saddr, &len, transport_name_gen(&saddr, &len,
futex_get(&fle->real_pid), fle->fe.fd); futex_get(&fle->real_pid), fle->fe->fd);
pr_info("\t\tSend fd %d to %s\n", fd, saddr.sun_path + 1); pr_info("\t\tSend fd %d to %s\n", fd, saddr.sun_path + 1);
return send_fd(tsk, &saddr, len, fd); return send_fd(tsk, &saddr, len, fd);
} }
...@@ -329,7 +333,7 @@ static int open_fd(int pid, struct fdinfo_entry *fe, struct file_desc *d) ...@@ -329,7 +333,7 @@ static int open_fd(int pid, struct fdinfo_entry *fe, struct file_desc *d)
struct fdinfo_list_entry *fle; struct fdinfo_list_entry *fle;
fle = file_master(d); fle = file_master(d);
if ((fle->pid != pid) || (fe->fd != fle->fe.fd)) if ((fle->pid != pid) || (fe->fd != fle->fe->fd))
return 0; return 0;
tmp = d->ops->open(d); tmp = d->ops->open(d);
...@@ -351,20 +355,20 @@ static int open_fd(int pid, struct fdinfo_entry *fe, struct file_desc *d) ...@@ -351,20 +355,20 @@ static int open_fd(int pid, struct fdinfo_entry *fe, struct file_desc *d)
list_for_each_entry(fle, &d->fd_info_head, desc_list) { list_for_each_entry(fle, &d->fd_info_head, desc_list) {
if (pid == fle->pid) { if (pid == fle->pid) {
pr_info("\t\t\tGoing to dup %d into %d\n", fe->fd, fle->fe.fd); pr_info("\t\t\tGoing to dup %d into %d\n", fe->fd, fle->fe->fd);
if (fe->fd == fle->fe.fd) if (fe->fd == fle->fe->fd)
continue; continue;
if (move_img_fd(&sock, fle->fe.fd)) if (move_img_fd(&sock, fle->fe->fd))
return -1; return -1;
if (dup2(fe->fd, fle->fe.fd) != fle->fe.fd) { if (dup2(fe->fd, fle->fe->fd) != fle->fe->fd) {
pr_perror("Can't dup local fd %d -> %d", pr_perror("Can't dup local fd %d -> %d",
fe->fd, fle->fe.fd); fe->fd, fle->fe->fd);
return -1; return -1;
} }
fcntl(fle->fe.fd, F_SETFD, fle->fe.flags); fcntl(fle->fe->fd, F_SETFD, fle->fe->flags);
continue; continue;
} }
...@@ -417,17 +421,17 @@ static int open_fdinfo(int pid, struct fdinfo_list_entry *fle, int state) ...@@ -417,17 +421,17 @@ static int open_fdinfo(int pid, struct fdinfo_list_entry *fle, int state)
BUG_ON(state >= FD_STATE_MAX); 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, fdinfo_states[state]);
switch (state) { switch (state) {
case FD_STATE_PREP: case FD_STATE_PREP:
ret = open_transport_fd(pid, fle); ret = open_transport_fd(pid, fle);
break; break;
case FD_STATE_CREATE: case FD_STATE_CREATE:
ret = open_fd(pid, &fle->fe, fle->desc); ret = open_fd(pid, fle->fe, fle->desc);
break; break;
case FD_STATE_RECV: case FD_STATE_RECV:
ret = receive_fd(pid, &fle->fe, fle->desc); ret = receive_fd(pid, fle->fe, fle->desc);
break; break;
} }
......
...@@ -38,7 +38,7 @@ struct fdinfo_list_entry { ...@@ -38,7 +38,7 @@ struct fdinfo_list_entry {
struct list_head ps_list; struct list_head ps_list;
int pid; int pid;
futex_t real_pid; futex_t real_pid;
struct fdinfo_entry fe; struct fdinfo_entry *fe;
}; };
struct file_desc_ops { struct file_desc_ops {
......
...@@ -36,7 +36,7 @@ static void show_saved_pipe_fds(struct pipe_info *pi) ...@@ -36,7 +36,7 @@ static void show_saved_pipe_fds(struct pipe_info *pi)
pr_info(" `- ID %p %#xpn", pi, pi->pe.id); pr_info(" `- ID %p %#xpn", pi, pi->pe.id);
list_for_each_entry(fle, &pi->d.fd_info_head, desc_list) list_for_each_entry(fle, &pi->d.fd_info_head, desc_list)
pr_info(" `- FD %d pid %d\n", fle->fe.fd, fle->pid); pr_info(" `- FD %d pid %d\n", fle->fe->fd, fle->pid);
} }
static int handle_pipes_data(void) static int handle_pipes_data(void)
...@@ -96,7 +96,7 @@ void mark_pipe_master(void) ...@@ -96,7 +96,7 @@ void mark_pipe_master(void)
fle = file_master(&pi->d); fle = file_master(&pi->d);
p = pi; p = pi;
fd = fle->fe.fd; fd = fle->fe->fd;
pid = fle->pid; pid = fle->pid;
list_for_each_entry(pic, &pi->pipe_list, pipe_list) { list_for_each_entry(pic, &pi->pipe_list, pipe_list) {
...@@ -104,9 +104,9 @@ void mark_pipe_master(void) ...@@ -104,9 +104,9 @@ void mark_pipe_master(void)
fle = file_master(&p->d); fle = file_master(&p->d);
if (fle->pid < pid || if (fle->pid < pid ||
(pid == fle->pid && fle->fe.fd < fd)) { (pid == fle->pid && fle->fe->fd < fd)) {
p = pic; p = pic;
fd = fle->fe.fd; fd = fle->fe->fd;
pid = fle->pid; pid = fle->pid;
} }
...@@ -163,7 +163,7 @@ static int recv_pipe_fd(struct pipe_info *pi) ...@@ -163,7 +163,7 @@ static int recv_pipe_fd(struct pipe_info *pi)
int tmp, fd; int tmp, fd;
fle = file_master(&pi->d); fle = file_master(&pi->d);
fd = fle->fe.fd; fd = fle->fe->fd;
pr_info("\tWaiting fd for %d\n", fd); pr_info("\tWaiting fd for %d\n", fd);
......
...@@ -518,7 +518,7 @@ int run_unix_connections(void) ...@@ -518,7 +518,7 @@ int run_unix_connections(void)
addr.sun_family = AF_UNIX; addr.sun_family = AF_UNIX;
memcpy(&addr.sun_path, peer->name, peer->ue.namelen); memcpy(&addr.sun_path, peer->name, peer->ue.namelen);
try_again: try_again:
if (connect(fle->fe.fd, (struct sockaddr *)&addr, if (connect(fle->fe->fd, (struct sockaddr *)&addr,
sizeof(addr.sun_family) + sizeof(addr.sun_family) +
peer->ue.namelen) < 0) { peer->ue.namelen) < 0) {
if (attempts) { if (attempts) {
...@@ -531,13 +531,13 @@ try_again: ...@@ -531,13 +531,13 @@ try_again:
return -1; return -1;
} }
if (restore_sk_queue(fle->fe.fd, peer->ue.id)) if (restore_sk_queue(fle->fe->fd, peer->ue.id))
return -1; return -1;
if (rst_file_params(fle->fe.fd, &ui->ue.fown, ui->ue.flags)) if (rst_file_params(fle->fe->fd, &ui->ue.fown, ui->ue.flags))
return -1; return -1;
if (restore_socket_opts(fle->fe.fd, &ui->ue.opts)) if (restore_socket_opts(fle->fe->fd, &ui->ue.opts))
return -1; return -1;
cj = cj->next; cj = cj->next;
...@@ -633,14 +633,14 @@ static int open_unixsk_pair_slave(struct unix_sk_info *ui) ...@@ -633,14 +633,14 @@ static int open_unixsk_pair_slave(struct unix_sk_info *ui)
fle = file_master(&ui->d); fle = file_master(&ui->d);
pr_info("Opening pair slave (id %#x ino %#x peer %#x) on %d\n", pr_info("Opening pair slave (id %#x ino %#x peer %#x) on %d\n",
ui->ue.id, ui->ue.ino, ui->ue.peer, fle->fe.fd); ui->ue.id, ui->ue.ino, ui->ue.peer, fle->fe->fd);
sk = recv_fd(fle->fe.fd); sk = recv_fd(fle->fe->fd);
if (sk < 0) { if (sk < 0) {
pr_err("Can't recv pair slave"); pr_err("Can't recv pair slave");
return -1; return -1;
} }
close(fle->fe.fd); close(fle->fe->fd);
if (bind_unix_sk(sk, ui)) if (bind_unix_sk(sk, ui))
return -1; return -1;
...@@ -826,7 +826,7 @@ int resolve_unix_peers(void) ...@@ -826,7 +826,7 @@ int resolve_unix_peers(void)
if ((fle->pid < fle_peer->pid) || if ((fle->pid < fle_peer->pid) ||
(fle->pid == fle_peer->pid && (fle->pid == fle_peer->pid &&
fle->fe.fd < fle_peer->fe.fd)) { fle->fe->fd < fle_peer->fe->fd)) {
ui->flags |= USK_PAIR_MASTER; ui->flags |= USK_PAIR_MASTER;
peer->flags |= USK_PAIR_SLAVE; peer->flags |= USK_PAIR_SLAVE;
} else { } else {
...@@ -843,7 +843,7 @@ int resolve_unix_peers(void) ...@@ -843,7 +843,7 @@ int resolve_unix_peers(void)
ui->peer ? ui->peer->ue.ino : 0, ui->flags); ui->peer ? ui->peer->ue.ino : 0, ui->flags);
list_for_each_entry(fle, &ui->d.fd_info_head, desc_list) list_for_each_entry(fle, &ui->d.fd_info_head, desc_list)
pr_info("\t\tfd %d in pid %d\n", pr_info("\t\tfd %d in pid %d\n",
fle->fe.fd, fle->pid); fle->fe->fd, fle->pid);
} }
......
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