Skip to content
  • Cyrill Gorcunov's avatar
    kcmp: add KCMP_EPOLL_TFD mode to compare epoll target files · 0791e364
    Cyrill Gorcunov authored
    With current epoll architecture target files are addressed with
    file_struct and file descriptor number, where the last is not unique.
    Moreover files can be transferred from another process via unix socket,
    added into queue and closed then so we won't find this descriptor in the
    task fdinfo list.
    
    Thus to checkpoint and restore such processes CRIU needs to find out
    where exactly the target file is present to add it into epoll queue.
    For this sake one can use kcmp call where some particular target file
    from the queue is compared with arbitrary file passed as an argument.
    
    Because epoll target files can have same file descriptor number but
    different file_struct a caller should explicitly specify the offset
    within.
    
    To test if some particular file is matching entry inside epoll one have
    to
    
     - fill kcmp_epoll_slot structure with epoll file descriptor,
       target file number and target file offset (in case if only
       one target is present then it should be 0)
    
     - call kcmp as kcmp(pid1, pid2, KCMP_EPOLL_TFD, fd, &kcmp_epoll_slot)
        - the kernel fetch file pointer matching file descriptor @fd of pid1
        - lookups for file struct in epoll queue of pid2 and returns traditional
          0,1,2 result for sorting purpose
    
    Link: http://lkml.kernel.org/r/20170424154423.511592110@gmail.com
    
    
    Signed-off-by: default avatarCyrill Gorcunov <gorcunov@openvz.org>
    Acked-by: default avatarAndrey Vagin <avagin@openvz.org>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Pavel Emelyanov <xemul@virtuozzo.com>
    Cc: Michael Kerrisk <mtk.manpages@gmail.com>
    Cc: Jason Baron <jbaron@akamai.com>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    0791e364