epoll: Save fields of target files in eventpoll_tfd_entry

We will use them to fast lookup of targets files.

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
This commit is contained in:
Cyrill Gorcunov 2018-07-04 18:51:42 +03:00 committed by Andrei Vagin
parent ca8144b7f7
commit fa989970ec
2 changed files with 22 additions and 3 deletions

View file

@ -1762,9 +1762,23 @@ static int parse_fdinfo_pid_s(int pid, int fd, int type, void *arg)
eventpoll_tfd_entry__init(e);
ret = sscanf(str, "tfd: %d events: %x data: %"PRIx64,
&e->tfd, &e->events, &e->data);
if (ret != 3) {
ret = sscanf(str, "tfd: %d events: %x data: %llx"
" pos:%lli ino:%lx sdev:%x",
&e->tfd, &e->events, (long long *)&e->data,
(long long *)&e->pos, (long *)&e->inode,
&e->dev);
if (ret < 3 || ret > 6) {
eventpoll_tfd_entry__free_unpacked(e, NULL);
goto parse_err;
} else if (ret == 3) {
e->has_dev = false;
e->has_inode = false;
e->has_pos = false;
} else if (ret == 6) {
e->has_dev = true;
e->has_inode = true;
e->has_pos = true;
} else if (ret < 6) {
eventpoll_tfd_entry__free_unpacked(e, NULL);
goto parse_err;
}

View file

@ -7,6 +7,11 @@ message eventpoll_tfd_entry {
required uint32 tfd = 2;
required uint32 events = 3;
required uint64 data = 4;
/* to find dup'ed target files */
optional uint32 dev = 5;
optional uint64 inode = 6;
optional uint64 pos = 7;
}
message eventpoll_file_entry {