if (!max_swap_size)
/* swapping not enabled */
return -ENXIO;
- stram_disk = alloc_disk();
+ stram_disk = alloc_disk(1);
if (!stram_disk)
return -ENOMEM;
blk_init_queue(BLK_DEFAULT_QUEUE(STRAM_MAJOR), do_stram_request);
stram_disk->major = STRAM_MAJOR;
stram_disk->first_minor = STRAM_MINOR;
- stram_disk->minor_shift = 0;
stram_disk->fops = &stram_fops;
sprintf(stram_disk->disk_name, "stram");
set_capacity(stram_disk, (swap_end - swap_start)/512);
if (!dev->file)
return -1;
- disk = alloc_disk();
+ disk = alloc_disk(1 << UBD_SHIFT);
if (!disk)
return -1;
disk->major = MAJOR_NR;
disk->first_minor = n << UBD_SHIFT;
- disk->minor_shift = UBD_SHIFT;
disk->fops = &ubd_blops;
if (fakehd_set)
sprintf(disk->disk_name, "hd%c", n + 'a');
sprintf(disk->disk_name, "ubd%d", n);
if (fake_major) {
- fake_disk = alloc_disk();
+ fake_disk = alloc_disk(1 << UBD_SHIFT);
if (!fake_disk) {
put_disk(disk);
return -1;
}
fake_disk->major = fake_major;
fake_disk->first_minor = n << UBD_SHIFT;
- fake_disk->minor_shift = UBD_SHIFT;
fake_disk->fops = &ubd_blops;
sprintf(fake_disk->disk_name, "ubd%d", n);
fake_gendisk[n] = fake_disk;
return 0;
for (i = 0; i < FD_MAX_UNITS; i++) {
- disks[i] = alloc_disk();
+ disks[i] = alloc_disk(1);
if (!disks[i])
goto out;
}
goto out3;
for (i = 0; i < mfm_drives; i++) {
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(64);
if (!disk)
goto Enomem;
disk->major = MAJOR_NR;
disk->first_minor = i << 6;
- disk->minor_shift = 6;
disk->fops = &mfm_fops;
sprintf(disk->disk_name, "mfm%c", 'a'+i);
mfm_gendisk[i] = disk;
sprintf(disk->disk_name, "rd/c%dd%d", Controller->ControllerNumber, n);
disk->major = MajorNumber;
disk->first_minor = n << DAC960_MaxPartitionsBits;
- disk->minor_shift = DAC960_MaxPartitionsBits;
disk->fops = &DAC960_BlockDeviceOperations;
}
/*
}
memset(Controller, 0, sizeof(DAC960_Controller_T));
for (i = 0; i < DAC960_MaxLogicalDrives; i++) {
- Controller->disks[i] = alloc_disk();
+ Controller->disks[i] = alloc_disk(1<<DAC960_MaxPartitionsBits);
if (!Controller->disks[i])
goto Enomem;
}
#endif
err = -ENOMEM;
for( i = 0; i < NDevices; ++i ) {
- acsi_gendisk[i] = alloc_disk();
+ acsi_gendisk[i] = alloc_disk(16);
if (!acsi_gendisk[i])
goto out4;
}
fd_probe(drive);
if (unit[drive].type->code == FD_NODRIVE)
continue;
- disk = alloc_disk();
+ disk = alloc_disk(1);
if (!disk) {
unit[drive].type->code = FD_NODRIVE;
continue;
printk("fd%d ",drive);
disk->major = MAJOR_NR;
disk->first_minor = drive;
- disk->minor_shift = 0;
disk->fops = &floppy_fops;
sprintf(disk->disk_name, "fd%d", drive);
set_capacity(disk, 880*2);
}
for (i = 0; i < FD_MAX_UNITS; i++) {
- unit[i].disk = alloc_disk();
+ unit[i].disk = alloc_disk(1);
if (!unit[i].disk)
goto Enomem;
}
for(i=0; i< NWD; i++) {
struct gendisk *disk = hba[ctlr]->gendisk[i];
- if (disk->part)
+ if (disk->flags & GENHD_FL_UP)
del_gendisk(disk);
}
spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
/* invalidate the devices and deregister the disk */
- if (disk->part)
+ if (disk->flags & GENHD_FL_UP)
del_gendisk(disk);
/* check to see if it was the last disk */
if (logvol == h->highest_lun) {
struct gendisk *disk[NWD];
int i, n;
for (n = 0; n < NWD; n++) {
- disk[n] = alloc_disk();
+ disk[n] = alloc_disk(1 << NWD_SHIFT);
if (!disk[n])
goto out;
}
sprintf(disk->disk_name, "cciss/c%dd%d", i, j);
disk->major = MAJOR_NR + i;
disk->first_minor = j << NWD_SHIFT;
- disk->minor_shift = NWD_SHIFT;
if( !(drv->nr_blocks))
continue;
(BLK_DEFAULT_QUEUE(MAJOR_NR + i))->hardsect_size = drv->block_size;
/* remove it from the disk list */
for (j = 0; j < NWD; j++) {
struct gendisk *disk = hba[i]->gendisk[j];
- if (disk->part)
+ if (disk->flags & GENHD_FL_UP)
del_gendisk(disk);
}
kfree(hba[i]->cmd_pool_bits);
for (j = 0; j < NWD; j++) {
- if (ida_gendisk[i][j]->part)
+ if (ida_gendisk[i][j]->flags & GENHD_FL_UP)
del_gendisk(ida_gendisk[i][j]);
put_disk(ida_gendisk[i][j]);
}
}
num_cntlrs_reg++;
for (j=0; j<NWD; j++) {
- ida_gendisk[i][j] = alloc_disk();
+ ida_gendisk[i][j] = alloc_disk(1 << NWD_SHIFT);
if (!ida_gendisk[i][j])
goto Enomem2;
}
sprintf(disk->disk_name, "ida/c%dd%d", i, j);
disk->major = MAJOR_NR + i;
disk->first_minor = j<<NWD_SHIFT;
- disk->minor_shift = NWD_SHIFT;
disk->flags = GENHD_FL_DEVFS;
disk->fops = &ida_fops;
if (!drv->nr_blks)
*/
for (i = 0; i < NWD; i++) {
struct gendisk *disk = ida_gendisk[ctlr][i];
- if (disk->part)
+ if (disk->flags & GENDH_FL_UP)
del_gendisk(disk);
}
memset(hba[ctlr]->drv, 0, sizeof(drv_info_t)*NWD);
raw_cmd = NULL;
for (i=0; i<N_DRIVE; i++) {
- disks[i] = alloc_disk();
+ disks[i] = alloc_disk(1);
if (!disks[i])
goto Enomem;
}
* This function registers the partitioning information in @gp
* with the kernel.
*/
-static void add_gendisk(struct gendisk *gp)
+void add_disk(struct gendisk *disk)
{
- struct hd_struct *p = NULL;
-
- if (gp->minor_shift) {
- size_t size = sizeof(struct hd_struct)*((1<<gp->minor_shift)-1);
- p = kmalloc(size, GFP_KERNEL);
- if (!p) {
- printk(KERN_ERR "out of memory; no partitions for %s\n",
- gp->disk_name);
- gp->minor_shift = 0;
- } else
- memset(p, 0, size);
- }
- gp->part = p;
-
write_lock(&gendisk_lock);
- list_add(&gp->list, &gendisks[gp->major].list);
- if (gp->minor_shift)
- list_add_tail(&gp->full_list, &gendisk_list);
+ list_add(&disk->list, &gendisks[disk->major].list);
+ if (disk->minor_shift)
+ list_add_tail(&disk->full_list, &gendisk_list);
else
- INIT_LIST_HEAD(&gp->full_list);
+ INIT_LIST_HEAD(&disk->full_list);
write_unlock(&gendisk_lock);
-}
-
-void add_disk(struct gendisk *disk)
-{
- add_gendisk(disk);
+ disk->flags |= GENHD_FL_UP;
register_disk(disk);
}
EXPORT_SYMBOL(disk_devclass);
-struct gendisk *alloc_disk(void)
+struct gendisk *alloc_disk(int minors)
{
struct gendisk *disk = kmalloc(sizeof(struct gendisk), GFP_KERNEL);
- if (disk)
+ if (disk) {
memset(disk, 0, sizeof(struct gendisk));
+ if (minors > 1) {
+ int size = (minors - 1) * sizeof(struct hd_struct);
+ disk->part = kmalloc(size, GFP_KERNEL);
+ if (!disk->part) {
+ kfree(disk);
+ return NULL;
+ }
+ memset(disk->part, 0, size);
+ }
+ disk->minors = minors;
+ while (minors >>= 1)
+ disk->minor_shift++;
+ }
return disk;
}
void put_disk(struct gendisk *disk)
{
- kfree(disk);
+ if (disk) {
+ kfree(disk->part);
+ kfree(disk);
+ }
}
EXPORT_SYMBOL(alloc_disk);
EXPORT_SYMBOL(put_disk);
goto out_mem;
for (i = 0; i < max_loop; i++) {
- disks[i] = alloc_disk();
+ disks[i] = alloc_disk(1);
if (!disks[i])
goto out_mem2;
}
}
for (i = 0; i < MAX_NBD; i++) {
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(1);
if (!disk)
goto out;
nbd_dev[i].disk = disk;
nbd_bytesizes[i] = 0x7ffffc00; /* 2GB */
disk->major = MAJOR_NR;
disk->first_minor = i;
- disk->minor_shift = 0;
disk->fops = &nbd_fops;
sprintf(disk->disk_name, "nbd%d", i);
set_capacity(disk, 0x3ffffe);
pcd_drive_count = 0;
for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) {
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(1);
if (!disk)
continue;
cd->disk = disk;
cd->info.mask = 0;
disk->major = major;
disk->first_minor = unit;
- disk->minor_shift = 0;
strcpy(disk->disk_name, cd->name); /* umm... */
disk->fops = &pcd_bdops;
}
}
for (unit = 0, disk = pd; unit < PD_UNITS; unit++, disk++) {
if (disk->present) {
- struct gendisk *p = alloc_disk();
+ struct gendisk *p = alloc_disk(1 << PD_BITS);
if (!p) {
disk->present = 0;
k--;
continue;
}
strcpy(p->disk_name, disk->name);
- p->minor_shift = PD_BITS;
p->fops = &pd_fops;
p->major = major;
p->first_minor = unit << PD_BITS;
pf_drive_count = 0;
for (unit = 0, pf = units; unit < PF_UNITS; unit++, pf++) {
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(1);
if (!disk)
continue;
pf->disk = disk;
disk->major = MAJOR_NR;
disk->first_minor = unit;
strcpy(disk->disk_name, pf->name);
- disk->minor_shift = 0;
disk->fops = &pf_fops;
if (!(*drives[unit])[D_PRT])
pf_drive_count++;
error = -ENOMEM;
for (i = 0; i < ps2esdi_drives; i++) {
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(64);
if (!disk)
goto err_out4;
disk->major = MAJOR_NR;
disk->first_minor = i<<6;
sprintf(disk->disk_name, "ed%c", 'a'+i);
- disk->minor_shift = 6;
disk->fops = &ps2esdi_fops;
ps2esdi_gendisk[i] = disk;
}
}
#ifdef CONFIG_BLK_DEV_INITRD
- initrd_disk = alloc_disk();
+ initrd_disk = alloc_disk(1);
if (!initrd_disk)
return -ENOMEM;
initrd_disk->major = MAJOR_NR;
initrd_disk->first_minor = INITRD_MINOR;
- initrd_disk->minor_shift = 0;
initrd_disk->fops = &rd_bd_op;
sprintf(initrd_disk->disk_name, "initrd");
#endif
for (i = 0; i < NUM_RAMDISKS; i++) {
- rd_disks[i] = alloc_disk();
+ rd_disks[i] = alloc_disk(1);
if (!rd_disks[i])
goto out;
}
rd_length[i] = rd_size << 10;
disk->major = MAJOR_NR;
disk->first_minor = i;
- disk->minor_shift = 0;
disk->fops = &rd_bd_op;
sprintf(disk->disk_name, "rd%d", i);
set_capacity(disk, rd_size * 2);
return -ENODEV;
for (i = 0; i < floppy_count; i++) {
- disks[i] = alloc_disk();
+ disks[i] = alloc_disk(1);
if (!disks[i])
goto out;
}
printk("SWIM-IOP: detected %d installed drives.\n", floppy_count);
for (i = 0; i < floppy_count; i++) {
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(1);
if (!disk)
continue;
disk->major = MAJOR_NR;
}
for (i = 0; i < num_cards; i++) {
- mm_gendisk[i] = alloc_disk();
+ mm_gendisk[i] = alloc_disk(1 << MM_SHIFT);
if (!mm_gendisk[i])
goto out;
}
spin_lock_init(&cards[i].lock);
disk->major = major_nr;
disk->first_minor = i << MM_SHIFT;
- disk->minor_shift = MM_SHIFT;
disk->fops = &mm_fops;
set_capacity(disk, cards[i].mm_size << 1);
add_disk(disk);
goto out3;
for (i = 0; i < xd_drives; i++) {
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(64);
if (!disk)
goto Enomem;
disk->major = MAJOR_NR;
disk->first_minor = i<<6;
- disk->minor_shift = 6;
sprintf(disk->disk_name, "xd%c", i+'a');
disk->fops = &xd_fops;
xd_gendisk[i] = disk;
MAJOR_NR );
return -EBUSY;
}
- z2ram_gendisk = alloc_disk();
+ z2ram_gendisk = alloc_disk(1);
if (!z2ram_gendisk) {
unregister_blkdev( MAJOR_NR, DEVICE_NAME );
return -ENOMEM;
}
z2ram_gendisk->major = MAJOR_NR;
z2ram_gendisk->first_minor = 0;
- z2ram_gendisk->minor_shift = 0;
z2ram_gendisk->fops = &z2_fops;
sprintf(z2ram_gendisk->disk_name, "z2ram");
}
devfs_register(NULL, "aztcd", DEVFS_FL_DEFAULT, MAJOR_NR, 0,
S_IFBLK | S_IRUGO | S_IWUGO, &azt_fops, NULL);
- azt_disk = alloc_disk();
+ azt_disk = alloc_disk(1);
if (!azt_disk)
goto err_out2;
if (register_blkdev(MAJOR_NR, "aztcd", &azt_fops) != 0) {
blk_queue_hardsect_size(BLK_DEFAULT_QUEUE(MAJOR_NR), 2048);
azt_disk->major = MAJOR_NR;
azt_disk->first_minor = 0;
- azt_disk->minor_shift = 0;
azt_disk->fops = &azt_fops;
sprintf(azt_disk->disk_name, "aztcd");
add_disk(azt_disk);
goto errout2;
}
- disk = alloc_disk();
+ disk = alloc_disk(1);
if (!disk)
goto errout1;
disk->major = MAJOR_NR;
disk->first_minor = 0;
- disk->minor_shift = 0;
sprintf(disk->disk_name, "cdu31a");
disk->fops = &scd_bdops;
disk->flags = GENHD_FL_CD;
printk(KERN_INFO "Cannot register for major %d!\n", MAJOR_NR);
goto out_blkdev;
}
- disk = alloc_disk();
+ disk = alloc_disk(1);
if (!disk)
goto out_disk;
disk->major = MAJOR_NR;
disk->first_minor = 0;
- disk->minor_shift = 0;
sprintf(disk->disk_name, "cm206");
disk->fops = &cm206_bdops;
disk->flags = GENHD_FL_CD;
i++;
}
- gscd_disk = alloc_disk();
+ gscd_disk = alloc_disk(1);
if (!gscd_disk)
goto err_out1;
gscd_disk->major = MAJOR_NR;
gscd_disk->first_minor = 0;
- gscd_disk->minor_shift = 0;
gscd_disk->fops = &gscd_fops;
sprintf(gscd_disk->disk_name, "gscd");
int __init mcd_init(void)
{
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(1);
int count;
unsigned char result[3];
char msg[80];
disk->major = MAJOR_NR;
disk->first_minor = 0;
- disk->minor_shift = 0;
sprintf(disk->disk_name, "mcd");
disk->fops = &mcd_bdops;
disk->flags = GENHD_FL_CD;
return 1;
}
- disk = alloc_disk();
+ disk = alloc_disk(1);
if (!disk) {
xwarn("init() malloc failed\n");
kfree(stuffp);
stuffp->info.dev = mk_kdev(MAJOR_NR, drive);
disk->major = MAJOR_NR;
disk->first_minor = drive;
- disk->minor_shift = 0;
strcpy(disk->disk_name, stuffp->info.name);
disk->fops = &mcdx_bdops;
disk->flags = GENHD_FL_CD;
"optcd: no Optics Storage CDROM Initialization\n");
return -EIO;
}
- optcd_disk = alloc_disk();
+ optcd_disk = alloc_disk(1);
if (!optcd_disk) {
printk(KERN_ERR "optcd: can't allocate disk\n");
return -ENOMEM;
}
optcd_disk->major = MAJOR_NR;
optcd_disk->first_minor = 0;
- optcd_disk->minor_shift = 0;
optcd_disk->fops = &opt_fops;
sprintf(optcd_disk->disk_name, "optcd");
if (!request_region(optcd_port, 4, "optcd")) {
sbpcd_infop->dev = mk_kdev(MAJOR_NR, j);
sbpcd_infop->handle = p;
p->sbpcd_infop = sbpcd_infop;
- disk = alloc_disk();
+ disk = alloc_disk(1);
disk->major = MAJOR_NR;
disk->first_minor = j;
- disk->minor_shift = 0;
disk->fops = &sbpcd_bdops;
strcpy(disk->disk_name, sbpcd_infop->name);
disk->flags = GENHD_FL_CD;
blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), do_sjcd_request, &sjcd_lock);
blk_queue_hardsect_size(BLK_DEFAULT_QUEUE(MAJOR_NR), 2048);
- sjcd_disk = alloc_disk();
+ sjcd_disk = alloc_disk(1);
if (!sjcd_disk) {
printk(KERN_ERR "SJCD: can't allocate disk");
goto out1;
}
sjcd_disk->major = MAJOR_NR,
sjcd_disk->first_minor = 0,
- sjcd_disk->minor_shift = 0,
sjcd_disk->fops = &sjcd_fops,
sprintf(sjcd_disk->disk_name, "sjcd");
}
initialized = 1;
- cdu_disk = alloc_disk();
+ cdu_disk = alloc_disk(1);
if (!cdu_disk)
goto out6;
cdu_disk->major = MAJOR_NR;
cdu_disk->first_minor = 0;
- cdu_disk->minor_shift = 0;
cdu_disk->fops = &cdu_fops;
sprintf(cdu_disk->disk_name, "cdu");
units = MAX_DRIVES;
for (unit = 0; unit < MAX_DRIVES; unit++) {
- disks[unit] = alloc_disk();
+ disks[unit] = alloc_disk(1 << PARTN_BITS);
if (!disks[unit])
goto err_kmalloc_gd;
}
disk->major = hwif->major;
disk->first_minor = unit << PARTN_BITS;
sprintf(disk->disk_name,"hd%c",'a'+hwif->index*MAX_DRIVES+unit);
- disk->minor_shift = PARTN_BITS;
disk->fops = ide_fops;
hwif->drives[unit].disk = disk;
}
goto out;
for (drive=0 ; drive < NR_HD ; drive++) {
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(64);
if (!disk)
goto Enomem;
disk->major = MAJOR_NR;
disk->first_minor = drive << 6;
- disk->minor_shift = 6;
disk->fops = &hd_fops;
sprintf(disk->disk_name, "hd%c", 'a'+drive);
hd_gendisk[drive] = disk;
#endif
}
- disk = alloc_disk();
+ disk = alloc_disk(1);
if (!disk)
return -ENOMEM;
disk->major = MD_MAJOR;
disk->first_minor = mdidx(mddev);
- disk->minor_shift = 0;
sprintf(disk->disk_name, "md%d", mdidx(mddev));
disk->fops = &md_fops;
}
for (i = 0; i < MAX_I2OB; i++) {
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(16);
if (!disk)
goto oom;
i2o_disk[i] = disk;
struct gendisk *disk = i2ob_disk + i;
disk->major = MAJOR_NR;
disk->first_minor = i<<4;
- disk->minor_shift = 4;
disk->fops = &i2ob_fops;
sprintf(disk->disk_name, "i2o/hd%c", 'a' + i);
}
}
partition = kmalloc(sizeof(partition_t), GFP_KERNEL);
- disk = alloc_disk();
+ disk = alloc_disk(1 << PART_BITS);
if (!partition||!disk) {
printk(KERN_WARNING "No memory to scan for FTL on %s\n",
sprintf(disk->disk_name, "ftl%c", 'a' + device);
disk->major = FTL_MAJOR;
disk->first_minor = device << 4;
- disk->minor_shift = PART_BITS;
disk->fops = &ftl_blk_fops;
partition->mtd = mtd;
partition->disk = disk;
spin_unlock(&mtdblks_lock);
mtdblk = kmalloc(sizeof(struct mtdblk_dev), GFP_KERNEL);
- disk = alloc_disk();
+ disk = alloc_disk(1);
if (!mtdblk || !disk)
goto Enomem;
memset(mtdblk, 0, sizeof(*mtdblk));
}
disk->major = MAJOR_NR;
disk->first_minor = dev;
- disk->minor_shift = 0;
disk->fops = &mtd_fops;
sprintf(disk->disk_name, "mtd%d", dev);
mtdblk->disk = disk;
int i;
for (i = 0; i < MAX_MTD_DEVICES; i++) {
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(1);
if (!disk)
goto out;
disk->major = MAJOR_NR;
}
nftl = kmalloc(sizeof(struct NFTLrecord), GFP_KERNEL);
- gd = alloc_disk();
+ gd = alloc_disk(1 << NFTL_PARTN_BITS);
if (!nftl || !gd) {
kfree(nftl);
put_disk(gd);
sprintf(gd->disk_name, "nftl%c", 'a' + firstfree);
gd->major = MAJOR_NR;
gd->first_minor = firstfree << NFTL_PARTN_BITS;
- gd->minor_shift = NFTL_PARTN_BITS;
set_capacity(gd, nftl->nr_sects);
nftl->disk = gd;
add_disk(gd);
}
}
- gdp = alloc_disk();
+ gdp = alloc_disk(1 << DASD_PARTN_BITS);
if (!gdp)
return ERR_PTR(-ENOMEM);
/* Initialize gendisk structure. */
gdp->major = mi->major;
gdp->first_minor = index << DASD_PARTN_BITS;
- gdp->minor_shift = DASD_PARTN_BITS;
gdp->fops = &dasd_device_operations;
/*
int i, rc = -ENOMEM;
for (i = 0; i < xpram_devs; i++) {
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(1);
if (!disk)
goto out;
xpram_disks[i] = disk;
offset += xpram_devices[i].size;
disk->major = XPRAM_MAJOR;
disk->first_minor = i;
- disk->minor_shift = 0;
disk->fops = &xpram_devops;
sprintf(disk->disk_name, "slram%d", i);
set_capacity(disk, xpram_sizes[i] << 1);
err = -ENOMEM;
for (i = 0; i < JSF_MAX; i++) {
- struct gendisk *disk = alloc_disk();
+ struct gendisk *disk = alloc_disk(1);
if (!disk)
goto out;
jsfd_disk[i] = disk;
disk->first_minor = i;
sprintf(disk->disk_name, "jsfd%d", i);
disk->fops = &jsfd_fops;
- disk->minor_shift = 0;
set_capacity(disk, jdp->dsize >> 9);
add_disk(disk);
set_device_ro(MKDEV(JSFD_MAJOR, i), 1);
((sdp->type != TYPE_DISK) && (sdp->type != TYPE_MOD)))
return 0;
- gd = alloc_disk();
+ gd = alloc_disk(16);
if (!gd)
return 1;
gd->de = sdp->de;
gd->major = SD_MAJOR(dsk_nr>>4);
gd->first_minor = (dsk_nr & 15)<<4;
- gd->minor_shift = 4;
gd->fops = &sd_fops;
if (dsk_nr > 26)
sprintf(gd->disk_name, "sd%c%c",'a'+dsk_nr/26-1,'a'+dsk_nr%26);
* with loadable modules. */
if (cd->disk)
continue;
- disk = alloc_disk();
+ disk = alloc_disk(1);
if (!disk)
continue;
if (cd->disk) {
}
disk->major = MAJOR_NR;
disk->first_minor = i;
- disk->minor_shift = 0;
strcpy(disk->disk_name, cd->cdi.name);
disk->fops = &sr_bdops;
disk->flags = GENHD_FL_CD;
wipe_partitions(disk);
unlink_gendisk(disk);
devfs_remove_partitions(disk);
- if (disk->part) {
- kfree(disk->part);
- disk->part = NULL;
- }
+ disk->flags &= ~GENHD_FL_UP;
}
struct dev_name {
#define GENHD_FL_DRIVERFS 2
#define GENHD_FL_DEVFS 4
#define GENHD_FL_CD 8
+#define GENHD_FL_UP 16
struct gendisk {
int major; /* major number of driver */
extern int rescan_partitions(struct gendisk *disk, struct block_device *bdev);
extern void update_partition(struct gendisk *disk, int part);
-extern struct gendisk *alloc_disk(void);
+extern struct gendisk *alloc_disk(int minors);
extern void put_disk(struct gendisk *disk);
/* will go away */