On Thu, Nov 18, 2010 at 03:21:05PM -0600, Nathan Lynch wrote: > Long-running operations in the kernel should: > > o not monopolize the CPU > o abort when asked > > Put voluntary preemption points in ckpt_kread, ckpt_kwrite, and the > VMA-walking checkpoint code. At the same points, return an error if a > fatal signal is pending; callers of these functions are supposed to be > checking return values. We do alot more than read/write the image -- e.g. collecting references at the beginning prior to checkpoint. Perhaps should add some to the objhash code too. Cheers, -Matt Helsley > > Signed-off-by: Nathan Lynch <ntl@xxxxxxxxx> > --- > kernel/checkpoint/sys.c | 10 ++++++++++ > mm/checkpoint.c | 7 +++++++ > 2 files changed, 17 insertions(+), 0 deletions(-) > > diff --git a/kernel/checkpoint/sys.c b/kernel/checkpoint/sys.c > index b761ec0..04e6277 100644 > --- a/kernel/checkpoint/sys.c > +++ b/kernel/checkpoint/sys.c > @@ -72,6 +72,11 @@ int ckpt_kwrite(struct ckpt_ctx *ctx, void *addr, size_t count) > if (ckpt_test_error(ctx)) > return ckpt_get_error(ctx); > > + if (fatal_signal_pending(current)) > + return -EINTR; > + > + cond_resched(); > + > ret = _ckpt_kwrite(ctx->file, addr, count); > if (ret < 0) > return ret; > @@ -103,6 +108,11 @@ int ckpt_kread(struct ckpt_ctx *ctx, void *addr, size_t count) > if (ckpt_test_error(ctx)) > return ckpt_get_error(ctx); > > + if (fatal_signal_pending(current)) > + return -EINTR; > + > + cond_resched(); > + > ret = _ckpt_kread(ctx->file, addr, count); > if (ret < 0) > return ret; > diff --git a/mm/checkpoint.c b/mm/checkpoint.c > index 70300e8..6732a2e 100644 > --- a/mm/checkpoint.c > +++ b/mm/checkpoint.c > @@ -310,6 +310,13 @@ static int vma_fill_pgarr(struct ckpt_ctx *ctx, > while (addr < end) { > struct page *page; > > + if (fatal_signal_pending(current)) { > + cnt = -EINTR; > + goto out; > + } > + > + cond_resched(); > + > if (vma) > page = consider_private_page(vma, addr); > else > -- > 1.7.3.2 > > _______________________________________________ > Containers mailing list > Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx > https://lists.linux-foundation.org/mailman/listinfo/containers _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers