]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/block/xen-blkfront.c
Merge tag 'tag-chrome-platform-fixes-for-v5.6-rc4' of git://git.kernel.org/pub/scm...
[linux.git] / drivers / block / xen-blkfront.c
index 57d50c5ba30905b2be5cebac52b27e1be51e8b18..e2ad6bba2281e79067066b5a5f05bc2f7818b3cc 100644 (file)
@@ -151,9 +151,6 @@ MODULE_PARM_DESC(max_ring_page_order, "Maximum order of pages to be used for the
 #define BLK_RING_SIZE(info)    \
        __CONST_RING_SIZE(blkif, XEN_PAGE_SIZE * (info)->nr_ring_pages)
 
-#define BLK_MAX_RING_SIZE      \
-       __CONST_RING_SIZE(blkif, XEN_PAGE_SIZE * XENBUS_MAX_RING_GRANTS)
-
 /*
  * ring-ref%u i=(-1UL) would take 11 characters + 'ring-ref' is 8, so 19
  * characters are enough. Define to 20 to keep consistent with backend.
@@ -177,12 +174,12 @@ struct blkfront_ring_info {
        unsigned int evtchn, irq;
        struct work_struct work;
        struct gnttab_free_callback callback;
-       struct blk_shadow shadow[BLK_MAX_RING_SIZE];
        struct list_head indirect_pages;
        struct list_head grants;
        unsigned int persistent_gnts_c;
        unsigned long shadow_free;
        struct blkfront_info *dev_info;
+       struct blk_shadow shadow[];
 };
 
 /*
@@ -1915,7 +1912,8 @@ static int negotiate_mq(struct blkfront_info *info)
                info->nr_rings = 1;
 
        info->rinfo = kvcalloc(info->nr_rings,
-                              sizeof(struct blkfront_ring_info),
+                              struct_size(info->rinfo, shadow,
+                                          BLK_RING_SIZE(info)),
                               GFP_KERNEL);
        if (!info->rinfo) {
                xenbus_dev_fatal(info->xbdev, -ENOMEM, "allocating ring_info structure");