public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* ext3 directory corruption under Xen
@ 2008-06-23 16:15 Christopher S. Aker
  2008-06-23 19:13 ` adam radford
  0 siblings, 1 reply; 4+ messages in thread
From: Christopher S. Aker @ 2008-06-23 16:15 UTC (permalink / raw)
  To: linux-kernel; +Cc: xen devel

We've been seeing a rash of ext3 directory corruption occurring under 
Xen.  All but one of the reports have been with filesystems formatted 
with 1024 blocksize.  We have one report, that's potentialy the same 
bug, occurring on a filesystem with 4096 blocksize (either way, it was 
some type of corruption in that case).  In all cases, the filesystems 
were mounted with ext3's default journaling mode.  No quotas or anything 
else other than the default ext3 mount options.

It's happened on a number of different hosts, all of the same hardware 
and software configuration (Xen 3.2 64bit, 32bit pae dom0, 32bit pae 
domUs.  LVM backend with 3ware hardware RAID-1).  Some of those hosts 
were previously running non-virtaulized Linux and UML, using the 
identical guest images, and under that configuration never experienced 
this problem.

This has occurred under both 2.6.18-xenbits and the more recent pv_ops 
based kernels (2.6.24, 2.6.25), which I presume are all using the same 
blkfront driver code.

The common workloads from the reports seems to be active maildirs and rsync.

The initial errors reported back are all from fs/ext3/dir.c, in 
ext3_check_dir_entry(). Most commonly hit is the "rec_len % 4 != 0" 
check.  We've seen other checks trigger, but my assumption is that those 
happen after more stuff gets whacked out.

Eventually the fs will go read-only.  In extreme cases, the fs is chewed 
through enough that data is lost.

It's tricky to track down the trigger because you can only detect the 
corruption after it's happened.  Our attempts to reproduce this using 
various filesystem thrashing scripts haven't yielded a reliable way to 
trigger it, however we have been successful in triggering it twice -- in 
two weeks :( .

My hope is that this triggers an "a-hah" from someone in LKML or Xen 
land who has experience with this code, or that this is a known issue 
and a fix already lives.

We're scared.  Please help.

Thanks,
-Chris


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: ext3 directory corruption under Xen
  2008-06-23 16:15 ext3 directory corruption under Xen Christopher S. Aker
@ 2008-06-23 19:13 ` adam radford
  2008-06-23 19:53   ` Christopher S. Aker
  0 siblings, 1 reply; 4+ messages in thread
From: adam radford @ 2008-06-23 19:13 UTC (permalink / raw)
  To: Christopher S. Aker; +Cc: linux-kernel, xen devel

On Mon, Jun 23, 2008 at 9:15 AM, Christopher S. Aker <caker@theshore.net> wrote:

> It's happened on a number of different hosts, all of the same hardware and
> software configuration (Xen 3.2 64bit, 32bit pae dom0, 32bit pae domUs.  LVM
> backend with 3ware hardware RAID-1).

Do you have Intel EM64T and the older 3w-xxxx driver with 4GB+ RAM?
If so there is a driver patch for older kernels to fix an issue where the driver
was over-riding the default DMA direction with DMA_BIDIRECTIONAL,
and this caused corruption going through the SWIOTLB code (not IOMMU
w/AMD).

A driver patch for older kernels including XenServer-4.1 is available here:

http://www.3ware.com/KB/article.aspx?id=15243&cNode=6I1C6S

This doesn't explain however your failures with 2.6.24 2.6.25, etc, since
this issue is no longer valid after the scsi_dma_map() changes that went
into most scsi drivers since 2.6.23.

-Adam

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: ext3 directory corruption under Xen
  2008-06-23 19:13 ` adam radford
@ 2008-06-23 19:53   ` Christopher S. Aker
  2008-06-23 23:08     ` adam radford
  0 siblings, 1 reply; 4+ messages in thread
From: Christopher S. Aker @ 2008-06-23 19:53 UTC (permalink / raw)
  To: adam radford; +Cc: linux-kernel, xen devel

