]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - src/patches/suse-2.6.27.31/patches.drivers/ide-tape-ignore_dsc-flags-fix.patch
Move xen patchset to new version's subdir.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.drivers / ide-tape-ignore_dsc-flags-fix.patch
CommitLineData
00e5a55c
BS
1From 626542ca2277961aaa64855206574f8ca4f360e3 Mon Sep 17 00:00:00 2001
2From: Borislav Petkov <petkovbb@gmail.com>
3Date: Sun, 7 Jun 2009 15:37:05 +0200
4Subject: ide-tape: change IDE_AFLAG_IGNORE_DSC non-atomically
5Patch-mainline: yes
6References: bnc#509071
7
8There are two sites where the flag is being changed: ide_retry_pc
9and idetape_do_request. Both codepaths are protected by hwif->busy
10(ide_lock_port) and therefore we shouldn't need the atomic accesses.
11
12Spotted-by: Jiri Slaby <jirislaby@gmail.com>
13Signed-off-by: Borislav Petkov <petkovbb@gmail.com>
14Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
15Signed-off-by: Jiri Slaby <jslaby@suse.cz>
16---
17 drivers/ide/ide-tape.c | 12 +++++++-----
18 1 file changed, 7 insertions(+), 5 deletions(-)
19
20--- a/drivers/ide/ide-tape.c
21+++ b/drivers/ide/ide-tape.c
22@@ -736,7 +736,7 @@ static void idetape_retry_pc(ide_drive_t
23 pc = idetape_next_pc_storage(drive);
24 rq = idetape_next_rq_storage(drive);
25 idetape_create_request_sense_cmd(pc);
26- set_bit(IDE_AFLAG_IGNORE_DSC, &drive->atapi_flags);
27+ drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC;
28 idetape_queue_pc_head(drive, pc, rq);
29 }
30
31@@ -1013,14 +1013,14 @@ static ide_startstop_t idetape_do_reques
32 stat = hwif->tp_ops->read_status(hwif);
33
34 if (!drive->dsc_overlap && !(rq->cmd[13] & REQ_IDETAPE_PC2))
35- set_bit(IDE_AFLAG_IGNORE_DSC, &drive->atapi_flags);
36+ drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC;
37
38 if (drive->post_reset == 1) {
39- set_bit(IDE_AFLAG_IGNORE_DSC, &drive->atapi_flags);
40+ drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC;
41 drive->post_reset = 0;
42 }
43
44- if (!test_and_clear_bit(IDE_AFLAG_IGNORE_DSC, &drive->atapi_flags) &&
45+ if (!(drive->atapi_flags & IDE_AFLAG_IGNORE_DSC) &&
46 (stat & SEEK_STAT) == 0) {
47 if (postponed_rq == NULL) {
48 tape->dsc_polling_start = jiffies;
49@@ -1041,7 +1041,9 @@ static ide_startstop_t idetape_do_reques
50 tape->dsc_poll_freq = IDETAPE_DSC_MA_SLOW;
51 idetape_postpone_request(drive);
52 return ide_stopped;
53- }
54+ } else
55+ drive->atapi_flags &= ~IDE_AFLAG_IGNORE_DSC;
56+
57 if (rq->cmd[13] & REQ_IDETAPE_READ) {
58 pc = idetape_next_pc_storage(drive);
59 ide_tape_create_rw_cmd(tape, pc, rq, READ_6);