diff options
author | James Morris <james.l.morris@oracle.com> | 2014-10-01 00:44:04 +1000 |
---|---|---|
committer | James Morris <james.l.morris@oracle.com> | 2014-10-01 00:44:04 +1000 |
commit | 6c8ff877cdf13cd5287ed9d700cfb6cb70e2bfa1 (patch) | |
tree | 2ab49b7d19fb69cdae5b6be9e7ba44f6cf3d45ef /fs/aio.c | |
parent | 35e1efd25a9e7d5cf2884fa23441ab87353849bb (diff) | |
parent | 19583ca584d6f574384e17fe7613dfaeadcdc4a6 (diff) | |
download | op-kernel-dev-6c8ff877cdf13cd5287ed9d700cfb6cb70e2bfa1.zip op-kernel-dev-6c8ff877cdf13cd5287ed9d700cfb6cb70e2bfa1.tar.gz |
Merge commit 'v3.16' into next
Diffstat (limited to 'fs/aio.c')
-rw-r--r-- | fs/aio.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -830,16 +830,20 @@ void exit_aio(struct mm_struct *mm) 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->reqs_available += nr; + while (kcpu->reqs_available >= ctx->req_batch * 2) { kcpu->reqs_available -= ctx->req_batch; atomic_add(ctx->req_batch, &ctx->reqs_available); } + local_irq_restore(flags); preempt_enable(); } @@ -847,10 +851,12 @@ static bool get_reqs_available(struct kioctx *ctx) { struct kioctx_cpu *kcpu; bool ret = false; + unsigned long flags; preempt_disable(); kcpu = this_cpu_ptr(ctx->cpu); + local_irq_save(flags); if (!kcpu->reqs_available) { int old, avail = atomic_read(&ctx->reqs_available); @@ -869,6 +875,7 @@ static bool get_reqs_available(struct kioctx *ctx) ret = true; kcpu->reqs_available--; out: + local_irq_restore(flags); preempt_enable(); return ret; } |