This is the deferq bit of Matt's patch, which is needed by the subsequent socket patch. Signed-off-by: Dan Smith <danms@xxxxxxxxxx> Cc: Matt Helsley <matthltc@xxxxxxxxxx> --- checkpoint/files.c | 28 ++++++++++++++++++++++++++++ include/linux/checkpoint_types.h | 1 + 2 files changed, 29 insertions(+), 0 deletions(-) diff --git a/checkpoint/files.c b/checkpoint/files.c index 204055b..784793c 100644 --- a/checkpoint/files.c +++ b/checkpoint/files.c @@ -21,6 +21,7 @@ #include <linux/syscalls.h> #include <linux/checkpoint.h> #include <linux/checkpoint_hdr.h> +#include <linux/deferqueue.h> #include <net/sock.h> @@ -289,11 +290,25 @@ static int do_checkpoint_file_table(struct ckpt_ctx *ctx, goto out; ckpt_debug("nfds %d\n", nfds); + ctx->files_deferq = deferqueue_create(); + if (!ctx->files_deferq) { + ret = -ENOMEM; + goto out; + } for (n = 0; n < nfds; n++) { ret = checkpoint_file_desc(ctx, files, fdtable[n]); if (ret < 0) break; } + if (!ret) { + ret = deferqueue_run(ctx->files_deferq); + if (ret > 0) { + pr_warning("c/r: files deferqueue had %d entries\n", + ret); + ret = 0; + } + } + deferqueue_destroy(ctx->files_deferq); out: kfree(fdtable); return ret; @@ -692,11 +707,24 @@ static struct files_struct *do_restore_file_table(struct ckpt_ctx *ctx) if (ret < 0) goto out; + ret = -ENOMEM; + ctx->files_deferq = deferqueue_create(); + if (!ctx->files_deferq) + goto out; for (i = 0; i < h->fdt_nfds; i++) { ret = restore_file_desc(ctx); if (ret < 0) break; } + if (!ret) { + ret = deferqueue_run(ctx->files_deferq); + if (ret > 0) { + pr_warning("c/r: files deferqueue had %d entries\n", + ret); + ret = 0; + } + } + deferqueue_destroy(ctx->files_deferq); out: ckpt_hdr_put(ctx, h); if (!ret) { diff --git a/include/linux/checkpoint_types.h b/include/linux/checkpoint_types.h index a18846f..b6f130c 100644 --- a/include/linux/checkpoint_types.h +++ b/include/linux/checkpoint_types.h @@ -48,6 +48,7 @@ struct ckpt_ctx { struct ckpt_obj_hash *obj_hash; /* repository for shared objects */ struct deferqueue_head *deferqueue; /* queue of deferred work */ + struct deferqueue_head *files_deferq; struct path fs_mnt; /* container root (FIXME) */ -- 1.6.2.5 _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers