drivers/block/cciss.c | 9 ++++++--- drivers/block/ioctl.c | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) diff -puN drivers/block/cciss.c~dynamic-hd_struct-allocation-fixes drivers/block/cciss.c --- 25/drivers/block/cciss.c~dynamic-hd_struct-allocation-fixes 2003-04-03 19:12:37.000000000 -0800 +++ 25-akpm/drivers/block/cciss.c 2003-04-03 19:13:18.000000000 -0800 @@ -599,9 +599,12 @@ static int cciss_ioctl(struct inode *ino luninfo.num_opens = drv->usage_count; luninfo.num_parts = 0; /* count partitions 1 to 15 with sizes > 0 */ - for(i=1; i part[i].nr_sects != 0) - luninfo.num_parts++; + for(i=1; i part[i]) + continue; + if (disk->part[i]->nr_sects != 0) + luninfo.num_parts++; + } if (copy_to_user((void *) arg, &luninfo, sizeof(LogvolInfo_struct))) return -EFAULT; diff -puN drivers/block/ioctl.c~dynamic-hd_struct-allocation-fixes drivers/block/ioctl.c --- 25/drivers/block/ioctl.c~dynamic-hd_struct-allocation-fixes 2003-04-03 19:14:28.000000000 -0800 +++ 25-akpm/drivers/block/ioctl.c 2003-04-03 19:14:32.000000000 -0800 @@ -46,6 +46,9 @@ static int blkpg_ioctl(struct block_devi /* overlap? */ for (i = 0; i < disk->minors - 1; i++) { struct hd_struct *s = disk->part[i]; + + if (!s) + continue; if (!(start+length <= s->start_sect || start >= s->start_sect + s->nr_sects)) return -EBUSY; _