LCOV - code coverage report
Current view: top level - crtools/include - files.h (source / functions) Hit Total Coverage
Test: crtools.info Lines: 1 1 100.0 %
Date: 2012-12-28 Functions: 0 0 -
Branches: 5 6 83.3 %

           Branch data     Line data    Source code
       1                 :            : #ifndef __CR_FILES_H__
       2                 :            : #define __CR_FILES_H__
       3                 :            : 
       4                 :            : #include "compiler.h"
       5                 :            : #include "types.h"
       6                 :            : #include "lock.h"
       7                 :            : #include "list.h"
       8                 :            : #include "image.h"
       9                 :            : 
      10                 :            : #include "../protobuf/fdinfo.pb-c.h"
      11                 :            : #include "../protobuf/fown.pb-c.h"
      12                 :            : #include "../protobuf/vma.pb-c.h"
      13                 :            : 
      14                 :            : struct pstree_item;
      15                 :            : struct file_desc;
      16                 :            : struct cr_fdset;
      17                 :            : struct rst_info;
      18                 :            : struct parasite_ctl;
      19                 :            : 
      20                 :            : struct fd_parms {
      21                 :            :         int             fd;
      22                 :            :         unsigned long   pos;
      23                 :            :         unsigned int    flags;
      24                 :            :         char            fd_flags;
      25                 :            :         struct stat     stat;
      26                 :            :         pid_t           pid;
      27                 :            :         FownEntry       fown;
      28                 :            : 
      29                 :            :         struct parasite_ctl *ctl;
      30                 :            : };
      31                 :            : 
      32                 :            : #define FD_PARMS_INIT                   \
      33                 :            : {                                       \
      34                 :            :         .fd     = FD_DESC_INVALID,      \
      35                 :            :         .fown   = FOWN_ENTRY__INIT,     \
      36                 :            : }
      37                 :            : 
      38                 :            : struct file_desc;
      39                 :            : 
      40                 :            : struct fdinfo_list_entry {
      41                 :            :         struct list_head        desc_list;      /* To chain on  @fd_info_head */
      42                 :            :         struct file_desc        *desc;          /* Associated file descriptor */
      43                 :            :         struct list_head        ps_list;        /* To chain  per-task files */
      44                 :            :         int                     pid;
      45                 :            :         futex_t                 real_pid;
      46                 :            :         FdinfoEntry             *fe;
      47                 :            : };
      48                 :            : 
      49                 :            : /* reports whether fd_a takes prio over fd_b */
      50                 :            : static inline int fdinfo_rst_prio(struct fdinfo_list_entry *fd_a, struct fdinfo_list_entry *fd_b)
      51                 :            : {
      52 [ +  + ][ +  + ]:        230 :         return (fd_a->pid < fd_b->pid) || ((fd_a->pid == fd_b->pid) && (fd_a->fe->fd < fd_b->fe->fd));
                 [ +  - ]
      53                 :            : }
      54                 :            : 
      55                 :            : struct file_desc_ops {
      56                 :            :         unsigned int            type;
      57                 :            :         int                     (*open)(struct file_desc *d);
      58                 :            :         int                     (*post_open)(struct file_desc *d, int fd);
      59                 :            :         int                     (*want_transport)(FdinfoEntry *fe, struct file_desc *d);
      60                 :            :         struct list_head *      (*select_ps_list)(struct file_desc *, struct rst_info *);
      61                 :            : };
      62                 :            : 
      63                 :            : struct file_desc {
      64                 :            :         u32                     id;             /* File descriptor id, unique */
      65                 :            :         struct list_head        hash;           /* Descriptor hashing and lookup */
      66                 :            :         struct list_head        fd_info_head;   /* Chain of fdinfo_list_entry-s with same ID and type but different pids */
      67                 :            :         struct file_desc_ops    *ops;           /* Associated operations */
      68                 :            : };
      69                 :            : 
      70                 :            : struct fdtype_ops {
      71                 :            :         unsigned int            type;
      72                 :            :         int                     (*dump)(int lfd, u32 id, const struct fd_parms *p);
      73                 :            : };
      74                 :            : 
      75                 :            : extern int do_dump_gen_file(struct fd_parms *p, int lfd,
      76                 :            :                             const struct fdtype_ops *ops,
      77                 :            :                             const struct cr_fdset *cr_fdset);
      78                 :            : 
      79                 :            : extern void file_desc_add(struct file_desc *d, u32 id, struct file_desc_ops *ops);
      80                 :            : extern struct fdinfo_list_entry *file_master(struct file_desc *d);
      81                 :            : extern struct file_desc *find_file_desc_raw(int type, u32 id);
      82                 :            : 
      83                 :            : extern int send_fd_to_peer(int fd, struct fdinfo_list_entry *fle, int sock);
      84                 :            : extern int restore_fown(int fd, FownEntry *fown);
      85                 :            : extern int rst_file_params(int fd, FownEntry *fown, int flags);
      86                 :            : 
      87                 :            : extern void show_saved_files(void);
      88                 :            : 
      89                 :            : extern int prepare_fds(struct pstree_item *me);
      90                 :            : extern int prepare_fd_pid(int pid, struct rst_info *rst_info);
      91                 :            : extern int prepare_ctl_tty(int pid, struct rst_info *rst_info, u32 ctl_tty_id);
      92                 :            : extern int prepare_shared_fdinfo(void);
      93                 :            : extern int get_filemap_fd(int pid, VmaEntry *vma_entry);
      94                 :            : extern int prepare_fs(int pid);
      95                 :            : extern int set_fd_flags(int fd, int flags);
      96                 :            : 
      97                 :            : #ifndef AT_EMPTY_PATH
      98                 :            : #define AT_EMPTY_PATH 0x1000
      99                 :            : #endif
     100                 :            : 
     101                 :            : #define LREMAP_PARAM    "link-remap"
     102                 :            : 
     103                 :            : #endif /* __CR_FILES_H__ */

Generated by: LCOV version 1.9