struct req_iterator iter;
        struct bio_vec bv;
        char *dst;
-       unsigned int count, datasize;
+       unsigned int count;
        sector_t recid, first_rec, last_rec;
        unsigned int blksize, off;
        unsigned char rw_cmd;
        if (count != last_rec - first_rec + 1)
                return ERR_PTR(-EINVAL);
        /* Build the request */
-       datasize = sizeof(struct dasd_diag_req) +
-               count*sizeof(struct dasd_diag_bio);
-       cqr = dasd_smalloc_request(DASD_DIAG_MAGIC, 0, datasize, memdev,
-                                  blk_mq_rq_to_pdu(req));
+       cqr = dasd_smalloc_request(DASD_DIAG_MAGIC, 0, struct_size(dreq, bio, count),
+                                  memdev, blk_mq_rq_to_pdu(req));
        if (IS_ERR(cqr))
                return cqr;