static DEFINE_MUTEX(ubd_mutex); /* replaces BKL, might not be needed */
 
 static int ubd_open(struct block_device *bdev, fmode_t mode);
-static int ubd_release(struct gendisk *disk, fmode_t mode);
+static void ubd_release(struct gendisk *disk, fmode_t mode);
 static int ubd_ioctl(struct block_device *bdev, fmode_t mode,
                     unsigned int cmd, unsigned long arg);
 static int ubd_getgeo(struct block_device *bdev, struct hd_geometry *geo);
        return err;
 }
 
-static int ubd_release(struct gendisk *disk, fmode_t mode)
+static void ubd_release(struct gendisk *disk, fmode_t mode)
 {
        struct ubd *ubd_dev = disk->private_data;
 
        if(--ubd_dev->count == 0)
                ubd_close_dev(ubd_dev);
        mutex_unlock(&ubd_mutex);
-       return 0;
 }
 
 static void cowify_bitmap(__u64 io_offset, int length, unsigned long *cow_mask,
 
        return 0;
 }
 
-static int simdisk_release(struct gendisk *disk, fmode_t mode)
+static void simdisk_release(struct gendisk *disk, fmode_t mode)
 {
        struct simdisk *dev = disk->private_data;
        spin_lock(&dev->lock);
        --dev->users;
        spin_unlock(&dev->lock);
-       return 0;
 }
 
 static const struct block_device_operations simdisk_ops = {
 
        return 0;
 }
 
-static int floppy_release(struct gendisk *disk, fmode_t mode)
+static void floppy_release(struct gendisk *disk, fmode_t mode)
 {
        struct amiga_floppy_struct *p = disk->private_data;
        int drive = p - unit;
        floppy_off (drive | 0x40000000);
 #endif
        mutex_unlock(&amiflop_mutex);
-       return 0;
 }
 
 /*
 
        return -ENODEV;
 }
 
-static int
+static void
 aoeblk_release(struct gendisk *disk, fmode_t mode)
 {
        struct aoedev *d = disk->private_data;
        if (--d->nopen == 0) {
                spin_unlock_irqrestore(&d->lock, flags);
                aoecmd_cfg(d->aoemajor, d->aoeminor);
-               return 0;
+               return;
        }
        spin_unlock_irqrestore(&d->lock, flags);
-
-       return 0;
 }
 
 static void
 
 static int fd_test_drive_present( int drive );
 static void config_types( void );
 static int floppy_open(struct block_device *bdev, fmode_t mode);
-static int floppy_release(struct gendisk *disk, fmode_t mode);
+static void floppy_release(struct gendisk *disk, fmode_t mode);
 
 /************************* End of Prototypes **************************/
 
        return ret;
 }
 
-static int floppy_release(struct gendisk *disk, fmode_t mode)
+static void floppy_release(struct gendisk *disk, fmode_t mode)
 {
        struct atari_floppy_struct *p = disk->private_data;
        mutex_lock(&ataflop_mutex);
                p->ref = 0;
        }
        mutex_unlock(&ataflop_mutex);
