diff options
author | Pavel Emelyanov <xemul@virtuozzo.com> | 2017-02-16 15:11:10 +0300 |
---|---|---|
committer | Pavel Emelyanov <xemul@virtuozzo.com> | 2017-03-06 11:40:37 +0300 |
commit | 8c0eef35f4282a65928c1fbfd17074b2219f65e1 (patch) | |
tree | edeb53e343f929573f1e1b41217fadc436f9d781 | |
parent | a314a4543787475c98a32c2b9b3b655f8857b641 (diff) |
files: Make find_unused_fd work on pstree_item
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
-rw-r--r-- | criu/autofs.c | 4 | ||||
-rw-r--r-- | criu/files.c | 5 | ||||
-rw-r--r-- | criu/include/files.h | 2 |
3 files changed, 7 insertions, 4 deletions
diff --git a/criu/autofs.c b/criu/autofs.c index af1c59524..720e0ce09 100644 --- a/criu/autofs.c +++ b/criu/autofs.c @@ -569,7 +569,7 @@ static int autofs_dup_pipe(struct pstree_item *task, struct pipe_info *pi = container_of(ple->desc, struct pipe_info, d); unsigned flags = O_WRONLY; - new_fd = find_unused_fd(&rsti(task)->used, new_fd); + new_fd = find_unused_fd(task, new_fd); if (dup_pipe_info(pi, flags, pi->d.ops) < 0) { pr_err("Failed to dup pipe entry ID %#x PIPE_ID %#x\n", @@ -911,7 +911,7 @@ static int autofs_create_pipe(struct pstree_item *task, autofs_info_t *i, struct file_desc_ops *ops; PipeEntry *pe; - fd = find_unused_fd(&rsti(task)->used, fd); + fd = find_unused_fd(task, fd); ops = shmalloc(sizeof(*ops)); if (!ops) diff --git a/criu/files.c b/criu/files.c index 58a3ad451..0a8b51f38 100644 --- a/criu/files.c +++ b/criu/files.c @@ -128,11 +128,14 @@ void collect_task_fd(struct fdinfo_list_entry *new_fle, struct rst_info *ri) list_add_tail(&new_fle->used_list, &fle->used_list); } -unsigned int find_unused_fd(struct list_head *head, int hint_fd) +unsigned int find_unused_fd(struct pstree_item *task, int hint_fd) { + struct list_head *head; struct fdinfo_list_entry *fle; int fd = 0, prev_fd; + head = &rsti(task)->used; + if ((hint_fd >= 0) && (!find_used_fd(head, hint_fd))) { fd = hint_fd; goto out; diff --git a/criu/include/files.h b/criu/include/files.h index 6e0d0a26e..855f0950a 100644 --- a/criu/include/files.h +++ b/criu/include/files.h @@ -117,7 +117,7 @@ struct file_desc_ops { void collect_task_fd(struct fdinfo_list_entry *new_fle, struct rst_info *ri); -unsigned int find_unused_fd(struct list_head *head, int hint_fd); +unsigned int find_unused_fd(struct pstree_item *, int hint_fd); struct fdinfo_list_entry *find_used_fd(struct list_head *head, int fd); struct file_desc { |