unsigned char *data;
        struct RigidDiskBlock *rdb;
        struct PartitionBlock *pb;
-       int start_sect, nr_sects, blk, part, res = 0;
+       sector_t start_sect, nr_sects;
+       int blk, part, res = 0;
        int blksize = 1;        /* Multiplier for disk block size */
        int slot = 1;
 
 
                /* Tell Kernel about it */
 
-               nr_sects = (be32_to_cpu(pb->pb_Environment[10]) + 1 -
-                           be32_to_cpu(pb->pb_Environment[9])) *
+               nr_sects = ((sector_t)be32_to_cpu(pb->pb_Environment[10]) + 1 -
+                          be32_to_cpu(pb->pb_Environment[9])) *
                           be32_to_cpu(pb->pb_Environment[3]) *
                           be32_to_cpu(pb->pb_Environment[5]) *
                           blksize;
                if (!nr_sects)
                        continue;
-               start_sect = be32_to_cpu(pb->pb_Environment[9]) *
+               start_sect = (sector_t)be32_to_cpu(pb->pb_Environment[9]) *
                             be32_to_cpu(pb->pb_Environment[3]) *
                             be32_to_cpu(pb->pb_Environment[5]) *
                             blksize;