]> git.hungrycats.org Git - linux/commitdiff
[PATCH] jsfd converted to use of private queue
authorAlexander Viro <viro@math.psu.edu>
Fri, 18 Oct 2002 12:24:59 +0000 (05:24 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Fri, 18 Oct 2002 12:24:59 +0000 (05:24 -0700)
        * switched to private queues
        * set ->queue and ->private_data
* switched to use of ->rq_disk

drivers/sbus/char/jsflash.c

index 932c1ded3f32b96cb2698d30aefad4c5e170ee13..0bf7201235eb90ce60582a594074af5655f257f7 100644 (file)
@@ -190,53 +190,38 @@ static void jsfd_read(char *buf, unsigned long p, size_t togo) {
 
 static void jsfd_do_request(request_queue_t *q)
 {
-       struct request *req;
-       int dev;
-       struct jsfd_part *jdp;
-       unsigned long offset;
-       size_t len;
-
-       for (;;) {
-               if (blk_queue_empty(QUEUE))
-                       return;
-
-               req = CURRENT;
+       while (!blk_queue_empty(q)) {
+               struct request *req = elv_next_request(q);
+               struct jsfd_part *jdp = req->rq_disk->private_data;
+               unsigned long offset = req->sector << 9;
+               size_t len = req->current_nr_sectors << 9;
 
-               dev = MINOR(req->rq_dev);
-               if (dev >= JSF_MAX || (dev & JSF_PART_MASK) >= JSF_NPART) {
-                       end_request(CURRENT, 0);
-                       continue;
-               }
-               jdp = &jsf0.dv[dev & JSF_PART_MASK];
-
-               offset = req->sector << 9;
-               len = req->current_nr_sectors << 9;
                if ((offset + len) > jdp->dsize) {
-                               end_request(CURRENT, 0);
+                               end_request(req, 0);
                        continue;
                }
 
                if (req->cmd == WRITE) {
                        printk(KERN_ERR "jsfd: write\n");
-                       end_request(CURRENT, 0);
+                       end_request(req, 0);
                        continue;
                }
                if (req->cmd != READ) {
                        printk(KERN_ERR "jsfd: bad req->cmd %d\n", req->cmd);
-                       end_request(CURRENT, 0);
+                       end_request(req, 0);
                        continue;
                }
 
                if ((jdp->dbase & 0xff000000) != 0x20000000) {
                        printk(KERN_ERR "jsfd: bad base %x\n", (int)jdp->dbase);
-                       end_request(CURRENT, 0);
+                       end_request(req, 0);
                        continue;
                }
 
-/* printk("jsfd%d: read buf %p off %x len %x\n", dev, req->buffer, (int)offset, (int)len); */ /* P3 */
+/* printk("%s: read buf %p off %x len %x\n", req->rq_disk->disk_name, req->buffer, (int)offset, (int)len); */ /* P3 */
                jsfd_read(req->buffer, jdp->dbase + offset, len);
 
-               end_request(CURRENT, 1);
+               end_request(req, 1);
        }
 }
 
@@ -564,6 +549,8 @@ static int jsflash_init(void)
        return 0;
 }
 
+static struct request_queue jsf_queue;
+
 static int jsfd_init(void)
 {
        static spinlock_t lock = SPIN_LOCK_UNLOCKED;
@@ -590,7 +577,7 @@ static int jsfd_init(void)
                goto out;
        }
 
-       blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), jsfd_do_request, &lock);
+       blk_init_queue(&jsf_queue, jsfd_do_request, &lock);
        for (i = 0; i < JSF_MAX; i++) {
                struct gendisk *disk = jsfd_disk[i];
                if ((i & JSF_PART_MASK) >= JSF_NPART) continue;
@@ -602,6 +589,8 @@ static int jsfd_init(void)
                sprintf(disk->disk_name, "jsfd%d", i);
                disk->fops = &jsfd_fops;
                set_capacity(disk, jdp->dsize >> 9);
+               disk->private_data = jdp;
+               disk->queue = &jsf_queue;
                add_disk(disk);
                set_device_ro(MKDEV(JSFD_MAJOR, i), 1);
        }
@@ -641,7 +630,7 @@ static void __exit jsflash_cleanup_module(void)
        misc_deregister(&jsf_dev);
        if (unregister_blkdev(JSFD_MAJOR, "jsfd") != 0)
                printk("jsfd: cleanup_module failed\n");
-       blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR));
+       blk_cleanup_queue(&jsf_queue);
 }
 
 module_init(jsflash_init_module);