Patch from Andries.Brouwer@cwi.nl The following patch does the following: - static const char *blkdevs[MAX_BLKDEV]; disappears - get_blkdev_list, (un)register_blkdev, __bdevname are moved from block_dev.c to genhd.c - the third "fops" parameter of register_blkdev was unused; now removed everywhere - zillions of places had printk("cannot get major") upon error return from register_blkdev; removed all of these and inserted a single printk in register_blkdev. Of course the reason for the patch is that one fixed size array is eliminated. Documentation/cdrom/cdrom-standard.tex | 7 - arch/m68k/atari/stram.c | 3 arch/um/drivers/ubd_kern.c | 19 +--- drivers/acorn/block/fd1772.c | 6 - drivers/acorn/block/mfmhd.c | 6 - drivers/block/DAC960.c | 11 -- drivers/block/acsi.c | 4 drivers/block/amiflop.c | 5 - drivers/block/ataflop.c | 4 drivers/block/cciss.c | 8 - drivers/block/cpqarray.c | 6 - drivers/block/floppy.c | 3 drivers/block/genhd.c | 140 ++++++++++++++++++++++++++++++++- drivers/block/loop.c | 5 - drivers/block/nbd.c | 4 drivers/block/paride/pcd.c | 3 drivers/block/paride/pd.c | 5 - drivers/block/paride/pf.c | 4 drivers/block/ps2esdi.c | 9 -- drivers/block/rd.c | 3 drivers/block/swim3.c | 4 drivers/block/swim_iop.c | 9 -- drivers/block/umem.c | 6 - drivers/block/xd.c | 9 -- drivers/block/z2ram.c | 13 +-- drivers/cdrom/aztcd.c | 8 - drivers/cdrom/cdu31a.c | 5 - drivers/cdrom/cm206.c | 6 - drivers/cdrom/gscd.c | 5 - drivers/cdrom/mcd.c | 3 drivers/cdrom/mcdx.c | 4 drivers/cdrom/optcd.c | 3 drivers/cdrom/sbpcd.c | 5 - drivers/cdrom/sjcd.c | 7 - drivers/cdrom/sonycd535.c | 4 drivers/ide/ide-probe.c | 5 - drivers/ide/legacy/hd.c | 6 - drivers/md/dm.c | 3 drivers/md/md.c | 9 -- drivers/message/i2o/i2o_block.c | 6 - drivers/mtd/ftl.c | 6 - drivers/mtd/mtdblock.c | 7 - drivers/mtd/mtdblock_ro.c | 15 --- drivers/mtd/nftlcore.c | 4 drivers/s390/block/dasd_genhd.c | 5 - drivers/s390/block/xpram.c | 9 -- drivers/s390/char/tape_block.c | 8 - drivers/sbus/char/jsflash.c | 4 drivers/scsi/sd.c | 11 -- drivers/scsi/sr.c | 2 drivers/scsi/sym53c8xx_2/sym_hipd.c | 2 fs/block_dev.c | 62 -------------- include/linux/fs.h | 2 53 files changed, 242 insertions(+), 270 deletions(-) diff -puN arch/m68k/atari/stram.c~register_blkdev-cleanups arch/m68k/atari/stram.c --- 25/arch/m68k/atari/stram.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/arch/m68k/atari/stram.c 2003-03-07 12:24:11.000000000 -0800 @@ -1052,8 +1052,7 @@ int __init stram_device_init(void) if (!stram_disk) return -ENOMEM; - if (register_blkdev( STRAM_MAJOR, "stram", &stram_fops)) { - printk(KERN_ERR "stram: Unable to get major %d\n", STRAM_MAJOR); + if (register_blkdev(STRAM_MAJOR, "stram")) { put_disk(stram_disk); return -ENXIO; } diff -puN arch/um/drivers/ubd_kern.c~register_blkdev-cleanups arch/um/drivers/ubd_kern.c --- 25/arch/um/drivers/ubd_kern.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/arch/um/drivers/ubd_kern.c 2003-03-07 12:24:11.000000000 -0800 @@ -673,7 +673,7 @@ static struct mc_device ubd_mc = { static int ubd_mc_init(void) { mconsole_register_dev(&ubd_mc); - return(0); + return 0; } __initcall(ubd_mc_init); @@ -682,29 +682,24 @@ int ubd_init(void) { int i; - ubd_dir_handle = devfs_mk_dir (NULL, "ubd", NULL); - if(register_blkdev(MAJOR_NR, "ubd", &ubd_blops)){ - printk(KERN_ERR "ubd: unable to get major %d\n", MAJOR_NR); + ubd_dir_handle = devfs_mk_dir(NULL, "ubd", NULL); + if (register_blkdev(MAJOR_NR, "ubd")) return -1; - } blk_init_queue(&ubd_queue, do_ubd_request, &ubd_io_lock); elevator_init(&ubd_queue, &elevator_noop); - if(fake_major != 0){ + if (fake_major != 0) { char name[sizeof("ubd_nnn\0")]; snprintf(name, sizeof(name), "ubd_%d", fake_major); ubd_fake_dir_handle = devfs_mk_dir(NULL, name, NULL); - if(register_blkdev(fake_major, "ubd", &ubd_blops)){ - printk(KERN_ERR "ubd: unable to get major %d\n", - fake_major); + if (register_blkdev(fake_major, "ubd")) return -1; - } } - for(i = 0; i < MAX_DEV; i++) + for (i = 0; i < MAX_DEV; i++) ubd_add(i); - return(0); + return 0; } late_initcall(ubd_init); diff -puN Documentation/cdrom/cdrom-standard.tex~register_blkdev-cleanups Documentation/cdrom/cdrom-standard.tex --- 25/Documentation/cdrom/cdrom-standard.tex~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/Documentation/cdrom/cdrom-standard.tex 2003-03-07 12:24:11.000000000 -0800 @@ -758,11 +758,8 @@ merged back into \cdromh. \subsection{$Struct\ file_operations\ cdrom_fops$} The contents of this structure were described in section~\ref{cdrom.c}. -As already stated, this structure should be used to register block -devices with the kernel: -$$ -register_blkdev(major, , \&cdrom_fops); -$$ +A pointer to this structure is assigned to the $fops$ field +of the $struct gendisk$. \subsection{$Int\ register_cdrom( struct\ cdrom_device_info\ * cdi)$} diff -puN drivers/acorn/block/fd1772.c~register_blkdev-cleanups drivers/acorn/block/fd1772.c --- 25/drivers/acorn/block/fd1772.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/acorn/block/fd1772.c 2003-03-07 12:24:11.000000000 -0800 @@ -1539,11 +1539,9 @@ int fd1772_init(void) goto err_disk; } - err = register_blkdev(MAJOR_NR, "fd", &floppy_fops); - if (err) { - printk("Unable to get major %d for floppy\n", MAJOR_NR); + err = register_blkdev(MAJOR_NR, "fd"); + if (err) goto err_disk; - } err = -EBUSY; if (request_dma(FLOPPY_DMA, "fd1772")) { diff -puN drivers/acorn/block/mfmhd.c~register_blkdev-cleanups drivers/acorn/block/mfmhd.c --- 25/drivers/acorn/block/mfmhd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/acorn/block/mfmhd.c 2003-03-07 12:24:11.000000000 -0800 @@ -1267,11 +1267,9 @@ static int mfm_do_init(unsigned char irq if (!request_region (mfm_addr, 10, "mfm")) goto out1; - ret = register_blkdev(MAJOR_NR, "mfm", &mfm_fops); - if (ret) { - printk("mfm_init: unable to get major number %d\n", MAJOR_NR); + ret = register_blkdev(MAJOR_NR, "mfm"); + if (ret) goto out2; - } /* Stuff for the assembler routines to get to */ hdc63463_baseaddress = ioaddr(mfm_addr); diff -puN drivers/block/acsi.c~register_blkdev-cleanups drivers/block/acsi.c --- 25/drivers/block/acsi.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/acsi.c 2003-03-07 12:24:11.000000000 -0800 @@ -1613,7 +1613,6 @@ void acsi_attach_SLMs( int (*attach_func int acsi_init( void ) - { int err = 0; int i, target, lun; @@ -1623,8 +1622,7 @@ int acsi_init( void ) #endif if (!MACH_IS_ATARI || !ATARIHW_PRESENT(ACSI)) return 0; - if (register_blkdev( ACSI_MAJOR, "ad", &acsi_fops )) { - printk( KERN_ERR "Unable to get major %d for ACSI\n", ACSI_MAJOR ); + if (register_blkdev(ACSI_MAJOR, "ad")) { err = -EBUSY; goto out1; } diff -puN drivers/block/amiflop.c~register_blkdev-cleanups drivers/block/amiflop.c --- 25/drivers/block/amiflop.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/amiflop.c 2003-03-07 12:24:11.000000000 -0800 @@ -1754,10 +1754,9 @@ int __init amiga_floppy_init(void) if (!AMIGAHW_PRESENT(AMI_FLOPPY)) return -ENXIO; - if (register_blkdev(FLOPPY_MAJOR,"fd",&floppy_fops)) { - printk("fd: Unable to get major %d for floppy\n",FLOPPY_MAJOR); + if (register_blkdev(FLOPPY_MAJOR,"fd")) return -EBUSY; - } + /* * We request DSKPTR, DSKLEN and DSKDATA only, because the other * floppy registers are too spreaded over the custom register space diff -puN drivers/block/ataflop.c~register_blkdev-cleanups drivers/block/ataflop.c --- 25/drivers/block/ataflop.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/ataflop.c 2003-03-07 12:24:11.000000000 -0800 @@ -1929,10 +1929,8 @@ int __init atari_floppy_init (void) /* Hades doesn't have Atari-compatible floppy */ return -ENXIO; - if (register_blkdev(FLOPPY_MAJOR,"fd",&floppy_fops)) { - printk(KERN_ERR "Unable to get major %d for floppy\n",FLOPPY_MAJOR); + if (register_blkdev(FLOPPY_MAJOR,"fd")) return -EBUSY; - } for (i = 0; i < FD_MAX_UNITS; i++) { unit[i].disk = alloc_disk(1); diff -puN drivers/block/cciss.c~register_blkdev-cleanups drivers/block/cciss.c --- 25/drivers/block/cciss.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/cciss.c 2003-03-07 12:24:11.000000000 -0800 @@ -2451,14 +2451,12 @@ static int __init cciss_init_one(struct return -ENODEV; } - if( register_blkdev(COMPAQ_CISS_MAJOR+i, hba[i]->devname, &cciss_fops)) - { - printk(KERN_ERR "cciss: Unable to get major number " - "%d for %s\n", COMPAQ_CISS_MAJOR+i, hba[i]->devname); + if (register_blkdev(COMPAQ_CISS_MAJOR+i, hba[i]->devname)) { release_io_mem(hba[i]); free_hba(i); - return(-1); + return -1; } + /* make sure the board interrupts are off */ hba[i]->access.set_intr_mask(hba[i], CCISS_INTR_OFF); if( request_irq(hba[i]->intr, do_cciss_intr, diff -puN drivers/block/cpqarray.c~register_blkdev-cleanups drivers/block/cpqarray.c --- 25/drivers/block/cpqarray.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/cpqarray.c 2003-03-07 12:24:11.000000000 -0800 @@ -339,11 +339,9 @@ static int __init cpqarray_init(void) for(i=0; i < nr_ctlr; i++) { /* If this successful it should insure that we are the only */ /* instance of the driver */ - if (register_blkdev(COMPAQ_SMART2_MAJOR+i, hba[i]->devname, &ida_fops)) { - printk(KERN_ERR "cpqarray: Unable to get major number %d for ida\n", - COMPAQ_SMART2_MAJOR+i); + if (register_blkdev(COMPAQ_SMART2_MAJOR+i, hba[i]->devname)) continue; - } + hba[i]->access.set_intr_mask(hba[i], 0); if (request_irq(hba[i]->intr, do_ida_intr, SA_INTERRUPT|SA_SHIRQ, hba[i]->devname, hba[i])) { diff -puN drivers/block/DAC960.c~register_blkdev-cleanups drivers/block/DAC960.c --- 25/drivers/block/DAC960.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/DAC960.c 2003-03-07 12:24:11.000000000 -0800 @@ -13,9 +13,6 @@ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for complete details. - The author respectfully requests that any modifications to this software be - sent directly to him for evaluation and testing. - */ @@ -2381,13 +2378,9 @@ static boolean DAC960_RegisterBlockDevic /* Register the Block Device Major Number for this DAC960 Controller. */ - if (register_blkdev(MajorNumber, "dac960", - &DAC960_BlockDeviceOperations) < 0) - { - DAC960_Error("UNABLE TO ACQUIRE MAJOR NUMBER %d - DETACHING\n", - Controller, MajorNumber); + if (register_blkdev(MajorNumber, "dac960") < 0) return false; - } + /* Initialize the I/O Request Queue. */ diff -puN drivers/block/floppy.c~register_blkdev-cleanups drivers/block/floppy.c --- 25/drivers/block/floppy.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/floppy.c 2003-03-07 12:24:11.000000000 -0800 @@ -4232,8 +4232,7 @@ int __init floppy_init(void) } devfs_mk_dir (NULL, "floppy", NULL); - if (register_blkdev(FLOPPY_MAJOR,"fd",&floppy_fops)) { - printk("Unable to get major %d for floppy\n",FLOPPY_MAJOR); + if (register_blkdev(FLOPPY_MAJOR,"fd")) { err = -EBUSY; goto out; } diff -puN drivers/block/genhd.c~register_blkdev-cleanups drivers/block/genhd.c --- 25/drivers/block/genhd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/genhd.c 2003-03-07 12:24:11.000000000 -0800 @@ -14,10 +14,16 @@ #include #include +#define MAX_PROBE_HASH 255 /* random */ static struct subsystem block_subsys; -#define MAX_PROBE_HASH 23 /* random */ +/* Can be merged with blk_probe or deleted altogether. Later. */ +static struct blk_major_name { + struct blk_major_name *next; + int major; + char name[16]; +} *major_names[MAX_PROBE_HASH]; static struct blk_probe { struct blk_probe *next; @@ -30,9 +36,132 @@ static struct blk_probe { } *probes[MAX_PROBE_HASH]; /* index in the above - for now: assume no multimajor ranges */ +static inline int major_to_index(int major) +{ + return major % MAX_PROBE_HASH; +} + static inline int dev_to_index(dev_t dev) { - return MAJOR(dev) % MAX_PROBE_HASH; + return major_to_index(MAJOR(dev)); +} + +const char *__bdevname(dev_t dev) +{ + static char buffer[40]; + char *name = "unknown-block"; + unsigned int major = MAJOR(dev); + unsigned int minor = MINOR(dev); + int index = major_to_index(major); + struct blk_major_name *n; + + down_read(&block_subsys.rwsem); + for (n = major_names[index]; n; n = n->next) + if (n->major == major) + break; + if (n) + name = &(n->name[0]); + sprintf(buffer, "%s(%u,%u)", name, major, minor); + up_read(&block_subsys.rwsem); + + return buffer; +} + +/* get block device names in somewhat random order */ +int get_blkdev_list(char *p) +{ + struct blk_major_name *n; + int i, len; + + len = sprintf(p, "\nBlock devices:\n"); + + down_read(&block_subsys.rwsem); + for (i = 0; i < ARRAY_SIZE(major_names); i++) { + for (n = major_names[i]; n; n = n->next) + len += sprintf(p+len, "%3d %s\n", + n->major, n->name); + } + up_read(&block_subsys.rwsem); + + return len; +} + +int register_blkdev(unsigned int major, const char *name) +{ + struct blk_major_name **n, *p; + int index, ret = 0; + + if (devfs_only()) + return 0; + + /* temporary */ + if (major == 0) { + down_read(&block_subsys.rwsem); + for (index = ARRAY_SIZE(major_names)-1; index > 0; index--) + if (major_names[index] == NULL) + break; + up_read(&block_subsys.rwsem); + + if (index == 0) { + printk("register_blkdev: failed to get major for %s\n", + name); + return -EBUSY; + } + ret = major = index; + } + + p = kmalloc(sizeof(struct blk_major_name), GFP_KERNEL); + if (p == NULL) + return -ENOMEM; + + p->major = major; + strncpy(p->name, name, sizeof(p->name)-1); + p->name[sizeof(p->name)-1] = 0; + p->next = 0; + index = major_to_index(major); + + down_write(&block_subsys.rwsem); + for (n = &major_names[index]; *n; n = &(*n)->next) + if ((*n)->major == major) + break; + if (!*n) + *n = p; + else + ret = -EBUSY; + up_write(&block_subsys.rwsem); + + if (ret < 0) + printk("register_blkdev: cannot get major %d for %s\n", + major, name); + + return ret; +} + +/* todo: make void - error printk here */ +int unregister_blkdev(unsigned int major, const char *name) +{ + struct blk_major_name **n, *p; + int index; + int ret = 0; + + if (devfs_only()) + return 0; + index = major_to_index(major); + + down_write(&block_subsys.rwsem); + for (n = &major_names[index]; *n; n = &(*n)->next) + if ((*n)->major == major) + break; + if (!*n || strcmp((*n)->name, name)) + ret = -EINVAL; + else { + p = *n; + *n = p->next; + kfree(p); + } + up_write(&block_subsys.rwsem); + + return ret; } /* @@ -48,6 +177,9 @@ void blk_register_region(dev_t dev, unsi struct blk_probe *p = kmalloc(sizeof(struct blk_probe), GFP_KERNEL); struct blk_probe **s; + if (p == NULL) + return; + p->owner = module; p->get = probe; p->lock = lock; @@ -98,9 +230,9 @@ static int exact_lock(dev_t dev, void *d /** * add_gendisk - add partitioning information to kernel list - * @gp: per-device partitioning information + * @disk: per-device partitioning information * - * This function registers the partitioning information in @gp + * This function registers the partitioning information in @disk * with the kernel. */ void add_disk(struct gendisk *disk) diff -puN drivers/block/loop.c~register_blkdev-cleanups drivers/block/loop.c --- 25/drivers/block/loop.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/loop.c 2003-03-07 12:24:11.000000000 -0800 @@ -1017,11 +1017,8 @@ int __init loop_init(void) max_loop = 8; } - if (register_blkdev(LOOP_MAJOR, "loop", &lo_fops)) { - printk(KERN_WARNING "Unable to get major number %d for loop" - " device\n", LOOP_MAJOR); + if (register_blkdev(LOOP_MAJOR, "loop")) return -EIO; - } devfs_mk_dir(NULL, "loop", NULL); diff -puN drivers/block/nbd.c~register_blkdev-cleanups drivers/block/nbd.c --- 25/drivers/block/nbd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/nbd.c 2003-03-07 12:24:11.000000000 -0800 @@ -564,9 +564,7 @@ static int __init nbd_init(void) nbd_dev[i].disk = disk; } - if (register_blkdev(NBD_MAJOR, "nbd", &nbd_fops)) { - printk("Unable to get major number %d for NBD\n", - NBD_MAJOR); + if (register_blkdev(NBD_MAJOR, "nbd")) { err = -EIO; goto out; } diff -puN drivers/block/paride/pcd.c~register_blkdev-cleanups drivers/block/paride/pcd.c --- 25/drivers/block/paride/pcd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/paride/pcd.c 2003-03-07 12:24:11.000000000 -0800 @@ -942,8 +942,7 @@ static int __init pcd_init(void) /* get the atapi capabilities page */ pcd_probe_capabilities(); - if (register_blkdev(major, name, &pcd_bdops)) { - printk("pcd: unable to get major number %d\n", major); + if (register_blkdev(major, name)) { for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) put_disk(cd->disk); return -1; diff -puN drivers/block/paride/pd.c~register_blkdev-cleanups drivers/block/paride/pd.c --- 25/drivers/block/paride/pd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/paride/pd.c 2003-03-07 12:24:11.000000000 -0800 @@ -890,10 +890,9 @@ static int __init pd_init(void) { if (disable) return -1; - if (register_blkdev(major, name, &pd_fops)) { - printk("%s: unable to get major number %d\n", name, major); + if (register_blkdev(major, name)) return -1; - } + blk_init_queue(&pd_queue, do_pd_request, &pd_lock); blk_queue_max_sectors(&pd_queue, cluster); diff -puN drivers/block/paride/pf.c~register_blkdev-cleanups drivers/block/paride/pf.c --- 25/drivers/block/paride/pf.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/paride/pf.c 2003-03-07 12:24:11.000000000 -0800 @@ -957,8 +957,7 @@ static int __init pf_init(void) return -1; pf_busy = 0; - if (register_blkdev(major, name, &pf_fops)) { - printk("pf_init: unable to get major number %d\n", major); + if (register_blkdev(major, name)) { for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) put_disk(pf->disk); return -1; @@ -969,6 +968,7 @@ static int __init pf_init(void) for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) { struct gendisk *disk = pf->disk; + if (!pf->present) continue; disk->private_data = pf; diff -puN drivers/block/ps2esdi.c~register_blkdev-cleanups drivers/block/ps2esdi.c --- 25/drivers/block/ps2esdi.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/ps2esdi.c 2003-03-07 12:24:11.000000000 -0800 @@ -146,13 +146,10 @@ int __init ps2esdi_init(void) int error = 0; - /* register the device - pass the name, major number and operations - vector . */ - if (register_blkdev(PS2ESDI_MAJOR, "ed", &ps2esdi_fops)) { - printk("%s: Unable to get major number %d\n", DEVICE_NAME, - PS2ESDI_MAJOR); + /* register the device - pass the name and major number */ + if (register_blkdev(PS2ESDI_MAJOR, "ed")) return -1; - } + /* set up some global information - indicating device specific info */ blk_init_queue(&ps2esdi_queue, do_ps2esdi_request, &ps2esdi_lock); diff -puN drivers/block/rd.c~register_blkdev-cleanups drivers/block/rd.c --- 25/drivers/block/rd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/rd.c 2003-03-07 12:24:11.000000000 -0800 @@ -409,8 +409,7 @@ static int __init rd_init (void) goto out; } - if (register_blkdev(RAMDISK_MAJOR, "ramdisk", &rd_bd_op)) { - printk("RAMDISK: Could not get major %d", RAMDISK_MAJOR); + if (register_blkdev(RAMDISK_MAJOR, "ramdisk")) { err = -EIO; goto out; } diff -puN drivers/block/swim3.c~register_blkdev-cleanups drivers/block/swim3.c --- 25/drivers/block/swim3.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/swim3.c 2003-03-07 12:24:11.000000000 -0800 @@ -1004,9 +1004,7 @@ int swim3_init(void) goto out; } - if (register_blkdev(FLOPPY_MAJOR, "fd", &floppy_fops)) { - printk(KERN_ERR"Unable to get major %d for floppy\n", - FLOPPY_MAJOR); + if (register_blkdev(FLOPPY_MAJOR, "fd")) { err = -EBUSY; goto out; } diff -puN drivers/block/swim_iop.c~register_blkdev-cleanups drivers/block/swim_iop.c --- 25/drivers/block/swim_iop.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/swim_iop.c 2003-03-07 12:24:11.000000000 -0800 @@ -137,13 +137,12 @@ int swimiop_init(void) current_req = NULL; floppy_count = 0; - if (!iop_ism_present) return -ENODEV; + if (!iop_ism_present) + return -ENODEV; - if (register_blkdev(FLOPPY_MAJOR, "fd", &floppy_fops)) { - printk(KERN_ERR "SWIM-IOP: Unable to get major %d for floppy\n", - FLOPPY_MAJOR); + if (register_blkdev(FLOPPY_MAJOR, "fd")) return -EBUSY; - } + blk_init_queue(&swim_queue, do_fd_request, &swim_iop_lock); printk("SWIM-IOP: %s by Joshua M. Thompson (funaho@jurai.org)\n", DRIVER_VERSION); diff -puN drivers/block/umem.c~register_blkdev-cleanups drivers/block/umem.c --- 25/drivers/block/umem.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/umem.c 2003-03-07 12:24:11.000000000 -0800 @@ -1145,11 +1145,9 @@ int __init mm_init(void) if (retval) return -ENOMEM; - err = major_nr = register_blkdev(0, "umem", &mm_fops); - if (err < 0) { - printk(KERN_ERR "MM: Could not register block device\n"); + err = major_nr = register_blkdev(0, "umem"); + if (err < 0) return -EIO; - } for (i = 0; i < num_cards; i++) { mm_gendisk[i] = alloc_disk(1 << MM_SHIFT); diff -puN drivers/block/xd.c~register_blkdev-cleanups drivers/block/xd.c --- 25/drivers/block/xd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/xd.c 2003-03-07 12:24:11.000000000 -0800 @@ -154,9 +154,9 @@ static int __init xd_init(void) #ifdef MODULE for (i = 4; i > 0; i--) - if(((xd[i] = xd[i-1]) >= 0) && !count) + if (((xd[i] = xd[i-1]) >= 0) && !count) count = i; - if((xd[0] = count)) + if ((xd[0] = count)) do_xd_setup(xd); #endif @@ -170,10 +170,9 @@ static int __init xd_init(void) } err = -EBUSY; - if (register_blkdev(XT_DISK_MAJOR,"xd",&xd_fops)) { - printk("xd: Unable to get major number %d\n",XT_DISK_MAJOR); + if (register_blkdev(XT_DISK_MAJOR, "xd")) goto out1; - } + devfs_mk_dir(NULL, "xd", NULL); blk_init_queue(&xd_queue, do_xd_request, &xd_lock); if (xd_detect(&controller,&address)) { diff -puN drivers/block/z2ram.c~register_blkdev-cleanups drivers/block/z2ram.c --- 25/drivers/block/z2ram.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/block/z2ram.c 2003-03-07 12:24:11.000000000 -0800 @@ -331,21 +331,18 @@ static struct gendisk *z2_find(dev_t dev static struct request_queue z2_queue; int __init -z2_init( void ) +z2_init(void) { - if ( !MACH_IS_AMIGA ) + if (!MACH_IS_AMIGA) return -ENXIO; - if ( register_blkdev( Z2RAM_MAJOR, DEVICE_NAME, &z2_fops ) ) - { - printk( KERN_ERR DEVICE_NAME ": Unable to get major %d\n", - Z2RAM_MAJOR ); + if (register_blkdev(Z2RAM_MAJOR, DEVICE_NAME)) return -EBUSY; - } + z2ram_gendisk = alloc_disk(1); if (!z2ram_gendisk) { - unregister_blkdev( Z2RAM_MAJOR, DEVICE_NAME ); + unregister_blkdev(Z2RAM_MAJOR, DEVICE_NAME); return -ENOMEM; } z2ram_gendisk->major = Z2RAM_MAJOR; diff -puN drivers/cdrom/aztcd.c~register_blkdev-cleanups drivers/cdrom/aztcd.c --- 25/drivers/cdrom/aztcd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/cdrom/aztcd.c 2003-03-07 12:24:11.000000000 -0800 @@ -1910,12 +1910,12 @@ static int __init aztcd_init(void) azt_disk = alloc_disk(1); if (!azt_disk) goto err_out; - if (register_blkdev(MAJOR_NR, "aztcd", &azt_fops) != 0) { - printk(KERN_WARNING "aztcd: Unable to get major %d for Aztech" - " CD-ROM\n", MAJOR_NR); + + if (register_blkdev(MAJOR_NR, "aztcd")) { ret = -EIO; goto err_out2; } + blk_init_queue(&azt_queue, do_aztcd_request, &aztSpin); blk_queue_hardsect_size(&azt_queue, 2048); azt_disk->major = MAJOR_NR; @@ -1931,7 +1931,7 @@ static int __init aztcd_init(void) azt_invalidate_buffers(); aztPresent = 1; aztCloseDoor(); - return (0); + return 0; err_out2: put_disk(azt_disk); err_out: diff -puN drivers/cdrom/cdu31a.c~register_blkdev-cleanups drivers/cdrom/cdu31a.c --- 25/drivers/cdrom/cdu31a.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/cdrom/cdu31a.c 2003-03-07 12:24:11.000000000 -0800 @@ -3368,11 +3368,8 @@ int __init cdu31a_init(void) if (!request_region(cdu31a_port, 4, "cdu31a")) goto errout3; - if (register_blkdev(MAJOR_NR, "cdu31a", &scd_bdops)) { - printk("Unable to get major %d for CDU-31a\n", - MAJOR_NR); + if (register_blkdev(MAJOR_NR, "cdu31a")) goto errout2; - } disk = alloc_disk(1); if (!disk) diff -puN drivers/cdrom/cm206.c~register_blkdev-cleanups drivers/cdrom/cm206.c --- 25/drivers/cdrom/cm206.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/cdrom/cm206.c 2003-03-07 12:24:11.000000000 -0800 @@ -1489,10 +1489,10 @@ int __init cm206_init(void) goto out_probe; } printk(".\n"); - if (register_blkdev(MAJOR_NR, "cm206", &cm206_bdops) != 0) { - printk(KERN_INFO "Cannot register for major %d!\n", MAJOR_NR); + + if (register_blkdev(MAJOR_NR, "cm206")) goto out_blkdev; - } + disk = alloc_disk(1); if (!disk) goto out_disk; diff -puN drivers/cdrom/gscd.c~register_blkdev-cleanups drivers/cdrom/gscd.c --- 25/drivers/cdrom/gscd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/cdrom/gscd.c 2003-03-07 12:24:11.000000000 -0800 @@ -959,12 +959,11 @@ static int __init gscd_init(void) gscd_disk->fops = &gscd_fops; sprintf(gscd_disk->disk_name, "gscd"); - if (register_blkdev(MAJOR_NR, "gscd", &gscd_fops) != 0) { - printk(KERN_WARNING "GSCD: Unable to get major %d for GoldStar " - "CD-ROM\n", MAJOR_NR); + if (register_blkdev(MAJOR_NR, "gscd")) { ret = -EIO; goto err_out2; } + devfs_register(NULL, "gscd", DEVFS_FL_DEFAULT, MAJOR_NR, 0, S_IFBLK | S_IRUGO | S_IWUGO, &gscd_fops, NULL); diff -puN drivers/cdrom/mcd.c~register_blkdev-cleanups drivers/cdrom/mcd.c --- 25/drivers/cdrom/mcd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/cdrom/mcd.c 2003-03-07 12:24:11.000000000 -0800 @@ -1068,8 +1068,7 @@ int __init mcd_init(void) put_disk(disk); return -EIO; } - if (register_blkdev(MAJOR_NR, "mcd", &mcd_bdops) != 0) { - printk(KERN_ERR "mcd: Unable to get major %d for Mitsumi CD-ROM\n", MAJOR_NR); + if (register_blkdev(MAJOR_NR, "mcd")) { put_disk(disk); return -EIO; } diff -puN drivers/cdrom/mcdx.c~register_blkdev-cleanups drivers/cdrom/mcdx.c --- 25/drivers/cdrom/mcdx.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/cdrom/mcdx.c 2003-03-07 12:24:11.000000000 -0800 @@ -1193,11 +1193,9 @@ int __init mcdx_init_drive(int drive) } xtrace(INIT, "init() register blkdev\n"); - if (register_blkdev(MAJOR_NR, "mcdx", &mcdx_bdops) != 0) { + if (register_blkdev(MAJOR_NR, "mcdx")) { release_region((unsigned long) stuffp->wreg_data, MCDX_IO_SIZE); - xwarn("%s=0x%3p,%d: Init failed. Can't get major %d.\n", - MCDX, stuffp->wreg_data, stuffp->irq, MAJOR_NR); kfree(stuffp); put_disk(disk); return 1; diff -puN drivers/cdrom/optcd.c~register_blkdev-cleanups drivers/cdrom/optcd.c --- 25/drivers/cdrom/optcd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/cdrom/optcd.c 2003-03-07 12:24:11.000000000 -0800 @@ -2047,8 +2047,7 @@ static int __init optcd_init(void) put_disk(optcd_disk); return -EIO; } - if (register_blkdev(MAJOR_NR, "optcd", &opt_fops) != 0) { - printk(KERN_ERR "optcd: unable to get major %d\n", MAJOR_NR); + if (register_blkdev(MAJOR_NR, "optcd")) { release_region(optcd_port, 4); put_disk(optcd_disk); return -EIO; diff -puN drivers/cdrom/sbpcd.c~register_blkdev-cleanups drivers/cdrom/sbpcd.c --- 25/drivers/cdrom/sbpcd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/cdrom/sbpcd.c 2003-03-07 12:24:11.000000000 -0800 @@ -5795,15 +5795,14 @@ int __init sbpcd_init(void) OUT(MIXER_data,0xCC); /* one nibble per channel, max. value: 0xFF */ #endif /* SOUND_BASE */ - if (register_blkdev(MAJOR_NR, major_name, &sbpcd_bdops) != 0) - { - msg(DBG_INF, "Can't get MAJOR %d for Matsushita CDROM\n", MAJOR_NR); + if (register_blkdev(MAJOR_NR, major_name)) { #ifdef MODULE return -EIO; #else goto init_done; #endif /* MODULE */ } + blk_init_queue(&sbpcd_queue, do_sbpcd_request, &sbpcd_lock); devfs_mk_dir (NULL, "sbp", NULL); diff -puN drivers/cdrom/sjcd.c~register_blkdev-cleanups drivers/cdrom/sjcd.c --- 25/drivers/cdrom/sjcd.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/cdrom/sjcd.c 2003-03-07 12:24:11.000000000 -0800 @@ -1677,11 +1677,8 @@ static int __init sjcd_init(void) printk("SJCD: sjcd=0x%x: ", sjcd_base); #endif - if (register_blkdev(MAJOR_NR, "sjcd", &sjcd_fops) != 0) { - printk("SJCD: Unable to get major %d for Sanyo CD-ROM\n", - MAJOR_NR); - return (-EIO); - } + if (register_blkdev(MAJOR_NR, "sjcd")) + return -EIO; blk_init_queue(&sjcd_queue, do_sjcd_request, &sjcd_lock); blk_queue_hardsect_size(&sjcd_queue, 2048); diff -puN drivers/cdrom/sonycd535.c~register_blkdev-cleanups drivers/cdrom/sonycd535.c --- 25/drivers/cdrom/sonycd535.c~register_blkdev-cleanups 2003-03-07 12:24:10.000000000 -0800 +++ 25-akpm/drivers/cdrom/sonycd535.c 2003-03-07 12:24:11.000000000 -0800 @@ -1546,9 +1546,7 @@ static int __init sony535_init(void) printk("IRQ%d, ", tmp_irq); printk("using %d byte buffer\n", sony_buffer_size); - if (register_blkdev(MAJOR_NR, CDU535_HANDLE, &cdu_fops)) { - printk("Unable to get major %d for %s\n", - MAJOR_NR, CDU535_MESSAGE_NAME); + if (register_blkdev(MAJOR_NR, CDU535_HANDLE)) { err = -EIO; goto out1; } diff -puN drivers/ide/ide-probe.c~register_blkdev-cleanups drivers/ide/ide-probe.c --- 25/drivers/ide/ide-probe.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/ide/ide-probe.c 2003-03-07 12:24:11.000000000 -0800 @@ -1292,11 +1292,8 @@ int hwif_init (ide_hwif_t *hwif) /* we set it back to 1 if all is ok below */ hwif->present = 0; - if (register_blkdev (hwif->major, hwif->name, ide_fops)) { - printk("%s: UNABLE TO GET MAJOR NUMBER %d\n", - hwif->name, hwif->major); + if (register_blkdev(hwif->major, hwif->name)) return 0; - } if (alloc_disks(hwif) < 0) goto out; diff -puN drivers/ide/legacy/hd.c~register_blkdev-cleanups drivers/ide/legacy/hd.c --- 25/drivers/ide/legacy/hd.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/ide/legacy/hd.c 2003-03-07 12:24:11.000000000 -0800 @@ -708,10 +708,10 @@ static struct block_device_operations hd static int __init hd_init(void) { int drive; - if (register_blkdev(MAJOR_NR,"hd",&hd_fops)) { - printk("hd: unable to get major %d for hard disk\n",MAJOR_NR); + + if (register_blkdev(MAJOR_NR,"hd")) return -1; - } + blk_init_queue(&hd_queue, do_hd_request, &hd_lock); blk_queue_max_sectors(&hd_queue, 255); init_timer(&device_timer); diff -puN drivers/md/dm.c~register_blkdev-cleanups drivers/md/dm.c --- 25/drivers/md/dm.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/md/dm.c 2003-03-07 12:24:11.000000000 -0800 @@ -79,9 +79,8 @@ static __init int local_init(void) return -ENOMEM; _major = major; - r = register_blkdev(_major, _name, &dm_blk_dops); + r = register_blkdev(_major, _name); if (r < 0) { - DMERR("register_blkdev failed"); kmem_cache_destroy(_io_cache); return r; } diff -puN drivers/md/md.c~register_blkdev-cleanups drivers/md/md.c --- 25/drivers/md/md.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/md/md.c 2003-03-07 12:24:11.000000000 -0800 @@ -3214,11 +3214,10 @@ int __init md_init(void) MD_MAJOR_VERSION, MD_MINOR_VERSION, MD_PATCHLEVEL_VERSION, MAX_MD_DEVS, MD_SB_DISKS); - if (register_blkdev (MAJOR_NR, "md", &md_fops)) { - printk(KERN_ALERT "md: Unable to get major %d for md\n", MAJOR_NR); - return (-1); - } - devfs_mk_dir (NULL, "md", NULL); + if (register_blkdev(MAJOR_NR, "md")) + return -1; + + devfs_mk_dir(NULL, "md", NULL); blk_register_region(MKDEV(MAJOR_NR, 0), MAX_MD_DEVS, THIS_MODULE, md_probe, NULL, NULL); for (minor=0; minor < MAX_MD_DEVS; ++minor) { diff -puN drivers/message/i2o/i2o_block.c~register_blkdev-cleanups drivers/message/i2o/i2o_block.c --- 25/drivers/message/i2o/i2o_block.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/message/i2o/i2o_block.c 2003-03-07 12:24:11.000000000 -0800 @@ -1608,12 +1608,8 @@ static int i2o_block_init(void) /* * Register the block device interfaces */ - - if (register_blkdev(MAJOR_NR, "i2o_block", &i2ob_fops)) { - printk(KERN_ERR "Unable to get major number %d for i2o_block\n", - MAJOR_NR); + if (register_blkdev(MAJOR_NR, "i2o_block")) return -EIO; - } for (i = 0; i < MAX_I2OB; i++) { struct gendisk *disk = alloc_disk(16); diff -puN drivers/mtd/ftl.c~register_blkdev-cleanups drivers/mtd/ftl.c --- 25/drivers/mtd/ftl.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/mtd/ftl.c 2003-03-07 12:24:11.000000000 -0800 @@ -1281,11 +1281,9 @@ int init_ftl(void) static spinlock_t lock = SPIN_LOCK_UNLOCKED; DEBUG(0, "$Id: ftl.c,v 1.39 2001/10/02 15:05:11 dwmw2 Exp $\n"); - if (register_blkdev(FTL_MAJOR, "ftl", &ftl_blk_fops)) { - printk(KERN_NOTICE "ftl_cs: unable to grab major " - "device number!\n"); + if (register_blkdev(FTL_MAJOR, "ftl")) return -EAGAIN; - } + blk_init_queue(&ftl_queue, &do_ftl_request, &lock); register_mtd_user(&ftl_notifier); return 0; diff -puN drivers/mtd/mtdblock.c~register_blkdev-cleanups drivers/mtd/mtdblock.c --- 25/drivers/mtd/mtdblock.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/mtd/mtdblock.c 2003-03-07 12:24:11.000000000 -0800 @@ -570,11 +570,10 @@ static spinlock_t mtddev_lock = SPIN_LOC int __init init_mtdblock(void) { spin_lock_init(&mtdblks_lock); - if (register_blkdev(MAJOR_NR,DEVICE_NAME,&mtd_fops)) { - printk(KERN_NOTICE "Can't allocate major number %d for Memory Technology Devices.\n", - MTD_BLOCK_MAJOR); + + if (register_blkdev(MAJOR_NR, DEVICE_NAME)) return -EAGAIN; - } + #ifdef CONFIG_DEVFS_FS devfs_mk_dir(NULL, DEVICE_NAME, NULL); #endif diff -puN drivers/mtd/mtdblock_ro.c~register_blkdev-cleanups drivers/mtd/mtdblock_ro.c --- 25/drivers/mtd/mtdblock_ro.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/mtd/mtdblock_ro.c 2003-03-07 12:24:11.000000000 -0800 @@ -240,20 +240,13 @@ static struct mtd_notifier notifier = { int __init init_mtdblock(void) { - int err; - - if (register_blkdev(MAJOR_NR,DEVICE_NAME,&mtd_fops)) { - printk(KERN_NOTICE "Can't allocate major number %d for Memory Technology Devices.\n", - MTD_BLOCK_MAJOR); - err = -EAGAIN; - goto out; - } + if (register_blkdev(MAJOR_NR, DEVICE_NAME)) + return -EAGAIN; blk_init_queue(&mtdro_queue, &mtdblock_request, &mtdro_lock); register_mtd_user(¬ifier); - err = 0; - out: - return err; + + return 0; } static void __exit cleanup_mtdblock(void) diff -puN drivers/mtd/nftlcore.c~register_blkdev-cleanups drivers/mtd/nftlcore.c --- 25/drivers/mtd/nftlcore.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/mtd/nftlcore.c 2003-03-07 12:24:11.000000000 -0800 @@ -928,10 +928,8 @@ int __init init_nftl(void) printk(KERN_INFO "NFTL driver: nftlcore.c $Revision: 1.82 $, nftlmount.c %s\n", nftlmountrev); #endif - if (register_blkdev(MAJOR_NR, "nftl", &nftl_fops)) { - printk("unable to register NFTL block device on major %d\n", MAJOR_NR); + if (register_blkdev(MAJOR_NR, "nftl")) return -EBUSY; - } blk_register_region(MKDEV(MAJOR_NR, 0), 256, THIS_MODULE, nftl_probe, NULL, NULL); diff -puN drivers/s390/block/dasd_genhd.c~register_blkdev-cleanups drivers/s390/block/dasd_genhd.c --- 25/drivers/s390/block/dasd_genhd.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/s390/block/dasd_genhd.c 2003-03-07 12:24:11.000000000 -0800 @@ -60,11 +60,8 @@ dasd_register_major(int major) } /* Register block device. */ - new_major = register_blkdev(major, "dasd", &dasd_device_operations); + new_major = register_blkdev(major, "dasd"); if (new_major < 0) { - MESSAGE(KERN_WARNING, - "Cannot register to major no %d, rc = %d", - major, new_major); kfree(mi); return new_major; } diff -puN drivers/s390/block/xpram.c~register_blkdev-cleanups drivers/s390/block/xpram.c --- 25/drivers/s390/block/xpram.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/s390/block/xpram.c 2003-03-07 12:24:11.000000000 -0800 @@ -430,13 +430,11 @@ static int __init xpram_setup_blkdev(voi /* * Register xpram major. */ - rc = register_blkdev(XPRAM_MAJOR, XPRAM_NAME, &xpram_devops); - if (rc < 0) { - PRINT_ERR("Can't get xpram major %d\n", XPRAM_MAJOR); + rc = register_blkdev(XPRAM_MAJOR, XPRAM_NAME); + if (rc < 0) goto out; - } - devfs_mk_dir (NULL, "slram", NULL); + devfs_mk_dir(NULL, "slram", NULL); /* * Assign the other needed values: make request function, sizes and @@ -452,6 +450,7 @@ static int __init xpram_setup_blkdev(voi for (i = 0; i < xpram_devs; i++) { struct gendisk *disk = xpram_disks[i]; char name[16]; + xpram_devices[i].size = xpram_sizes[i] / 4; xpram_devices[i].offset = offset; offset += xpram_devices[i].size; diff -puN drivers/s390/char/tape_block.c~register_blkdev-cleanups drivers/s390/char/tape_block.c --- 25/drivers/s390/char/tape_block.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/s390/char/tape_block.c 2003-03-07 12:24:11.000000000 -0800 @@ -333,12 +333,10 @@ tapeblock_init(void) int rc; /* Register the tape major number to the kernel */ - rc = register_blkdev(tapeblock_major, "tBLK", &tapeblock_fops); - if (rc < 0) { - PRINT_ERR("can't get major %d for block device\n", - tapeblock_major); + rc = register_blkdev(tapeblock_major, "tBLK"); + if (rc < 0) return rc; - } + if (tapeblock_major == 0) tapeblock_major = rc; PRINT_INFO("tape gets major %d for block device\n", tapeblock_major); diff -puN drivers/sbus/char/jsflash.c~register_blkdev-cleanups drivers/sbus/char/jsflash.c --- 25/drivers/sbus/char/jsflash.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/sbus/char/jsflash.c 2003-03-07 12:24:11.000000000 -0800 @@ -570,9 +570,7 @@ static int jsfd_init(void) jsfd_disk[i] = disk; } - if (register_blkdev(JSFD_MAJOR, "jsfd", &jsfd_fops)) { - printk("jsfd_init: unable to get major number %d\n", - JSFD_MAJOR); + if (register_blkdev(JSFD_MAJOR, "jsfd")) { err = -EIO; goto out; } diff -puN drivers/scsi/sd.c~register_blkdev-cleanups drivers/scsi/sd.c --- 25/drivers/scsi/sd.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/scsi/sd.c 2003-03-07 12:24:11.000000000 -0800 @@ -1389,14 +1389,9 @@ static int __init init_sd(void) SCSI_LOG_HLQUEUE(3, printk("init_sd: sd driver entry point\n")); - for (i = 0; i < SD_MAJORS; i++) { - if (register_blkdev(sd_major(i), "sd", &sd_fops)) - printk(KERN_NOTICE - "Unable to get major %d for SCSI disk\n", - sd_major(i)); - else + for (i = 0; i < SD_MAJORS; i++) + if (register_blkdev(sd_major(i), "sd") == 0) majors++; - } if (!majors) return -ENODEV; @@ -1409,7 +1404,7 @@ static int __init init_sd(void) } /** - * exit_sd - exit point for this driver (when it is a module). + * exit_sd - exit point for this driver (when it is a module). * * Note: this function unregisters this driver from the scsi mid-level. **/ diff -puN drivers/scsi/sr.c~register_blkdev-cleanups drivers/scsi/sr.c --- 25/drivers/scsi/sr.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/scsi/sr.c 2003-03-07 12:24:11.000000000 -0800 @@ -835,7 +835,7 @@ static int __init init_sr(void) { int rc; - rc = register_blkdev(SCSI_CDROM_MAJOR, "sr", &sr_bdops); + rc = register_blkdev(SCSI_CDROM_MAJOR, "sr"); if (rc) return rc; return scsi_register_device(&sr_template); diff -puN drivers/scsi/sym53c8xx_2/sym_hipd.c~register_blkdev-cleanups drivers/scsi/sym53c8xx_2/sym_hipd.c --- 25/drivers/scsi/sym53c8xx_2/sym_hipd.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/drivers/scsi/sym53c8xx_2/sym_hipd.c 2003-03-07 12:24:11.000000000 -0800 @@ -221,7 +221,7 @@ static void sym_chip_reset (hcb_p np) */ static void sym_soft_reset (hcb_p np) { - u_char istat; + u_char istat = 0; int i; if (!(np->features & FE_ISTAT1) || !(INB (nc_istat1) & SCRUN)) diff -puN fs/block_dev.c~register_blkdev-cleanups fs/block_dev.c --- 25/fs/block_dev.c~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/fs/block_dev.c 2003-03-07 12:24:11.000000000 -0800 @@ -436,56 +436,6 @@ void bd_release(struct block_device *bde spin_unlock(&bdev_lock); } -static const char *blkdevs[MAX_BLKDEV]; - -int get_blkdev_list(char * p) -{ - int i; - int len; - - len = sprintf(p, "\nBlock devices:\n"); - for (i = 0; i < MAX_BLKDEV ; i++) { - if (blkdevs[i]) - len += sprintf(p+len, "%3d %s\n", i, blkdevs[i]); - } - return len; -} - -int register_blkdev(unsigned int major, const char * name, struct block_device_operations *bdops) -{ - if (devfs_only()) - return 0; - if (major == 0) { - for (major = MAX_BLKDEV-1; major > 0; major--) { - if (blkdevs[major] == NULL) { - blkdevs[major] = name; - return major; - } - } - return -EBUSY; - } - if (major >= MAX_BLKDEV) - return -EINVAL; - if (blkdevs[major]) - return -EBUSY; - blkdevs[major] = name; - return 0; -} - -int unregister_blkdev(unsigned int major, const char * name) -{ - if (devfs_only()) - return 0; - if (major >= MAX_BLKDEV) - return -EINVAL; - if (!blkdevs[major]) - return -EINVAL; - if (strcmp(blkdevs[major], name)) - return -EINVAL; - blkdevs[major] = NULL; - return 0; -} - /* * This routine checks whether a removable media has been changed, * and invalidates all buffer-cache-entries in that case. This @@ -786,18 +736,6 @@ int ioctl_by_bdev(struct block_device *b return res; } -const char *__bdevname(dev_t dev) -{ - static char buffer[32]; - const char * name = blkdevs[MAJOR(dev)]; - - if (!name) - name = "unknown-block"; - - sprintf(buffer, "%s(%d,%d)", name, MAJOR(dev), MINOR(dev)); - return buffer; -} - /** * lookup_bdev - lookup a struct block_device by name * diff -puN include/linux/fs.h~register_blkdev-cleanups include/linux/fs.h --- 25/include/linux/fs.h~register_blkdev-cleanups 2003-03-07 12:24:11.000000000 -0800 +++ 25-akpm/include/linux/fs.h 2003-03-07 12:24:11.000000000 -0800 @@ -1033,7 +1033,7 @@ extern void vfs_caches_init(unsigned lon #define putname(name) kmem_cache_free(names_cachep, (void *)(name)) enum {BDEV_FILE, BDEV_SWAP, BDEV_FS, BDEV_RAW}; -extern int register_blkdev(unsigned int, const char *, struct block_device_operations *); +extern int register_blkdev(unsigned int, const char *); extern int unregister_blkdev(unsigned int, const char *); extern struct block_device *bdget(dev_t); extern int bd_acquire(struct inode *inode); _