Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394...
[pandora-kernel.git] / drivers / block / paride / pd.c
index 2403721..5fdfa7c 100644 (file)
@@ -153,7 +153,6 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_GEO, D_SBY, D_DLY, D_SLV};
 #include <linux/blkpg.h>
 #include <linux/kernel.h>
 #include <asm/uaccess.h>
-#include <linux/sched.h>
 #include <linux/workqueue.h>
 
 static DEFINE_SPINLOCK(pd_lock);
@@ -352,19 +351,19 @@ static enum action (*phase)(void);
 
 static void run_fsm(void);
 
-static void ps_tq_int( void *data);
+static void ps_tq_int(struct work_struct *work);
 
-static DECLARE_WORK(fsm_tq, ps_tq_int, NULL);
+static DECLARE_DELAYED_WORK(fsm_tq, ps_tq_int);
 
 static void schedule_fsm(void)
 {
        if (!nice)
-               schedule_work(&fsm_tq);
+               schedule_delayed_work(&fsm_tq, 0);
        else
                schedule_delayed_work(&fsm_tq, nice-1);
 }
 
-static void ps_tq_int(void *data)
+static void ps_tq_int(struct work_struct *work)
 {
        run_fsm();
 }
@@ -437,7 +436,7 @@ static char *pd_buf;                /* buffer for request in progress */
 
 static enum action do_pd_io_start(void)
 {
-       if (pd_req->flags & REQ_SPECIAL) {
+       if (blk_special_request(pd_req)) {
                phase = pd_special;
                return pd_special();
        }
@@ -664,11 +663,11 @@ static enum action pd_identify(struct pd_unit *disk)
                return Fail;
        pi_read_block(disk->pi, pd_scratch, 512);
        disk->can_lba = pd_scratch[99] & 2;
-       disk->sectors = le16_to_cpu(*(u16 *) (pd_scratch + 12));
-       disk->heads = le16_to_cpu(*(u16 *) (pd_scratch + 6));
-       disk->cylinders = le16_to_cpu(*(u16 *) (pd_scratch + 2));
+       disk->sectors = le16_to_cpu(*(__le16 *) (pd_scratch + 12));
+       disk->heads = le16_to_cpu(*(__le16 *) (pd_scratch + 6));
+       disk->cylinders = le16_to_cpu(*(__le16 *) (pd_scratch + 2));
        if (disk->can_lba)
-               disk->capacity = le32_to_cpu(*(u32 *) (pd_scratch + 120));
+               disk->capacity = le32_to_cpu(*(__le32 *) (pd_scratch + 120));
        else
                disk->capacity = disk->sectors * disk->heads * disk->cylinders;
 
@@ -699,7 +698,7 @@ static enum action pd_identify(struct pd_unit *disk)
 
 /* end of io request engine */
 
-static void do_pd_request(request_queue_t * q)
+static void do_pd_request(struct request_queue * q)
 {
        if (pd_req)
                return;
@@ -713,23 +712,17 @@ static void do_pd_request(request_queue_t * q)
 static int pd_special_command(struct pd_unit *disk,
                      enum action (*func)(struct pd_unit *disk))
 {
-       DECLARE_COMPLETION(wait);
-       struct request rq;
+       struct request *rq;
        int err = 0;
 
-       memset(&rq, 0, sizeof(rq));
-       rq.errors = 0;
-       rq.rq_status = RQ_ACTIVE;
-       rq.rq_disk = disk->gd;
-       rq.ref_count = 1;
-       rq.waiting = &wait;
-       rq.end_io = blk_end_sync_rq;
-       blk_insert_request(disk->gd->queue, &rq, 0, func);
-       wait_for_completion(&wait);
-       rq.waiting = NULL;
-       if (rq.errors)
-               err = -EIO;
-       blk_put_request(&rq);
+       rq = blk_get_request(disk->gd->queue, READ, __GFP_WAIT);
+
+       rq->cmd_type = REQ_TYPE_SPECIAL;
+       rq->special = func;
+
+       err = blk_execute_rq(disk->gd->queue, disk->gd, rq, 0);
+
+       blk_put_request(rq);
        return err;
 }