ide: Fix IDE taskfile with cfq scheduler

When ide taskfile access is being used (for example with hdparm --security
commands) and cfq scheduler is selected, the scheduler crashes on BUG in
cfq_put_request.

The reason is that the cfq scheduler is tracking counts of read and write
requests separately; the ide-taskfile subsystem allocates a read request and
then flips the flag to make it a write request. The counters in cfq will
mismatch.

This patch changes ide-taskfile to allocate the READ or WRITE request as
required and don't change the flag later.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by Mikulas Patocka and committed by David S. Miller 720fc22a 1af18503

+2 -4
+2 -4
drivers/ide/ide-taskfile.c
··· 428 428 { 429 429 struct request *rq; 430 430 int error; 431 + int rw = !(cmd->tf_flags & IDE_TFLAG_WRITE) ? READ : WRITE; 431 432 432 - rq = blk_get_request(drive->queue, READ, __GFP_WAIT); 433 + rq = blk_get_request(drive->queue, rw, __GFP_WAIT); 433 434 rq->cmd_type = REQ_TYPE_ATA_TASKFILE; 434 - 435 - if (cmd->tf_flags & IDE_TFLAG_WRITE) 436 - rq->cmd_flags |= REQ_RW; 437 435 438 436 /* 439 437 * (ks) We transfer currently only whole sectors.