int dvb_vb2_querybuf(struct dvb_vb2_ctx *ctx, struct dmx_buffer *b)
 {
        struct vb2_queue *q = &ctx->vb_q;
+       struct vb2_buffer *vb2 = vb2_get_buffer(q, b->index);
 
-       if (b->index >= q->num_buffers) {
-               dprintk(1, "[%s] buffer index out of range\n", ctx->name);
+       if (!vb2) {
+               dprintk(1, "[%s] invalid buffer index\n", ctx->name);
                return -EINVAL;
        }
-       vb2_core_querybuf(&ctx->vb_q, q->bufs[b->index], b);
+       vb2_core_querybuf(&ctx->vb_q, vb2, b);
        dprintk(3, "[%s] index=%d\n", ctx->name, b->index);
        return 0;
 }
 int dvb_vb2_qbuf(struct dvb_vb2_ctx *ctx, struct dmx_buffer *b)
 {
        struct vb2_queue *q = &ctx->vb_q;
+       struct vb2_buffer *vb2 = vb2_get_buffer(q, b->index);
        int ret;
 
-       if (b->index >= q->num_buffers) {
-               dprintk(1, "[%s] buffer index out of range\n", ctx->name);
+       if (!vb2) {
+               dprintk(1, "[%s] invalid buffer index\n", ctx->name);
                return -EINVAL;
        }
-       ret = vb2_core_qbuf(&ctx->vb_q, q->bufs[b->index], b, NULL);
+       ret = vb2_core_qbuf(&ctx->vb_q, vb2, b, NULL);
        if (ret) {
                dprintk(1, "[%s] index=%d errno=%d\n", ctx->name,
                        b->index, ret);