summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorMartin Dalecki <dalecki@evision-ventures.com>2002-04-15 23:28:45 -0700
committerLinus Torvalds <torvalds@penguin.transmeta.com>2002-04-15 23:28:45 -0700
commit0c0a9d38acd9d73595b332dba0cda8126437bca3 (patch)
tree86cf76a6ef964239764c00b6e0912623a82eb26a /include/linux
parent87689e36a32102c9b0fc938d5a44e4c8d0f6256f (diff)
[PATCH] 2.5.8 IDE 37
- Don't abuse the sense field for passing failed packet_commands in struct packet_command use a new field instead. - Apply minor bits forwarded by Dave Jones to me. - Fix ide_raw_taskfile() to flag the ar used there to be no subject of free_req list management. This solvs the "hang after /proc/ide read" problem, which was in fact a memory corruption problem.
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/ide.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/include/linux/ide.h b/include/linux/ide.h
index dafbf3d4fe17..cd424925cee8 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -975,6 +975,7 @@ extern void revalidate_drives(void);
#define ATA_AR_QUEUED 1
#define ATA_AR_SETUP 2
#define ATA_AR_RETURN 4
+#define ATA_AR_STATIC 8
/*
* if turn-around time is longer than this, halve queue depth
@@ -1015,7 +1016,8 @@ static inline struct ata_request *ata_ar_get(ide_drive_t *drive)
static inline void ata_ar_put(ide_drive_t *drive, struct ata_request *ar)
{
- list_add(&ar->ar_queue, &drive->free_req);
+ if (!(ar->ar_flags & ATA_AR_STATIC))
+ list_add(&ar->ar_queue, &drive->free_req);
if (ar->ar_flags & ATA_AR_QUEUED) {
/* clear the tag */