-       return 0;
 }
 
 static const struct block_device_operations floppy_fops = {
 
 static irqreturn_t do_cciss_msix_intr(int irq, void *dev_id);
 static int cciss_open(struct block_device *bdev, fmode_t mode);
 static int cciss_unlocked_open(struct block_device *bdev, fmode_t mode);
-static int cciss_release(struct gendisk *disk, fmode_t mode);
+static void cciss_release(struct gendisk *disk, fmode_t mode);
 static int do_ioctl(struct block_device *bdev, fmode_t mode,
                    unsigned int cmd, unsigned long arg);
 static int cciss_ioctl(struct block_device *bdev, fmode_t mode,
 /*
  * Close.  Sync first.
  */
-static int cciss_release(struct gendisk *disk, fmode_t mode)
+static void cciss_release(struct gendisk *disk, fmode_t mode)
 {
        ctlr_info_t *h;
        drive_info_struct *drv;
        drv->usage_count--;
        h->usage_count--;
        mutex_unlock(&cciss_mutex);
-       return 0;
 }
 
 static int do_ioctl(struct block_device *bdev, fmode_t mode,
 
        unsigned int log_unit );
 
 static int ida_unlocked_open(struct block_device *bdev, fmode_t mode);
-static int ida_release(struct gendisk *disk, fmode_t mode);
+static void ida_release(struct gendisk *disk, fmode_t mode);
 static int ida_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg);
 static int ida_getgeo(struct block_device *bdev, struct hd_geometry *geo);
 static int ida_ctlr_ioctl(ctlr_info_t *h, int dsk, ida_ioctl_t *io);
 /*
  * Close.  Sync first.
  */
-static int ida_release(struct gendisk *disk, fmode_t mode)
+static void ida_release(struct gendisk *disk, fmode_t mode)
 {
        ctlr_info_t *host;
 
        host = get_host(disk);
        host->usage_count--;
        mutex_unlock(&cpqarray_mutex);
-
-       return 0;
 }
 
 /*
 
 
 int drbd_init(void);
 static int drbd_open(struct block_device *bdev, fmode_t mode);
-static int drbd_release(struct gendisk *gd, fmode_t mode);
+static void drbd_release(struct gendisk *gd, fmode_t mode);
 static int w_md_sync(struct drbd_work *w, int unused);
 static void md_sync_timer_fn(unsigned long data);
 static int w_bitmap_io(struct drbd_work *w, int unused);
        return rv;
 }
 
-static int drbd_release(struct gendisk *gd, fmode_t mode)
+static void drbd_release(struct gendisk *gd, fmode_t mode)
 {
        struct drbd_conf *mdev = gd->private_data;
        mutex_lock(&drbd_main_mutex);
        mdev->open_cnt--;
        mutex_unlock(&drbd_main_mutex);
-       return 0;
 }
 
 static void drbd_set_defaults(struct drbd_conf *mdev)
 
                pr_cont("\n");
 }
 
-static int floppy_release(struct gendisk *disk, fmode_t mode)
+static void floppy_release(struct gendisk *disk, fmode_t mode)
 {
        int drive = (long)disk->private_data;
 
                opened_bdev[drive] = NULL;
        mutex_unlock(&open_lock);
        mutex_unlock(&floppy_mutex);
-
-       return 0;
 }
 
 /*
 
        return err;
 }
 
-static int lo_release(struct gendisk *disk, fmode_t mode)
+static void lo_release(struct gendisk *disk, fmode_t mode)
 {
        struct loop_device *lo = disk->private_data;
        int err;
                 */
                err = loop_clr_fd(lo);
                if (!err)
-                       goto out_unlocked;
+                       return;
        } else {
                /*
                 * Otherwise keep thread (if running) and config,
 
 out:
        mutex_unlock(&lo->lo_ctl_mutex);
-out_unlocked:
-       return 0;
 }
 
 static const struct block_device_operations lo_fops = {
 
        return ret;
 }
 
-static int pcd_block_release(struct gendisk *disk, fmode_t mode)
+static void pcd_block_release(struct gendisk *disk, fmode_t mode)
 {
        struct pcd_unit *cd = disk->private_data;
        mutex_lock(&pcd_mutex);
        cdrom_release(&cd->info, mode);
        mutex_unlock(&pcd_mutex);
-       return 0;
 }
 
 static int pcd_block_ioctl(struct block_device *bdev, fmode_t mode,
 
        }
 }
 
-static int pd_release(struct gendisk *p, fmode_t mode)
+static void pd_release(struct gendisk *p, fmode_t mode)
 {
        struct pd_unit *disk = p->private_data;
 
        if (!--disk->access && disk->removable)
                pd_special_command(disk, pd_door_unlock);
        mutex_unlock(&pd_mutex);
-
-       return 0;
 }
 
 static unsigned int pd_check_events(struct gendisk *p, unsigned int clearing)
 
                    unsigned int cmd, unsigned long arg);
 static int pf_getgeo(struct block_device *bdev, struct hd_geometry *geo);
 
-static int pf_release(struct gendisk *disk, fmode_t mode);
+static void pf_release(struct gendisk *disk, fmode_t mode);
 
 static int pf_detect(void);
 static void do_pf_read(void);
        return 0;
 }
 
-static int pf_release(struct gendisk *disk, fmode_t mode)
+static void pf_release(struct gendisk *disk, fmode_t mode)
 {
        struct pf_unit *pf = disk->private_data;
 
        mutex_lock(&pf_mutex);
        if (pf->access <= 0) {
                mutex_unlock(&pf_mutex);
-               return -EINVAL;
+               WARN_ON(1);
+               return;
        }
 
        pf->access--;
                pf_lock(pf, 0);
 
        mutex_unlock(&pf_mutex);
-       return 0;
-
 }
 
 static unsigned int pf_check_events(struct gendisk *disk, unsigned int clearing)
 
        return ret;
 }
 
-static int pkt_close(struct gendisk *disk, fmode_t mode)
+static void pkt_close(struct gendisk *disk, fmode_t mode)
 {
        struct pktcdvd_device *pd = disk->private_data;
-       int ret = 0;
 
        mutex_lock(&pktcdvd_mutex);
        mutex_lock(&ctl_mutex);
        }
        mutex_unlock(&ctl_mutex);
        mutex_unlock(&pktcdvd_mutex);
-       return ret;
 }
 
 
 
        return 0;
 }
 
-static int rbd_release(struct gendisk *disk, fmode_t mode)
+static void rbd_release(struct gendisk *disk, fmode_t mode)
 {
        struct rbd_device *rbd_dev = disk->private_data;
        unsigned long open_count_before;
        mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING);
        put_device(&rbd_dev->dev);
        mutex_unlock(&ctl_mutex);
-
-       return 0;
 }
 
 static const struct block_device_operations rbd_bd_ops = {
 
        return ret;
 }
 
-static int floppy_release(struct gendisk *disk, fmode_t mode)
+static void floppy_release(struct gendisk *disk, fmode_t mode)
 {
        struct floppy_state *fs = disk->private_data;
        struct swim __iomem *base = fs->swd->base;
        if (fs->ref_count == 0)
                swim_motor(base, OFF);
        mutex_unlock(&swim_mutex);
-
-       return 0;
 }
 
 static int floppy_ioctl(struct block_device *bdev, fmode_t mode,
 
 static int floppy_ioctl(struct block_device *bdev, fmode_t mode,
                        unsigned int cmd, unsigned long param);
 static int floppy_open(struct block_device *bdev, fmode_t mode);
-static int floppy_release(struct gendisk *disk, fmode_t mode);
+static void floppy_release(struct gendisk *disk, fmode_t mode);
 static unsigned int floppy_check_events(struct gendisk *disk,
                                        unsigned int clearing);
 static int floppy_revalidate(struct gendisk *disk);
        return ret;
 }
 
-static int floppy_release(struct gendisk *disk, fmode_t mode)
+static void floppy_release(struct gendisk *disk, fmode_t mode)
 {
        struct floppy_state *fs = disk->private_data;
        struct swim3 __iomem *sw = fs->swim3;
                swim3_select(fs, RELAX);
        }
        mutex_unlock(&swim3_mutex);
-       return 0;
 }
 
 static unsigned int floppy_check_events(struct gendisk *disk,
 
        return err;
 }
 
-static int blkif_release(struct gendisk *disk, fmode_t mode)
+static void blkif_release(struct gendisk *disk, fmode_t mode)
 {
        struct blkfront_info *info = disk->private_data;
        struct block_device *bdev;
 out:
        bdput(bdev);
        mutex_unlock(&blkfront_mutex);
-       return 0;
 }
 
 static const struct block_device_operations xlvbd_block_fops =
 
        return 0;
 }
 
-static int ace_release(struct gendisk *disk, fmode_t mode)
+static void ace_release(struct gendisk *disk, fmode_t mode)
 {
        struct ace_device *ace = disk->private_data;
        unsigned long flags;
        }
        spin_unlock_irqrestore(&ace->lock, flags);
        mutex_unlock(&xsysace_mutex);
-       return 0;
 }
 
 static int ace_getgeo(struct block_device *bdev, struct hd_geometry *geo)
 
     return rc;
 }
 
-static int
+static void
 z2_release(struct gendisk *disk, fmode_t mode)
 {
     mutex_lock(&z2ram_mutex);
     if ( current_device == -1 ) {
        mutex_unlock(&z2ram_mutex);
-       return 0;
+       return;
     }
     mutex_unlock(&z2ram_mutex);
     /*
      * FIXME: unmap memory
      */
-
-    return 0;
 }
 
 static const struct block_device_operations z2_fops =
 
        return ret;
 }
 
