From f35387f3ebf55ec55712d2e11b074263d856357d Mon Sep 17 00:00:00 2001 From: Alexander Viro Date: Wed, 4 Feb 2004 17:16:58 -0800 Subject: [PATCH] [PATCH] paride cleanup and fixes (16/25) Equivalent transformation: * phase = do_pd_io replaced with phase = NULL, corresponding check + open-coded equivalent added in run_fsm loop. * do_pd_io() is gone. --- drivers/block/paride/pd.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/drivers/block/paride/pd.c b/drivers/block/paride/pd.c index 4865d6a0c092d..5c68498b8d00f 100644 --- a/drivers/block/paride/pd.c +++ b/drivers/block/paride/pd.c @@ -194,7 +194,7 @@ MODULE_PARM(drive3, "1-8i"); static void ps_tq_int( void *data); -enum action {Fail = 0, Ok = 1, Claim, Hold, Wait}; +enum action {Fail = 0, Ok = 1, Hold, Wait}; static enum action (*phase)(void); static unsigned long ps_timeout; @@ -212,6 +212,7 @@ static void ps_set_intr(void) static struct pd_unit *pd_current; /* current request's drive */ static PIA *pi_current; /* current request's PIA */ static struct request *pd_req; /* current request */ +static enum action do_pd_io_start(void); static struct request_queue *pd_queue; static void run_fsm(void) @@ -221,9 +222,18 @@ static void run_fsm(void) unsigned long saved_flags; int stop = 0; + if (!phase) { + pd_current = pd_req->rq_disk->private_data; + pi_current = pd_current->pi; + phase = do_pd_io_start; + if (!pi_schedule_claimed(pi_current, run_fsm)) + return; + } + switch(res = phase()) { case Ok: case Fail: pi_unclaim(pi_current); + phase = NULL; spin_lock_irqsave(&pd_lock, saved_flags); end_request(pd_req, res); pd_req = elv_next_request(pd_queue); @@ -232,19 +242,14 @@ static void run_fsm(void) spin_unlock_irqrestore(&pd_lock, saved_flags); if (stop) return; - phase = do_pd_io; + case Hold: ps_set_intr(); return; case Wait: pi_unclaim(pi_current); - /* fallthrough */ - case Claim: if (!pi_schedule_claimed(pi_current, run_fsm)) return; break; - case Hold: - ps_set_intr(); - return; } } } @@ -307,8 +312,6 @@ static int pd_ioctl(struct inode *inode, struct file *file, static int pd_release(struct inode *inode, struct file *file); static int pd_revalidate(struct gendisk *p); static int pd_detect(void); -static enum action do_pd_io(void); -static enum action do_pd_io_start(void); static enum action do_pd_read_start(void); static enum action do_pd_write_start(void); static enum action do_pd_read_drq(void); @@ -788,7 +791,6 @@ static void do_pd_request(request_queue_t * q) if (!pd_req) return; - phase = do_pd_io; ps_set_intr(); } @@ -812,14 +814,6 @@ static int pd_next_buf(void) return 0; } -static enum action do_pd_io(void) -{ - pd_current = pd_req->rq_disk->private_data; - pi_current = pd_current->pi; - phase = do_pd_io_start; - return Claim; -} - static enum action do_pd_io_start(void) { pd_block = pd_req->sector; -- 2.53.0