SOURCES (LINUX_2_6): linux-hdaps_protect.patch - updated to 20060409
adamg
adamg at pld-linux.org
Sun Apr 9 20:49:34 CEST 2006
Author: adamg Date: Sun Apr 9 18:49:34 2006 GMT
Module: SOURCES Tag: LINUX_2_6
---- Log message:
- updated to 20060409
---- Files affected:
SOURCES:
linux-hdaps_protect.patch (1.1.2.1 -> 1.1.2.2)
---- Diffs:
================================================================
Index: SOURCES/linux-hdaps_protect.patch
diff -u SOURCES/linux-hdaps_protect.patch:1.1.2.1 SOURCES/linux-hdaps_protect.patch:1.1.2.2
--- SOURCES/linux-hdaps_protect.patch:1.1.2.1 Thu Apr 6 07:50:51 2006
+++ SOURCES/linux-hdaps_protect.patch Sun Apr 9 20:49:28 2006
@@ -1,6 +1,6 @@
diff -urN linux-2.6.16.original/block/ll_rw_blk.c linux-2.6.16.hdaps/block/ll_rw_blk.c
--- linux-2.6.16.original/block/ll_rw_blk.c 2006-03-20 05:53:29.000000000 +0000
-+++ linux-2.6.16.hdaps/block/ll_rw_blk.c 2006-03-26 14:18:58.000000000 +0100
++++ linux-2.6.16.hdaps/block/ll_rw_blk.c 2006-03-28 20:39:03.000000000 +0100
@@ -39,6 +39,8 @@
static void drive_stat_acct(struct request *rq, int nr_sectors, int new_io);
static void init_request_from_bio(struct request *req, struct bio *bio);
@@ -159,8 +159,19 @@
+}
diff -urN linux-2.6.16.original/drivers/ide/ide-disk.c linux-2.6.16.hdaps/drivers/ide/ide-disk.c
--- linux-2.6.16.original/drivers/ide/ide-disk.c 2006-03-20 05:53:29.000000000 +0000
-+++ linux-2.6.16.hdaps/drivers/ide/ide-disk.c 2006-03-26 14:23:42.000000000 +0100
-@@ -727,6 +727,141 @@
++++ linux-2.6.16.hdaps/drivers/ide/ide-disk.c 2006-04-07 17:52:42.000000000 +0100
+@@ -71,6 +71,10 @@
+ #include <asm/io.h>
+ #include <asm/div64.h>
+
++int protect_method = 0;
++module_param(protect_method, int, 0444);
++MODULE_PARM_DESC(protect_method, "hdaps disk protection method (0=autodetect, 1=unload, 2=standby)");
++
+ struct ide_disk_obj {
+ ide_drive_t *drive;
+ ide_driver_t *driver;
+@@ -727,6 +731,154 @@
}
/*
@@ -278,6 +289,7 @@
+int idedisk_issue_protect_fn(request_queue_t *q)
+{
+ ide_drive_t *drive = q->queuedata;
++ int unload;
+
+ /*
+ * Check capability of the device -
@@ -285,12 +297,24 @@
+ * we use "standby immediate" and live with spinning down the drive..
+ * (Word 84, bit 13 of IDENTIFY DEVICE data)
+ */
-+ if (drive->id->cfsse & (1 << 13))
-+ printk(KERN_DEBUG "idedisk_issue_protect_fn(): unload support reported..\n");
-+ else
-+ printk(KERN_DEBUG "idedisk_issue_protect_fn(): unload support NOT reported!..\n");
++ if (protect_method == 1) {
++ unload = 1;
++ printk(KERN_DEBUG "idedisk_issue_protect_fn(): unload method requested, overriding drive capability check..\n");
++ }
++ else if (protect_method == 2) {
++ unload = 0;
++ printk(KERN_DEBUG "idedisk_issue_protect_fn(): standby method requested, overriding drive capability check..\n");
++ }
++ else if (drive->id->cfsse & (1 << 13)) {
++ unload = 1;
++ printk(KERN_DEBUG "idedisk_issue_protect_fn(): unload support reported by drive..\n");
++ }
++ else {
++ unload = 0;
++ printk(KERN_DEBUG "idedisk_issue_protect_fn(): unload support NOT reported by drive!..\n");
++ }
+
-+ return ide_protect_queue(q, (drive->id->cfsse & (1 << 13)) ? 1: 0);
++ return ide_protect_queue(q, unload);
+}
+
+int idedisk_issue_unprotect_fn(request_queue_t *q)
@@ -302,7 +326,7 @@
* This is tightly woven into the driver->do_special can not touch.
* DON'T do it again until a total personality rewrite is committed.
*/
-@@ -984,6 +1119,9 @@
+@@ -984,6 +1136,9 @@
drive->wcache = 1;
write_cache(drive, 1);
@@ -314,7 +338,7 @@
static void ide_cacheflush_p(ide_drive_t *drive)
diff -urN linux-2.6.16.original/drivers/ide/ide-io.c linux-2.6.16.hdaps/drivers/ide/ide-io.c
--- linux-2.6.16.original/drivers/ide/ide-io.c 2006-03-20 05:53:29.000000000 +0000
-+++ linux-2.6.16.hdaps/drivers/ide/ide-io.c 2006-03-22 17:56:14.000000000 +0000
++++ linux-2.6.16.hdaps/drivers/ide/ide-io.c 2006-03-26 15:10:44.000000000 +0100
@@ -1180,6 +1180,17 @@
}
@@ -343,10 +367,35 @@
__elv_add_request(drive->queue, rq, where, 0);
ide_do_request(hwgroup, IDE_NO_IRQ);
spin_unlock_irqrestore(&ide_lock, flags);
+diff -urN linux-2.6.16.original/drivers/scsi/libata-core.c linux-2.6.16.hdaps/drivers/scsi/libata-core.c
+--- linux-2.6.16.original/drivers/scsi/libata-core.c 2006-03-20 05:53:29.000000000 +0000
++++ linux-2.6.16.hdaps/drivers/scsi/libata-core.c 2006-04-07 17:39:19.000000000 +0100
+@@ -78,6 +78,10 @@
+ static unsigned int ata_unique_id = 1;
+ static struct workqueue_struct *ata_wq;
+
++int protect_method = 0;
++module_param(protect_method, int, 0444);
++MODULE_PARM_DESC(protect_method, "hdaps disk protection method (0=autodetect, 1=unload, 2=standby)");
++
+ int atapi_enabled = 0;
+ module_param(atapi_enabled, int, 0444);
+ MODULE_PARM_DESC(atapi_enabled, "Enable discovery of ATAPI devices (0=off, 1=on)");
+diff -urN linux-2.6.16.original/drivers/scsi/libata.h linux-2.6.16.hdaps/drivers/scsi/libata.h
+--- linux-2.6.16.original/drivers/scsi/libata.h 2006-03-20 05:53:29.000000000 +0000
++++ linux-2.6.16.hdaps/drivers/scsi/libata.h 2006-04-07 17:39:47.000000000 +0100
+@@ -40,6 +40,7 @@
+ };
+
+ /* libata-core.c */
++extern int protect_method;
+ extern int atapi_enabled;
+ extern int libata_fua;
+ extern struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap,
diff -urN linux-2.6.16.original/drivers/scsi/libata-scsi.c linux-2.6.16.hdaps/drivers/scsi/libata-scsi.c
--- linux-2.6.16.original/drivers/scsi/libata-scsi.c 2006-03-20 05:53:29.000000000 +0000
-+++ linux-2.6.16.hdaps/drivers/scsi/libata-scsi.c 2006-03-26 14:24:06.000000000 +0100
-@@ -662,6 +662,29 @@
++++ linux-2.6.16.hdaps/drivers/scsi/libata-scsi.c 2006-04-07 17:40:11.000000000 +0100
+@@ -662,6 +662,42 @@
}
}
@@ -358,14 +407,27 @@
+ struct scsi_device *sdev = q->queuedata;
+ struct ata_port *ap = (struct ata_port *) &sdev->host->hostdata[0];
+ struct ata_device *dev = &ap->device[sdev->id];
++ int unload;
+
-+ if (ata_id_has_unload(dev->id))
-+ printk(KERN_DEBUG "ata_scsi_issue_protect_fn(): unload support reported..\n");
-+ else
-+ printk(KERN_DEBUG "ata_scsi_issue_protect_fn(): unload support NOT reported!..\n");
++ if (protect_method == 1) {
++ unload = 1;
++ printk(KERN_DEBUG "ata_scsi_issue_protect_fn(): unload method requested, overriding drive capability check..\n");
++ }
++ else if (protect_method == 2) {
++ unload = 0;
++ printk(KERN_DEBUG "ata_scsi_issue_protect_fn(): standby method requested, overriding drive capability check..\n");
++ }
++ else if (ata_id_has_unload(dev->id)) {
++ unload = 1;
++ printk(KERN_DEBUG "ata_scsi_issue_protect_fn(): unload support reported by drive..\n");
++ }
++ else {
++ unload = 0;
++ printk(KERN_DEBUG "ata_scsi_issue_protect_fn(): unload support NOT reported by drive!..\n");
++ }
+
+ /* call scsi_protect_queue, requesting either unload or standby */
-+ return scsi_protect_queue(q, ata_id_has_unload(dev->id) ? 1 : 0);
++ return scsi_protect_queue(q, unload);
+}
+
+static int ata_scsi_issue_unprotect_fn(request_queue_t *q)
@@ -376,7 +438,7 @@
/**
* ata_scsi_slave_config - Set SCSI device attributes
* @sdev: SCSI device to examine
-@@ -712,6 +735,8 @@
+@@ -712,6 +748,8 @@
blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
}
}
@@ -387,7 +449,7 @@
}
diff -urN linux-2.6.16.original/drivers/scsi/scsi_lib.c linux-2.6.16.hdaps/drivers/scsi/scsi_lib.c
--- linux-2.6.16.original/drivers/scsi/scsi_lib.c 2006-03-20 05:53:29.000000000 +0000
-+++ linux-2.6.16.hdaps/drivers/scsi/scsi_lib.c 2006-03-26 14:22:19.000000000 +0100
++++ linux-2.6.16.hdaps/drivers/scsi/scsi_lib.c 2006-03-26 15:10:44.000000000 +0100
@@ -2307,3 +2307,189 @@
return 1;
}
@@ -580,7 +642,7 @@
+EXPORT_SYMBOL_GPL(scsi_protect_queue);
diff -urN linux-2.6.16.original/include/linux/ata.h linux-2.6.16.hdaps/include/linux/ata.h
--- linux-2.6.16.original/include/linux/ata.h 2006-03-20 05:53:29.000000000 +0000
-+++ linux-2.6.16.hdaps/include/linux/ata.h 2006-03-22 21:21:32.000000000 +0000
++++ linux-2.6.16.hdaps/include/linux/ata.h 2006-03-26 14:26:24.000000000 +0100
@@ -250,6 +250,7 @@
#define ata_id_is_sata(id) ((id)[93] == 0)
#define ata_id_rahead_enabled(id) ((id)[85] & (1 << 6))
@@ -591,7 +653,7 @@
#define ata_id_has_flush_ext(id) ((id)[83] & (1 << 13))
diff -urN linux-2.6.16.original/include/linux/blkdev.h linux-2.6.16.hdaps/include/linux/blkdev.h
--- linux-2.6.16.original/include/linux/blkdev.h 2006-03-20 05:53:29.000000000 +0000
-+++ linux-2.6.16.hdaps/include/linux/blkdev.h 2006-03-22 21:25:02.000000000 +0000
++++ linux-2.6.16.hdaps/include/linux/blkdev.h 2006-03-26 14:26:24.000000000 +0100
@@ -293,6 +293,8 @@
typedef int (issue_flush_fn) (request_queue_t *, struct gendisk *, sector_t *);
typedef void (prepare_flush_fn) (request_queue_t *, struct request *);
@@ -621,7 +683,7 @@
extern void blk_dump_rq_flags(struct request *, char *);
diff -urN linux-2.6.16.original/include/linux/ide.h linux-2.6.16.hdaps/include/linux/ide.h
--- linux-2.6.16.original/include/linux/ide.h 2006-03-20 05:53:29.000000000 +0000
-+++ linux-2.6.16.hdaps/include/linux/ide.h 2006-03-22 17:56:14.000000000 +0000
++++ linux-2.6.16.hdaps/include/linux/ide.h 2006-03-26 14:26:24.000000000 +0100
@@ -1081,6 +1081,7 @@
*/
typedef enum {
================================================================
---- CVS-web:
http://cvs.pld-linux.org/SOURCES/linux-hdaps_protect.patch?r1=1.1.2.1&r2=1.1.2.2&f=u
More information about the pld-cvs-commit
mailing list