adam radford wrote:
> On Mon, Jun 23, 2008 at 9:15 AM, Christopher S. Aker <caker@theshore.net> wrote:
> 
>> It's happened on a number of different hosts, all of the same hardware and
>> software configuration (Xen 3.2 64bit, 32bit pae dom0, 32bit pae domUs.  LVM
>> backend with 3ware hardware RAID-1).
 >
> A driver patch for older kernels including XenServer-4.1 is available here:
> 
> http://www.3ware.com/KB/article.aspx?id=15243&cNode=6I1C6S

Thanks, but unfortunately, from that link:

"3ware 9000 series controllers are not affected by this issue."

... which is what we're using.  This problem only appeared after 
rebooting these machines into Xen.  Some of affected boxes even ran 
2.6.18 (non Xen) for awhile without any problems.

-Chris


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: ext3 directory corruption under Xen
  2008-06-23 19:53   ` Christopher S. Aker
@ 2008-06-23 23:08     ` adam radford
  0 siblings, 0 replies; 4+ messages in thread
From: adam radford @ 2008-06-23 23:08 UTC (permalink / raw)
  To: Christopher S. Aker; +Cc: linux-kernel, xen devel

[-- Attachment #1: Type: text/plain, Size: 2880 bytes --]

On Mon, Jun 23, 2008 at 12:53 PM, Christopher S. Aker
<caker@theshore.net> wrote:
> adam radford wrote:
>>
>> On Mon, Jun 23, 2008 at 9:15 AM, Christopher S. Aker <caker@theshore.net>
>> wrote:
>>
>>> It's happened on a number of different hosts, all of the same hardware
>>> and
>>> software configuration (Xen 3.2 64bit, 32bit pae dom0, 32bit pae domUs.
>>>  LVM
>>> backend with 3ware hardware RAID-1).
>
>>
>>
>> A driver patch for older kernels including XenServer-4.1 is available
>> here:
>>
>> http://www.3ware.com/KB/article.aspx?id=15243&cNode=6I1C6S
>
> Thanks, but unfortunately, from that link:
>
> "3ware 9000 series controllers are not affected by this issue."
>
> ... which is what we're using.  This problem only appeared after rebooting
> these machines into Xen.  Some of affected boxes even ran 2.6.18 (non Xen)
> for awhile without any problems.
>
> -Chris
>

I've seen cases where Xen DMA code (pci-dma-xen.c) sends I/O requests
un-necessarily through the SWIOTLB code.

Xen dma: avoid unnecessarily SWIOTLB bounce buffering:

http://lists.xensource.com/archives/html/xen-changelog/2008-04/msg00008.html

so you may need a similar bidirectional fix for the 3w-9xxx driver.

Can you try this patch (in-line below and also attached):

-Adam

diff -Naur linux-2.6.18-xen-3.2.0/drivers/scsi/3w-9xxx.c
linux-2.6.18-xen-3.2.0.new/drivers/scsi/3w-9xxx.c
--- linux-2.6.18-xen-3.2.0/drivers/scsi/3w-9xxx.c	2008-02-12
02:44:33.000000000 -0800
+++ linux-2.6.18-xen-3.2.0.new/drivers/scsi/3w-9xxx.c	2008-06-23
15:42:02.000000000 -0700
@@ -1388,7 +1388,7 @@
 	if (cmd->use_sg == 0)
 		goto out;

-	use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg,
DMA_BIDIRECTIONAL);
+	use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg,
cmd->sc_data_direction);

 	if (use_sg == 0) {
 		TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1c, "Failed to map scatter
gather list");
@@ -1415,7 +1415,7 @@
 		goto out;
 	}

-	mapping = pci_map_single(pdev, cmd->request_buffer,
cmd->request_bufflen, DMA_BIDIRECTIONAL);
+	mapping = pci_map_single(pdev, cmd->request_buffer,
cmd->request_bufflen, cmd->sc_data_direction);

 	if (mapping == 0) {
 		TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1d, "Failed to map page");