-static int gdrom_bdops_release(struct gendisk *disk, fmode_t mode)
+static void gdrom_bdops_release(struct gendisk *disk, fmode_t mode)
 {
        mutex_lock(&gdrom_mutex);
        cdrom_release(gd.cd_info, mode);
        mutex_unlock(&gdrom_mutex);
-       return 0;
 }
 
 static unsigned int gdrom_bdops_check_events(struct gendisk *disk,
 
        return rc;
 }
 
-static int idecd_release(struct gendisk *disk, fmode_t mode)
+static void idecd_release(struct gendisk *disk, fmode_t mode)
 {
        struct cdrom_info *info = ide_drv_g(disk, cdrom_info);
 
 
        ide_cd_put(info);
        mutex_unlock(&ide_cd_mutex);
-
-       return 0;
 }
 
 static int idecd_set_spindown(struct cdrom_device_info *cdi, unsigned long arg)
 
 }
 
 
-static int ide_gd_release(struct gendisk *disk, fmode_t mode)
+static void ide_gd_release(struct gendisk *disk, fmode_t mode)
 {
        struct ide_disk_obj *idkp = ide_drv_g(disk, ide_disk_obj);
        ide_drive_t *drive = idkp->drive;
 
        ide_disk_put(idkp);
        mutex_unlock(&ide_gd_mutex);
-
-       return 0;
 }
 
 static int ide_gd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
 
        return 0;
 }
 
