From: Akinobu M. <mi...@mi...> - 2005-03-23 01:16:14
|
Hello, The following patches enable to support diskdump for libata drivers. However, these patches only support ata_piix and sata_sx4. since I only have these two adapters. but other libata drivers also may work by same modifications. BTW, is there a plan to release diskdump for the latest kernel(2.6.11.*)? Or diskdump project is only intended for Fedora and Red Hat Linux features? |
From: Akinobu M. <mi...@mi...> - 2005-03-23 01:18:33
|
This patch implements common dump_poll and dump_sanity_check methods for libata drivers to support diskdump. --- 2.6.9-diskdump-1.0/include/linux/libata.h.orig 2004-10-19 06:53:07.000000000 +0900 +++ 2.6.9-diskdump-1.0/include/linux/libata.h 2005-03-23 08:04:57.826382432 +0900 @@ -415,6 +415,8 @@ extern int ata_std_bios_param(struct scs struct block_device *bdev, sector_t capacity, int geom[]); extern int ata_scsi_slave_config(struct scsi_device *sdev); +extern int ata_sanity_check(struct scsi_device *device); +extern void ata_scsi_poll(struct scsi_device *device); static inline unsigned int ata_tag_valid(unsigned int tag) --- 2.6.9-diskdump-1.0/drivers/scsi/libata-core.c.orig 2004-10-19 06:53:06.000000000 +0900 +++ 2.6.9-diskdump-1.0/drivers/scsi/libata-core.c 2005-03-23 08:05:21.031854664 +0900 @@ -3655,3 +3655,5 @@ EXPORT_SYMBOL_GPL(ata_scsi_release); EXPORT_SYMBOL_GPL(ata_host_intr); EXPORT_SYMBOL_GPL(ata_dev_classify); EXPORT_SYMBOL_GPL(ata_dev_id_string); +EXPORT_SYMBOL_GPL(ata_scsi_poll); +EXPORT_SYMBOL_GPL(ata_sanity_check); --- 2.6.9-diskdump-1.0/drivers/scsi/libata-scsi.c.orig 2004-10-19 06:53:51.000000000 +0900 +++ 2.6.9-diskdump-1.0/drivers/scsi/libata-scsi.c 2005-03-23 08:04:57.802386080 +0900 @@ -1568,3 +1568,56 @@ static void ata_scsi_simulate(struct ata } } +/** + * ata_scsi_poll - Check for command completion + * @device: the SCSI device to which the command was queued + * + * This function is called after the diskdump subsystem has queued an I/O + * command to the indicated device. Since interrupts are disabled, this + * function is called periodically to detect command completion. + * + * LOCKING: + * + */ + +void ata_scsi_poll(struct scsi_device *device) +{ + struct ata_port *ap; + + ap = (struct ata_port *) &device->host->hostdata[0]; + ap->ops->irq_handler(0, ap->host_set, NULL); +} + +/** + * ata_sanity_check - Verify that SCSI device can receive dump + * @device: the SCSI device to which the command was queued + * + * Called by mid-layer diskdump sanity-check function to determine whether + * the indicated device is operational. Caller has already verified that + * scsi_device_online(device) is true. + * + * LOCKING: + * + * RETURNS: + * Zero for a good device, negative for a bad one + */ + +int ata_sanity_check(struct scsi_device *device) +{ + struct ata_port *ap; + struct ata_device *dev; + + ap = (struct ata_port *) &device->host->hostdata[0]; + if (!ap) + return -ENXIO; + + dev = ata_scsi_find_dev(ap, device); + if (!dev) + return -ENXIO; + + if (spin_is_locked(&ap->host_set->lock)) + return -EBUSY; + + return 0; +} + |
From: Akinobu M. <mi...@mi...> - 2005-03-23 01:20:15
|
This WARN_ON() is hit by every dumping memory, so there happens too many warnings to complete crash dump. BTW, this WARN_ON() statement seems to disapear in the latest libata driver. --- 2.6.9-diskdump-1.0/drivers/scsi/libata-core.c.orig 2005-03-23 08:07:15.072517848 +0900 +++ 2.6.9-diskdump-1.0/drivers/scsi/libata-core.c 2005-03-23 08:07:26.292812104 +0900 @@ -1946,7 +1946,6 @@ void ata_sg_init_one(struct ata_queued_c sg->offset = (unsigned long) buf & ~PAGE_MASK; sg_dma_len(sg) = buflen; - WARN_ON(buflen > PAGE_SIZE); } void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg, |
From: Akinobu M. <mi...@mi...> - 2005-03-23 01:21:30
|
Enable support diskdump for ata_piix --- 2.6.11/drivers/scsi/ata_piix.c.orig 2005-03-17 13:44:41.000000000 +0900 +++ 2.6.11/drivers/scsi/ata_piix.c 2005-03-17 13:45:58.000000000 +0900 @@ -121,6 +121,8 @@ static Scsi_Host_Template piix_sht = { .dma_boundary = ATA_DMA_BOUNDARY, .slave_configure = ata_scsi_slave_config, .bios_param = ata_std_bios_param, + .dump_sanity_check = ata_sanity_check, + .dump_poll = ata_scsi_poll, }; static struct ata_port_operations piix_pata_ops = { |
From: Akinobu M. <mi...@mi...> - 2005-03-23 01:22:10
|
Enable support diskdump for sata_sx4 --- 2.6.11/drivers/scsi/sata_sx4.c.orig 2005-03-17 14:03:07.000000000 +0900 +++ 2.6.11/drivers/scsi/sata_sx4.c 2005-03-17 14:03:52.000000000 +0900 @@ -188,6 +188,8 @@ static Scsi_Host_Template pdc_sata_sht = .dma_boundary = ATA_DMA_BOUNDARY, .slave_configure = ata_scsi_slave_config, .bios_param = ata_std_bios_param, + .dump_sanity_check = ata_sanity_check, + .dump_poll = ata_scsi_poll, }; static struct ata_port_operations pdc_20621_ops = { |
From: Takao I. <ind...@jp...> - 2005-03-24 01:25:02
|
Hi! On Wed, 23 Mar 2005 10:05:43 +0900, Akinobu Mita wrote: >Hello, > >The following patches enable to support diskdump for libata drivers. >However, these patches only support ata_piix and sata_sx4. >since I only have these two adapters. but other libata drivers also >may work by same modifications. That's great! I have also codes for libata support, so I'll merge your patch with mine and release next version. > >BTW, is there a plan to release diskdump for the latest kernel(2.6.11.*)? I'd like to try it, but I am busy with another work :-( >Or diskdump project is only intended for Fedora and Red Hat Linux features? No. The purpose of the diskdump project on sourceforge is to develop diskdump with community people. Takao Indoh |