@@ -1423,7 +1423,7 @@
 	}

 	cmd->SCp.phase = TW_PHASE_SINGLE;
-	cmd->SCp.have_data_in = mapping;
+	cmd->SCp.dma_handle = mapping;
 	retval = mapping;
 out:
 	return retval;
@@ -2000,10 +2000,10 @@

 	switch(cmd->SCp.phase) {
 	case TW_PHASE_SINGLE:
-		pci_unmap_single(pdev, cmd->SCp.have_data_in, cmd->request_bufflen,
DMA_BIDIRECTIONAL);
+		pci_unmap_single(pdev, cmd->SCp.dma_handle, cmd->request_bufflen,
cmd->sc_data_direction);
 		break;
 	case TW_PHASE_SGLIST:
-		pci_unmap_sg(pdev, cmd->request_buffer, cmd->use_sg, DMA_BIDIRECTIONAL);
+		pci_unmap_sg(pdev, cmd->request_buffer, cmd->use_sg, cmd->sc_data_direction);
 		break;
 	}
 } /* End twa_unmap_scsi_data() */

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 3w-9xxx_xen3.2.0.patch --]
[-- Type: text/x-patch; name=3w-9xxx_xen3.2.0.patch, Size: 1624 bytes --]

diff -Naur linux-2.6.18-xen-3.2.0/drivers/scsi/3w-9xxx.c linux-2.6.18-xen-3.2.0.new/drivers/scsi/3w-9xxx.c
--- linux-2.6.18-xen-3.2.0/drivers/scsi/3w-9xxx.c	2008-02-12 02:44:33.000000000 -0800
+++ linux-2.6.18-xen-3.2.0.new/drivers/scsi/3w-9xxx.c	2008-06-23 15:42:02.000000000 -0700
@@ -1388,7 +1388,7 @@
 	if (cmd->use_sg == 0)
 		goto out;
 
-	use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg, DMA_BIDIRECTIONAL);
+	use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg, cmd->sc_data_direction);
 
 	if (use_sg == 0) {
 		TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1c, "Failed to map scatter gather list");
@@ -1415,7 +1415,7 @@
 		goto out;
 	}
 
-	mapping = pci_map_single(pdev, cmd->request_buffer, cmd->request_bufflen, DMA_BIDIRECTIONAL);
+	mapping = pci_map_single(pdev, cmd->request_buffer, cmd->request_bufflen, cmd->sc_data_direction);
 
 	if (mapping == 0) {
 		TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1d, "Failed to map page");
@@ -1423,7 +1423,7 @@
 	}
 
 	cmd->SCp.phase = TW_PHASE_SINGLE;
-	cmd->SCp.have_data_in = mapping;
+	cmd->SCp.dma_handle = mapping;
 	retval = mapping;
 out:
 	return retval;
@@ -2000,10 +2000,10 @@
 
 	switch(cmd->SCp.phase) {
 	case TW_PHASE_SINGLE:
-		pci_unmap_single(pdev, cmd->SCp.have_data_in, cmd->request_bufflen, DMA_BIDIRECTIONAL);
+		pci_unmap_single(pdev, cmd->SCp.dma_handle, cmd->request_bufflen, cmd->sc_data_direction);
 		break;
 	case TW_PHASE_SGLIST:
-		pci_unmap_sg(pdev, cmd->request_buffer, cmd->use_sg, DMA_BIDIRECTIONAL);
+		pci_unmap_sg(pdev, cmd->request_buffer, cmd->use_sg, cmd->sc_data_direction);
 		break;
 	}
 } /* End twa_unmap_scsi_data() */

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2008-06-23 23:11 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-23 16:15 ext3 directory corruption under Xen Christopher S. Aker
2008-06-23 19:13 ` adam radford
2008-06-23 19:53   ` Christopher S. Aker
2008-06-23 23:08     ` adam radford

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox