Merge tag 'for-linus-6.1-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / fs / aio.c
index 606613e..5b2ff20 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -951,16 +951,13 @@ static bool __get_reqs_available(struct kioctx *ctx)
        local_irq_save(flags);
        kcpu = this_cpu_ptr(ctx->cpu);
        if (!kcpu->reqs_available) {
-               int old, avail = atomic_read(&ctx->reqs_available);
+               int avail = atomic_read(&ctx->reqs_available);
 
                do {
                        if (avail < ctx->req_batch)
                                goto out;
-
-                       old = avail;
-                       avail = atomic_cmpxchg(&ctx->reqs_available,
-                                              avail, avail - ctx->req_batch);
-               } while (avail != old);
+               } while (!atomic_try_cmpxchg(&ctx->reqs_available,
+                                            &avail, avail - ctx->req_batch));
 
                kcpu->reqs_available += ctx->req_batch;
        }