Commit 0e57ce29 authored by Pavel Emelyanov's avatar Pavel Emelyanov

files: Put fdinfo entry on fdinfo_list_entry

Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent b96dd2c4
......@@ -101,7 +101,7 @@ void show_saved_files(void)
pr_info(" `- type %d ID 0x%x\n", fd->type, fd->id);
list_for_each_entry(le, &fd->fd_info_head, desc_list)
pr_info(" `- FD %d pid %d\n", le->fd, le->pid);
pr_info(" `- FD %d pid %d\n", le->fe.fd, le->pid);
}
}
......@@ -343,9 +343,8 @@ static int collect_fd(int pid, struct fdinfo_entry *e)
}
le->pid = pid;
le->fd = e->fd;
le->flags = e->flags;
futex_init(&le->real_pid);
le->fe = *e;
fdesc = find_file_desc(e);
if (fdesc == NULL) {
......@@ -474,7 +473,7 @@ static int open_transport_fd(int pid, struct fdinfo_entry *fe, struct file_desc
fle = file_master(d);
if (fle->pid == pid) {
if (fle->fd == fe->fd) {
if (fle->fe.fd == fe->fd) {
/* file master */
if (!should_open_transport(fe, d))
return 0;
......@@ -487,7 +486,7 @@ static int open_transport_fd(int pid, struct fdinfo_entry *fe, struct file_desc
pr_info("\t%d: Create transport fd for %d\n", pid, fe->fd);
list_for_each_entry(fle, &d->fd_info_head, desc_list)
if ((fle->pid == pid) && (fle->fd == fe->fd))
if ((fle->pid == pid) && (fle->fe.fd == fe->fd))
break;
BUG_ON(&d->fd_info_head == &fle->desc_list);
......@@ -507,7 +506,7 @@ static int open_transport_fd(int pid, struct fdinfo_entry *fe, struct file_desc
if (ret < 0)
return -1;
pr_info("Wake up fdinfo pid=%d fd=%d\n", fle->pid, fle->fd);
pr_info("Wake up fdinfo pid=%d fd=%d\n", fle->pid, fle->fe.fd);
futex_set_and_wake(&fle->real_pid, getpid());
return 0;
......@@ -518,10 +517,10 @@ int send_fd_to_peer(int fd, struct fdinfo_list_entry *fle, int tsk)
struct sockaddr_un saddr;
int len;
pr_info("Wait fdinfo pid=%d fd=%d\n", fle->pid, fle->fd);
pr_info("Wait fdinfo pid=%d fd=%d\n", fle->pid, fle->fe.fd);
futex_wait_while(&fle->real_pid, 0);
transport_name_gen(&saddr, &len,
futex_get(&fle->real_pid), fle->fd);
futex_get(&fle->real_pid), fle->fe.fd);
pr_info("Send fd %d to %s\n", fd, saddr.sun_path + 1);
return send_fd(tsk, &saddr, len, fd);
}
......@@ -534,7 +533,7 @@ static int open_fd(int pid, struct fdinfo_entry *fe,
struct fdinfo_list_entry *fle;
fle = file_master(d);
if ((fle->pid != pid) || (fe->fd != fle->fd))
if ((fle->pid != pid) || (fe->fd != fle->fe.fd))
return 0;
tmp = d->ops->open(d);
......@@ -556,22 +555,22 @@ static int open_fd(int pid, struct fdinfo_entry *fe,
list_for_each_entry(fle, &d->fd_info_head, desc_list) {
if (pid == fle->pid) {
pr_info("\t\tGoing to dup %d into %d\n", fe->fd, fle->fd);
if (fe->fd == fle->fd)
pr_info("\t\tGoing to dup %d into %d\n", fe->fd, fle->fe.fd);
if (fe->fd == fle->fe.fd)
continue;
if (move_img_fd(&sock, fle->fd))
if (move_img_fd(&sock, fle->fe.fd))
return -1;
if (move_img_fd(fdinfo_fd, fle->fd))
if (move_img_fd(fdinfo_fd, fle->fe.fd))
return -1;
if (dup2(fe->fd, fle->fd) != fle->fd) {
if (dup2(fe->fd, fle->fe.fd) != fle->fe.fd) {
pr_perror("Can't dup local fd %d -> %d",
fe->fd, fle->fd);
fe->fd, fle->fe.fd);
return -1;
}
fcntl(fle->fd, F_SETFD, fle->flags);
fcntl(fle->fe.fd, F_SETFD, fle->fe.flags);
continue;
}
......
......@@ -29,10 +29,9 @@ enum fdinfo_states {
struct fdinfo_list_entry {
struct list_head desc_list;
int fd;
int pid;
int flags;
futex_t real_pid;
struct fdinfo_entry fe;
};
struct file_desc;
......
......@@ -87,7 +87,7 @@ static void show_saved_pipe_fds(struct pipe_info *pi)
pr_info(" `- ID %p 0x%xpn", pi, pi->pe.id);
list_for_each_entry(fle, &pi->d.fd_info_head, desc_list)
pr_info(" `- FD %d pid %d\n", fle->fd, fle->pid);
pr_info(" `- FD %d pid %d\n", fle->fe.fd, fle->pid);
}
static int handle_pipes_data()
......@@ -150,7 +150,7 @@ void mark_pipe_master()
fle = file_master(&pi->d);
p = pi;
fd = fle->fd;
fd = fle->fe.fd;
pid = fle->pid;
list_for_each_entry(pic, &pi->pipe_list, pipe_list) {
......@@ -158,9 +158,9 @@ void mark_pipe_master()
fle = file_master(&p->d);
if (fle->pid < pid ||
(pid == fle->pid && fle->fd < fd)) {
(pid == fle->pid && fle->fe.fd < fd)) {
p = pic;
fd = fle->fd;
fd = fle->fe.fd;
pid = fle->pid;
}
......@@ -191,7 +191,7 @@ static int recv_pipe_fd(struct pipe_info *pi)
int tmp, fd;
fle = file_master(&pi->d);
fd = fle->fd;
fd = fle->fe.fd;
pr_info("\tWaiting fd for %d\n", fd);
......
......@@ -1220,7 +1220,7 @@ int run_unix_connections(void)
addr.sun_family = AF_UNIX;
memcpy(&addr.sun_path, peer->name, peer->ue.namelen);
try_again:
if (connect(fle->fd, (struct sockaddr *)&addr,
if (connect(fle->fe.fd, (struct sockaddr *)&addr,
sizeof(addr.sun_family) +
peer->ue.namelen) < 0) {
if (attempts) {
......@@ -1233,10 +1233,10 @@ try_again:
return -1;
}
if (restore_socket_queue(fle->fd, peer->ue.id))
if (restore_socket_queue(fle->fe.fd, peer->ue.id))
return -1;
if (set_fd_flags(fle->fd, ui->ue.flags))
if (set_fd_flags(fle->fe.fd, ui->ue.flags))
return -1;
cj = cj->next;
......@@ -1339,14 +1339,14 @@ static int open_unixsk_pair_slave(struct unix_sk_info *ui)
fle = file_master(&ui->d);
pr_info("Opening pair slave (id 0x%x peer 0x%x) on %d\n",
ui->ue.id, ui->ue.peer, fle->fd);
ui->ue.id, ui->ue.peer, fle->fe.fd);
sk = recv_fd(fle->fd);
sk = recv_fd(fle->fe.fd);
if (sk < 0) {
pr_err("Can't recv pair slave");
return -1;
}
close(fle->fd);
close(fle->fe.fd);
if (bind_unix_sk(sk, ui))
return -1;
......@@ -1511,7 +1511,7 @@ int resolve_unix_peers(void)
if ((fle->pid < fle_peer->pid) ||
(fle->pid == fle_peer->pid &&
fle->fd < fle_peer->fd)) {
fle->fe.fd < fle_peer->fe.fd)) {
ui->flags |= USK_PAIR_MASTER;
peer->flags |= USK_PAIR_SLAVE;
} else {
......@@ -1528,7 +1528,7 @@ int resolve_unix_peers(void)
ui->peer ? ui->peer->ue.id : 0, ui->flags);
list_for_each_entry(fle, &ui->d.fd_info_head, desc_list)
pr_info("\t\tfd %d in pid %d\n",
fle->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