fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / s390 / char / tape_block.c
index 5ced272..c8a89b3 100644 (file)
  */
 
 #include <linux/fs.h>
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/blkdev.h>
 #include <linux/interrupt.h>
 #include <linux/buffer_head.h>
+#include <linux/kernel.h>
 
 #include <asm/debug.h>
 
@@ -144,7 +144,8 @@ tapeblock_start_request(struct tape_device *device, struct request *req)
  * queue.
  */
 static void
-tapeblock_requeue(void *data) {
+tapeblock_requeue(struct work_struct *work) {
+       struct tape_blk_data *  blkdat;
        struct tape_device *    device;
        request_queue_t *       queue;
        int                     nr_queued;
@@ -152,7 +153,8 @@ tapeblock_requeue(void *data) {
        struct list_head *      l;
        int                     rc;
 
-       device = (struct tape_device *) data;
+       blkdat = container_of(work, struct tape_blk_data, requeue_task);
+       device = blkdat->device;
        if (!device)
                return;
 
@@ -198,9 +200,7 @@ tapeblock_request_fn(request_queue_t *queue)
 
        device = (struct tape_device *) queue->queuedata;
        DBF_LH(6, "tapeblock_request_fn(device=%p)\n", device);
-       if (device == NULL)
-               BUG();
-
+       BUG_ON(device == NULL);
        tapeblock_trigger_requeue(device);
 }
 
@@ -215,6 +215,7 @@ tapeblock_setup_device(struct tape_device * device)
        int                     rc;
 
        blkdat = &device->blk_data;
+       blkdat->device = device;
        spin_lock_init(&blkdat->request_queue_lock);
        atomic_set(&blkdat->requeue_scheduled, 0);
 
@@ -258,8 +259,8 @@ tapeblock_setup_device(struct tape_device * device)
 
        add_disk(disk);
 
-       INIT_WORK(&blkdat->requeue_task, tapeblock_requeue,
-               tape_get_device_reference(device));
+       tape_get_device_reference(device);
+       INIT_WORK(&blkdat->requeue_task, tapeblock_requeue);
 
        return 0;
 
@@ -274,7 +275,7 @@ void
 tapeblock_cleanup_device(struct tape_device *device)
 {
        flush_scheduled_work();
-       device->blk_data.requeue_task.data = tape_put_device(device);
+       tape_put_device(device);
 
        if (!device->blk_data.disk) {
                PRINT_ERR("(%s): No gendisk to clean up!\n",
@@ -307,8 +308,7 @@ tapeblock_revalidate_disk(struct gendisk *disk)
        int                     rc;
 
        device = (struct tape_device *) disk->private_data;
-       if (!device)
-               BUG();
+       BUG_ON(!device);
 
        if (!device->blk_data.medium_changed)
                return 0;
@@ -435,16 +435,14 @@ tapeblock_ioctl(
 ) {
        int rc;
        int minor;
-       struct gendisk *disk = inode->i_bdev->bd_disk;
-       struct tape_device *device = disk->private_data;
+       struct gendisk *disk;
+       struct tape_device *device;
 
        rc     = 0;
        disk   = inode->i_bdev->bd_disk;
-       if (!disk)
-               BUG();
+       BUG_ON(!disk);
        device = disk->private_data;
-       if (!device)
-               BUG();
+       BUG_ON(!device);
        minor  = iminor(inode);
 
        DBF_LH(6, "tapeblock_ioctl(0x%0x)\n", command);