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

fd: Split file_master

In SCM patch we'll need to generate temporary fdinfo entry
for a task that will send descriptors via sockets. Sometimes
the files in questions will NOT have any other fdinfo-s (if
they are SCM-sent and closed), so we need a helper that
would either give us existing fdinfo or say there's no such.
Reviewed-by: 's avatarKirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent 67c572df
...@@ -194,16 +194,27 @@ void wait_fds_event(void) ...@@ -194,16 +194,27 @@ void wait_fds_event(void)
clear_fds_event(); clear_fds_event();
} }
struct fdinfo_list_entry *try_file_master(struct file_desc *d)
{
if (list_empty(&d->fd_info_head))
return NULL;
return list_first_entry(&d->fd_info_head,
struct fdinfo_list_entry, desc_list);
}
struct fdinfo_list_entry *file_master(struct file_desc *d) struct fdinfo_list_entry *file_master(struct file_desc *d)
{ {
if (list_empty(&d->fd_info_head)) { struct fdinfo_list_entry *fle;
fle = try_file_master(d);
if (!fle) {
pr_err("Empty list on file desc id %#x(%d)\n", d->id, pr_err("Empty list on file desc id %#x(%d)\n", d->id,
d->ops ? d->ops->type : -1); d->ops ? d->ops->type : -1);
BUG(); BUG();
} }
return list_first_entry(&d->fd_info_head, return fle;
struct fdinfo_list_entry, desc_list);
} }
void show_saved_files(void) void show_saved_files(void)
......
...@@ -144,6 +144,7 @@ int predump_task_files(int pid); ...@@ -144,6 +144,7 @@ int predump_task_files(int pid);
extern void file_desc_init(struct file_desc *d, u32 id, struct file_desc_ops *ops); extern void file_desc_init(struct file_desc *d, u32 id, struct file_desc_ops *ops);
extern int file_desc_add(struct file_desc *d, u32 id, struct file_desc_ops *ops); extern int file_desc_add(struct file_desc *d, u32 id, struct file_desc_ops *ops);
extern struct fdinfo_list_entry *try_file_master(struct file_desc *d);
extern struct fdinfo_list_entry *file_master(struct file_desc *d); extern struct fdinfo_list_entry *file_master(struct file_desc *d);
extern struct file_desc *find_file_desc_raw(int type, u32 id); extern struct file_desc *find_file_desc_raw(int type, u32 id);
......
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