}
 
        raid_device->num_pds = num_pds;
-       sz = offsetof(Mpi2RaidVolPage0_t, PhysDisk) + (num_pds *
-           sizeof(Mpi2RaidVol0PhysDisk_t));
+       sz = struct_size(vol_pg0, PhysDisk, num_pds);
        vol_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!vol_pg0) {
                dfailprintk(ioc,
        /*
         * Read SASIOUnitPage0 to get each HBA Phy's data.
         */
-       sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) +
-           (ioc->sas_hba.num_phys * sizeof(Mpi2SasIOUnit0PhyData_t));
+       sz = struct_size(sas_iounit_pg0, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg0) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
        u64 attached_sas_addr;
        u8 found = 0, port_count = 0, port_id;
 
-       sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys
-           * sizeof(Mpi2SasIOUnit0PhyData_t));
+       sz = struct_size(sas_iounit_pg0, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg0) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
                  ioc_info(ioc, "updating handles for sas_host(0x%016llx)\n",
                           (u64)ioc->sas_hba.sas_address));
 
-       sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys
-           * sizeof(Mpi2SasIOUnit0PhyData_t));
+       sz = struct_size(sas_iounit_pg0, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg0) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
        ioc->sas_hba.num_phys = num_phys;
 
        /* sas_iounit page 0 */
-       sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys *
-           sizeof(Mpi2SasIOUnit0PhyData_t));
+       sz = struct_size(sas_iounit_pg0, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg0) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
        }
 
        /* sas_iounit page 1 */
-       sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys *
-           sizeof(Mpi2SasIOUnit1PhyData_t));
+       sz = struct_size(sas_iounit_pg1, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg1 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg1) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
 
        /* handle hba phys */
 
        /* read sas_iounit page 0 */
-       sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys *
-           sizeof(Mpi2SasIOUnit0PhyData_t));
+       sz = struct_size(sas_iounit_pg0, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg0 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg0) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
        }
 
        /* read sas_iounit page 1 */
-       sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys *
-           sizeof(Mpi2SasIOUnit1PhyData_t));
+       sz = struct_size(sas_iounit_pg1, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg1 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg1) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",
        /* handle hba phys */
 
        /* sas_iounit page 1 */
-       sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys *
-           sizeof(Mpi2SasIOUnit1PhyData_t));
+       sz = struct_size(sas_iounit_pg1, PhyData, ioc->sas_hba.num_phys);
        sas_iounit_pg1 = kzalloc(sz, GFP_KERNEL);
        if (!sas_iounit_pg1) {
                ioc_err(ioc, "failure at %s:%d/%s()!\n",