Messages in this thread Patch in this message | | | Date | Mon, 14 Jul 2014 13:38:39 -0400 | From | Benjamin LaHaise <> | Subject | Re: [PATCH] aio: protect reqs_available updates from changes in interrupt handlers |
| |
On Mon, Jul 14, 2014 at 07:30:43PM +0200, Jens Axboe wrote: > Why not just makes this: > > local_irq_save(flags); > kcpu = this_put_ptr(...); > ... > > and get rid of the preemption bits, it's a bit redundant now you need to > kill local interrupts anyway.
*nod*. I'll add the following cleanup patch, as the first version already got merged into another tree.
-ben
diff --git a/fs/aio.c b/fs/aio.c index 1c9c5f0..104da62 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -832,10 +832,8 @@ static void put_reqs_available(struct kioctx *ctx, unsigned nr) struct kioctx_cpu *kcpu; unsigned long flags; - preempt_disable(); - kcpu = this_cpu_ptr(ctx->cpu); - local_irq_save(flags); + kcpu = this_cpu_ptr(ctx->cpu); kcpu->reqs_available += nr; while (kcpu->reqs_available >= ctx->req_batch * 2) { @@ -844,7 +842,6 @@ static void put_reqs_available(struct kioctx *ctx, unsigned nr) } local_irq_restore(flags); - preempt_enable(); } static bool get_reqs_available(struct kioctx *ctx) @@ -853,10 +850,8 @@ static bool get_reqs_available(struct kioctx *ctx) bool ret = false; unsigned long flags; - preempt_disable(); - kcpu = this_cpu_ptr(ctx->cpu); - local_irq_save(flags); + kcpu = this_cpu_ptr(ctx->cpu); if (!kcpu->reqs_available) { int old, avail = atomic_read(&ctx->reqs_available); @@ -876,7 +871,6 @@ static bool get_reqs_available(struct kioctx *ctx) kcpu->reqs_available--; out: local_irq_restore(flags); - preempt_enable(); return ret; } -ben -- "Thought is the essence of where you are now."
| |