{
        if (!refcount_dec_and_test(©->refcount))
                return;
-       atomic_dec(©->cp_nn->pending_async_copies);
        kfree(copy->cp_src);
        kfree(copy);
 }
        set_bit(NFSD4_COPY_F_COMPLETED, ©->cp_flags);
        trace_nfsd_copy_async_done(copy);
        nfsd4_send_cb_offload(copy);
+       atomic_dec(©->cp_nn->pending_async_copies);
        return 0;
 }
 
                /* Arbitrary cap on number of pending async copy operations */
                if (atomic_inc_return(&nn->pending_async_copies) >
                                (int)rqstp->rq_pool->sp_nrthreads)
-                       goto out_err;
+                       goto out_dec_async_copy_err;
                async_copy->cp_src = kmalloc(sizeof(*async_copy->cp_src), GFP_KERNEL);
                if (!async_copy->cp_src)
-                       goto out_err;
+                       goto out_dec_async_copy_err;
                if (!nfs4_init_copy_state(nn, copy))
-                       goto out_err;
+                       goto out_dec_async_copy_err;
                memcpy(&result->cb_stateid, ©->cp_stateid.cs_stid,
                        sizeof(result->cb_stateid));
                dup_copy_fields(copy, async_copy);
                async_copy->copy_task = kthread_create(nfsd4_do_async_copy,
                                async_copy, "%s", "copy thread");
                if (IS_ERR(async_copy->copy_task))
-                       goto out_err;
+                       goto out_dec_async_copy_err;
                spin_lock(&async_copy->cp_clp->async_lock);
                list_add(&async_copy->copies,
                                &async_copy->cp_clp->async_copies);
        trace_nfsd_copy_done(copy, status);
        release_copy_files(copy);
        return status;
+out_dec_async_copy_err:
+       if (async_copy)
+               atomic_dec(&nn->pending_async_copies);
 out_err:
        if (nfsd4_ssc_is_inter(copy)) {
                /*