/* the previous dst mv buffer becomes the next src mv buffer */
        ctx->src_mv_buf_selector = !ctx->src_mv_buf_selector;
 
-       if (ctx->aborting)
-               goto finished;
-
        s_vb = ctx->src_vbs[0];
        d_vb = ctx->dst_vb;
 
        ctx->src_vbs[0] = NULL;
        ctx->dst_vb = NULL;
 
+       if (ctx->aborting)
+               goto finished;
+
        ctx->bufs_completed++;
        if (ctx->bufs_completed < ctx->bufs_per_job && job_ready(ctx)) {
                device_run(ctx);
 
        mutex_lock(&dev->dev_mutex);
        free_mv_buffers(ctx);
+
+       vpdma_unmap_desc_buf(dev->vpdma, &ctx->desc_list.buf);
+       vpdma_unmap_desc_buf(dev->vpdma, &ctx->mmr_adb);
+       vpdma_unmap_desc_buf(dev->vpdma, &ctx->sc_coeff_h);
+       vpdma_unmap_desc_buf(dev->vpdma, &ctx->sc_coeff_v);
+
        vpdma_free_desc_list(&ctx->desc_list);
        vpdma_free_desc_buf(&ctx->mmr_adb);