Unlinked fifos are special files which share some of their checkpoint/restart code with pipes. Re-use the code for normal unlinked files for unlinked fifos too. Signed-off-by: Matt Helsley <matthltc@xxxxxxxxxx> Cc: containers@xxxxxxxxxxxxxxxxxxxxxxxxxx Cc: Oren Laadan <orenl@xxxxxxxxxxxxxxx> --- fs/pipe.c | 5 ++++- include/linux/checkpoint.h | 1 + 2 files changed, 5 insertions(+), 1 deletions(-) diff --git a/fs/pipe.c b/fs/pipe.c index 1325e84..8240fa9 100644 --- a/fs/pipe.c +++ b/fs/pipe.c @@ -898,6 +898,9 @@ static int pipe_file_checkpoint(struct ckpt_ctx *ctx, struct file *file) ret = checkpoint_fname(ctx, &file->f_path, &ctx->root_fs_path); if (ret < 0) goto out; + ret = checkpoint_file_links(ctx, file); + if (ret < 0) + goto out; } if (first) @@ -1021,7 +1024,7 @@ struct file *fifo_file_restore(struct ckpt_ctx *ctx, struct ckpt_hdr_file *ptr) * To avoid blocking, always open the fifo with O_RDWR; * then fix flags below. */ - file = restore_open_fname(ctx, 0, (ptr->f_flags & ~O_ACCMODE) | O_RDWR); + file = restore_open_fname(ctx, !!(ptr->f_restart_flags & RESTART_FILE_F_UNLINK), (ptr->f_flags & ~O_ACCMODE) | O_RDWR); if (IS_ERR(file)) return file; diff --git a/include/linux/checkpoint.h b/include/linux/checkpoint.h index 6ca7b24..ac43914 100644 --- a/include/linux/checkpoint.h +++ b/include/linux/checkpoint.h @@ -108,6 +108,7 @@ extern int ckpt_read_consume(struct ckpt_ctx *ctx, int len, int type); extern char *ckpt_fill_fname(struct path *path, struct path *root, char *buf, int *len); +extern int checkpoint_file_links(struct ckpt_ctx *ctx, struct file *file); extern int checkpoint_dump_page(struct ckpt_ctx *ctx, struct page *page); extern int restore_read_page(struct ckpt_ctx *ctx, struct page *page); -- 1.6.3.3 _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers