diff --git a/criu/proc_parse.c b/criu/proc_parse.c index 3a8013866..1a5722eaf 100644 --- a/criu/proc_parse.c +++ b/criu/proc_parse.c @@ -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; } diff --git a/images/eventpoll.proto b/images/eventpoll.proto index 8901d807a..4a8d1b834 100644 --- a/images/eventpoll.proto +++ b/images/eventpoll.proto @@ -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 {