 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 <MAX_PART; i++)
- 			if (disk->part[i].nr_sects != 0)
- 				luninfo.num_parts++;
+ 		for(i=1; i <MAX_PART; i++) {
+			if (!disk->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;

_