-static int idetape_release(struct gendisk *disk, fmode_t mode)
+static void idetape_release(struct gendisk *disk, fmode_t mode)
 {
        struct ide_tape_obj *tape = ide_drv_g(disk, ide_tape_obj);
 
        mutex_lock(&ide_tape_mutex);
        ide_tape_put(tape);
        mutex_unlock(&ide_tape_mutex);
-
-       return 0;
 }
 
 static int idetape_ioctl(struct block_device *bdev, fmode_t mode,
 
        return md ? 0 : -ENXIO;
 }
 
-static int dm_blk_close(struct gendisk *disk, fmode_t mode)
+static void dm_blk_close(struct gendisk *disk, fmode_t mode)
 {
        struct mapped_device *md = disk->private_data;
 
        dm_put(md);
 
        spin_unlock(&_minor_lock);
-
-       return 0;
 }
 
 int dm_open_count(struct mapped_device *md)
 
        return err;
 }
 
-static int md_release(struct gendisk *disk, fmode_t mode)
+static void md_release(struct gendisk *disk, fmode_t mode)
 {
        struct mddev *mddev = disk->private_data;
 
        BUG_ON(!mddev);
        atomic_dec(&mddev->openers);
        mddev_put(mddev);
-
-       return 0;
 }
 
 static int md_media_changed(struct gendisk *disk)
 
 }
 
 
-static int mspro_block_disk_release(struct gendisk *disk)
+static void mspro_block_disk_release(struct gendisk *disk)
 {
        struct mspro_block_data *msb = disk->private_data;
        int disk_id = MINOR(disk_devt(disk)) >> MSPRO_BLOCK_PART_SHIFT;
        }
 
        mutex_unlock(&mspro_block_disk_lock);
-
-       return 0;
 }
 
-static int mspro_block_bd_release(struct gendisk *disk, fmode_t mode)
+static void mspro_block_bd_release(struct gendisk *disk, fmode_t mode)
 {
-       return mspro_block_disk_release(disk);
+       mspro_block_disk_release(disk);
 }
 
 static int mspro_block_bd_getgeo(struct block_device *bdev,
 
  *
  *     Unlock and unmount the media, and power down the device. Gets called if
  *     the block device is closed.
- *
- *     Returns 0 on success or negative error code on failure.
  */
-static int i2o_block_release(struct gendisk *disk, fmode_t mode)
+static void i2o_block_release(struct gendisk *disk, fmode_t mode)
 {
        struct i2o_block_device *dev = disk->private_data;
        u8 operation;
         * the TID no longer exists.
         */
        if (!dev->i2o_dev)
-               return 0;
+               return;
 
        mutex_lock(&i2o_block_mutex);
        i2o_block_device_flush(dev->i2o_dev);
 
        i2o_block_device_power(dev, operation);
        mutex_unlock(&i2o_block_mutex);
-
-       return 0;
 }
 
 static int i2o_block_getgeo(struct block_device *bdev, struct hd_geometry *geo)
 
        return ret;
 }
 
-static int mmc_blk_release(struct gendisk *disk, fmode_t mode)
+static void mmc_blk_release(struct gendisk *disk, fmode_t mode)
 {
        struct mmc_blk_data *md = disk->private_data;
 
        mutex_lock(&block_mutex);
        mmc_blk_put(md);
        mutex_unlock(&block_mutex);
-       return 0;
 }
 
 static int
 
        return ret;
 }
 
