ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.23-rc4/2.6.23-rc4-mm... - git-kbuild is broken and has been dropped - git-ixgb is broken by git-net and has been dropped - git-md-accel is broken by MD fixes and has been dropped - git-v9fs breaks the build on all non-x86 and the fs has been disabled in config - dynticks-for-x86_64 has returned Changes since 2.6.23-rc3-mm1: origin.patch git-acpi.patch git-alsa.patch git-audit-master.patch git-avr32.patch git-cifs.patch git-cpufreq.patch git-powerpc.patch git-dvb.patch git-hwmon.patch git-gfs2-nmw.patch git-hid.patch git-ia64.patch git-ieee1394.patch git-infiniband.patch git-input.patch git-jfs.patch git-jg-misc.patch git-kvm.patch git-libata-all.patch git-m32r.patch git-mips.patch git-mmc.patch git-mtd.patch git-ubi.patch git-netdev-all.patch git-net.patch git-backlight.patch git-nfs.patch git-nfsd.patch git-ocfs2.patch git-r8169.patch git-selinux.patch git-s390.patch git-sched.patch git-sh.patch git-scsi-misc.patch git-scsi-rc-fixes.patch git-block.patch git-unionfs.patch git-v9fs.patch git-watchdog.patch git-wireless.patch git-ipwireless_cs.patch git-newsetup.patch git-xfs.patch git-cryptodev.patch git-xtensa.patch git-kgdb.patch git trees -ecryptfs-fix-lookup-error-for-special-files.patch -sparsemem-ensure-we-initialise-the-node-mapping-for-sparsemem_static.patch -tpmdd-maintainers.patch -kernel-auditscc-fix-an-off-by-one.patch -document-linux-memory-policy-v3.patch -futex_unlock_pi-hurts-my-brain-and-may-cause.patch -dont-optimise-away-baud-rate-changes-when-bother-is-used.patch -serial-add-support-for-ite-887x-chips.patch -serial_txx9-fix-modem-control-line-handling.patch -serial-8250-handle-saving-the-clear-on-read-bits-from-the-lsr.patch -add-blacklisting-capability-to-serial_pci-to-avoid-misdetection.patch -free_irq-fix-debug_shirq-handling.patch -documentation-fix-getdelaysc-example-l-option-and...
Le 01.09.2007 06:58, Andrew Morton a
I dig through git-block.patch and the culprit seems to be commit c94f1c4ac87862675c8d70941973bc3a69aff5d8 "bio: use memset() in bio_init()". Maybe the real bug is a bad bio initialization in pktcdvd driver, -
At least pktcdvd doesn't expect bio->bi_io_vec[] to be cleared, that's why it's oopsing now. I'll revert this bit for now, thanks for the report. -- Jens Axboe -
Rethinking this, I think bio_init() is doing the right thing, only
pktcdvd seems to rely on it preserving some members. So I'd rather fixup
pktcdvd instead.
Does this work for you?
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index fadbfd8..98343a1 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -1142,16 +1142,20 @@ static void pkt_gather_data(struct pktcdvd_device *pd, struct packet_data *pkt)
* Schedule reads for missing parts of the packet.
*/
for (f = 0; f < pkt->frames; f++) {
+ struct bio_vec *vec;
+
int p, offset;
if (written[f])
continue;
bio = pkt->r_bios[f];
+ vec = bio->bi_io_vec;
bio_init(bio);
bio->bi_max_vecs = 1;
bio->bi_sector = pkt->sector + f * (CD_FRAMESIZE >> 9);
bio->bi_bdev = pd->bdev;
bio->bi_end_io = pkt_end_io_read;
bio->bi_private = pkt;
+ bio->bi_io_vec = vec;
p = (f * CD_FRAMESIZE) / PAGE_SIZE;
offset = (f * CD_FRAMESIZE) % PAGE_SIZE;
@@ -1448,6 +1452,7 @@ static void pkt_start_write(struct pktcdvd_device *pd, struct packet_data *pkt)
pkt->w_bio->bi_bdev = pd->bdev;
pkt->w_bio->bi_end_io = pkt_end_io_packet_write;
pkt->w_bio->bi_private = pkt;
+ pkt->w_bio->bi_io_vec = bvec;
for (f = 0; f < pkt->frames; f++)
if (!bio_add_page(pkt->w_bio, bvec[f].bv_page, CD_FRAMESIZE, bvec[f].bv_offset))
BUG();
--
Jens Axboe
-Well, it's better: I was able to mount the DVD-RW, sync, and write data, but kernel oopsed when I unmounted the drive: [ 529.295829] BUG: unable to handle kernel NULL pointer dereference at virtual address 00000000 [ 529.296490] printing eip: 00000000 *pde = 00000000 [ 529.297106] Oops: 0000 [#1] PREEMPT [ 529.297702] last sysfs file: /block/pktcdvd0/range [ 529.298284] Modules linked in: udf binfmt_misc pktcdvd radeon drm lp nls_iso8859_1 nls_cp850 vfat fat reiser4 lzo_decompress lzo_compress eeprom w83781d hwmon_vid snd_ens1371 gameport snd_ac97_codec ac97_bus snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_oss snd_seq_midi snd_rawmidi snd_seq_midi_event firewire_ohci firewire_core snd_seq crc_itu_t sg snd_timer snd_seq_device 8250_pnp snd sr_mod cdrom rtc ohci1394 i2c_viapro 8250 serial_core uhci_hcd soundcore snd_page_alloc floppy pcspkr ne2k_pci 8390 parport_pc via686a ieee1394 usbcore parport ata_generic via_agp agpgart evdev reiserfs sd_mod pata_via libata scsi_mod dm_mirror dm_mod [ 529.302127] [ 529.302785] Pid: 3718, comm: umount Not tainted (2.6.23-rc4-mm1 #73) [ 529.303493] EIP: 0060:[<00000000>] EFLAGS: 00010202 CPU: 0 [ 529.304207] EIP is at _stext+0x3feff000/0x19 [ 529.304911] EAX: c30ded90 EBX: cb110da8 ECX: 00000000 EDX: c30ded90 [ 529.305640] ESI: 00000001 EDI: cb0c7748 EBP: cb1dfe98 ESP: cb1dfe90 [ 529.306389] DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068 [ 529.307136] Process umount (pid: 3718, ti=cb1df000 task=c27157b0 task.ti=cb1df000) [ 529.307213] Stack: c017b4bf 00000000 cb1dfeb0 e1c0e57a cb1115d8 cb0c7748 c1e4a828 c26663c8 [ 529.308122] cb1dfec4 e1c0e650 cb1dfec4 c017c15f 00000000 cb1dfee4 c017c8f3 c1e4a834 [ 529.309040] 00000000 c1e4a8bc c1e4a828 e1f12ea0 00000000 cb1dfeec c017c9ab cb1dfef8 [ 529.309972] Call Trace: [ 529.311464] [show_trace_log_lvl+26/47] show_trace_log_lvl+0x1a/0x2f [ 529.312264] [show_stack_log_lvl+155/163] show_stack_log_lvl+0x9b/0xa3 [ 529.313056] [show_registers+160/482] show_registers+0xa0/0x1e2 ...
Jens, this patch, applied on top of your previous patch, solved it. pktcdvd: don't rely on bio_init() preserving bio->bi_destructor Signed-off-by: Laurent Riffard <laurent.riffard@free.fr> --- drivers/block/pktcdvd.c | 2 ++ 1 file changed, 2 insertions(+) Index: linux-2.6-mm/drivers/block/pktcdvd.c =================================================================== --- linux-2.6-mm.orig/drivers/block/pktcdvd.c +++ linux-2.6-mm/drivers/block/pktcdvd.c @@ -1156,6 +1156,7 @@ static void pkt_gather_data(struct pktcd bio->bi_end_io = pkt_end_io_read; bio->bi_private = pkt; bio->bi_io_vec = vec; + bio->bi_destructor = pkt_bio_destructor; p = (f * CD_FRAMESIZE) / PAGE_SIZE; offset = (f * CD_FRAMESIZE) % PAGE_SIZE; @@ -1453,6 +1454,7 @@ static void pkt_start_write(struct pktcd pkt->w_bio->bi_end_io = pkt_end_io_packet_write; pkt->w_bio->bi_private = pkt; pkt->w_bio->bi_io_vec = bvec; + pkt->w_bio->bi_destructor = pkt_bio_destructor; for (f = 0; f < pkt->frames; f++) if (!bio_add_page(pkt->w_bio, bvec[f].bv_page, CD_FRAMESIZE, bvec[f].bv_offset)) BUG(); -
Ah great, thanks for following up on this! Applied. -- Jens Axboe -
On Fri, 14 Sep 2007 00:50:25 +0200 I think I'll be dropping git-block. There were a number of problems in rc4-mm1 (for which I have a sprinkling of messy-looking patches somewhere ahead of my current cursor) and nothing seems to have happened in the git tree for a month or so. -
Huh? It's not even two weeks old. And here we go again, git-block is getting dropped and you'll be complaining about lack of testing next. I'll update the branches today as discussed with Tomo, that should work fine. -- Jens Axboe -
Branches updated with the scsi host template addition and the qla sg chaining fix. -- Jens Axboe -
I have a couple of old NUMA-Q systems which are unable to read their
boot disks with 2.6.23-rc4-mm1. The disks appear to be recognised and
even the partition tables read correctly, and then they go pop:
qla1280: QLA1040 found on PCI bus 0, dev 10
Clocksource tsc unstable (delta = 99922590 ns)
Time: jiffies clocksource has been installed.
scsi(0:0): Resetting SCSI BUS
scsi0 : QLogic QLA1040 PCI to SCSI Host Adapter
Firmware version: 7.65.06, Driver version 3.26
scsi 0:0:0:0: Direct-Access IBM DGHS18X 0360 PQ: 0 ANSI: 3
scsi(0:0:0:0): Sync: period 10, offset 12, Wide
scsi 0:0:1:0: Direct-Access IBM OEM DCHS09X 5454 PQ: 0 ANSI: 2
scsi(0:0:1:0): Sync: period 10, offset 12, Wide
scsi 0:0:2:0: Direct-Access IBM OEM DCHS09X 5454 PQ: 0 ANSI: 2
scsi(0:0:2:0): Sync: period 10, offset 12, Wide
scsi 0:0:3:0: Direct-Access IBM OEM DCHS09X 5454 PQ: 0 ANSI: 2
scsi(0:0:3:0): Sync: period 10, offset 12, Wide
scsi 0:0:4:0: Direct-Access IBM OEM DCHS09X 5454 PQ: 0 ANSI: 2
scsi(0:0:4:0): Sync: period 10, offset 12, Wide
st: Version 20070203, fixed bufsize 32768, s/g segs 256
sd 0:0:0:0: [sda] 35843670 512-byte hardware sectors (18352 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, supports DPO and FUA
sd 0:0:0:0: [sda] 35843670 512-byte hardware sectors (18352 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, supports DPO and FUA
sda: sda1
sd 0:0:0:0: [sda] Attached SCSI disk
sd 0:0:1:0: [sdb] 17796077 512-byte hardware sectors (9112 MB)
sd 0:0:1:0: [sdb] Write Protect is off
sd 0:0:1:0: [sdb] Write cache: disabled, read cache: enabled, supports DPO and FUA
sd 0:0:1:0: [sdb] 17796077 512-byte hardware sectors (9112 MB)
sd 0:0:1:0: [sdb] Write Protect is off
sd 0:0:1:0: [sdb] Write cache: disabled, read cache: enabled, supports DPO and FUA
sd...The only patch which touches qla1280 is git-block.patch. From a quick
squizz the change looks OK, although it's tricky and something might have
broken.
(the dprintk at line 2929 needs to print remseg, not seg_cnt).
Can you retest with that change reverted (below)? If it's not that then
perhaps something in scsi core broke, dunno.
diff -puN drivers/scsi/qla1280.c~revert-1 drivers/scsi/qla1280.c
--- a/drivers/scsi/qla1280.c~revert-1
+++ a/drivers/scsi/qla1280.c
@@ -2775,7 +2775,7 @@ qla1280_64bit_start_scsi(struct scsi_qla
struct device_reg __iomem *reg = ha->iobase;
struct scsi_cmnd *cmd = sp->cmd;
cmd_a64_entry_t *pkt;
- struct scatterlist *sg = NULL, *s;
+ struct scatterlist *sg = NULL;
__le32 *dword_ptr;
dma_addr_t dma_handle;
int status = 0;
@@ -2889,16 +2889,13 @@ qla1280_64bit_start_scsi(struct scsi_qla
* Load data segments.
*/
if (seg_cnt) { /* If data transfer. */
- int remseg = seg_cnt;
/* Setup packet address segment pointer. */
dword_ptr = (u32 *)&pkt->dseg_0_address;
if (cmd->use_sg) { /* If scatter gather */
/* Load command entry data segments. */
- for_each_sg(sg, s, seg_cnt, cnt) {
- if (cnt == 2)
- break;
- dma_handle = sg_dma_address(s);
+ for (cnt = 0; cnt < 2 && seg_cnt; cnt++, seg_cnt--) {
+ dma_handle = sg_dma_address(sg);
#if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2)
if (ha->flags.use_pci_vchannel)
sn_pci_set_vchan(ha->pdev,
@@ -2909,12 +2906,12 @@ qla1280_64bit_start_scsi(struct scsi_qla
cpu_to_le32(pci_dma_lo32(dma_handle));
*dword_ptr++ =
cpu_to_le32(pci_dma_hi32(dma_handle));
- *dword_ptr++ = cpu_to_le32(sg_dma_len(s));
+ *dword_ptr++ = cpu_to_le32(sg_dma_len(sg));
+ sg++;
dprintk(3, "S/G Segment phys_addr=%x %x, len=0x%x\n",
cpu_to_le32(pci_dma_hi32(dma_handle)),
cpu_to_le32(pci_dma_lo32(dma_handle)),
- cpu_to_le32(sg_dma_len(sg_next(s))));
- remseg--;
+ cpu...On Mon, 10 Sep 2007 11:19:26 -0700 Even if we revert the qla1280 patch, scsi-ml still sends chaining sg list. So it doesn't work. The following patch disables chaining sg list for qla1280. If the fix that I've just sent doesn't work, please try this. - From: FUJITA Tomonori <tomof@acm.org> Subject: [PATCH] add use_sg_chaining option to scsi_host_template This option is true if a low-level driver can support sg chaining. This will be removed eventually when all the drivers are converted to support sg chaining. q->max_phys_segments is set to SCSI_MAX_SG_SEGMENTS if false. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> --- arch/ia64/hp/sim/simscsi.c | 1 + drivers/scsi/3w-9xxx.c | 1 + drivers/scsi/3w-xxxx.c | 1 + drivers/scsi/BusLogic.c | 1 + drivers/scsi/NCR53c406a.c | 3 ++- drivers/scsi/a100u2w.c | 1 + drivers/scsi/aacraid/linit.c | 1 + drivers/scsi/aha1740.c | 1 + drivers/scsi/aic7xxx/aic79xx_osm.c | 1 + drivers/scsi/aic7xxx/aic7xxx_osm.c | 1 + drivers/scsi/aic7xxx_old.c | 1 + drivers/scsi/arcmsr/arcmsr_hba.c | 1 + drivers/scsi/dc395x.c | 1 + drivers/scsi/dpt_i2o.c | 1 + drivers/scsi/eata.c | 3 ++- drivers/scsi/hosts.c | 1 + drivers/scsi/hptiop.c | 1 + drivers/scsi/ibmmca.c | 1 + drivers/scsi/ibmvscsi/ibmvscsi.c | 1 + drivers/scsi/initio.c | 1 + drivers/scsi/ipr.c | 1 + drivers/scsi/lpfc/lpfc_scsi.c | 2 ++ drivers/scsi/mac53c94.c | 1 + drivers/scsi/megaraid.c | 1 + drivers/scsi/megaraid/megaraid_mbox.c | 1 + drivers/scsi/megaraid/megaraid_sas.c | 1 + drivers/scsi/mesh.c | 1 + drivers/scsi/nsp32.c ...
On Tue, Sep 11, 2007 at 04:31:12AM +0900, FUJITA Tomonori wrote: Ok, the other patch _did_ work, but this got tested anyhow and it did -apw -
Sorry to confirm this. My RAID5 got destroyed a second time. To summarize what worked / not worked / and seems to work for me: First 2 tries with unpatched rc4-mm1: Both times one sata_sil24-drive got kicked Then I switched back to rc3-mm1, 18 boots with that kernel worked. Then I tried the patched rc4-mm1 and it worked too. The next boot also worked, but the third time kicked a drive out again. But as nobody reads logs, I did not notice that and keep using the patched rc4-mm1. The next 5 times the system worked normally with the two remaining drives. The sixth boot kicked the second sata_sil24 drive. That I did notice... After reassembling the RAID, I'm now back to the patch rc4-mm1 that did boot correctly this time. So the patch just makes it unlikelier to hit the bug. Instead of failing 2 out of 2 times, it only failed 2 out of 8 times. I compared the rc4-mm1 boot from a working case and the case where it kicked the first drive. Nothing seems to stand out... 145c145 < CPU 0: aperture @ 4000000 size 32 MB 154c154 < Calibrating delay using timer specific routine.. 5203.23 BogoMIPS (lpj=26016160) 169c169 < APIC timer calibration result 12499998 173c173 < Calibrating delay using timer specific routine.. 5222.40 BogoMIPS (lpj=26112010) 182c182 < Calibrating delay using timer specific routine.. 5222.73 BogoMIPS (lpj=26113694) 191c191 < Calibrating delay using timer specific routine.. 5223.07 BogoMIPS (lpj=26115369) 269d268 < Switched to high resolution mode on CPU 3 502,509c502,509 < raid6: int64x1 2634 MB/s < raid6: int64x2 3244 MB/s < raid6: int64x4 3405 MB/s < raid6: int64x8 2614 MB/s < raid6: sse2x1 3607 MB/s < raid6: sse2x2 4834 MB/s < raid6: sse2x4 4946 MB/s < raid6: using algorithm sse2x4 (4946 MB/s) 567c567 < md1: bitmap initialized from disk: read 10/10 pages, set 96 bits Another good boot also showed the aperture at a similar high address: CPU 0: aperture @ b7f2000000 size 32 MB And tha...
Let's keep linux-ide cc'ed, please. -
On Mon, 10 Sep 2007 11:19:26 -0700
Can you try this patch (against 2.6.23-rc4-mm1)?
From 592bd2049cb3e6e1f1dde7cf631879f26ddffeaa Mon Sep 17 00:00:00 2001
From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Date: Mon, 10 Sep 2007 04:17:13 +0100
Subject: [PATCH] qla1280: sg chaining fixes
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
---
drivers/scsi/qla1280.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
index bd805ec..7c1eaec 100644
--- a/drivers/scsi/qla1280.c
+++ b/drivers/scsi/qla1280.c
@@ -2977,8 +2977,8 @@ qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
cpu_to_le32(pci_dma_hi32(dma_handle)),
cpu_to_le32(pci_dma_lo32(dma_handle)),
cpu_to_le32(sg_dma_len(s)));
- remseg--;
}
+ remseg -= cnt;
dprintk(5, "qla1280_64bit_start_scsi: "
"continuation packet data - b %i, t "
"%i, l %i \n", SCSI_BUS_32(cmd),
@@ -3250,6 +3250,8 @@ qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
/* Load continuation entry data segments. */
for_each_sg(sg, s, remseg, cnt) {
+ if (cnt == 7)
+ break;
*dword_ptr++ =
cpu_to_le32(pci_dma_lo32(sg_dma_address(s)));
*dword_ptr++ =
@@ -3260,6 +3262,7 @@ qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
cpu_to_le32(pci_dma_lo32(sg_dma_address(s))),
cpu_to_le32(sg_dma_len(s)));
}
+ remseg -= cnt;
dprintk(5, "qla1280_32bit_start_scsi: "
"continuation packet data - "
"scsi(%i:%i:%i)\n", SCSI_BUS_32(cmd),
--
1.5.2.4
-This patch works for me.
I was getting the scsi errors reported earlier in
this thread, running 2.6.23-rc4-mm1 on one of our
big SGI Altix systems.
Applying this patch fixed it, so far as I can tell,
which is to say my system boots cleanly once again.
Thanks.
--
I won't rest till it's the best ...
Programmer, Linux Scalability
Paul Jackson <pj@sgi.com> 1.925.600.0401
-On Fri, 14 Sep 2007 21:16:35 -0700
Thanks for testing!
Jens, we could enable use_sg_chaining option for qla1280.
From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Subject: [PATCH] qla1280: enable use_sg_chaining option
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
---
drivers/scsi/qla1280.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
index 7c1eaec..83249af 100644
--- a/drivers/scsi/qla1280.c
+++ b/drivers/scsi/qla1280.c
@@ -4259,6 +4259,7 @@ static struct scsi_host_template qla1280_driver_template = {
.sg_tablesize = SG_ALL,
.cmd_per_lun = 1,
.use_clustering = ENABLE_CLUSTERING,
+ .use_sg_chaining = ENABLE_SG_CHAINING,
};
--
1.5.2.4
-Added, thanks! -- Jens Axboe -
On Mon, 17 Sep 2007 15:28:19 +0200 Thanks. BTW, please don't forget to integrate the following patches: - revert sg segment size ifdefs http://marc.info/?l=linux-scsi&m=118881264013097&w=2 - remove sglist_len http://marc.info/?l=linux-scsi&m=118907920405100&w=2 -
Added, and I rebased the sglist-* branches to current again. So everything should be fully uptodate once more. -- Jens Axboe -
On Tue, 18 Sep 2007 12:18:40 +0200 Thanks, here are a few more things. - please drop the iscsi patch since Mike has major changes to iscsi I/O path. - ipr sg chaining need to be disabled since libata is not ready. - you can add Doug's ACK to scsi_debug patch: http://marc.info/?l=linux-scsi&m=118926325931801&w=2 -
All done. -- Jens Axboe -
Yep this patch seems to sort out booting on these boxes. The other one -apw -
I reported a similar problem on Sep 1, but until now got no response. The system boots, reads the partition tables, starts the RAID and then From my log: [ 3.890000] scsi0 : sata_sil24 [ 3.900000] scsi1 : sata_sil24 [ 3.900000] ata1: SATA max UDMA/100 host m128@0xefeffc00 port 0xefef8000 irq 16 [ 3.920000] ata2: SATA max UDMA/100 host m128@0xefeffc00 port 0xefefa000 irq 16 [ 4.300000] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 4.360000] ata1.00: ATA-7: MAXTOR STM3320820AS, 3.AAE, max UDMA/133 [ 4.370000] ata1.00: 625142448 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 4.430000] ata1.00: configured for UDMA/100 [ 4.500000] ieee1394: Node added: ID:BUS[0-00:1023] GUID[0010dc00005cc354] [ 4.500000] ieee1394: Host added: ID:BUS[0-01:1023] GUID[0011d80000c4c261] [ 4.790000] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 4.850000] ata2.00: ATA-7: MAXTOR STM3320820AS, 3.AAE, max UDMA/133 [ 4.860000] ata2.00: 625142448 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 4.920000] ata2.00: configured for UDMA/100 [ 4.930000] scsi 0:0:0:0: Direct-Access ATA MAXTOR STM332082 3.AA PQ: 0 ANSI: 5 [ 4.960000] sd 0:0:0:0: [sda] 625142448 512-byte hardware sectors (320073 MB) [ 4.980000] sd 0:0:0:0: [sda] Write Protect is off [ 4.990000] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 4.990000] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 5.020000] sd 0:0:0:0: [sda] 625142448 512-byte hardware sectors (320073 MB) [ 5.040000] sd 0:0:0:0: [sda] Write Protect is off [ 5.050000] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 5.050000] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 5.080000] sda: sda1 sda2 [ 5.110000] sd 0:0:0:0: [sda] Attached SCSI disk [ 5.120000] scsi 1:0:0:0: Direct-Access ATA MAXTOR STM332082 3.AA PQ: 0 ANSI: 5 [ 5.140000] sd 1:0:0:0: [sdb] 625142448 512-byte hardware sectors (3200...
You still haven't had a response ;) Let's add a cc. Oh, you reported it against 2.6.23-rc4-mm1 (http://lkml.org/lkml/2007/9/1/92) and I did cc linux-ide in my response. I'll continue to point out where this sort of thing occurs because last week I was told that a reson why so many bug reports are ignored is because Andy is using qla1280. You're using sata. So it's probably a different Can you please confirm that this bug is present in -mm and not present in mainline (yet)? Thanks. -
On Mon, 10 Sep 2007 12:20:38 -0700 This might be a sg chaining bug too (probabaly sg chaining libata patch). Can you try the following patch that I've just sent: http://lkml.org/lkml/2007/9/10/251 The patch also disables chaining sg list for libata. -
With this patch 2.6.23-rc4-mm1 works for me. Mainline 2.6.23-rc5-git1 works also without needing any patches. Torsten -
OK, thanks for testing that. I'll merge Tomo's patch so that we can selectively enable drivers when we KNOW they work, instead of trying to do this (massive) operation whole sale. -- Jens Axboe -
But the mail from Andy was a nice point to try to another cc, i.e. Yes, but you (Andrew) also said in response to Andy: "If it's not that then perhaps something in scsi core broke, dunno." So I wanted to add that Currently using 2.6.23-rc3-mm1, that works for me. Now downloading 2.6.23-rc5-git1... Torsten -
Am seeing the following compile error on all of my powerpc platforms: CC kernel/sched.o kernel/sched.c: In function `cpu_to_phys_group': kernel/sched.c:5937: error: `per_cpu__cpu_sibling_map' undeclared (first use in this function) kernel/sched.c:5937: error: (Each undeclared identifier is reported only once kernel/sched.c:5937: error: for each function it appears in.) kernel/sched.c:5937: warning: type defaults to `int' in declaration of `type name' kernel/sched.c:5937: error: invalid type argument of `unary *' kernel/sched.c: In function `build_sched_domains': kernel/sched.c:6172: error: `per_cpu__cpu_sibling_map' undeclared (first use in this function) kernel/sched.c:6172: warning: type defaults to `int' in declaration of `type name' kernel/sched.c:6172: error: invalid type argument of `unary *' kernel/sched.c:6183: warning: type defaults to `int' in declaration of `type name' kernel/sched.c:6183: error: invalid type argument of `unary *' make[1]: *** [kernel/sched.o] Error 1 make: *** [kernel] Error 2 -apw -
do_try_to_free_pages() can become static.
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
23781fa6792c518c8581ceeaf08db251574e8430
diff --git a/mm/vmscan.c b/mm/vmscan.c
index b34b29d..9104cf8 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1248,8 +1248,8 @@ static unsigned long shrink_zones(int priority, struct zone **zones,
* holds filesystem locks which prevent writeout this might not work, and the
* allocation attempt will fail.
*/
-unsigned long do_try_to_free_pages(struct zone **zones, gfp_t gfp_mask,
- struct scan_control *sc)
+static unsigned long do_try_to_free_pages(struct zone **zones, gfp_t gfp_mask,
+ struct scan_control *sc)
{
int priority;
int ret = 0;
-Thanks, looks good! -- Warm Regards, Balbir Singh Linux Technology Center IBM, ISTL -
tcp_splice_data_recv() can become static.
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
233aefd2a215430c16bd02eca06fb8a4b6079f7a
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 22576e4..6623796 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -515,8 +515,9 @@ static inline void tcp_push(struct sock *sk, int flags, int mss_now,
}
}
-int tcp_splice_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb,
- unsigned int offset, size_t len)
+static int tcp_splice_data_recv(read_descriptor_t *rd_desc,
+ struct sk_buff *skb,
+ unsigned int offset, size_t len)
{
struct tcp_splice_state *tss = rd_desc->arg.data;
-From: Adrian Bunk <bunk@kernel.org> I'll let Jens or similar pick this one up since it obviously won't apply to my tree. -
I'll shove it in my #splice-net branch, where it originates from. -- Jens Axboe -
This patch makes the following needlessly globalvariables static:
- sctp_memory_pressure
- sctp_memory_allocated
- sctp_sockets_allocated
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
3c211ad074038414ebc156b1abbc3df78dc60cb2
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 37e7306..f53545a 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -112,9 +112,9 @@ extern int sysctl_sctp_mem[3];
extern int sysctl_sctp_rmem[3];
extern int sysctl_sctp_wmem[3];
-int sctp_memory_pressure;
-atomic_t sctp_memory_allocated;
-atomic_t sctp_sockets_allocated;
+static int sctp_memory_pressure;
+static atomic_t sctp_memory_allocated;
+static atomic_t sctp_sockets_allocated;
static void sctp_enter_memory_pressure(void)
{
-From: Adrian Bunk <bunk@kernel.org> Applied, thanks. -
Looks fine to me Acked-by: Neil Horman <nhorman@tuxdriver.com> Neil -- /*************************************************** *Neil Horman *nhorman@tuxdriver.com *gpg keyid: 1024D / 0x92A74FA1 *http://pgp.mit.edu ***************************************************/ -
This patch makes the following needlessly global functions static:
- lock_page_container()
- unlock_page_container()
- __mem_container_move_lists()
Additionally, there was no reason for the "mem_control_type" object.
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
mm/memcontrol.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
b582cc510b6b0a182dc56025828e7a3c566b9724
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 8162d98..49bf04f 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -91,7 +91,7 @@ enum {
MEM_CONTAINER_TYPE_CACHED,
MEM_CONTAINER_TYPE_ALL,
MEM_CONTAINER_TYPE_MAX,
-} mem_control_type;
+};
static struct mem_container init_mem_container;
@@ -156,18 +156,18 @@ struct page_container *page_get_page_container(struct page *page)
(page->page_container & ~PAGE_CONTAINER_LOCK);
}
-void __always_inline lock_page_container(struct page *page)
+static void __always_inline lock_page_container(struct page *page)
{
bit_spin_lock(PAGE_CONTAINER_LOCK_BIT, &page->page_container);
VM_BUG_ON(!page_container_locked(page));
}
-void __always_inline unlock_page_container(struct page *page)
+static void __always_inline unlock_page_container(struct page *page)
{
bit_spin_unlock(PAGE_CONTAINER_LOCK_BIT, &page->page_container);
}
-void __mem_container_move_lists(struct page_container *pc, bool active)
+static void __mem_container_move_lists(struct page_container *pc, bool active)
{
if (active)
list_move(&pc->lru, &pc->mem_container->active_list);
-This looks good as well -- Warm Regards, Balbir Singh Linux Technology Center IBM, ISTL -
It's not about style - your "mem_control_type" was not an identifier,
it was an (unused) variable.
It seems the intended code was:
enum mem_control_type {
MEM_CONTAINER_TYPE_UNSPEC = 0,
MEM_CONTAINER_TYPE_MAPPED,
MEM_CONTAINER_TYPE_CACHED,
MEM_CONTAINER_TYPE_ALL,
MEM_CONTAINER_TYPE_MAX,
};
cu
Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed
-Yes, thinking again, what you say makes sense. -- Thanks, Balbir Singh Linux Technology Center IBM, ISTL -
Yes, typedefs are bad. And because it happens very so often, I also have the link: http://lkml.org/lkml/2006/11/21/34 Jan -- -
Humm. Judging from the @@-line, it looks like:
enum {
MEM_CONTAINER_TYPE_WHATEVER
} mem_control_type;
making it actually a variable name. Confusing at best.
Jan
--
-raise_softirq_irqoff no longer has any modular user.
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
eff0407b63757cdd4164a0bdde0313e8f154b6dc
diff --git a/kernel/softirq.c b/kernel/softirq.c
index abae56c..ce38b56 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -335,8 +335,6 @@ inline fastcall void raise_softirq_irqoff(unsigned int nr)
wakeup_softirqd();
}
-EXPORT_SYMBOL(raise_softirq_irqoff);
-
void fastcall raise_softirq(unsigned int nr)
{
unsigned long flags;
-This should probably go in through Dave's tree as it's removing this rather annoying user. -
From: Christoph Hellwig <hch@infradead.org> Yep, I've just tossed it into my tree. Thanks. -
This hydra had more than one head...
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
arch/i386/kernel/irq.c | 2 --
arch/powerpc/kernel/irq.c | 1 -
arch/s390/kernel/irq.c | 1 -
arch/sh/kernel/irq.c | 1 -
arch/x86_64/kernel/irq.c | 1 -
5 files changed, 6 deletions(-)
68791fe88172ac3c2dbb0fbbffb8befc7b59e3f7
diff --git a/arch/i386/kernel/irq.c b/arch/i386/kernel/irq.c
index a6b2c7e..de1601f 100644
--- a/arch/i386/kernel/irq.c
+++ b/arch/i386/kernel/irq.c
@@ -231,8 +231,6 @@ asmlinkage void do_softirq(void)
local_irq_restore(flags);
}
-
-EXPORT_SYMBOL(do_softirq);
#endif
/*
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index dfad0e4..65c2409 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -395,7 +395,6 @@ void do_softirq(void)
local_irq_restore(flags);
}
-EXPORT_SYMBOL(do_softirq);
/*
diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c
index 8f0cbca..c36d812 100644
--- a/arch/s390/kernel/irq.c
+++ b/arch/s390/kernel/irq.c
@@ -95,7 +95,6 @@ asmlinkage void do_softirq(void)
local_irq_restore(flags);
}
-EXPORT_SYMBOL(do_softirq);
void init_irq_proc(void)
{
diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c
index 0340498..4b49d03 100644
--- a/arch/sh/kernel/irq.c
+++ b/arch/sh/kernel/irq.c
@@ -245,7 +245,6 @@ asmlinkage void do_softirq(void)
local_irq_restore(flags);
}
-EXPORT_SYMBOL(do_softirq);
#endif
void __init init_IRQ(void)
diff --git a/arch/x86_64/kernel/irq.c b/arch/x86_64/kernel/irq.c
index 87423b7..3542f0c 100644
--- a/arch/x86_64/kernel/irq.c
+++ b/arch/x86_64/kernel/irq.c
@@ -236,4 +236,3 @@ asmlinkage void do_softirq(void)
}
local_irq_restore(flags);
}
-EXPORT_SYMBOL(do_softirq);
-From: Adrian Bunk <bunk@kernel.org> Applied, thanks. -
This patch makes the following needlessly global code static:
- vmcoreinfo_data[]
- vmcoreinfo_size
- vmcoreinfo_append_str()
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
include/linux/kexec.h | 14 -----------
kernel/kexec.c | 52 +++++++++++++++++++++++++-----------------
2 files changed, 32 insertions(+), 34 deletions(-)
e6dbb01497c12aa69b47914da4db1cfd23e9813e
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index 99f2d6f..7cce357 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -123,21 +123,8 @@ int kexec_should_crash(struct task_struct *);
void crash_save_cpu(struct pt_regs *regs, int cpu);
void crash_save_vmcoreinfo(void);
void arch_crash_save_vmcoreinfo(void);
-void vmcoreinfo_append_str(const char *fmt, ...);
unsigned long paddr_vmcoreinfo_note(void);
-#define SYMBOL(name) \
- vmcoreinfo_append_str("SYMBOL(%s)=%lx\n", #name, (unsigned long)&name)
-#define SIZE(name) \
- vmcoreinfo_append_str("SIZE(%s)=%d\n", #name, sizeof(struct name))
-#define OFFSET(name, field) \
- vmcoreinfo_append_str("OFFSET(%s.%s)=%d\n", #name, #field, \
- &(((struct name *)0)->field))
-#define LENGTH(name, value) \
- vmcoreinfo_append_str("LENGTH(%s)=%d\n", #name, value)
-#define CONFIG(name) \
- vmcoreinfo_append_str("CONFIG_%s=y\n", #name)
-
extern struct kimage *kexec_image;
extern struct kimage *kexec_crash_image;
@@ -177,7 +164,6 @@ extern struct resource crashk_res;
typedef u32 note_buf_t[KEXEC_NOTE_BYTES/4];
extern note_buf_t *crash_notes;
extern u32 vmcoreinfo_note[VMCOREINFO_NOTE_SIZE/4];
-extern unsigned int vmcoreinfo_size;
extern unsigned int vmcoreinfo_max_size;
diff --git a/kernel/kexec.c b/kernel/kexec.c
index af2c035..c84a387 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -36,9 +36,9 @@
note_buf_t* crash_notes;
/* vmcoreinfo stuff */
-unsigned char vmcoreinfo_data[VMCOREINFO_BYTES];
+static unsigned char vmcoreinfo_data[VMCOREINFO_BYTES];
u32 vmcoreinfo_no...Hi Adrian, The kernel compiling fails with your patch because architecture-specific function should access the above data/function: # make [snip] arch/ia64/kernel/machine_kexec.c: In function 'arch_crash_save_vmcoreinfo': arch/ia64/kernel/machine_kexec.c:134: error: implicit declaration of function 'SYMBOL' arch/ia64/kernel/machine_kexec.c:135: error: implicit declaration of function 'LENGTH' arch/ia64/kernel/machine_kexec.c:139: error: implicit declaration of function 'SIZE' arch/ia64/kernel/machine_kexec.c:139: error: 'node_memblk_s' undeclared (first use in this function) arch/ia64/kernel/machine_kexec.c:139: error: (Each undeclared identifier is reported only once arch/ia64/kernel/machine_kexec.c:139: error: for each function it appears in.) arch/ia64/kernel/machine_kexec.c:140: error: implicit declaration of function 'OFFSET' arch/ia64/kernel/machine_kexec.c:140: error: 'start_paddr' undeclared (first use in this function) arch/ia64/kernel/machine_kexec.c:141: error: 'size' undeclared (first use in this function) arch/ia64/kernel/machine_kexec.c:144: error: implicit declaration of function 'CONFIG' arch/ia64/kernel/machine_kexec.c:144: error: 'PGTABLE_3' undeclared (first use in this function) make[1]: *** [arch/ia64/kernel/machine_kexec.o] Error 1 make: *** [arch/ia64/kernel] Error 2 # Thanks Ken'ichi Ohmichi -
Thanks, I missed this.
That's 80% my fault and 20% the fault of the usage of generic names
SYMBOL/SIZE/OFFSET/LENGTH/CONFIG making it impossible to grep for them
(and namespace conflicts quite possible).
Can we get these #define's properly prefixed (e.g. KEXEC_SYMBOL etc.) so
that other people will not repeat my mistake and namespace conflicts
TIA
Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed
-CRASH_DUMP_ or VMCORE_ should be a better prefix as the dump filtering functionality not directly related to kexec. Thanks Maneesh -- Maneesh Soni Linux Technology Center, IBM India Systems and Technology Lab, Bangalore, India -
Hi Adrian, Maneesh, Maneesh Soni wrote: > On Mon, Sep 10, 2007 at 02:20:40PM +0200, Adrian Bunk wrote: >> On Mon, Sep 10, 2007 at 11:55:49AM +0900, Ken'ichi Ohmichi wrote: >>> Hi Adrian, >>> >>> >>> 2007/09/09 22:25:16 +0200, Adrian Bunk <bunk@kernel.org> wrote: >>>> On Fri, Aug 31, 2007 at 09:58:22PM -0700, Andrew Morton wrote: >>>>> ... >>>>> Changes since 2.6.23-rc3-mm1: >>>>> ... >>>>> +add-vmcoreinfo.patch >>>>> ... >>>>> misc >>>>> ... >>>> This patch makes the following needlessly global code static: >>>> - vmcoreinfo_data[] >>>> - vmcoreinfo_size >>>> - vmcoreinfo_append_str() >>> The kernel compiling fails with your patch because architecture-specific >>> function should access the above data/function: >>> >>> # make >>> [snip] >>> arch/ia64/kernel/machine_kexec.c: In function 'arch_crash_save_vmcoreinfo': >>> arch/ia64/kernel/machine_kexec.c:134: error: implicit declaration of function 'SYMBOL' >>> arch/ia64/kernel/machine_kexec.c:135: error: implicit declaration of function 'LENGTH' >>> arch/ia64/kernel/machine_kexec.c:139: error: implicit declaration of function 'SIZE' >>> arch/ia64/kernel/machine_kexec.c:139: error: 'node_memblk_s' undeclared (first use in this function) >>> arch/ia64/kernel/machine_kexec.c:139: error: (Each undeclared identifier is reported only once >>> arch/ia64/kernel/machine_kexec.c:139: error: for each function it appears in.) >>> arch/ia64/kernel/machine_kexec.c:140: error: implicit declaration of function 'OFFSET' >>> arch/ia64/kernel/machine_kexec.c:140: error: 'start_paddr' undeclared (first use in this function) >>> arch/ia64/kernel/machine_kexec.c:141: erro...
nfs_wb_page_priority() can now become static.
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
fs/nfs/write.c | 3 ++-
include/linux/nfs_fs.h | 1 -
2 files changed, 2 insertions(+), 2 deletions(-)
30370f47093c3d812929d84a5a6be79ccb55a2b3
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 3e9e268..37953fd 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -1424,7 +1424,8 @@ out:
return ret;
}
-int nfs_wb_page_priority(struct inode *inode, struct page *page, int how)
+static int nfs_wb_page_priority(struct inode *inode, struct page *page,
+ int how)
{
loff_t range_start = page_offset(page);
loff_t range_end = range_start + (loff_t)(PAGE_CACHE_SIZE - 1);
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
index f5414fc..e247a40 100644
--- a/include/linux/nfs_fs.h
+++ b/include/linux/nfs_fs.h
@@ -430,7 +430,6 @@ extern long nfs_sync_mapping_wait(struct address_space *, struct writeback_contr
extern int nfs_wb_all(struct inode *inode);
extern int nfs_wb_nocommit(struct inode *inode);
extern int nfs_wb_page(struct inode *inode, struct page* page);
-extern int nfs_wb_page_priority(struct inode *inode, struct page* page, int how);
extern int nfs_wb_page_cancel(struct inode *inode, struct page* page);
#if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4)
extern int nfs_commit_inode(struct inode *, int);
-This patch makes four needlessly global functions static.
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
drivers/usb/serial/ch341.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
c7046a47d2d1dd5dc6a8fcc298b8c5f7497b3aaa
diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
index eb68106..6b252ce 100644
--- a/drivers/usb/serial/ch341.c
+++ b/drivers/usb/serial/ch341.c
@@ -66,7 +66,8 @@ static int ch341_control_in(struct usb_device *dev,
return r;
}
-int ch341_set_baudrate(struct usb_device *dev, struct ch341_private *priv)
+static int ch341_set_baudrate(struct usb_device *dev,
+ struct ch341_private *priv)
{
short a, b;
int r;
@@ -108,14 +109,15 @@ int ch341_set_baudrate(struct usb_device *dev, struct ch341_private *priv)
return r;
}
-int ch341_set_handshake(struct usb_device *dev, struct ch341_private *priv)
+static int ch341_set_handshake(struct usb_device *dev,
+ struct ch341_private *priv)
{
dbg("ch341_set_handshake(%d,%d)", priv->dtr, priv->rts);
return ch341_control_out(dev, 0xa4,
~((priv->dtr?1<<5:0)|(priv->rts?1<<6:0)), 0);
}
-int ch341_get_status(struct usb_device *dev)
+static int ch341_get_status(struct usb_device *dev)
{
char *buffer;
int r;
@@ -142,7 +144,7 @@ out: kfree(buffer);
/* -------------------------------------------------------------------------- */
-int ch341_configure(struct usb_device *dev, struct ch341_private *priv)
+static int ch341_configure(struct usb_device *dev, struct ch341_private *priv)
{
char *buffer;
int r;
-This patch makes three needlessly global functions static.
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
drivers/dma/ioat_dma.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
c633b44cd60648f456a11bb38fd9193ce4d6acdc
diff --git a/drivers/dma/ioat_dma.c b/drivers/dma/ioat_dma.c
index e4c3afe..66c5bb5 100644
--- a/drivers/dma/ioat_dma.c
+++ b/drivers/dma/ioat_dma.c
@@ -47,8 +47,8 @@
static void ioat_dma_start_null_desc(struct ioat_dma_chan *ioat_chan);
static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *ioat_chan);
-struct ioat_dma_chan *ioat_lookup_chan_by_index(struct ioatdma_device *device,
- int index)
+static struct ioat_dma_chan *ioat_lookup_chan_by_index(struct ioatdma_device *device,
+ int index)
{
return device->idx[index];
}
@@ -716,7 +716,7 @@ MODULE_PARM_DESC(ioat_interrupt_style,
* ioat_dma_setup_interrupts - setup interrupt handler
* @device: ioat device
*/
-int ioat_dma_setup_interrupts(struct ioatdma_device *device)
+static int ioat_dma_setup_interrupts(struct ioatdma_device *device)
{
struct ioat_dma_chan *ioat_chan;
int err, i, j, msixcnt;
@@ -826,7 +826,7 @@ err_no_irq:
* ioat_dma_remove_interrupts - remove whatever interrupts were set
* @device: ioat device
*/
-void ioat_dma_remove_interrupts(struct ioatdma_device *device)
+static void ioat_dma_remove_interrupts(struct ioatdma_device *device)
{
struct ioat_dma_chan *ioat_chan;
int i;
-ide_get_error_location() is no longer used.
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
drivers/ide/ide-io.c | 35 -----------------------------------
include/linux/ide.h | 5 -----
2 files changed, 40 deletions(-)
924249789a0c0d577c5c5bfa91f4e514b7ebde60
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index c1692d9..ec835e3 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -322,41 +322,6 @@ static void ide_complete_pm_request (ide_drive_t *drive, struct request *rq)
spin_unlock_irqrestore(&ide_lock, flags);
}
-/*
- * FIXME: probably move this somewhere else, name is bad too :)
- */
-u64 ide_get_error_location(ide_drive_t *drive, char *args)
-{
- u32 high, low;
- u8 hcyl, lcyl, sect;
- u64 sector;
-
- high = 0;
- hcyl = args[5];
- lcyl = args[4];
- sect = args[3];
-
- if (ide_id_has_flush_cache_ext(drive->id)) {
- low = (hcyl << 16) | (lcyl << 8) | sect;
- HWIF(drive)->OUTB(drive->ctl|0x80, IDE_CONTROL_REG);
- high = ide_read_24(drive);
- } else {
- u8 cur = HWIF(drive)->INB(IDE_SELECT_REG);
- if (cur & 0x40) {
- high = cur & 0xf;
- low = (hcyl << 16) | (lcyl << 8) | sect;
- } else {
- low = hcyl * drive->head * drive->sect;
- low += lcyl * drive->sect;
- low += sect - 1;
- }
- }
-
- sector = ((u64) high << 24) | low;
- return sector;
-}
-EXPORT_SYMBOL(ide_get_error_location);
-
/**
* ide_end_drive_cmd - end an explicit drive command
* @drive: command
diff --git a/include/linux/ide.h b/include/linux/ide.h
index 48871f9..65de5c3 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -1088,11 +1088,6 @@ extern ide_startstop_t ide_do_reset (ide_drive_t *);
extern void ide_init_drive_cmd (struct request *rq);
/*
- * this function returns error location sector offset in case of a write error
- */
-extern u64 ide_get_error_location(ide_drive_t *, char *);
-
-/*
* "action" parameter type for ide_do_dri...Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Since git-block contains the patch which removes the only user of ide_get_error_location() I think that this patch should be also merged through block tree. Jens? PS none of the blkdev_issue_flush() users uses *error_sector argument -
I had hoped that the existance was enough incentive, but it didn't happen. I'll make a note to kill that again. -- Jens Axboe -
This patch fixes the following compile error:
<-- snip -->
...
CC arch/alpha/kernel/asm-offsets.s
In file included from /home/bunk/linux/kernel-2.6/linux-2.6.23-rc4-mm1/include/linux/bitops.h:17,
from /home/bunk/linux/kernel-2.6/linux-2.6.23-rc4-mm1/include/linux/kernel.h:15,
from /home/bunk/linux/kernel-2.6/linux-2.6.23-rc4-mm1/include/linux/sched.h:50,
from /home/bunk/linux/kernel-2.6/linux-2.6.23-rc4-mm1/arch/alpha/kernel/asm-offsets.c:9:
include2/asm/bitops.h: In function 'clear_bit_unlock':
include2/asm/bitops.h:75: error: implicit declaration of function 'smp_mb'
make[2]: *** [arch/alpha/kernel/asm-offsets.s] Error 1
<-- snip -->
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
6df784c9aa4ba1ff2062b63e733c645e8b1e5203
diff --git a/include/asm-alpha/bitops.h b/include/asm-alpha/bitops.h
index ffec8a8..381b4f5 100644
--- a/include/asm-alpha/bitops.h
+++ b/include/asm-alpha/bitops.h
@@ -2,6 +2,7 @@
#define _ALPHA_BITOPS_H
#include <asm/compiler.h>
+#include <asm/barrier.h>
/*
* Copyright 1994, Linus Torvalds.
-