[PATCH] fix pf request handling

Here's the patch from

http://bugzilla.kernel.org/show_bug.cgi?id=4853

It is a feeble attempt at fixing the request handling in pf, it is totally
foobar right now.

Signed-off-by: Jens Axboe <axboe@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Jens Axboe 2005-09-16 19:28:15 -07:00 committed by Linus Torvalds
parent ef402268f7
commit 9564df1ff3

View File

@ -750,6 +750,14 @@ static int pf_ready(void)
static struct request_queue *pf_queue;
static void pf_end_request(int uptodate)
{
if (pf_req) {
end_request(pf_req, uptodate);
pf_req = NULL;
}
}
static void do_pf_request(request_queue_t * q)
{
if (pf_busy)
@ -765,7 +773,7 @@ static void do_pf_request(request_queue_t * q)
pf_count = pf_req->current_nr_sectors;
if (pf_block + pf_count > get_capacity(pf_req->rq_disk)) {
end_request(pf_req, 0);
pf_end_request(0);
goto repeat;
}
@ -780,7 +788,7 @@ static void do_pf_request(request_queue_t * q)
pi_do_claimed(pf_current->pi, do_pf_write);
else {
pf_busy = 0;
end_request(pf_req, 0);
pf_end_request(0);
goto repeat;
}
}
@ -798,9 +806,11 @@ static int pf_next_buf(void)
if (!pf_count)
return 1;
spin_lock_irqsave(&pf_spin_lock, saved_flags);
end_request(pf_req, 1);
pf_end_request(1);
if (pf_req) {
pf_count = pf_req->current_nr_sectors;
pf_buf = pf_req->buffer;
}
spin_unlock_irqrestore(&pf_spin_lock, saved_flags);
return 1;
}
@ -810,7 +820,7 @@ static inline void next_request(int success)
unsigned long saved_flags;
spin_lock_irqsave(&pf_spin_lock, saved_flags);
end_request(pf_req, success);
pf_end_request(success);
pf_busy = 0;
do_pf_request(pf_queue);
spin_unlock_irqrestore(&pf_spin_lock, saved_flags);