-static int blktrans_release(struct gendisk *disk, fmode_t mode)
+static void blktrans_release(struct gendisk *disk, fmode_t mode)
 {
        struct mtd_blktrans_dev *dev = blktrans_dev_get(disk);
 
        if (!dev)
-               return 0;
+               return;
 
        mutex_lock(&dev->lock);
 
 unlock:
        mutex_unlock(&dev->lock);
        blktrans_dev_put(dev);
-       return 0;
 }
 
 static int blktrans_getgeo(struct block_device *bdev, struct hd_geometry *geo)
 
        return rc;
 }
 
-static int dasd_release(struct gendisk *disk, fmode_t mode)
+static void dasd_release(struct gendisk *disk, fmode_t mode)
 {
-       struct dasd_device *base;
-
-       base = dasd_device_from_gendisk(disk);
-       if (!base)
-               return -ENODEV;
-
-       atomic_dec(&base->block->open_count);
-       module_put(base->discipline->owner);
-       dasd_put_device(base);
-       return 0;
+       struct dasd_device *base = dasd_device_from_gendisk(disk);
+       if (base) {
+               atomic_dec(&base->block->open_count);
+               module_put(base->discipline->owner);
+               dasd_put_device(base);
+       }
 }
 
 /*
 
 #define DCSS_BUS_ID_SIZE 20
 
 static int dcssblk_open(struct block_device *bdev, fmode_t mode);
-static int dcssblk_release(struct gendisk *disk, fmode_t mode);
+static void dcssblk_release(struct gendisk *disk, fmode_t mode);
 static void dcssblk_make_request(struct request_queue *q, struct bio *bio);
 static int dcssblk_direct_access(struct block_device *bdev, sector_t secnum,
                                 void **kaddr, unsigned long *pfn);
        return rc;
 }
 
-static int
+static void
 dcssblk_release(struct gendisk *disk, fmode_t mode)
 {
        struct dcssblk_dev_info *dev_info = disk->private_data;
        struct segment_info *entry;
-       int rc;
 
        if (!dev_info) {
-               rc = -ENODEV;
-               goto out;
+               WARN_ON(1);
+               return;
        }
        down_write(&dcssblk_devices_sem);
        if (atomic_dec_and_test(&dev_info->use_count)
                dev_info->save_pending = 0;
        }
        up_write(&dcssblk_devices_sem);
-       rc = 0;
-out:
-       return rc;
 }
 
 static void
 
        return scm_get_ref();
 }
 
-static int scm_release(struct gendisk *gendisk, fmode_t mode)
+static void scm_release(struct gendisk *gendisk, fmode_t mode)
 {
        scm_put_ref();
-       return 0;
 }
 
 static const struct block_device_operations scm_blk_devops = {
 
  *
  *     Locking: called with bdev->bd_mutex held.
  **/
-static int sd_release(struct gendisk *disk, fmode_t mode)
+static void sd_release(struct gendisk *disk, fmode_t mode)
 {
        struct scsi_disk *sdkp = scsi_disk(disk);
        struct scsi_device *sdev = sdkp->device;
 
        scsi_autopm_put_device(sdev);
        scsi_disk_put(sdkp);
-       return 0;
 }
 
 static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
 
        return ret;
 }
 
-static int sr_block_release(struct gendisk *disk, fmode_t mode)
+static void sr_block_release(struct gendisk *disk, fmode_t mode)
 {
        struct scsi_cd *cd = scsi_cd(disk);
        mutex_lock(&sr_mutex);
        cdrom_release(&cd->cdi, mode);
        scsi_cd_put(cd);
        mutex_unlock(&sr_mutex);
-       return 0;
 }
 
 static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
 
        }
        if (bdev->bd_contains == bdev) {
                if (disk->fops->release)
-                       ret = disk->fops->release(disk, mode);
+                       disk->fops->release(disk, mode);
        }
        if (!bdev->bd_openers) {
                struct module *owner = disk->fops->owner;
 
 
 struct block_device_operations {
        int (*open) (struct block_device *, fmode_t);
-       int (*release) (struct gendisk *, fmode_t);
+       void (*release) (struct gendisk *, fmode_t);
        int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
        int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
        int (*direct_access) (struct block_device *, sector_t,