<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-1031</id>
	<title>Nabble - Xfs - General</title>
	<updated>2009-12-18T23:09:00Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/Xfs---General-f1031.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Xfs---General-f1031.html" />
	<subtitle type="html"></subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26853269</id>
	<title>xfs in memory corruption</title>
	<published>2009-12-18T23:09:00Z</published>
	<updated>2009-12-18T23:09:00Z</updated>
	<author>
		<name>Brady Chang-2</name>
	</author>
	<content type="html">&lt;HTML&gt;
&lt;HEAD&gt;
&lt;TITLE&gt;xfs in memory corruption&lt;/TITLE&gt;
&lt;/HEAD&gt;
&lt;BODY&gt;
&lt;FONT FACE=&quot;Calibri, Verdana, Helvetica, Arial&quot;&gt;&lt;SPAN STYLE='font-size:11pt'&gt;Hi all, got the following error on one of our test machines. SLES10 SP2 with stock kernel&lt;BR&gt;
&lt;BR&gt;
I've not had the chance to scrutinize complete /var/log/messages for additional helpful info.&lt;BR&gt;
Any advanced help is appreciated.&lt;BR&gt;
&lt;BR&gt;
thanks!&lt;BR&gt;
-Brady&lt;BR&gt;
&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel: Filesystem &amp;quot;sde&amp;quot;: XFS internal error xfs_trans_cancel at line 1175 of file fs/xfs/xfs_trans.c.  Caller 0xffffffff8826ca0c&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel:&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel: Call Trace: &amp;lt;ffffffff88265456&amp;gt;{:xfs:xfs_trans_cancel+91}&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel:        &amp;lt;ffffffff8826ca0c&amp;gt;{:xfs:xfs_create+1395} &amp;lt;ffffffff8827700b&amp;gt;{:xfs:xfs_vn_mknod+429}&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel:        &amp;lt;ffffffff80192f3a&amp;gt;{vfs_create+390} &amp;lt;ffffffff801962cf&amp;gt;{open_namei+421}&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel:        &amp;lt;ffffffff80184313&amp;gt;{do_filp_open+28} &amp;lt;ffffffff80184374&amp;gt;{do_sys_open+69}&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel:        &amp;lt;ffffffff8010ae42&amp;gt;{system_call+126}&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel: xfs_force_shutdown(sde,0x8) called from line 1176 of file fs/xfs/xfs_trans.c.  Return address = 0xffffffff88265475&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel: postgres[5990]: segfault at 00007fff36319618 rip 0000000000999556 rsp 00007fff36319620 error 6&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel: postgres[6152]: segfault at 00007fffd0793e00 rip 00002ab7dad22d0d rsp 00007fffd0793dd0 error 6&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel: Filesystem &amp;quot;sde&amp;quot;: Corruption of in-memory data detected.  Shutting down filesystem: sde&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel: Please umount the filesystem, and rectify the problem(s)&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel: postgres[6170]: segfault at 00007fff5eb9efd0 rip 00002aff4c918d0d rsp 00007fff5eb9efa0 error 6&lt;BR&gt;
Dec 23 14:21:45 sdw5 kernel: postgres[6062]: segfault at 00007fff32585878 rip 0000000000999556 rsp 00007fff32585880 error 6&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;/BODY&gt;
&lt;/HTML&gt;

&lt;br /&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26853269&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/xfs-in-memory-corruption-tp26853269p26853269.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26823211</id>
	<title>[XFS updates] XFS development tree branch, master, updated. v2.6.30-rc4-24758-gf8c89a9</title>
	<published>2009-12-16T20:32:20Z</published>
	<updated>2009-12-16T20:32:20Z</updated>
	<author>
		<name>Xfs - General mailing list</name>
	</author>
	<content type="html">This is an automated email from the git hooks/post-receive script. It was
&lt;br&gt;generated because a ref change was pushed to the repository containing
&lt;br&gt;the project &amp;quot;XFS development tree&amp;quot;.
&lt;br&gt;&lt;br&gt;The branch, master has been updated
&lt;br&gt;&amp;nbsp; f8c89a9 xfs: kill some warnings on i386 builds
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; from &amp;nbsp;47e96ea6187f0ea7322d9beedc046a5409c4d45e (commit)
&lt;br&gt;&lt;br&gt;Those revisions listed above that are new to this repository have
&lt;br&gt;not appeared on any other notification email; so we list those
&lt;br&gt;revisions in full, below.
&lt;br&gt;&lt;br&gt;- Log -----------------------------------------------------------------
&lt;br&gt;commit f8c89a9e39a10448543c8dc720626d4cf7f2ec49
&lt;br&gt;Author: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26823211&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Thu Dec 17 00:20:07 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: kill some warnings on i386 builds
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Randy Dunlap Reported printk() format-related warnings reported
&lt;br&gt;&amp;nbsp; &amp;nbsp; on i386 builds in his environment. &amp;nbsp;Dave Chinner provided this
&lt;br&gt;&amp;nbsp; &amp;nbsp; patch to eliminate them.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26823211&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Acked-by: Randy Dunlap &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26823211&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;randy.dunlap@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26823211&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;-----------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;Summary of changes:
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_trace.h | &amp;nbsp; &amp;nbsp;8 ++++----
&lt;br&gt;&amp;nbsp;1 files changed, 4 insertions(+), 4 deletions(-)
&lt;br&gt;&lt;br&gt;&lt;br&gt;hooks/post-receive
&lt;br&gt;-- 
&lt;br&gt;XFS development tree
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26823211&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-XFS-updates--XFS-development-tree-branch%2C-master%2C-updated.-v2.6.30-rc4-24758-gf8c89a9-tp26823211p26823211.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26822752</id>
	<title>RE: [GIT PULL] XFS update for 2.6.33-rc1</title>
	<published>2009-12-16T19:41:12Z</published>
	<updated>2009-12-16T19:41:12Z</updated>
	<author>
		<name>Alex Elder</name>
	</author>
	<content type="html">Dave Chinner wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Wed, Dec 16, 2009 at 01:55:12PM -0800, Randy Dunlap wrote:
&lt;br&gt;&amp;gt;&amp;gt; On Wed, 16 Dec 2009 15:26:10 -0600 Alex Elder wrote:
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; One more XFS update for -rc1, now that the new XFS tracing code has
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; been committed.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Sorry if I have missed it, but have the printk format warnings
&lt;br&gt;&amp;gt;&amp;gt; on i386 builds been fixed?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I don't see any here w/ gcc 4.3.4 x86-64 compiling i386 kernels....
&lt;/div&gt;&lt;br&gt;I didn't get them either when I built in my environment.
&lt;br&gt;&lt;br&gt;Dave, your patch looks good to me, and Randy has acked it
&lt;br&gt;so I'm going to pull it into our XFS top-of-tree. &amp;nbsp;I'll
&lt;br&gt;hold off sending yet another pull request to Linus for
&lt;br&gt;now. &amp;nbsp;Thanks for addressing it quickly.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Alex
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; /me hates gcc's warning inconsistencies with a passion.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; e.g.:
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; In file included from linux-next-20091216/include/trace/ftrace.h:398,
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from linux-next-20091216/include/trace/define_trace.h:69,
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from linux-next-20091216/fs/xfs/linux-2.6/xfs_trace.h:1369,
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from linux-next-20091216/fs/xfs/linux-2.6/xfs_trace.c:75:
&lt;br&gt;&amp;gt;&amp;gt; linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function
&lt;br&gt;&amp;gt;&amp;gt; 'ftrace_raw_output_id_xfs_iomap_enter': linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:830:
&lt;br&gt;&amp;gt;&amp;gt; warning: format '%llx' expects type 'long long unsigned int', but argument 12 has type
&lt;br&gt;&amp;gt;&amp;gt; 'xfs_fsblock_t' &amp;nbsp;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Patch that should fix this below.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Dave.
&lt;/div&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26822752&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-GIT-PULL--XFS-update-for-2.6.33-rc1-tp26818787p26822752.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26822383</id>
	<title>Re: [GIT PULL] XFS update for 2.6.33-rc1</title>
	<published>2009-12-16T17:56:16Z</published>
	<updated>2009-12-16T17:56:16Z</updated>
	<author>
		<name>Randy Dunlap-4</name>
	</author>
	<content type="html">Dave Chinner wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Wed, Dec 16, 2009 at 01:55:12PM -0800, Randy Dunlap wrote:
&lt;br&gt;&amp;gt;&amp;gt; On Wed, 16 Dec 2009 15:26:10 -0600 Alex Elder wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; One more XFS update for -rc1, now that the new XFS tracing code has
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; been committed.
&lt;br&gt;&amp;gt;&amp;gt; Sorry if I have missed it, but have the printk format warnings
&lt;br&gt;&amp;gt;&amp;gt; on i386 builds been fixed?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I don't see any here w/ gcc 4.3.4 x86-64 compiling i386 kernels....
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; /me hates gcc's warning inconsistencies with a passion.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; e.g.:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; In file included from linux-next-20091216/include/trace/ftrace.h:398,
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from linux-next-20091216/include/trace/define_trace.h:69,
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from linux-next-20091216/fs/xfs/linux-2.6/xfs_trace.h:1369,
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from linux-next-20091216/fs/xfs/linux-2.6/xfs_trace.c:75:
&lt;br&gt;&amp;gt;&amp;gt; linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_iomap_enter':
&lt;br&gt;&amp;gt;&amp;gt; linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:830: warning: format '%llx' expects type 'long long unsigned int', but argument 12 has type 'xfs_fsblock_t'
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Patch that should fix this below.
&lt;/div&gt;&lt;br&gt;Yes, thanks for that.
&lt;br&gt;&lt;br&gt;Acked-by: Randy Dunlap &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26822383&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;randy.dunlap@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26822383&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-GIT-PULL--XFS-update-for-2.6.33-rc1-tp26818787p26822383.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26821136</id>
	<title>Re: [GIT PULL] XFS update for 2.6.33-rc1</title>
	<published>2009-12-16T16:20:07Z</published>
	<updated>2009-12-16T16:20:07Z</updated>
	<author>
		<name>Dave Chinner</name>
	</author>
	<content type="html">On Wed, Dec 16, 2009 at 01:55:12PM -0800, Randy Dunlap wrote:
&lt;br&gt;&amp;gt; On Wed, 16 Dec 2009 15:26:10 -0600 Alex Elder wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; One more XFS update for -rc1, now that the new XFS tracing code has
&lt;br&gt;&amp;gt; &amp;gt; been committed.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Sorry if I have missed it, but have the printk format warnings
&lt;br&gt;&amp;gt; on i386 builds been fixed?
&lt;br&gt;&lt;br&gt;I don't see any here w/ gcc 4.3.4 x86-64 compiling i386 kernels....
&lt;br&gt;&lt;br&gt;/me hates gcc's warning inconsistencies with a passion.
&lt;br&gt;&lt;br&gt;&amp;gt; e.g.:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; In file included from linux-next-20091216/include/trace/ftrace.h:398,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from linux-next-20091216/include/trace/define_trace.h:69,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from linux-next-20091216/fs/xfs/linux-2.6/xfs_trace.h:1369,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from linux-next-20091216/fs/xfs/linux-2.6/xfs_trace.c:75:
&lt;br&gt;&amp;gt; linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_iomap_enter':
&lt;br&gt;&amp;gt; linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:830: warning: format '%llx' expects type 'long long unsigned int', but argument 12 has type 'xfs_fsblock_t'
&lt;br&gt;&lt;br&gt;Patch that should fix this below.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Dave.
&lt;br&gt;-- 
&lt;br&gt;Dave Chinner
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26821136&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;XFS: Format xfs_fsblock_t correctly in tracing code.
&lt;br&gt;&lt;br&gt;Fixes printk build warnings on i386.
&lt;br&gt;&lt;br&gt;Reported-by: Randy Dunlap &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26821136&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;randy.dunlap@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26821136&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_trace.h | &amp;nbsp; &amp;nbsp;8 ++++----
&lt;br&gt;&amp;nbsp;1 files changed, 4 insertions(+), 4 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/fs/xfs/linux-2.6/xfs_trace.h b/fs/xfs/linux-2.6/xfs_trace.h
&lt;br&gt;index c40834b..d4ded59 100644
&lt;br&gt;--- a/fs/xfs/linux-2.6/xfs_trace.h
&lt;br&gt;+++ b/fs/xfs/linux-2.6/xfs_trace.h
&lt;br&gt;@@ -815,7 +815,7 @@ TRACE_EVENT(name, \
&lt;br&gt;&amp;nbsp;	), \
&lt;br&gt;&amp;nbsp;	TP_printk(&amp;quot;dev %d:%d ino 0x%llx size 0x%llx new_size 0x%llx &amp;quot; \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;&amp;quot;offset 0x%llx count %zd flags %s &amp;quot; \
&lt;br&gt;-		 &amp;nbsp;&amp;quot;startoff 0x%llx startblock 0x%llx blockcount 0x%llx&amp;quot;, \
&lt;br&gt;+		 &amp;nbsp;&amp;quot;startoff 0x%llx startblock %s blockcount 0x%llx&amp;quot;, \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;MAJOR(__entry-&amp;gt;dev), MINOR(__entry-&amp;gt;dev), \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;__entry-&amp;gt;ino, \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;__entry-&amp;gt;size, \
&lt;br&gt;@@ -824,7 +824,7 @@ TRACE_EVENT(name, \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;__entry-&amp;gt;count, \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;__print_flags(__entry-&amp;gt;flags, &amp;quot;|&amp;quot;, BMAPI_FLAGS), \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;__entry-&amp;gt;startoff, \
&lt;br&gt;-		 &amp;nbsp;__entry-&amp;gt;startblock, \
&lt;br&gt;+		 &amp;nbsp;xfs_fmtfsblock(__entry-&amp;gt;startblock), \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;__entry-&amp;gt;blockcount) \
&lt;br&gt;&amp;nbsp;)
&lt;br&gt;&amp;nbsp;DEFINE_IOMAP_EVENT(xfs_iomap_enter);
&lt;br&gt;@@ -1201,7 +1201,7 @@ TRACE_EVENT(name, \
&lt;br&gt;&amp;nbsp;	TP_printk(&amp;quot;dev %d:%d agno %u agbno %u minlen %u maxlen %u mod %u &amp;quot; \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;&amp;quot;prod %u minleft %u total %u alignment %u minalignslop %u &amp;quot; \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;&amp;quot;len %u type %s otype %s wasdel %d wasfromfl %d isfl %d &amp;quot; \
&lt;br&gt;-		 &amp;nbsp;&amp;quot;userdata %d firstblock 0x%llx&amp;quot;, \
&lt;br&gt;+		 &amp;nbsp;&amp;quot;userdata %d firstblock %s&amp;quot;, \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;MAJOR(__entry-&amp;gt;dev), MINOR(__entry-&amp;gt;dev), \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;__entry-&amp;gt;agno, \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;__entry-&amp;gt;agbno, \
&lt;br&gt;@@ -1220,7 +1220,7 @@ TRACE_EVENT(name, \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;__entry-&amp;gt;wasfromfl, \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;__entry-&amp;gt;isfl, \
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;__entry-&amp;gt;userdata, \
&lt;br&gt;-		 &amp;nbsp;__entry-&amp;gt;firstblock) \
&lt;br&gt;+		 &amp;nbsp;xfs_fmtfsblock(__entry-&amp;gt;firstblock)) \
&lt;br&gt;&amp;nbsp;)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;DEFINE_ALLOC_EVENT(xfs_alloc_exact_done);
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26821136&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-GIT-PULL--XFS-update-for-2.6.33-rc1-tp26818787p26821136.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26819200</id>
	<title>Re: [GIT PULL] XFS update for 2.6.33-rc1</title>
	<published>2009-12-16T13:55:12Z</published>
	<updated>2009-12-16T13:55:12Z</updated>
	<author>
		<name>Randy Dunlap-4</name>
	</author>
	<content type="html">On Wed, 16 Dec 2009 15:26:10 -0600 Alex Elder wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; One more XFS update for -rc1, now that the new XFS tracing code has
&lt;br&gt;&amp;gt; been committed.
&lt;br&gt;&lt;br&gt;Sorry if I have missed it, but have the printk format warnings
&lt;br&gt;on i386 builds been fixed?
&lt;br&gt;&lt;br&gt;&lt;br&gt;e.g.:
&lt;br&gt;&lt;br&gt;In file included from linux-next-20091216/include/trace/ftrace.h:398,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from linux-next-20091216/include/trace/define_trace.h:69,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from linux-next-20091216/fs/xfs/linux-2.6/xfs_trace.h:1369,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from linux-next-20091216/fs/xfs/linux-2.6/xfs_trace.c:75:
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_iomap_enter':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:830: warning: format '%llx' expects type 'long long unsigned int', but argument 12 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_iomap_found':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:831: warning: format '%llx' expects type 'long long unsigned int', but argument 12 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_iomap_alloc':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:832: warning: format '%llx' expects type 'long long unsigned int', but argument 12 has type 'xfs_fsblock_t'
&lt;br&gt;&amp;nbsp; LD &amp;nbsp; &amp;nbsp; &amp;nbsp;drivers/media/IR/ir-common.o
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_exact_done':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1226: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_exact_error':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1227: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_near_nominleft':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1228: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_near_first': &amp;nbsp;LD &amp;nbsp; &amp;nbsp; &amp;nbsp;drivers/media/IR/built-in.o
&lt;br&gt;&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1229: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_near_greater':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1230: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_near_lesser':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1231: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_near_error':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1232: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_size_neither':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1233: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_size_noentry':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1234: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_size_nominleft':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1235: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_size_done':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1236: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_size_error':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1237: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_small_freelist':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1238: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_small_notenough':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1239: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_small_done':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1240: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_small_error':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1241: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_vextent_badargs':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1242: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_vextent_nofix':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1243: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_vextent_noagbp':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1244: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_vextent_loopfailed':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1245: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h: In function 'ftrace_raw_output_id_xfs_alloc_vextent_allfailed':
&lt;br&gt;linux-next-20091216/fs/xfs/linux-2.6/./xfs_trace.h:1246: warning: format '%llx' expects type 'long long unsigned int', but argument 22 has type 'xfs_fsblock_t'
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 					-Alex
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; The following changes since commit 5ac4d630eb87656bd4dc313b910776d54d88ea28:
&lt;br&gt;&amp;gt; &amp;nbsp; Linus Torvalds (1):
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; are available in the git repository at:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; git://oss.sgi.com/xfs/xfs for-linus
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Christoph Hellwig (2):
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: check for not fully initialized inodes in xfs_ireclaim
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: kill xfs_bmbt_rec_32/64 types
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Dave Chinner (2):
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: improve metadata I/O merging in the elevator
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; XFS: Free buffer pages array unconditionally
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp;fs/xfs/linux-2.6/xfs_buf.c | &amp;nbsp; 10 +++++++---
&lt;br&gt;&amp;gt; &amp;nbsp;fs/xfs/linux-2.6/xfs_buf.h | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;gt; &amp;nbsp;fs/xfs/xfs_bmap_btree.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; 14 +++-----------
&lt;br&gt;&amp;gt; &amp;nbsp;fs/xfs/xfs_iget.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 12 ++++++++----
&lt;br&gt;&amp;gt; &amp;nbsp;fs/xfs/xfs_inode_item.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;6 +++---
&lt;br&gt;&amp;gt; &amp;nbsp;fs/xfs/xfs_log.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 ++
&lt;br&gt;&amp;gt; &amp;nbsp;include/linux/fs.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;gt; &amp;nbsp;7 files changed, 25 insertions(+), 21 deletions(-)
&lt;/div&gt;&lt;br&gt;&lt;br&gt;---
&lt;br&gt;~Randy
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26819200&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-GIT-PULL--XFS-update-for-2.6.33-rc1-tp26818787p26819200.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26818787</id>
	<title>[GIT PULL] XFS update for 2.6.33-rc1</title>
	<published>2009-12-16T13:26:10Z</published>
	<updated>2009-12-16T13:26:10Z</updated>
	<author>
		<name>Alex Elder</name>
	</author>
	<content type="html">One more XFS update for -rc1, now that the new XFS tracing code has
&lt;br&gt;been committed.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Alex
&lt;br&gt;&lt;br&gt;The following changes since commit 5ac4d630eb87656bd4dc313b910776d54d88ea28:
&lt;br&gt;&amp;nbsp; Linus Torvalds (1):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block
&lt;br&gt;&lt;br&gt;are available in the git repository at:
&lt;br&gt;&lt;br&gt;&amp;nbsp; git://oss.sgi.com/xfs/xfs for-linus
&lt;br&gt;&lt;br&gt;Christoph Hellwig (2):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: check for not fully initialized inodes in xfs_ireclaim
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: kill xfs_bmbt_rec_32/64 types
&lt;br&gt;&lt;br&gt;Dave Chinner (2):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: improve metadata I/O merging in the elevator
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; XFS: Free buffer pages array unconditionally
&lt;br&gt;&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_buf.c | &amp;nbsp; 10 +++++++---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_buf.h | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap_btree.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; 14 +++-----------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iget.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 12 ++++++++----
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode_item.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;6 +++---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 ++
&lt;br&gt;&amp;nbsp;include/linux/fs.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;7 files changed, 25 insertions(+), 21 deletions(-)
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818787&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-GIT-PULL--XFS-update-for-2.6.33-rc1-tp26818787p26818787.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26818788</id>
	<title>[XFS updates] XFS development tree branch, for-linus, updated. v2.6.30-rc4-32819-g3fc98b1</title>
	<published>2009-12-16T13:20:39Z</published>
	<updated>2009-12-16T13:20:39Z</updated>
	<author>
		<name>Xfs - General mailing list</name>
	</author>
	<content type="html">This is an automated email from the git hooks/post-receive script. It was
&lt;br&gt;generated because a ref change was pushed to the repository containing
&lt;br&gt;the project &amp;quot;XFS development tree&amp;quot;.
&lt;br&gt;&lt;br&gt;The branch, for-linus has been updated
&lt;br&gt;&amp;nbsp; 3fc98b1 XFS: Free buffer pages array unconditionally
&lt;br&gt;&amp;nbsp; a5f9be5 xfs: kill xfs_bmbt_rec_32/64 types
&lt;br&gt;&amp;nbsp; 2ee1aba xfs: improve metadata I/O merging in the elevator
&lt;br&gt;&amp;nbsp; b44b112 xfs: check for not fully initialized inodes in xfs_ireclaim
&lt;br&gt;&amp;nbsp; 5fe878a direct-io: cleanup blockdev_direct_IO locking
&lt;br&gt;&amp;nbsp; d180ec5 Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs
&lt;br&gt;&amp;nbsp; 03daa57 fs/xfs/xfs_log_recover.c: use %pU to print UUIDs
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; from &amp;nbsp;0b1b213fcf3a8486ada99a2bab84ab8c6f51b264 (commit)
&lt;br&gt;&lt;br&gt;Those revisions listed above that are new to this repository have
&lt;br&gt;not appeared on any other notification email; so we list those
&lt;br&gt;revisions in full, below.
&lt;br&gt;&lt;br&gt;- Log -----------------------------------------------------------------
&lt;br&gt;commit 3fc98b1ac036675b95f6e3fafd5ef147b97d4d30
&lt;br&gt;Author: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 23:11:57 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; XFS: Free buffer pages array unconditionally
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; The code in xfs_free_buf() only attempts to free the b_pages array if the
&lt;br&gt;&amp;nbsp; &amp;nbsp; buffer is a page cache backed or page allocated buffer. The extra log buffer
&lt;br&gt;&amp;nbsp; &amp;nbsp; that is used when the log wraps uses pages that are allocated to a different
&lt;br&gt;&amp;nbsp; &amp;nbsp; log buffer, but it still has a b_pages array allocated when those pages
&lt;br&gt;&amp;nbsp; &amp;nbsp; are associated to with the extra buffer in xfs_buf_associate_memory.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Hence we need to always attempt to free the b_pages array when tearing
&lt;br&gt;&amp;nbsp; &amp;nbsp; down a buffer, not just on buffers that are explicitly marked as page bearing
&lt;br&gt;&amp;nbsp; &amp;nbsp; buffers. This fixes a leak detected by the kernel memory leak code.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit a5f9be58c2b87106100a6053d09b1f9f8d551c6e
&lt;br&gt;Author: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Fri Dec 4 10:19:07 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: kill xfs_bmbt_rec_32/64 types
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; For a long time we've always stored bmap btree records in the 64bit format,
&lt;br&gt;&amp;nbsp; &amp;nbsp; so kill off the dead 32bit type, and make sure the 64bit type is named just
&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs_bmbt_rec everywhere, without any size postfix.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Reviewed-by: Eric Sandeen &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sandeen@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit 2ee1abad73a12df5521cd3f017f081f1f684a361
&lt;br&gt;Author: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Tue Nov 24 18:03:15 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: improve metadata I/O merging in the elevator
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Change all async metadata buffers to use [READ|WRITE]_META I/O types
&lt;br&gt;&amp;nbsp; &amp;nbsp; so that the I/O doesn't get issued immediately. This allows merging of
&lt;br&gt;&amp;nbsp; &amp;nbsp; adjacent metadata requests but still prioritises them over bulk data.
&lt;br&gt;&amp;nbsp; &amp;nbsp; This shows a 10-15% improvement in sequential create speed of small
&lt;br&gt;&amp;nbsp; &amp;nbsp; files.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Don't include the log buffers in this classification - leave them as
&lt;br&gt;&amp;nbsp; &amp;nbsp; sync types so they are issued immediately.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit b44b1126279b60597f96bbe77507b1650f88a969
&lt;br&gt;Author: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Tue Dec 1 18:12:29 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: check for not fully initialized inodes in xfs_ireclaim
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Add an assert for inodes not added to the inode cache in xfs_ireclaim,
&lt;br&gt;&amp;nbsp; &amp;nbsp; to make sure we're not going to introduce something like the
&lt;br&gt;&amp;nbsp; &amp;nbsp; famous nfsd inode cache bug again.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit 5fe878ae7f82fbf0830dbfaee4c5ca18f3aee442
&lt;br&gt;Author: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Tue Dec 15 16:47:50 2009 -0800
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; direct-io: cleanup blockdev_direct_IO locking
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Currently the locking in blockdev_direct_IO is a mess, we have three
&lt;br&gt;&amp;nbsp; &amp;nbsp; different locking types and very confusing checks for some of them. &amp;nbsp;The
&lt;br&gt;&amp;nbsp; &amp;nbsp; most complicated one is DIO_OWN_LOCKING for reads, which happens to not
&lt;br&gt;&amp;nbsp; &amp;nbsp; actually be used.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; This patch gets rid of the DIO_OWN_LOCKING - as mentioned above the read
&lt;br&gt;&amp;nbsp; &amp;nbsp; case is unused anyway, and the write side is almost identical to
&lt;br&gt;&amp;nbsp; &amp;nbsp; DIO_NO_LOCKING. &amp;nbsp;The difference is that DIO_NO_LOCKING always sets the
&lt;br&gt;&amp;nbsp; &amp;nbsp; create argument for the get_blocks callback to zero, but we can easily
&lt;br&gt;&amp;nbsp; &amp;nbsp; move that to the actual get_blocks callbacks. &amp;nbsp;There are four users of the
&lt;br&gt;&amp;nbsp; &amp;nbsp; DIO_NO_LOCKING mode: gfs already ignores the create argument and thus is
&lt;br&gt;&amp;nbsp; &amp;nbsp; fine with the new version, ocfs2 only errors out if create were ever set,
&lt;br&gt;&amp;nbsp; &amp;nbsp; and we can remove this dead code now, the block device code only ever uses
&lt;br&gt;&amp;nbsp; &amp;nbsp; create for an error message if we are fully beyond the device which can
&lt;br&gt;&amp;nbsp; &amp;nbsp; never happen, and last but not least XFS will need the new behavour for
&lt;br&gt;&amp;nbsp; &amp;nbsp; writes.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Now we can replace the lock_type variable with a flags one, where no flag
&lt;br&gt;&amp;nbsp; &amp;nbsp; means the DIO_NO_LOCKING behaviour and DIO_LOCKING is kept as the first
&lt;br&gt;&amp;nbsp; &amp;nbsp; flag. &amp;nbsp;Separate out the check for not allowing to fill holes into a
&lt;br&gt;&amp;nbsp; &amp;nbsp; separate flag, although for now both flags always get set at the same
&lt;br&gt;&amp;nbsp; &amp;nbsp; time.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Also revamp the documentation of the locking scheme to actually make
&lt;br&gt;&amp;nbsp; &amp;nbsp; sense.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; [&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;akpm@...&lt;/a&gt;: coding-style fixes]
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=17&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Badari Pulavarty &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=18&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pbadari@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Jeff Moyer &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=19&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jmoyer@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Jens Axboe &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=20&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jens.axboe@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Zach Brown &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=21&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zach.brown@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Al Viro &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;viro@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=23&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Mark Fasheh &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=24&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mfasheh@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Joel Becker &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=25&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joel.becker@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Andrew Morton &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=26&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;akpm@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Linus Torvalds &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=27&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;torvalds@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit d180ec5d348e3a51836d723c182374483012c981
&lt;br&gt;Merge: 53365383c4667aba55385cd1858582c19a7a8a36 0b1b213fcf3a8486ada99a2bab84ab8c6f51b264
&lt;br&gt;Author: Linus Torvalds &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=28&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;torvalds@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Tue Dec 15 09:12:43 2009 -0800
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; * 'for-linus' of git://oss.sgi.com/xfs/xfs:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: event tracing support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: change the xfs_iext_insert / xfs_iext_remove
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: cleanup bmap extent state macros
&lt;br&gt;&lt;br&gt;commit 03daa57cdb2198e36a41ca1f63a030759490363f
&lt;br&gt;Author: Joe Perches &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=29&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joe@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 18:01:10 2009 -0800
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; fs/xfs/xfs_log_recover.c: use %pU to print UUIDs
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Joe Perches &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=30&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joe@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Acked-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=32&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Andrew Morton &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=33&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;akpm@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Linus Torvalds &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=34&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;torvalds@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;-----------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;Summary of changes:
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_aops.c | &amp;nbsp; 20 +++++++-------------
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_buf.c &amp;nbsp;| &amp;nbsp; 10 +++++++---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_buf.h &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap_btree.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; 14 +++-----------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iget.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 12 ++++++++----
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode_item.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;6 +++---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 ++
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log_recover.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; 14 ++++----------
&lt;br&gt;&amp;nbsp;8 files changed, 35 insertions(+), 44 deletions(-)
&lt;br&gt;&lt;br&gt;&lt;br&gt;hooks/post-receive
&lt;br&gt;-- 
&lt;br&gt;XFS development tree
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818788&amp;i=35&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-XFS-updates--XFS-development-tree-branch%2C-for-linus%2C-updated.-v2.6.30-rc4-32819-g3fc98b1-tp26818788p26818788.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26817490</id>
	<title>[XFS updates] XFS development tree branch, master, updated. v2.6.30-rc4-24757-g47e96ea</title>
	<published>2009-12-16T11:55:44Z</published>
	<updated>2009-12-16T11:55:44Z</updated>
	<author>
		<name>Xfs - General mailing list</name>
	</author>
	<content type="html">This is an automated email from the git hooks/post-receive script. It was
&lt;br&gt;generated because a ref change was pushed to the repository containing
&lt;br&gt;the project &amp;quot;XFS development tree&amp;quot;.
&lt;br&gt;&lt;br&gt;The branch, master has been updated
&lt;br&gt;&amp;nbsp; 47e96ea XFS: Free buffer pages array unconditionally
&lt;br&gt;&amp;nbsp; 2402c09 xfs: kill xfs_bmbt_rec_32/64 types
&lt;br&gt;&amp;nbsp; 79c3f79 xfs: improve metadata I/O merging in the elevator
&lt;br&gt;&amp;nbsp; 26d56b2 xfs: check for not fully initialized inodes in xfs_ireclaim
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; from &amp;nbsp;d0c156230fa510e7e091e60d4c9c3ea7bd96edf6 (commit)
&lt;br&gt;&lt;br&gt;Those revisions listed above that are new to this repository have
&lt;br&gt;not appeared on any other notification email; so we list those
&lt;br&gt;revisions in full, below.
&lt;br&gt;&lt;br&gt;- Log -----------------------------------------------------------------
&lt;br&gt;commit 47e96ea6187f0ea7322d9beedc046a5409c4d45e
&lt;br&gt;Author: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 23:11:57 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; XFS: Free buffer pages array unconditionally
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; The code in xfs_free_buf() only attempts to free the b_pages array if the
&lt;br&gt;&amp;nbsp; &amp;nbsp; buffer is a page cache backed or page allocated buffer. The extra log buffer
&lt;br&gt;&amp;nbsp; &amp;nbsp; that is used when the log wraps uses pages that are allocated to a different
&lt;br&gt;&amp;nbsp; &amp;nbsp; log buffer, but it still has a b_pages array allocated when those pages
&lt;br&gt;&amp;nbsp; &amp;nbsp; are associated to with the extra buffer in xfs_buf_associate_memory.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Hence we need to always attempt to free the b_pages array when tearing
&lt;br&gt;&amp;nbsp; &amp;nbsp; down a buffer, not just on buffers that are explicitly marked as page bearing
&lt;br&gt;&amp;nbsp; &amp;nbsp; buffers. This fixes a leak detected by the kernel memory leak code.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit 2402c0970562d7c815a23db92827af1c33a34fad
&lt;br&gt;Author: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Fri Dec 4 10:19:07 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: kill xfs_bmbt_rec_32/64 types
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; For a long time we've always stored bmap btree records in the 64bit format,
&lt;br&gt;&amp;nbsp; &amp;nbsp; so kill off the dead 32bit type, and make sure the 64bit type is named just
&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs_bmbt_rec everywhere, without any size postfix.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Reviewed-by: Eric Sandeen &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sandeen@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit 79c3f79f1cfc128410293a400921bef7ba42d37e
&lt;br&gt;Author: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Tue Nov 24 18:03:15 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: improve metadata I/O merging in the elevator
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Change all async metadata buffers to use [READ|WRITE]_META I/O types
&lt;br&gt;&amp;nbsp; &amp;nbsp; so that the I/O doesn't get issued immediately. This allows merging of
&lt;br&gt;&amp;nbsp; &amp;nbsp; adjacent metadata requests but still prioritises them over bulk data.
&lt;br&gt;&amp;nbsp; &amp;nbsp; This shows a 10-15% improvement in sequential create speed of small
&lt;br&gt;&amp;nbsp; &amp;nbsp; files.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Don't include the log buffers in this classification - leave them as
&lt;br&gt;&amp;nbsp; &amp;nbsp; sync types so they are issued immediately.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit 26d56b2f0597d0529f829629f6f1873356c4a9b2
&lt;br&gt;Author: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Tue Dec 1 18:12:29 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: check for not fully initialized inodes in xfs_ireclaim
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Add an assert for inodes not added to the inode cache in xfs_ireclaim,
&lt;br&gt;&amp;nbsp; &amp;nbsp; to make sure we're not going to introduce something like the
&lt;br&gt;&amp;nbsp; &amp;nbsp; famous nfsd inode cache bug again.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;-----------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;Summary of changes:
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_buf.c | &amp;nbsp; 10 +++++++---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_buf.h | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap_btree.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; 14 +++-----------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iget.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 12 ++++++++----
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode_item.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;6 +++---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 ++
&lt;br&gt;&amp;nbsp;6 files changed, 24 insertions(+), 21 deletions(-)
&lt;br&gt;&lt;br&gt;&lt;br&gt;hooks/post-receive
&lt;br&gt;-- 
&lt;br&gt;XFS development tree
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26817490&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-XFS-updates--XFS-development-tree-branch%2C-master%2C-updated.-v2.6.30-rc4-24757-g47e96ea-tp26817490p26817490.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26818341</id>
	<title>pescaria por kilo</title>
	<published>2009-12-15T19:00:53Z</published>
	<updated>2009-12-15T19:00:53Z</updated>
	<author>
		<name>marc.espie</name>
	</author>
	<content type="html">grana
&lt;br&gt;&lt;br /&gt; &lt;br /&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26818341&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;missao.zip&lt;/strong&gt; (-1 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/26818341/0/missao.zip&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/pescaria-por-kilo-tp26818341p26818341.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26803384</id>
	<title>RE: [PATCH] XFS: Free buffer pages array unconditionally</title>
	<published>2009-12-15T14:51:31Z</published>
	<updated>2009-12-15T14:51:31Z</updated>
	<author>
		<name>Alex Elder</name>
	</author>
	<content type="html">Dave Chinner wrote:
&lt;br&gt;&amp;gt; On Tue, Dec 15, 2009 at 01:21:36PM -0600, Alex Elder wrote:
&lt;br&gt;&amp;gt;&amp;gt; Dave Chinner wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; The code in xfs_free_buf() only attempts to free the b_pages array if the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; buffer is a page cache backed or page allocated buffer. The extra log buffer
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; that is used when the log wraps uses pages that are allocated to a different
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; log buffer, but it still has a b_pages array allocated when those pages
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; are associated to with the extra buffer in xfs_buf_associate_memory.
&lt;br&gt;&lt;br&gt;I get it now. &amp;nbsp;You're right, I was confusing the array
&lt;br&gt;with the pages themselves. &amp;nbsp;And in hindsight the title
&lt;br&gt;of your patch and the explanation is abundantly clear
&lt;br&gt;on what's being freed... &amp;nbsp;Thank you for carefully
&lt;br&gt;explaining it to me (again).
&lt;br&gt;&lt;br&gt;The patch looks good.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Alex
&lt;br&gt;&lt;br&gt;Reviewed-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26803384&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Hence we need to always attempt to free the b_pages array when tearing
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; down a buffer, not just on buffers that are explicitly marked as page bearing
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; buffers. This fixes a leak detected by the kernel memory leak code.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Three places call xfs_buf_get_pages();
&lt;br&gt;&amp;gt;&amp;gt; - _xfs_buf_lookup_pages(), which sets the _XBF_PAGE_CACHE flag in the &amp;nbsp; buffer after the call
&lt;br&gt;&amp;gt;&amp;gt; - xfs_buf_associate_memory(), which sets no flag bit
&lt;br&gt;&amp;gt;&amp;gt; - xfs_buf_get_noaddr(), which sets the _XBF_PAGES flag.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; The only place that checks for _XBF_PAGES is xfs_buf_free().
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Given that, I have two comments:
&lt;br&gt;&amp;gt;&amp;gt; - You could just as easily have set the _XBF_PAGES flag in
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; xfs_buf_associate_memory, thereby making that flag indicate
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; consistently that the buffer has allocated pages
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; _XBF_PAGES is used to indicate that the buffer owns the
&lt;br&gt;&amp;gt; pages and must free them when the buffer is freed.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; _XBF_PAGE_CACHE indicates pages are allocated out of the buftarg
&lt;br&gt;&amp;gt; page cache and need to be released when the buffer is freed.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; In both cases, xfs_buf_free() has to free the pages
&lt;br&gt;&amp;gt; associated with these buffers.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; In the case of xfs_buf_associate_memory(), the memory attached to
&lt;br&gt;&amp;gt; the buffer is owned by an external entity and hence we are not
&lt;br&gt;&amp;gt; allowed to free it when we free the buffer. Therefore we can't set
&lt;br&gt;&amp;gt; _XBF_PAGES on the buffer.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; - Or, since you are proposing unconditionally freeing the
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; pages,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; This change doesn't unconditionally free the pages attached
&lt;br&gt;&amp;gt; to the buffer - it unconditionally frees the array used to
&lt;br&gt;&amp;gt; index the pages on the buffer when the buffer is torn down.
&lt;br&gt;&amp;gt; i.e:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;+------+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; +------+
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;| &amp;nbsp;bp &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp;|-------&amp;gt; page
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp;| b_pages | &amp;nbsp; &amp;nbsp; &amp;nbsp;|-------&amp;gt; page
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp;|--------&amp;gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp;|.............
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp;|-------&amp;gt; page
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp;|-------&amp;gt; page
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;+------+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; +------+
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;^^^^^^
&lt;br&gt;&amp;gt; 		This array is what we are
&lt;br&gt;&amp;gt; 		freeing unconditionally.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Dave.
&lt;/div&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26803384&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--XFS%3A-Free-buffer-pages-array-unconditionally-tp26786925p26803384.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26803386</id>
	<title>Re: [PATCH] XFS: Free buffer pages array unconditionally</title>
	<published>2009-12-15T14:36:58Z</published>
	<updated>2009-12-15T14:36:58Z</updated>
	<author>
		<name>Dave Chinner</name>
	</author>
	<content type="html">On Tue, Dec 15, 2009 at 01:21:36PM -0600, Alex Elder wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Dave Chinner wrote:
&lt;br&gt;&amp;gt; &amp;gt; The code in xfs_free_buf() only attempts to free the b_pages array if the
&lt;br&gt;&amp;gt; &amp;gt; buffer is a page cache backed or page allocated buffer. The extra log buffer
&lt;br&gt;&amp;gt; &amp;gt; that is used when the log wraps uses pages that are allocated to a different
&lt;br&gt;&amp;gt; &amp;gt; log buffer, but it still has a b_pages array allocated when those pages
&lt;br&gt;&amp;gt; &amp;gt; are associated to with the extra buffer in xfs_buf_associate_memory.
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; Hence we need to always attempt to free the b_pages array when tearing
&lt;br&gt;&amp;gt; &amp;gt; down a buffer, not just on buffers that are explicitly marked as page bearing
&lt;br&gt;&amp;gt; &amp;gt; buffers. This fixes a leak detected by the kernel memory leak code.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Three places call xfs_buf_get_pages();
&lt;br&gt;&amp;gt; - _xfs_buf_lookup_pages(), which sets the _XBF_PAGE_CACHE flag in the
&lt;br&gt;&amp;gt; &amp;nbsp; buffer after the call
&lt;br&gt;&amp;gt; - xfs_buf_associate_memory(), which sets no flag bit
&lt;br&gt;&amp;gt; - xfs_buf_get_noaddr(), which sets the _XBF_PAGES flag.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; The only place that checks for _XBF_PAGES is xfs_buf_free().
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Given that, I have two comments:
&lt;br&gt;&amp;gt; - You could just as easily have set the _XBF_PAGES flag in
&lt;br&gt;&amp;gt; &amp;nbsp; xfs_buf_associate_memory, thereby making that flag indicate
&lt;br&gt;&amp;gt; &amp;nbsp; consistently that the buffer has allocated pages
&lt;/div&gt;&lt;br&gt;_XBF_PAGES is used to indicate that the buffer owns the
&lt;br&gt;pages and must free them when the buffer is freed.
&lt;br&gt;&lt;br&gt;_XBF_PAGE_CACHE indicates pages are allocated out of the buftarg
&lt;br&gt;page cache and need to be released when the buffer is freed.
&lt;br&gt;&lt;br&gt;In both cases, xfs_buf_free() has to free the pages
&lt;br&gt;associated with these buffers.
&lt;br&gt;&lt;br&gt;In the case of xfs_buf_associate_memory(), the memory attached to
&lt;br&gt;the buffer is owned by an external entity and hence we are not
&lt;br&gt;allowed to free it when we free the buffer. Therefore we can't set
&lt;br&gt;_XBF_PAGES on the buffer.
&lt;br&gt;&lt;br&gt;&amp;gt; - Or, since you are proposing unconditionally freeing the
&lt;br&gt;&amp;gt; &amp;nbsp; pages,
&lt;br&gt;&lt;br&gt;This change doesn't unconditionally free the pages attached
&lt;br&gt;to the buffer - it unconditionally frees the array used to
&lt;br&gt;index the pages on the buffer when the buffer is torn down.
&lt;br&gt;i.e:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;+------+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; +------+
&lt;br&gt;&amp;nbsp; &amp;nbsp;| &amp;nbsp;bp &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp;|-------&amp;gt; page
&lt;br&gt;&amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp;| b_pages | &amp;nbsp; &amp;nbsp; &amp;nbsp;|-------&amp;gt; page
&lt;br&gt;&amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp;|--------&amp;gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp;|.............
&lt;br&gt;&amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp;|-------&amp;gt; page
&lt;br&gt;&amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp;|-------&amp;gt; page
&lt;br&gt;&amp;nbsp; &amp;nbsp;+------+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; +------+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;^^^^^^
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; This array is what we are
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; freeing unconditionally.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Dave.
&lt;br&gt;-- 
&lt;br&gt;Dave Chinner
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26803386&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26803386&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--XFS%3A-Free-buffer-pages-array-unconditionally-tp26786925p26803386.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26801247</id>
	<title>RE: [PATCH v2] xfs: improve metadata I/O merging in the elevator</title>
	<published>2009-12-15T12:12:26Z</published>
	<updated>2009-12-15T12:12:26Z</updated>
	<author>
		<name>Alex Elder</name>
	</author>
	<content type="html">Christoph Hellwig wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; From: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26801247&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Change all async metadata buffers to use [READ|WRITE]_META I/O types
&lt;br&gt;&amp;gt; so that the I/O doesn't get issued immediately. This allows merging
&lt;br&gt;&amp;gt; of adjacent metadata requests but still prioritises them over bulk
&lt;br&gt;&amp;gt; data. This shows a 10-15% improvement in sequential create speed of
&lt;br&gt;&amp;gt; small files.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Don't include the log buffers in this classification - leave them
&lt;br&gt;&amp;gt; as sync types so they are issued immediately.
&lt;/div&gt;&lt;br&gt;Looks good.
&lt;br&gt;&lt;br&gt;&amp;gt; Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26801247&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dgc@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26801247&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Reviewed-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26801247&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Index: xfs/fs/xfs/linux-2.6/xfs_buf.c
&lt;br&gt;&amp;gt; ===================================================================
&lt;br&gt;&amp;gt; --- xfs.orig/fs/xfs/linux-2.6/xfs_buf.c	2009-11-16 12:03:21.940253900 +0100
&lt;br&gt;&amp;gt; +++ xfs/fs/xfs/linux-2.6/xfs_buf.c	2009-11-16 12:05:54.224256517 +0100
&lt;br&gt;&amp;gt; @@ -1177,10 +1177,14 @@ _xfs_buf_ioapply(
&lt;br&gt;&amp;gt; &amp;nbsp;	if (bp-&amp;gt;b_flags &amp; XBF_ORDERED) {
&lt;br&gt;&amp;gt; &amp;nbsp;		ASSERT(!(bp-&amp;gt;b_flags &amp; XBF_READ));
&lt;br&gt;&amp;gt; &amp;nbsp;		rw = WRITE_BARRIER;
&lt;br&gt;&amp;gt; -	} else if (bp-&amp;gt;b_flags &amp; _XBF_RUN_QUEUES) {
&lt;br&gt;&amp;gt; +	} else if (bp-&amp;gt;b_flags &amp; XBF_LOG_BUFFER) {
&lt;br&gt;&amp;gt; &amp;nbsp;		ASSERT(!(bp-&amp;gt;b_flags &amp; XBF_READ_AHEAD));
&lt;br&gt;&amp;gt; &amp;nbsp;		bp-&amp;gt;b_flags &amp;= ~_XBF_RUN_QUEUES;
&lt;br&gt;&amp;gt; &amp;nbsp;		rw = (bp-&amp;gt;b_flags &amp; XBF_WRITE) ? WRITE_SYNC : READ_SYNC;
&lt;br&gt;&amp;gt; +	} else if (bp-&amp;gt;b_flags &amp; _XBF_RUN_QUEUES) {
&lt;br&gt;&amp;gt; +		ASSERT(!(bp-&amp;gt;b_flags &amp; XBF_READ_AHEAD));
&lt;br&gt;&amp;gt; +		bp-&amp;gt;b_flags &amp;= ~_XBF_RUN_QUEUES;
&lt;br&gt;&amp;gt; +		rw = (bp-&amp;gt;b_flags &amp; XBF_WRITE) ? WRITE_META : READ_META;
&lt;br&gt;&amp;gt; &amp;nbsp;	} else {
&lt;br&gt;&amp;gt; &amp;nbsp;		rw = (bp-&amp;gt;b_flags &amp; XBF_WRITE) ? WRITE :
&lt;br&gt;&amp;gt; &amp;nbsp;		 &amp;nbsp; &amp;nbsp; (bp-&amp;gt;b_flags &amp; XBF_READ_AHEAD) ? READA : READ;
&lt;br&gt;&amp;gt; Index: xfs/fs/xfs/linux-2.6/xfs_buf.h
&lt;br&gt;&amp;gt; ===================================================================
&lt;br&gt;&amp;gt; --- xfs.orig/fs/xfs/linux-2.6/xfs_buf.h	2009-11-16 12:03:21.945261731 +0100
&lt;br&gt;&amp;gt; +++ xfs/fs/xfs/linux-2.6/xfs_buf.h	2009-11-16 12:03:23.796003934 +0100
&lt;br&gt;&amp;gt; @@ -55,6 +55,7 @@ typedef enum {
&lt;br&gt;&amp;gt; &amp;nbsp;	XBF_FS_MANAGED = (1 &amp;lt;&amp;lt; 8), &amp;nbsp;/* filesystem controls freeing memory &amp;nbsp;*/
&lt;br&gt;&amp;gt; &amp;nbsp; 	XBF_ORDERED = (1 &amp;lt;&amp;lt; 11), &amp;nbsp; &amp;nbsp;/* use ordered writes		 &amp;nbsp; */
&lt;br&gt;&amp;gt; &amp;nbsp;	XBF_READ_AHEAD = (1 &amp;lt;&amp;lt; 12), /* asynchronous read-ahead		 &amp;nbsp; */
&lt;br&gt;&amp;gt; +	XBF_LOG_BUFFER = (1 &amp;lt;&amp;lt; 13), /* this is a buffer used for the log &amp;nbsp; */
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp;	/* flags used only as arguments to access routines */
&lt;br&gt;&amp;gt; &amp;nbsp;	XBF_LOCK = (1 &amp;lt;&amp;lt; 14), &amp;nbsp; &amp;nbsp; &amp;nbsp; /* lock requested			 &amp;nbsp; */
&lt;br&gt;&amp;gt; Index: xfs/fs/xfs/xfs_log.c
&lt;br&gt;&amp;gt; ===================================================================
&lt;br&gt;&amp;gt; --- xfs.orig/fs/xfs/xfs_log.c	2009-11-16 12:03:21.952261854 +0100
&lt;br&gt;&amp;gt; +++ xfs/fs/xfs/xfs_log.c	2009-11-16 12:03:23.798003071 +0100
&lt;br&gt;&amp;gt; @@ -1524,6 +1524,7 @@ xlog_sync(xlog_t		*log,
&lt;br&gt;&amp;gt; &amp;nbsp;	XFS_BUF_ZEROFLAGS(bp);
&lt;br&gt;&amp;gt; &amp;nbsp;	XFS_BUF_BUSY(bp);
&lt;br&gt;&amp;gt; &amp;nbsp;	XFS_BUF_ASYNC(bp);
&lt;br&gt;&amp;gt; +	bp-&amp;gt;b_flags |= XBF_LOG_BUFFER;
&lt;br&gt;&amp;gt; &amp;nbsp;	/*
&lt;br&gt;&amp;gt; &amp;nbsp;	 * Do an ordered write for the log block.
&lt;br&gt;&amp;gt; &amp;nbsp;	 * Its unnecessary to flush the first split block in the log wrap case.
&lt;br&gt;&amp;gt; @@ -1561,6 +1562,7 @@ xlog_sync(xlog_t		*log,
&lt;br&gt;&amp;gt; &amp;nbsp;		XFS_BUF_ZEROFLAGS(bp);
&lt;br&gt;&amp;gt; &amp;nbsp;		XFS_BUF_BUSY(bp);
&lt;br&gt;&amp;gt; &amp;nbsp;		XFS_BUF_ASYNC(bp);
&lt;br&gt;&amp;gt; +		bp-&amp;gt;b_flags |= XBF_LOG_BUFFER;
&lt;br&gt;&amp;gt; &amp;nbsp;		if (log-&amp;gt;l_mp-&amp;gt;m_flags &amp; XFS_MOUNT_BARRIER)
&lt;br&gt;&amp;gt; &amp;nbsp;			XFS_BUF_ORDERED(bp);
&lt;br&gt;&amp;gt; &amp;nbsp;		dptr = XFS_BUF_PTR(bp);
&lt;br&gt;&amp;gt; Index: xfs/include/linux/fs.h
&lt;br&gt;&amp;gt; ===================================================================
&lt;br&gt;&amp;gt; --- xfs.orig/include/linux/fs.h	2009-11-16 12:04:49.799002997 +0100
&lt;br&gt;&amp;gt; +++ xfs/include/linux/fs.h	2009-11-16 12:05:10.130255677 +0100
&lt;br&gt;&amp;gt; @@ -151,6 +151,7 @@ struct inodes_stat_t {
&lt;br&gt;&amp;gt; &amp;nbsp;#define READ_META	(READ | (1 &amp;lt;&amp;lt; BIO_RW_META))
&lt;br&gt;&amp;gt; &amp;nbsp;#define WRITE_SYNC_PLUG	(WRITE | (1 &amp;lt;&amp;lt; BIO_RW_SYNCIO) | (1 &amp;lt;&amp;lt; BIO_RW_NOIDLE))
&lt;br&gt;&amp;gt; &amp;nbsp;#define WRITE_SYNC	(WRITE_SYNC_PLUG | (1 &amp;lt;&amp;lt; BIO_RW_UNPLUG))
&lt;br&gt;&amp;gt; +#define WRITE_META	(WRITE | (1 &amp;lt;&amp;lt; BIO_RW_META))
&lt;br&gt;&amp;gt; &amp;nbsp;#define WRITE_ODIRECT	(WRITE | (1 &amp;lt;&amp;lt; BIO_RW_SYNCIO) | (1 &amp;lt;&amp;lt; BIO_RW_UNPLUG))
&lt;br&gt;&amp;gt; &amp;nbsp;#define SWRITE_SYNC_PLUG	\
&lt;br&gt;&amp;gt; &amp;nbsp;			(SWRITE | (1 &amp;lt;&amp;lt; BIO_RW_SYNCIO) | (1 &amp;lt;&amp;lt; BIO_RW_NOIDLE))
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; xfs mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26801247&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;/div&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26801247&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--xfs%3A-improve-metadata-I-O-merging-in-the-elevator-tp26324837p26801247.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26801248</id>
	<title>RE: [PATCH V2] xfs: check for not fully initialized inodes in xfs_ireclaim</title>
	<published>2009-12-15T12:05:15Z</published>
	<updated>2009-12-15T12:05:15Z</updated>
	<author>
		<name>Alex Elder</name>
	</author>
	<content type="html">Christoph Hellwig wrote:
&lt;br&gt;&amp;gt; Add an assert for inodes not added to the inode cache in xfs_ireclaim, to make
&lt;br&gt;&amp;gt; sure we're not going to introduce something like the famous nfsd inode cache
&lt;br&gt;&amp;gt; bug again.
&lt;br&gt;&lt;br&gt;It's a shame we can't do more than an ASSERT() here
&lt;br&gt;(for non-debug builds).
&lt;br&gt;&lt;br&gt;Looks good though.
&lt;br&gt;&lt;br&gt;&amp;gt; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26801248&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Reviewed-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26801248&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Index: xfs/fs/xfs/xfs_iget.c
&lt;br&gt;&amp;gt; ===================================================================
&lt;br&gt;&amp;gt; --- xfs.orig/fs/xfs/xfs_iget.c	2009-11-26 19:10:47.206253628 +0100
&lt;br&gt;&amp;gt; +++ xfs/fs/xfs/xfs_iget.c	2009-12-01 19:09:43.310004091 +0100
&lt;br&gt;&amp;gt; @@ -514,17 +514,21 @@ xfs_ireclaim(
&lt;br&gt;&amp;gt; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp;	struct xfs_mount	*mp = ip-&amp;gt;i_mount;
&lt;br&gt;&amp;gt; &amp;nbsp;	struct xfs_perag	*pag;
&lt;br&gt;&amp;gt; +	xfs_agino_t		agino = XFS_INO_TO_AGINO(mp, ip-&amp;gt;i_ino);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp;	XFS_STATS_INC(xs_ig_reclaims);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp;	/*
&lt;br&gt;&amp;gt; -	 * Remove the inode from the per-AG radix tree. &amp;nbsp;It doesn't matter
&lt;br&gt;&amp;gt; -	 * if it was never added to it because radix_tree_delete can deal
&lt;br&gt;&amp;gt; -	 * with that case just fine.
&lt;br&gt;&amp;gt; +	 * Remove the inode from the per-AG radix tree.
&lt;br&gt;&amp;gt; +	 *
&lt;br&gt;&amp;gt; +	 * Because radix_tree_delete won't complain even if the item was never
&lt;br&gt;&amp;gt; +	 * added to the tree assert that it's been there before to catch
&lt;br&gt;&amp;gt; +	 * problems with the inode life time early on.
&lt;br&gt;&amp;gt; &amp;nbsp;	 */
&lt;br&gt;&amp;gt; &amp;nbsp;	pag = xfs_get_perag(mp, ip-&amp;gt;i_ino);
&lt;br&gt;&amp;gt; &amp;nbsp;	write_lock(&amp;pag-&amp;gt;pag_ici_lock);
&lt;br&gt;&amp;gt; -	radix_tree_delete(&amp;pag-&amp;gt;pag_ici_root, XFS_INO_TO_AGINO(mp, ip-&amp;gt;i_ino));
&lt;br&gt;&amp;gt; +	if (!radix_tree_delete(&amp;pag-&amp;gt;pag_ici_root, agino))
&lt;br&gt;&amp;gt; +		ASSERT(0);
&lt;br&gt;&amp;gt; &amp;nbsp;	write_unlock(&amp;pag-&amp;gt;pag_ici_lock);
&lt;br&gt;&amp;gt; &amp;nbsp;	xfs_put_perag(mp, pag);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; _______________________________________________
&lt;br&gt;&amp;gt; xfs mailing list
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26801248&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;/div&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26801248&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--xfs%3A-check-for-not-fully-initialized-inodes-in-xfs_ireclaim-tp26324840p26801248.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26800326</id>
	<title>RE: [PATCH] XFS: Free buffer pages array unconditionally</title>
	<published>2009-12-15T11:21:36Z</published>
	<updated>2009-12-15T11:21:36Z</updated>
	<author>
		<name>Alex Elder</name>
	</author>
	<content type="html">Dave Chinner wrote:
&lt;br&gt;&amp;gt; The code in xfs_free_buf() only attempts to free the b_pages array if the
&lt;br&gt;&amp;gt; buffer is a page cache backed or page allocated buffer. The extra log buffer
&lt;br&gt;&amp;gt; that is used when the log wraps uses pages that are allocated to a different
&lt;br&gt;&amp;gt; log buffer, but it still has a b_pages array allocated when those pages
&lt;br&gt;&amp;gt; are associated to with the extra buffer in xfs_buf_associate_memory.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Hence we need to always attempt to free the b_pages array when tearing
&lt;br&gt;&amp;gt; down a buffer, not just on buffers that are explicitly marked as page bearing
&lt;br&gt;&amp;gt; buffers. This fixes a leak detected by the kernel memory leak code.
&lt;br&gt;&lt;br&gt;Three places call xfs_buf_get_pages();
&lt;br&gt;- _xfs_buf_lookup_pages(), which sets the _XBF_PAGE_CACHE flag in the
&lt;br&gt;&amp;nbsp; buffer after the call
&lt;br&gt;- xfs_buf_associate_memory(), which sets no flag bit
&lt;br&gt;- xfs_buf_get_noaddr(), which sets the _XBF_PAGES flag.
&lt;br&gt;&lt;br&gt;The only place that checks for _XBF_PAGES is xfs_buf_free().
&lt;br&gt;&lt;br&gt;Given that, I have two comments:
&lt;br&gt;- You could just as easily have set the _XBF_PAGES flag in
&lt;br&gt;&amp;nbsp; xfs_buf_associate_memory, thereby making that flag indicate
&lt;br&gt;&amp;nbsp; consistently that the buffer has allocated pages
&lt;br&gt;- Or, since you are proposing unconditionally freeing the
&lt;br&gt;&amp;nbsp; pages, we can perhaps drop the _XBF_PAGES flag altogether
&lt;br&gt;&amp;nbsp; since it no longer serves much purpose. &amp;nbsp;(I prefer this.)
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Alex
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26800326&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---
&lt;br&gt;&amp;gt; &amp;nbsp;fs/xfs/linux-2.6/xfs_buf.c | &amp;nbsp; &amp;nbsp;4 ++--
&lt;br&gt;&amp;gt; &amp;nbsp;1 files changed, 2 insertions(+), 2 deletions(-)
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c
&lt;br&gt;&amp;gt; index 4ddc973..529d6a6 100644
&lt;br&gt;&amp;gt; --- a/fs/xfs/linux-2.6/xfs_buf.c
&lt;br&gt;&amp;gt; +++ b/fs/xfs/linux-2.6/xfs_buf.c
&lt;br&gt;&amp;gt; @@ -318,6 +318,7 @@ _xfs_buf_free_pages(
&lt;br&gt;&amp;gt; &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp;	if (bp-&amp;gt;b_pages != bp-&amp;gt;b_page_array) {
&lt;br&gt;&amp;gt; &amp;nbsp;		kmem_free(bp-&amp;gt;b_pages);
&lt;br&gt;&amp;gt; +		bp-&amp;gt;b_pages = NULL;
&lt;br&gt;&amp;gt; &amp;nbsp;	}
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; @@ -349,9 +350,8 @@ xfs_buf_free(
&lt;br&gt;&amp;gt; &amp;nbsp;				ASSERT(!PagePrivate(page));
&lt;br&gt;&amp;gt; &amp;nbsp;			page_cache_release(page);
&lt;br&gt;&amp;gt; &amp;nbsp;		}
&lt;br&gt;&amp;gt; -		_xfs_buf_free_pages(bp);
&lt;br&gt;&amp;gt; &amp;nbsp;	}
&lt;br&gt;&amp;gt; -
&lt;br&gt;&amp;gt; +	_xfs_buf_free_pages(bp);
&lt;br&gt;&amp;gt; &amp;nbsp;	xfs_buf_deallocate(bp);
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;/div&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26800326&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--XFS%3A-Free-buffer-pages-array-unconditionally-tp26786925p26800326.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26798056</id>
	<title>Re: Disappointing performance of copy (MD raid + XFS)</title>
	<published>2009-12-15T08:53:23Z</published>
	<updated>2009-12-15T08:53:23Z</updated>
	<author>
		<name>Eric Sandeen-3</name>
	</author>
	<content type="html">Kasper Sandberg wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Fri, 2009-12-11 at 14:26 +1100, Dave Chinner wrote:
&lt;br&gt;&amp;gt;&amp;gt; On Fri, Dec 11, 2009 at 02:41:32AM +0100, Asdo wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I have checked the other problem I had which I was mentioning, that I &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Also with noalign and rotorstep at 255 the stripe_cache_size stays &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; usually in the lower half (below 16000 out of 32000) while with defaults &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; it's stuck for most of the time at the maximum and processes are stuck &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; sleeping in MD locks for this reason.
&lt;br&gt;&amp;gt;&amp;gt; That really does sound like a misaligned filesystem - the stripe
&lt;br&gt;&amp;gt;&amp;gt; cache will grow larger the more RMW cycles that need to be
&lt;br&gt;&amp;gt;&amp;gt; performed...
&lt;br&gt;&amp;gt; Sorry to interrupt, I would very much like to see if my array/xfs is
&lt;br&gt;&amp;gt; properly aligned and all that stuff which has been mentioned inhere,
&lt;br&gt;&amp;gt; could any of you please post the things required to check? filesystem is
&lt;br&gt;&amp;gt; straight on md raid6, debian lenny.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;use xfs_info on your mountpoint, and compare the stripe unit and width
&lt;br&gt;to what md tells you. &amp;nbsp;xfs_info stripe unit/width output is in fs blocks
&lt;br&gt;units.
&lt;br&gt;&lt;br&gt;-Eric
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26798056&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Disappointing-performance-of-copy-%28MD-raid-%2B-XFS%29-tp26720522p26798056.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26796611</id>
	<title>[GIT PULL] XFS update for 2.6.33-rc1</title>
	<published>2009-12-15T07:01:01Z</published>
	<updated>2009-12-15T07:01:01Z</updated>
	<author>
		<name>Alex Elder</name>
	</author>
	<content type="html">This is a rather pervasive change to XFS code that switches it from
&lt;br&gt;using its own internal tracing mechanism to instead use the tracepoint
&lt;br&gt;support provided elsewhere in the kernel.
&lt;br&gt;&lt;br&gt;Please pull this in for 2.6.33.
&lt;br&gt;&lt;br&gt;I have a few other much smaller XFS changes for 2.6.33 but wanted to
&lt;br&gt;get past this hump first.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -Alex
&lt;br&gt;&lt;br&gt;&lt;br&gt;The following changes since commit 3ea6b3d0e6d0ffd91c0f8cadeb69b7133c038b32:
&lt;br&gt;&amp;nbsp; Linus Torvalds (1):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Merge branch 'for_linus' of git://git.kernel.org/.../jack/linux-udf-2.6
&lt;br&gt;&lt;br&gt;are available in the git repository at:
&lt;br&gt;&lt;br&gt;&amp;nbsp; git://oss.sgi.com/xfs/xfs for-linus
&lt;br&gt;&lt;br&gt;Christoph Hellwig (3):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: cleanup bmap extent state macros
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: change the xfs_iext_insert / xfs_iext_remove
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: event tracing support
&lt;br&gt;&lt;br&gt;&amp;nbsp;fs/xfs/Makefile &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_acl.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_aops.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; 52 +--
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_aops.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_buf.c &amp;nbsp; &amp;nbsp; | &amp;nbsp;117 ++---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_buf.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; 33 +-
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_fs_subr.c | &amp;nbsp; &amp;nbsp;3 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_ioctl.c &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_ioctl32.c | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_iops.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_linux.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 -
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_lrw.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; 87 +---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_lrw.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; 45 --
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_super.c &amp;nbsp; | &amp;nbsp;104 +---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_super.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;7 -
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_sync.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_trace.c &amp;nbsp; | &amp;nbsp; 75 +++
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_trace.h &amp;nbsp; | 1369 ++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_vnode.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;4 +
&lt;br&gt;&amp;nbsp;fs/xfs/quota/xfs_dquot.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;110 +---
&lt;br&gt;&amp;nbsp;fs/xfs/quota/xfs_dquot.h &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 21 -
&lt;br&gt;&amp;nbsp;fs/xfs/quota/xfs_qm.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 40 +-
&lt;br&gt;&amp;nbsp;fs/xfs/quota/xfs_qm_syscalls.c | &amp;nbsp; &amp;nbsp;4 +-
&lt;br&gt;&amp;nbsp;fs/xfs/support/ktrace.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;323 ----------
&lt;br&gt;&amp;nbsp;fs/xfs/support/ktrace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 85 ---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 16 -
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_ag.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 14 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_alloc.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;230 ++------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_alloc.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 27 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_alloc_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_attr.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;107 +---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_attr.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 10 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_attr_leaf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 14 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_attr_sf.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 40 --
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;942 +++++++++-------------------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 58 ++-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;6 -
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_btree_trace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 17 -
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_buf_item.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 87 +--
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_buf_item.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_da_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_da_btree.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;7 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dfrag.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_block.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_leaf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 21 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_node.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 27 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_sf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 26 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_trace.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;216 -------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_trace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 72 ---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_filestream.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_fsops.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iget.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;111 +---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 79 +--
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 82 +--
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode_item.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;5 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iomap.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 85 +---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iomap.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;8 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;181 ++----
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log_priv.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log_recover.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_mount.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_quota.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;8 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_rename.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_rtalloc.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_rw.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_trans.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 47 ++
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_trans_buf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 62 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_vnodeops.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;70 files changed, 2369 insertions(+), 2836 deletions(-)
&lt;br&gt;&amp;nbsp;create mode 100644 fs/xfs/linux-2.6/xfs_trace.c
&lt;br&gt;&amp;nbsp;create mode 100644 fs/xfs/linux-2.6/xfs_trace.h
&lt;br&gt;&amp;nbsp;delete mode 100644 fs/xfs/support/ktrace.c
&lt;br&gt;&amp;nbsp;delete mode 100644 fs/xfs/support/ktrace.h
&lt;br&gt;&amp;nbsp;delete mode 100644 fs/xfs/xfs_dir2_trace.c
&lt;br&gt;&amp;nbsp;delete mode 100644 fs/xfs/xfs_dir2_trace.h
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26796611&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-GIT-PULL--XFS-update-for-2.6.33-rc1-tp26796611p26796611.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26795244</id>
	<title>[XFS updates] XFS development tree branch, for-linus, updated. v2.6.30-rc4-31865-g0b1b213</title>
	<published>2009-12-15T05:47:30Z</published>
	<updated>2009-12-15T05:47:30Z</updated>
	<author>
		<name>Xfs - General mailing list</name>
	</author>
	<content type="html">This is an automated email from the git hooks/post-receive script. It was
&lt;br&gt;generated because a ref change was pushed to the repository containing
&lt;br&gt;the project &amp;quot;XFS development tree&amp;quot;.
&lt;br&gt;&lt;br&gt;The branch, for-linus has been updated
&lt;br&gt;&amp;nbsp; 0b1b213 xfs: event tracing support
&lt;br&gt;&amp;nbsp; 6ef3554 xfs: change the xfs_iext_insert / xfs_iext_remove
&lt;br&gt;&amp;nbsp; 7574aa9 xfs: cleanup bmap extent state macros
&lt;br&gt;&amp;nbsp; d031655 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
&lt;br&gt;&amp;nbsp; 3126c13 Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6
&lt;br&gt;&amp;nbsp; f4d544e Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs
&lt;br&gt;&amp;nbsp; 6b2f3d1 vfs: Implement proper O_SYNC semantics
&lt;br&gt;&amp;nbsp; 4ef58d4 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
&lt;br&gt;&amp;nbsp; 6035ccd Merge branch 'for-2.6.33' of git://git.kernel.dk/linux-2.6-block
&lt;br&gt;&amp;nbsp; 1557d33 Merge git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/sysctl-2.6
&lt;br&gt;&amp;nbsp; d014d04 Merge branch 'for-next' into for-linus
&lt;br&gt;&amp;nbsp; af901ca tree-wide: fix assorted typos all over the place
&lt;br&gt;&amp;nbsp; 0d99519 writeback: remove unused nonblocking and congestion checks
&lt;br&gt;&amp;nbsp; 6d45611 sysctl: Drop &amp; in front of every proc_handler.
&lt;br&gt;&amp;nbsp; ab09203 sysctl fs: Remove dead binary sysctl support
&lt;br&gt;&amp;nbsp; 7a9e02d this_cpu: xfs_icsb_modify_counters does not need &amp;quot;cpu&amp;quot; variable
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; from &amp;nbsp;44a743f68705c681439f264deb05f8f38e9048d3 (commit)
&lt;br&gt;&lt;br&gt;Those revisions listed above that are new to this repository have
&lt;br&gt;not appeared on any other notification email; so we list those
&lt;br&gt;revisions in full, below.
&lt;br&gt;&lt;br&gt;- Log -----------------------------------------------------------------
&lt;br&gt;commit 0b1b213fcf3a8486ada99a2bab84ab8c6f51b264
&lt;br&gt;Author: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 23:14:59 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: event tracing support
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Convert the old xfs tracing support that could only be used with the
&lt;br&gt;&amp;nbsp; &amp;nbsp; out of tree kdb and xfsidbg patches to use the generic event tracer.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; To use it make sure CONFIG_EVENT_TRACING is enabled and then enable
&lt;br&gt;&amp;nbsp; &amp;nbsp; all xfs trace channels by:
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;echo 1 &amp;gt; /sys/kernel/debug/tracing/events/xfs/enable
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; or alternatively enable single events by just doing the same in one
&lt;br&gt;&amp;nbsp; &amp;nbsp; event subdirectory, e.g.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;echo 1 &amp;gt; /sys/kernel/debug/tracing/events/xfs/xfs_ihold/enable
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; or set more complex filters, etc. In Documentation/trace/events.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; all this is desctribed in more detail. &amp;nbsp;To reads the events do a
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cat /sys/kernel/debug/tracing/trace
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Compared to the last posting this patch converts the tracing mostly to
&lt;br&gt;&amp;nbsp; &amp;nbsp; the one tracepoint per callsite model that other users of the new
&lt;br&gt;&amp;nbsp; &amp;nbsp; tracing facility also employ. &amp;nbsp;This allows a very fine-grained control
&lt;br&gt;&amp;nbsp; &amp;nbsp; of the tracing, a cleaner output of the traces and also enables the
&lt;br&gt;&amp;nbsp; &amp;nbsp; perf tool to use each tracepoint as a virtual performance counter,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allowing us to e.g. count how often certain workloads git various
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;spots in XFS. &amp;nbsp;Take a look at
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://lwn.net/Articles/346470/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lwn.net/Articles/346470/&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; for some examples.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Also the btree tracing isn't included at all yet, as it will require
&lt;br&gt;&amp;nbsp; &amp;nbsp; additional core tracing features not in mainline yet, I plan to
&lt;br&gt;&amp;nbsp; &amp;nbsp; deliver it later.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; And the really nice thing about this patch is that it actually removes
&lt;br&gt;&amp;nbsp; &amp;nbsp; many lines of code while adding this nice functionality:
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/Makefile &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_acl.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_aops.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; 52 -
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_aops.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_buf.c &amp;nbsp; &amp;nbsp; | &amp;nbsp;117 +--
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_buf.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; 33
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_fs_subr.c | &amp;nbsp; &amp;nbsp;3
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_ioctl.c &amp;nbsp; | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_ioctl32.c | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_iops.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_linux.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_lrw.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; 87 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_lrw.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; 45 -
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_super.c &amp;nbsp; | &amp;nbsp;104 ---
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_super.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;7
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_sync.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_trace.c &amp;nbsp; | &amp;nbsp; 75 ++
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_trace.h &amp;nbsp; | 1369 +++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_vnode.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;4
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/quota/xfs_dquot.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;110 ---
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/quota/xfs_dquot.h &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 21
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/quota/xfs_qm.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 40 -
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/quota/xfs_qm_syscalls.c | &amp;nbsp; &amp;nbsp;4
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/support/ktrace.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;323 ---------
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/support/ktrace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 85 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 16
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_ag.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 14
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_alloc.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;230 +-----
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_alloc.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 27
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_alloc_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_attr.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;107 ---
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_attr.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 10
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_attr_leaf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 14
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_attr_sf.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 40 -
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_bmap.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;507 +++------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_bmap.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 49 -
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_bmap_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;6
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_btree_trace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 17
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_buf_item.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 87 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_buf_item.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_da_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_da_btree.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;7
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dfrag.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2_block.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2_leaf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 21
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2_node.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 27
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2_sf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 26
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2_trace.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;216 ------
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2_trace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 72 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_filestream.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_fsops.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_iget.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;111 ---
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_inode.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 67 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_inode.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 76 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_inode_item.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;5
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_iomap.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 85 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_iomap.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;8
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_log.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;181 +----
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_log_priv.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_log_recover.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_mount.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_quota.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;8
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_rename.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_rtalloc.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_rw.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_trans.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 47 +
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_trans_buf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 62 -
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_vnodeops.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;70 files changed, 2151 insertions(+), 2592 deletions(-)
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit 6ef3554422e2c7e7aa424ba63737da498881dff4
&lt;br&gt;Author: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Wed Nov 25 00:00:21 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: change the xfs_iext_insert / xfs_iext_remove
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Change the xfs_iext_insert / xfs_iext_remove prototypes to pass more
&lt;br&gt;&amp;nbsp; &amp;nbsp; information which will allow pushing the trace points from the callers
&lt;br&gt;&amp;nbsp; &amp;nbsp; into those functions. &amp;nbsp;This includes folding the whichfork information
&lt;br&gt;&amp;nbsp; &amp;nbsp; into the state variable to minimize the addition stack footprint.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit 7574aa92f9b4952c458024e1fa51f20fed65ba07
&lt;br&gt;Author: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Wed Nov 25 00:00:19 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: cleanup bmap extent state macros
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cleanup the extent state macros in the bmap code to use one common set of
&lt;br&gt;&amp;nbsp; &amp;nbsp; flags that we can pass to the tracing code later and remove a lot of the
&lt;br&gt;&amp;nbsp; &amp;nbsp; macro obsfucation.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit d0316554d3586cbea60592a41391b5def2553d6f
&lt;br&gt;Merge: fb0bbb92d42d5bd0ab224605444efdfed06d6934 51e99be00ce2713cbb841cedc997cafa6e26c7f4
&lt;br&gt;Author: Linus Torvalds &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;torvalds@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 09:58:24 2009 -0800
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu: (34 commits)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; m68k: rename global variable vmalloc_end to m68k_vmalloc_end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: add missing per_cpu_ptr_to_phys() definition for UP
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: Fix kdump failure if booted with percpu_alloc=page
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: make misc percpu symbols unique
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: make percpu symbols in ia64 unique
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: make percpu symbols in powerpc unique
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: make percpu symbols in x86 unique
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: make percpu symbols in xen unique
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: make percpu symbols in cpufreq unique
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: make percpu symbols in oprofile unique
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: make percpu symbols in tracer unique
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: make percpu symbols under kernel/ and mm/ unique
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: remove some sparse warnings
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; percpu: make alloc_percpu() handle array types
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; vmalloc: fix use of non-existent percpu variable in put_cpu_var()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this_cpu: Use this_cpu_xx in trace_functions_graph.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this_cpu: Use this_cpu_xx for ftrace
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this_cpu: Use this_cpu_xx in nmi handling
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this_cpu: Use this_cpu operations in RCU
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this_cpu: Use this_cpu ops for VM statistics
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ...
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Fix up trivial (famous last words) global per-cpu naming conflicts in
&lt;br&gt;&amp;nbsp; &amp;nbsp; 	arch/x86/kvm/svm.c
&lt;br&gt;&amp;nbsp; &amp;nbsp; 	mm/slab.c
&lt;br&gt;&lt;br&gt;commit 3126c136bc30225d7a43af741778aa50e95e467a
&lt;br&gt;Merge: f4d544ee5720d336a8c64f9fd33efb888c302309 8e0eb4011bd73d5f91b215b532f74eef478ef795
&lt;br&gt;Author: Linus Torvalds &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;torvalds@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Fri Dec 11 15:31:13 2009 -0800
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6: (21 commits)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ext3: PTR_ERR return of wrong pointer in setup_new_group_blocks()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ext3: Fix data / filesystem corruption when write fails to copy data
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ext4: Support for 64-bit quota format
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ext3: Support for vfsv1 quota format
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; quota: Implement quota format with 64-bit space and inode limits
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; quota: Move definition of QFMT_OCFS2 to linux/quota.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ext2: fix comment in ext2_find_entry about return values
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ext3: Unify log messages in ext3
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ext2: clear uptodate flag on super block I/O error
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ext2: Unify log messages in ext2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ext3: make &amp;quot;norecovery&amp;quot; an alias for &amp;quot;noload&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ext3: Don't update the superblock in ext3_statfs()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ext3: journal all modifications in ext3_xattr_set_handle
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ext2: Explicitly assign values to on-disk enum of filetypes
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; quota: Fix WARN_ON in lookup_one_len
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; const: struct quota_format_ops
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ubifs: remove manual O_SYNC handling
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; afs: remove manual O_SYNC handling
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; kill wait_on_page_writeback_range
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; vfs: Implement proper O_SYNC semantics
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ...
&lt;br&gt;&lt;br&gt;commit f4d544ee5720d336a8c64f9fd33efb888c302309
&lt;br&gt;Merge: 0e2f7b837600979d5b6f174a6ff695b85942e985 44a743f68705c681439f264deb05f8f38e9048d3
&lt;br&gt;Author: Linus Torvalds &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;torvalds@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Fri Dec 11 15:30:29 2009 -0800
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; * 'for-linus' of git://oss.sgi.com/xfs/xfs:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: Fix error return for fallocate() on XFS
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: cleanup dmapi macros in the umount path
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: remove incorrect sparse annotation for xfs_iget_cache_miss
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: kill the STATIC_INLINE macro
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: uninline xfs_get_extsz_hint
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: rename xfs_attr_fetch to xfs_attr_get_int
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: simplify xfs_buf_get / xfs_buf_read interfaces
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: remove IO_ISAIO
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: Wrapped journal record corruption on read at recovery
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: cleanup data end I/O handlers
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: use WRITE_SYNC_PLUG for synchronous writeout
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: reset the i_iolock lock class in the reclaim path
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: I/O completion handlers must use NOFS allocations
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: fix mmap_sem/iolock inversion in xfs_free_eofblocks
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xfs: simplify inode teardown
&lt;br&gt;&lt;br&gt;commit 6b2f3d1f769be5779b479c37800229d9a4809fc3
&lt;br&gt;Author: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Tue Oct 27 11:05:28 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; vfs: Implement proper O_SYNC semantics
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; While Linux provided an O_SYNC flag basically since day 1, it took until
&lt;br&gt;&amp;nbsp; &amp;nbsp; Linux 2.4.0-test12pre2 to actually get it implemented for filesystems,
&lt;br&gt;&amp;nbsp; &amp;nbsp; since that day we had generic_osync_around with only minor changes and the
&lt;br&gt;&amp;nbsp; &amp;nbsp; great &amp;quot;For now, when the user asks for O_SYNC, we'll actually give
&lt;br&gt;&amp;nbsp; &amp;nbsp; O_DSYNC&amp;quot; comment. &amp;nbsp;This patch intends to actually give us real O_SYNC
&lt;br&gt;&amp;nbsp; &amp;nbsp; semantics in addition to the O_DSYNC semantics. &amp;nbsp;After Jan's O_SYNC
&lt;br&gt;&amp;nbsp; &amp;nbsp; patches which are required before this patch it's actually surprisingly
&lt;br&gt;&amp;nbsp; &amp;nbsp; simple, we just need to figure out when to set the datasync flag to
&lt;br&gt;&amp;nbsp; &amp;nbsp; vfs_fsync_range and when not.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; This patch renames the existing O_SYNC flag to O_DSYNC while keeping it's
&lt;br&gt;&amp;nbsp; &amp;nbsp; numerical value to keep binary compatibility, and adds a new real O_SYNC
&lt;br&gt;&amp;nbsp; &amp;nbsp; flag. &amp;nbsp;To guarantee backwards compatiblity it is defined as expanding to
&lt;br&gt;&amp;nbsp; &amp;nbsp; both the O_DSYNC and the new additional binary flag (__O_SYNC) to make
&lt;br&gt;&amp;nbsp; &amp;nbsp; sure we are backwards-compatible when compiled against the new headers.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; This also means that all places that don't care about the differences can
&lt;br&gt;&amp;nbsp; &amp;nbsp; just check O_DSYNC and get the right behaviour for O_SYNC, too - only
&lt;br&gt;&amp;nbsp; &amp;nbsp; places that actuall care need to check __O_SYNC in addition. &amp;nbsp;Drivers and
&lt;br&gt;&amp;nbsp; &amp;nbsp; network filesystems have been updated in a fail safe way to always do the
&lt;br&gt;&amp;nbsp; &amp;nbsp; full sync magic if O_DSYNC is set. &amp;nbsp;The few places setting O_SYNC for
&lt;br&gt;&amp;nbsp; &amp;nbsp; lower layers are kept that way for now to stay failsafe.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; We enforce that O_DSYNC is set when __O_SYNC is set early in the open path
&lt;br&gt;&amp;nbsp; &amp;nbsp; to make sure we always get these sane options.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Note that parisc really screwed up their headers as they already define a
&lt;br&gt;&amp;nbsp; &amp;nbsp; O_DSYNC that has always been a no-op. &amp;nbsp;We try to repair it by using it for
&lt;br&gt;&amp;nbsp; &amp;nbsp; the new O_DSYNC and redefinining O_SYNC to send both the traditional
&lt;br&gt;&amp;nbsp; &amp;nbsp; O_SYNC numerical value _and_ the O_DSYNC one.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Richard Henderson &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rth@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Ivan Kokshaysky &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ink@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Grant Grundler &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;grundler@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: &amp;quot;David S. Miller&amp;quot; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;davem@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Ingo Molnar &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=17&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mingo@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: &amp;quot;H. Peter Anvin&amp;quot; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=18&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hpa@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Thomas Gleixner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=19&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tglx@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Al Viro &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=20&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;viro@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Andreas Dilger &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=21&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;adilger@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Acked-by: Trond Myklebust &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Trond.Myklebust@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Acked-by: Kyle McMartin &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=23&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kyle@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Acked-by: Ulrich Drepper &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=24&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;drepper@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=25&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Andrew Morton &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=26&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;akpm@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Jan Kara &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=27&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jack@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit 4ef58d4e2ad1fa2a3e5bbf41af2284671fca8cf8
&lt;br&gt;Merge: f6c4c8195b5e7878823caa1181be404d9e86d369 d014d043869cdc591f3a33243d3481fa4479c2d0
&lt;br&gt;Author: Linus Torvalds &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=28&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;torvalds@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Wed Dec 9 19:43:33 2009 -0800
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (42 commits)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; tree-wide: fix misspelling of &amp;quot;definition&amp;quot; in comments
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; reiserfs: fix misspelling of &amp;quot;journaled&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; doc: Fix a typo in slub.txt.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; inotify: remove superfluous return code check
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; hdlc: spelling fix in find_pvc() comment
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; doc: fix regulator docs cut-and-pasteism
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; mtd: Fix comment in Kconfig
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; doc: Fix IRQ chip docs
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; tree-wide: fix assorted typos all over the place
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; drivers/ata/libata-sff.c: comment spelling fixes
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; fix typos/grammos in Documentation/edac.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl: add missing comments
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; fs/debugfs/inode.c: fix comment typos
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sgivwfb: Make use of ARRAY_SIZE.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sky2: fix sky2_link_down copy/paste comment error
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; tree-wide: fix typos &amp;quot;couter&amp;quot; -&amp;gt; &amp;quot;counter&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; tree-wide: fix typos &amp;quot;offest&amp;quot; -&amp;gt; &amp;quot;offset&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; fix kerneldoc for set_irq_msi()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; spidev: fix double &amp;quot;of of&amp;quot; in comment
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; comment typo fix: sybsystem -&amp;gt; subsystem
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ...
&lt;br&gt;&lt;br&gt;commit 6035ccd8e9e40bb654fbfdef325902ab531679a5
&lt;br&gt;Merge: 23eb3b64b5e44680c867e165fe1cd18e57fba255 878eaddd05d251cefa9632c2b8046833c5eead66
&lt;br&gt;Author: Linus Torvalds &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=29&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;torvalds@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Tue Dec 8 08:19:16 2009 -0800
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Merge branch 'for-2.6.33' of git://git.kernel.dk/linux-2.6-block
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; * 'for-2.6.33' of git://git.kernel.dk/linux-2.6-block: (113 commits)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cfq-iosched: Do not access cfqq after freeing it
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; block: include linux/err.h to use ERR_PTR
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cfq-iosched: use call_rcu() instead of doing grace period stall on queue exit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; blkio: Allow CFQ group IO scheduling even when CFQ is a module
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; blkio: Implement dynamic io controlling policy registration
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; blkio: Export some symbols from blkio as its user CFQ can be a module
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; block: Fix io_context leak after failure of clone with CLONE_IO
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; block: Fix io_context leak after clone with CLONE_IO
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cfq-iosched: make nonrot check logic consistent
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; io controller: quick fix for blk-cgroup and modular CFQ
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cfq-iosched: move IO controller declerations to a header file
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cfq-iosched: fix compile problem with !CONFIG_CGROUP
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; blkio: Documentation
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; blkio: Wait on sync-noidle queue even if rq_noidle = 1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; blkio: Implement group_isolation tunable
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; blkio: Determine async workload length based on total number of queues
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; blkio: Wait for cfq queue to get backlogged if group is empty
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; blkio: Propagate cgroup weight updation to cfq groups
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; blkio: Drop the reference to queue once the task changes cgroup
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; blkio: Provide some isolation between groups
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ...
&lt;br&gt;&lt;br&gt;commit 1557d33007f63dd96e5d15f33af389378e5f2e54
&lt;br&gt;Merge: 6ec22f9b037fc0c2e00ddb7023fad279c365324d c656ae95d1c5c8ed5763356263ace2d03087efec
&lt;br&gt;Author: Linus Torvalds &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=30&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;torvalds@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Tue Dec 8 07:38:50 2009 -0800
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Merge git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/sysctl-2.6
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; * git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/sysctl-2.6: (43 commits)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; security/tomoyo: Remove now unnecessary handling of security_sysctl.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; security/tomoyo: Add a special case to handle accesses through the internal proc mount.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl: Drop &amp; in front of every proc_handler.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl: Remove CTL_NONE and CTL_UNNUMBERED
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl: kill dead ctl_handler definitions.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl: Remove the last of the generic binary sysctl support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl net: Remove unused binary sysctl code
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl security/tomoyo: Don't look at ctl_name
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl arm: Remove binary sysctl support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl x86: Remove dead binary sysctl support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl sh: Remove dead binary sysctl support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl powerpc: Remove dead binary sysctl support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl ia64: Remove dead binary sysctl support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl s390: Remove dead sysctl binary support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl frv: Remove dead binary sysctl support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl mips/lasat: Remove dead binary sysctl support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl drivers: Remove dead binary sysctl support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl crypto: Remove dead binary sysctl support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl security/keys: Remove dead binary sysctl support
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sysctl kernel: Remove binary sysctl logic
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ...
&lt;br&gt;&lt;br&gt;commit d014d043869cdc591f3a33243d3481fa4479c2d0
&lt;br&gt;Merge: 6ec22f9b037fc0c2e00ddb7023fad279c365324d 6070d81eb5f2d4943223c96e7609a53cdc984364
&lt;br&gt;Author: Jiri Kosina &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=31&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jkosina@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 7 18:36:35 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Merge branch 'for-next' into for-linus
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Conflicts:
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; 	kernel/irq/chip.c
&lt;br&gt;&lt;br&gt;commit af901ca181d92aac3a7dc265144a9081a86d8f39
&lt;br&gt;Author: AndrÃ© Goddard Rosa &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=32&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andre.goddard@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sat Nov 14 13:09:05 2009 -0200
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; tree-wide: fix assorted typos all over the place
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; That is &amp;quot;success&amp;quot;, &amp;quot;unknown&amp;quot;, &amp;quot;through&amp;quot;, &amp;quot;performance&amp;quot;, &amp;quot;[re|un]mapping&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; , &amp;quot;access&amp;quot;, &amp;quot;default&amp;quot;, &amp;quot;reasonable&amp;quot;, &amp;quot;[con]currently&amp;quot;, &amp;quot;temperature&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; , &amp;quot;channel&amp;quot;, &amp;quot;[un]used&amp;quot;, &amp;quot;application&amp;quot;, &amp;quot;example&amp;quot;,&amp;quot;hierarchy&amp;quot;, &amp;quot;therefore&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; , &amp;quot;[over|under]flow&amp;quot;, &amp;quot;contiguous&amp;quot;, &amp;quot;threshold&amp;quot;, &amp;quot;enough&amp;quot; and others.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: AndrÃ© Goddard Rosa &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=33&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andre.goddard@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Jiri Kosina &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=34&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jkosina@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit 0d99519efef15fd0cf84a849492c7b1deee1e4b7
&lt;br&gt;Author: Wu Fengguang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=35&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;fengguang.wu@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Thu Dec 3 13:54:25 2009 +0100
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; writeback: remove unused nonblocking and congestion checks
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; - no one is calling wb_writeback and write_cache_pages with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wbc.nonblocking=1 any more
&lt;br&gt;&amp;nbsp; &amp;nbsp; - lumpy pageout will want to do nonblocking writeback without the
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; congestion wait
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; So remove the congestion checks as suggested by Chris.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Wu Fengguang &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=36&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;fengguang.wu@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Chris Mason &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=37&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;chris.mason@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Jens Axboe &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=38&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jens.axboe@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Trond Myklebust &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=39&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Trond.Myklebust@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=40&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=41&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Evgeniy Polyakov &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=42&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;zbr@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=43&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Jens Axboe &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=44&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jens.axboe@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit 6d4561110a3e9fa742aeec6717248a491dfb1878
&lt;br&gt;Author: Eric W. Biederman &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=45&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ebiederm@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Nov 16 03:11:48 2009 -0800
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; sysctl: Drop &amp; in front of every proc_handler.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; For consistency drop &amp; in front of every proc_handler. &amp;nbsp;Explicity
&lt;br&gt;&amp;nbsp; &amp;nbsp; taking the address is unnecessary and it prevents optimizations
&lt;br&gt;&amp;nbsp; &amp;nbsp; like stubbing the proc_handlers to NULL.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Alexey Dobriyan &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=46&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;adobriyan@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Ingo Molnar &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=47&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mingo@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Joe Perches &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=48&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;joe@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Eric W. Biederman &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=49&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ebiederm@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit ab09203e302b6e526f6930f3e460064b0f253ae9
&lt;br&gt;Author: Eric W. Biederman &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=50&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ebiederm@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Thu Nov 5 14:25:10 2009 -0800
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; sysctl fs: Remove dead binary sysctl support
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Now that sys_sysctl is a generic wrapper around /proc/sys &amp;nbsp;.ctl_name
&lt;br&gt;&amp;nbsp; &amp;nbsp; and .strategy members of sysctl tables are dead code. &amp;nbsp;Remove them.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cc: Jan Harkes &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=51&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jaharkes@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Eric W. Biederman &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=52&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ebiederm@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit 7a9e02d6bb05b268dc403d7ee87ce4198062f838
&lt;br&gt;Author: Christoph Lameter &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=53&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;cl@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Sat Oct 3 19:48:23 2009 +0900
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; this_cpu: xfs_icsb_modify_counters does not need &amp;quot;cpu&amp;quot; variable
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; The xfs_icsb_modify_counters() function no longer needs the cpu variable
&lt;br&gt;&amp;nbsp; &amp;nbsp; if we use this_cpu_ptr() and we can get rid of get/put_cpu().
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Acked-by: Tejun Heo &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=54&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tj@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Reviewed-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=55&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Acked-by: Olaf Weber &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=56&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;olaf@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Lameter &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=57&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;cl@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Tejun Heo &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=58&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tj@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;-----------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;Summary of changes:
&lt;br&gt;&amp;nbsp;fs/xfs/Makefile &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_acl.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_aops.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; 61 +--
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_aops.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_buf.c &amp;nbsp; &amp;nbsp; | &amp;nbsp;117 ++---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_buf.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; 33 +-
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_fs_subr.c | &amp;nbsp; &amp;nbsp;3 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_ioctl.c &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_ioctl32.c | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_iops.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_linux.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 -
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_lrw.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; 89 +---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_lrw.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; 45 --
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_super.c &amp;nbsp; | &amp;nbsp;104 +---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_super.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;7 -
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_sync.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_sysctl.c &amp;nbsp;| &amp;nbsp; 62 +--
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_trace.c &amp;nbsp; | &amp;nbsp; 75 +++
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_trace.h &amp;nbsp; | 1369 ++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_vnode.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;4 +
&lt;br&gt;&amp;nbsp;fs/xfs/quota/xfs_dquot.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;110 +---
&lt;br&gt;&amp;nbsp;fs/xfs/quota/xfs_dquot.h &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 23 +-
&lt;br&gt;&amp;nbsp;fs/xfs/quota/xfs_qm.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 40 +-
&lt;br&gt;&amp;nbsp;fs/xfs/quota/xfs_qm_syscalls.c | &amp;nbsp; &amp;nbsp;4 +-
&lt;br&gt;&amp;nbsp;fs/xfs/support/ktrace.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;323 ----------
&lt;br&gt;&amp;nbsp;fs/xfs/support/ktrace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 85 ---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 16 -
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_ag.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 14 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_alloc.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;230 ++------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_alloc.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 27 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_alloc_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_attr.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;107 +---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_attr.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 10 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_attr_leaf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 14 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_attr_sf.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 40 --
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;942 +++++++++-------------------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 58 ++-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;6 -
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_btree_trace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 17 -
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_buf_item.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 87 +--
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_buf_item.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_da_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_da_btree.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;7 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dfrag.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_block.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_leaf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 21 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_node.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 27 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_sf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 26 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_trace.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;216 -------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_trace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 72 ---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_filestream.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_fsops.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iget.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;111 +---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 79 +--
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 82 +--
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode_item.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;5 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iomap.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 85 +---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iomap.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;8 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;181 ++----
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log_priv.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log_recover.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_mount.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 14 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_quota.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;8 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_rename.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_rtalloc.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_rw.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_trans.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 47 ++
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_trans_buf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 62 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_vnodeops.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;71 files changed, 2393 insertions(+), 2899 deletions(-)
&lt;br&gt;&amp;nbsp;create mode 100644 fs/xfs/linux-2.6/xfs_trace.c
&lt;br&gt;&amp;nbsp;create mode 100644 fs/xfs/linux-2.6/xfs_trace.h
&lt;br&gt;&amp;nbsp;delete mode 100644 fs/xfs/support/ktrace.c
&lt;br&gt;&amp;nbsp;delete mode 100644 fs/xfs/support/ktrace.h
&lt;br&gt;&amp;nbsp;delete mode 100644 fs/xfs/xfs_dir2_trace.c
&lt;br&gt;&amp;nbsp;delete mode 100644 fs/xfs/xfs_dir2_trace.h
&lt;br&gt;&lt;br&gt;&lt;br&gt;hooks/post-receive
&lt;br&gt;-- 
&lt;br&gt;XFS development tree
&lt;br&gt;&lt;br&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26795244&amp;i=59&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-XFS-updates--XFS-development-tree-branch%2C-for-linus%2C-updated.-v2.6.30-rc4-31865-g0b1b213-tp26795244p26795244.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26790059</id>
	<title>[PATCH 6/6] XFS: Reference count per-ag structures</title>
	<published>2009-12-14T22:11:17Z</published>
	<updated>2009-12-14T22:11:17Z</updated>
	<author>
		<name>Dave Chinner</name>
	</author>
	<content type="html">Reference count the per-ag structures to ensure that we keep get/put
&lt;br&gt;pairs balanced. Assert that the reference counts are zero at unmount
&lt;br&gt;time to catch leaks. In future, reference counts will enable us to
&lt;br&gt;safely remove perag structures by allowing us to detect when they
&lt;br&gt;are no longer in use.
&lt;br&gt;&lt;br&gt;Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790059&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_ag.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;4 ++--
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_mount.c | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_mount.h | &amp;nbsp; 11 +++++++++--
&lt;br&gt;&amp;nbsp;3 files changed, 12 insertions(+), 4 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/fs/xfs/xfs_ag.h b/fs/xfs/xfs_ag.h
&lt;br&gt;index 6702bd8..18ae43f 100644
&lt;br&gt;--- a/fs/xfs/xfs_ag.h
&lt;br&gt;+++ b/fs/xfs/xfs_ag.h
&lt;br&gt;@@ -196,8 +196,8 @@ typedef struct xfs_perag_busy {
&lt;br&gt;&amp;nbsp;#define XFS_PAGB_NUM_SLOTS	128
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-typedef struct xfs_perag
&lt;br&gt;-{
&lt;br&gt;+typedef struct xfs_perag {
&lt;br&gt;+	atomic_t	pag_ref;	/* perag reference count */
&lt;br&gt;&amp;nbsp;	char		pagf_init;	/* this agf's entry is initialized */
&lt;br&gt;&amp;nbsp;	char		pagi_init;	/* this agi's entry is initialized */
&lt;br&gt;&amp;nbsp;	char		pagf_metadata;	/* the agf is preferred to be metadata */
&lt;br&gt;diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
&lt;br&gt;index 73d61d4..1d00f7f 100644
&lt;br&gt;--- a/fs/xfs/xfs_mount.c
&lt;br&gt;+++ b/fs/xfs/xfs_mount.c
&lt;br&gt;@@ -215,6 +215,7 @@ xfs_free_perag(
&lt;br&gt;&amp;nbsp;	for (agno = 0; agno &amp;lt; mp-&amp;gt;m_sb.sb_agcount; agno++) {
&lt;br&gt;&amp;nbsp;		spin_lock(&amp;mp-&amp;gt;m_perag_lock);
&lt;br&gt;&amp;nbsp;		pag = radix_tree_delete(&amp;mp-&amp;gt;m_perag_tree, agno);
&lt;br&gt;+		ASSERT(atomic_read(&amp;pag-&amp;gt;pag_ref) == 0);
&lt;br&gt;&amp;nbsp;		spin_unlock(&amp;mp-&amp;gt;m_perag_lock);
&lt;br&gt;&amp;nbsp;		ASSERT(pag);
&lt;br&gt;&amp;nbsp;		kmem_free(pag-&amp;gt;pagb_list);
&lt;br&gt;diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
&lt;br&gt;index cfa7a5d..16b2212 100644
&lt;br&gt;--- a/fs/xfs/xfs_mount.h
&lt;br&gt;+++ b/fs/xfs/xfs_mount.h
&lt;br&gt;@@ -384,7 +384,7 @@ xfs_daddr_to_agbno(struct xfs_mount *mp, xfs_daddr_t d)
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;- * perag get/put wrappers for eventual ref counting
&lt;br&gt;+ * perag get/put wrappers for ref counting
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;static inline struct xfs_perag *
&lt;br&gt;&amp;nbsp;xfs_perag_get(struct xfs_mount *mp, xfs_agnumber_t agno)
&lt;br&gt;@@ -393,6 +393,12 @@ xfs_perag_get(struct xfs_mount *mp, xfs_agnumber_t agno)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	spin_lock(&amp;mp-&amp;gt;m_perag_lock);
&lt;br&gt;&amp;nbsp;	pag = radix_tree_lookup(&amp;mp-&amp;gt;m_perag_tree, agno);
&lt;br&gt;+	if (pag) {
&lt;br&gt;+		ASSERT(atomic_read(&amp;pag-&amp;gt;pag_ref) &amp;gt;= 0);
&lt;br&gt;+		/* catch leaks in the positive direction during testing */
&lt;br&gt;+		ASSERT(atomic_read(&amp;pag-&amp;gt;pag_ref) &amp;lt; 1000);
&lt;br&gt;+		atomic_inc(&amp;pag-&amp;gt;pag_ref);
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;	spin_unlock(&amp;mp-&amp;gt;m_perag_lock);
&lt;br&gt;&amp;nbsp;	return pag;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -400,7 +406,8 @@ xfs_perag_get(struct xfs_mount *mp, xfs_agnumber_t agno)
&lt;br&gt;&amp;nbsp;static inline void
&lt;br&gt;&amp;nbsp;xfs_perag_put(struct xfs_perag *pag)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	/* nothing to see here, move along */
&lt;br&gt;+	ASSERT(atomic_read(&amp;pag-&amp;gt;pag_ref) &amp;gt; 0);
&lt;br&gt;+	atomic_dec(&amp;pag-&amp;gt;pag_ref);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;-- 
&lt;br&gt;1.6.5
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790059&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-0-6--XFS%3A-Fix-growfs-deadlocks-and-per-AG-use-after-free-V3-tp26790057p26790059.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26790063</id>
	<title>[PATCH 5/6] XFS: Replace per-ag array with a radix tree</title>
	<published>2009-12-14T22:11:16Z</published>
	<updated>2009-12-14T22:11:16Z</updated>
	<author>
		<name>Dave Chinner</name>
	</author>
	<content type="html">The use of an array for the per-ag structures requires reallocation of the
&lt;br&gt;array when growing the filesystem. This requires locking access to the array to
&lt;br&gt;avoid use after free situations, and the locking is difficult to get right. To
&lt;br&gt;avoid needing to reallocate an array, change the per-ag structures to an
&lt;br&gt;allocated object per ag and index them using a tree structure.
&lt;br&gt;&lt;br&gt;The AGs are always densely indexed (hence the use of an array), but the number
&lt;br&gt;supported is 2^32 and lookups tend to be random and hence indexing needs to
&lt;br&gt;scale. A simple choice is a radix tree - it works well with this sort of index.
&lt;br&gt;This change also removes another large contiguous allocation from the
&lt;br&gt;mount/growfs path in XFS.
&lt;br&gt;&lt;br&gt;The growing process now needs to change to only initialise the new AGs required
&lt;br&gt;for the extra space, and as such only needs to exclusively lock the tree for
&lt;br&gt;inserts. The rest of the code only needs to lock the tree while doing lookups,
&lt;br&gt;and hence this will remove all the deadlocks that currently occur on the
&lt;br&gt;m_perag_lock as it is now an innermost lock. The lock is also changed to a
&lt;br&gt;spinlock from a read/write lock as the hold time is now extremely short.
&lt;br&gt;&lt;br&gt;To complete the picture, the per-ag structures will need to be reference
&lt;br&gt;counted to ensure that we don't free/modify them while they are still in use.
&lt;br&gt;This will be done in subsequent patch.
&lt;br&gt;&lt;br&gt;Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790063&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_alloc.c &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 ------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;7 +----
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_filestream.c | &amp;nbsp; 13 +++------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_fsops.c &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 42 +++++++++++++++---------------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_ialloc.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; 25 +----------------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_itable.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;4 ---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_mount.c &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 65 +++++++++++++++++++++++++++++++++++-----------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_mount.h &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 14 +++++++---
&lt;br&gt;&amp;nbsp;8 files changed, 87 insertions(+), 91 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c
&lt;br&gt;index 3cb533c..e5679f3 100644
&lt;br&gt;--- a/fs/xfs/xfs_alloc.c
&lt;br&gt;+++ b/fs/xfs/xfs_alloc.c
&lt;br&gt;@@ -2275,7 +2275,6 @@ xfs_alloc_vextent(
&lt;br&gt;&amp;nbsp;		 * These three force us into a single a.g.
&lt;br&gt;&amp;nbsp;		 */
&lt;br&gt;&amp;nbsp;		args-&amp;gt;agno = XFS_FSB_TO_AGNO(mp, args-&amp;gt;fsbno);
&lt;br&gt;-		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		args-&amp;gt;pag = xfs_perag_get(mp, args-&amp;gt;agno);
&lt;br&gt;&amp;nbsp;		args-&amp;gt;minleft = 0;
&lt;br&gt;&amp;nbsp;		error = xfs_alloc_fix_freelist(args, 0);
&lt;br&gt;@@ -2285,14 +2284,12 @@ xfs_alloc_vextent(
&lt;br&gt;&amp;nbsp;			goto error0;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		if (!args-&amp;gt;agbp) {
&lt;br&gt;-			up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;			trace_xfs_alloc_vextent_noagbp(args);
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		args-&amp;gt;agbno = XFS_FSB_TO_AGBNO(mp, args-&amp;gt;fsbno);
&lt;br&gt;&amp;nbsp;		if ((error = xfs_alloc_ag_vextent(args)))
&lt;br&gt;&amp;nbsp;			goto error0;
&lt;br&gt;-		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;&amp;nbsp;	case XFS_ALLOCTYPE_START_BNO:
&lt;br&gt;&amp;nbsp;		/*
&lt;br&gt;@@ -2344,7 +2341,6 @@ xfs_alloc_vextent(
&lt;br&gt;&amp;nbsp;		 * Loop over allocation groups twice; first time with
&lt;br&gt;&amp;nbsp;		 * trylock set, second time without.
&lt;br&gt;&amp;nbsp;		 */
&lt;br&gt;-		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		for (;;) {
&lt;br&gt;&amp;nbsp;			args-&amp;gt;pag = xfs_perag_get(mp, args-&amp;gt;agno);
&lt;br&gt;&amp;nbsp;			if (no_min) args-&amp;gt;minleft = 0;
&lt;br&gt;@@ -2407,7 +2403,6 @@ xfs_alloc_vextent(
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			xfs_perag_put(args-&amp;gt;pag);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;-		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		if (bump_rotor || (type == XFS_ALLOCTYPE_ANY_AG)) {
&lt;br&gt;&amp;nbsp;			if (args-&amp;gt;agno == sagno)
&lt;br&gt;&amp;nbsp;				mp-&amp;gt;m_agfrotor = (mp-&amp;gt;m_agfrotor + 1) %
&lt;br&gt;@@ -2437,7 +2432,6 @@ xfs_alloc_vextent(
&lt;br&gt;&amp;nbsp;	return 0;
&lt;br&gt;&amp;nbsp;error0:
&lt;br&gt;&amp;nbsp;	xfs_perag_put(args-&amp;gt;pag);
&lt;br&gt;-	up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	return error;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2462,7 +2456,6 @@ xfs_free_extent(
&lt;br&gt;&amp;nbsp;	args.agno = XFS_FSB_TO_AGNO(args.mp, bno);
&lt;br&gt;&amp;nbsp;	ASSERT(args.agno &amp;lt; args.mp-&amp;gt;m_sb.sb_agcount);
&lt;br&gt;&amp;nbsp;	args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno);
&lt;br&gt;-	down_read(&amp;args.mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	args.pag = xfs_perag_get(args.mp, args.agno);
&lt;br&gt;&amp;nbsp;	if ((error = xfs_alloc_fix_freelist(&amp;args, XFS_ALLOC_FLAG_FREEING)))
&lt;br&gt;&amp;nbsp;		goto error0;
&lt;br&gt;@@ -2474,7 +2467,6 @@ xfs_free_extent(
&lt;br&gt;&amp;nbsp;	error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, len, 0);
&lt;br&gt;&amp;nbsp;error0:
&lt;br&gt;&amp;nbsp;	xfs_perag_put(args.pag);
&lt;br&gt;-	up_read(&amp;args.mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	return error;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c
&lt;br&gt;index a9b95d9..7c6d9ac 100644
&lt;br&gt;--- a/fs/xfs/xfs_bmap.c
&lt;br&gt;+++ b/fs/xfs/xfs_bmap.c
&lt;br&gt;@@ -2629,14 +2629,12 @@ xfs_bmap_btalloc(
&lt;br&gt;&amp;nbsp;		if (startag == NULLAGNUMBER)
&lt;br&gt;&amp;nbsp;			startag = ag = 0;
&lt;br&gt;&amp;nbsp;		notinit = 0;
&lt;br&gt;-		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		pag = xfs_perag_get(mp, ag);
&lt;br&gt;&amp;nbsp;		while (blen &amp;lt; ap-&amp;gt;alen) {
&lt;br&gt;&amp;nbsp;			if (!pag-&amp;gt;pagf_init &amp;&amp;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;(error = xfs_alloc_pagf_init(mp, args.tp,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp;ag, XFS_ALLOC_FLAG_TRYLOCK))) {
&lt;br&gt;&amp;nbsp;				xfs_perag_put(pag);
&lt;br&gt;-				up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;				return error;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			/*
&lt;br&gt;@@ -2669,10 +2667,8 @@ xfs_bmap_btalloc(
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;					error = xfs_filestream_new_ag(ap, &amp;ag);
&lt;br&gt;&amp;nbsp;					xfs_perag_put(pag);
&lt;br&gt;-					if (error) {
&lt;br&gt;-						up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;+					if (error)
&lt;br&gt;&amp;nbsp;						return error;
&lt;br&gt;-					}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;					/* loop again to set 'blen'*/
&lt;br&gt;&amp;nbsp;					startag = NULLAGNUMBER;
&lt;br&gt;@@ -2688,7 +2684,6 @@ xfs_bmap_btalloc(
&lt;br&gt;&amp;nbsp;			pag = xfs_perag_get(mp, ag);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		xfs_perag_put(pag);
&lt;br&gt;-		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		/*
&lt;br&gt;&amp;nbsp;		 * Since the above loop did a BUF_TRYLOCK, it is
&lt;br&gt;&amp;nbsp;		 * possible that there is space for this request.
&lt;br&gt;diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c
&lt;br&gt;index e61f2aa..914d00d 100644
&lt;br&gt;--- a/fs/xfs/xfs_filestream.c
&lt;br&gt;+++ b/fs/xfs/xfs_filestream.c
&lt;br&gt;@@ -253,8 +253,7 @@ next_ag:
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * Set the allocation group number for a file or a directory, updating inode
&lt;br&gt;- * references and per-AG references as appropriate. &amp;nbsp;Must be called with the
&lt;br&gt;- * m_peraglock held in read mode.
&lt;br&gt;+ * references and per-AG references as appropriate.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;static int
&lt;br&gt;&amp;nbsp;_xfs_filestream_update_ag(
&lt;br&gt;@@ -456,10 +455,10 @@ xfs_filestream_unmount(
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;- * If the mount point's m_perag array is going to be reallocated, all
&lt;br&gt;+ * If the mount point's m_perag tree is going to be modified, all
&lt;br&gt;&amp;nbsp; * outstanding cache entries must be flushed to avoid accessing reference count
&lt;br&gt;&amp;nbsp; * addresses that have been freed. &amp;nbsp;The call to xfs_filestream_flush() must be
&lt;br&gt;- * made inside the block that holds the m_peraglock in write mode to do the
&lt;br&gt;+ * made inside the block that holds the m_perag_lock in write mode to do the
&lt;br&gt;&amp;nbsp; * reallocation.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;void
&lt;br&gt;@@ -531,7 +530,6 @@ xfs_filestream_associate(
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	mp = pip-&amp;gt;i_mount;
&lt;br&gt;&amp;nbsp;	cache = mp-&amp;gt;m_filestream;
&lt;br&gt;-	down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/*
&lt;br&gt;&amp;nbsp;	 * We have a problem, Houston.
&lt;br&gt;@@ -548,10 +546,8 @@ xfs_filestream_associate(
&lt;br&gt;&amp;nbsp;	 *
&lt;br&gt;&amp;nbsp;	 * So, if we can't get the iolock without sleeping then just give up
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;-	if (!xfs_ilock_nowait(pip, XFS_IOLOCK_EXCL)) {
&lt;br&gt;-		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;+	if (!xfs_ilock_nowait(pip, XFS_IOLOCK_EXCL))
&lt;br&gt;&amp;nbsp;		return 1;
&lt;br&gt;-	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/* If the parent directory is already in the cache, use its AG. */
&lt;br&gt;&amp;nbsp;	item = xfs_mru_cache_lookup(cache, pip-&amp;gt;i_ino);
&lt;br&gt;@@ -606,7 +602,6 @@ exit_did_pick:
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;exit:
&lt;br&gt;&amp;nbsp;	xfs_iunlock(pip, XFS_IOLOCK_EXCL);
&lt;br&gt;-	up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	return -err;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c
&lt;br&gt;index a13919a..37a6f62 100644
&lt;br&gt;--- a/fs/xfs/xfs_fsops.c
&lt;br&gt;+++ b/fs/xfs/xfs_fsops.c
&lt;br&gt;@@ -167,27 +167,14 @@ xfs_growfs_data_private(
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	new = nb - mp-&amp;gt;m_sb.sb_dblocks;
&lt;br&gt;&amp;nbsp;	oagcount = mp-&amp;gt;m_sb.sb_agcount;
&lt;br&gt;-	if (nagcount &amp;gt; oagcount) {
&lt;br&gt;-		void *new_perag, *old_perag;
&lt;br&gt;-
&lt;br&gt;-		xfs_filestream_flush(mp);
&lt;br&gt;-
&lt;br&gt;-		new_perag = kmem_zalloc(sizeof(xfs_perag_t) * nagcount,
&lt;br&gt;-					KM_MAYFAIL);
&lt;br&gt;-		if (!new_perag)
&lt;br&gt;-			return XFS_ERROR(ENOMEM);
&lt;br&gt;-
&lt;br&gt;-		down_write(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;-		memcpy(new_perag, mp-&amp;gt;m_perag, sizeof(xfs_perag_t) * oagcount);
&lt;br&gt;-		old_perag = mp-&amp;gt;m_perag;
&lt;br&gt;-		mp-&amp;gt;m_perag = new_perag;
&lt;br&gt;-
&lt;br&gt;-		mp-&amp;gt;m_flags |= XFS_MOUNT_32BITINODES;
&lt;br&gt;-		nagimax = xfs_initialize_perag(mp, nagcount);
&lt;br&gt;-		up_write(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		kmem_free(old_perag);
&lt;br&gt;+	/* allocate the new per-ag structures */
&lt;br&gt;+	if (nagcount &amp;gt; oagcount) {
&lt;br&gt;+		error = xfs_initialize_perag(mp, nagcount, &amp;nagimax);
&lt;br&gt;+		if (error)
&lt;br&gt;+			return error;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	tp = xfs_trans_alloc(mp, XFS_TRANS_GROWFS);
&lt;br&gt;&amp;nbsp;	tp-&amp;gt;t_flags |= XFS_TRANS_RESERVE;
&lt;br&gt;&amp;nbsp;	if ((error = xfs_trans_reserve(tp, XFS_GROWFS_SPACE_RES(mp),
&lt;br&gt;@@ -196,6 +183,11 @@ xfs_growfs_data_private(
&lt;br&gt;&amp;nbsp;		return error;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	/*
&lt;br&gt;+	 * Write new AG headers to disk. Non-transactional, but written
&lt;br&gt;+	 * synchronously so they are completed prior to the growfs transaction
&lt;br&gt;+	 * being logged.
&lt;br&gt;+	 */
&lt;br&gt;&amp;nbsp;	nfree = 0;
&lt;br&gt;&amp;nbsp;	for (agno = nagcount - 1; agno &amp;gt;= oagcount; agno--, new -= agsize) {
&lt;br&gt;&amp;nbsp;		/*
&lt;br&gt;@@ -359,6 +351,12 @@ xfs_growfs_data_private(
&lt;br&gt;&amp;nbsp;			goto error0;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	/*
&lt;br&gt;+	 * Update changed superblock fields transactionally. These are not
&lt;br&gt;+	 * seen by the rest of the world until the transaction commit applies
&lt;br&gt;+	 * them atomically to the superblock.
&lt;br&gt;+	 */
&lt;br&gt;&amp;nbsp;	if (nagcount &amp;gt; oagcount)
&lt;br&gt;&amp;nbsp;		xfs_trans_mod_sb(tp, XFS_TRANS_SB_AGCOUNT, nagcount - oagcount);
&lt;br&gt;&amp;nbsp;	if (nb &amp;gt; mp-&amp;gt;m_sb.sb_dblocks)
&lt;br&gt;@@ -369,9 +367,9 @@ xfs_growfs_data_private(
&lt;br&gt;&amp;nbsp;	if (dpct)
&lt;br&gt;&amp;nbsp;		xfs_trans_mod_sb(tp, XFS_TRANS_SB_IMAXPCT, dpct);
&lt;br&gt;&amp;nbsp;	error = xfs_trans_commit(tp, 0);
&lt;br&gt;-	if (error) {
&lt;br&gt;+	if (error)
&lt;br&gt;&amp;nbsp;		return error;
&lt;br&gt;-	}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	/* New allocation groups fully initialized, so update mount struct */
&lt;br&gt;&amp;nbsp;	if (nagimax)
&lt;br&gt;&amp;nbsp;		mp-&amp;gt;m_maxagi = nagimax;
&lt;br&gt;@@ -381,6 +379,8 @@ xfs_growfs_data_private(
&lt;br&gt;&amp;nbsp;		mp-&amp;gt;m_maxicount = icount &amp;lt;&amp;lt; mp-&amp;gt;m_sb.sb_inopblog;
&lt;br&gt;&amp;nbsp;	} else
&lt;br&gt;&amp;nbsp;		mp-&amp;gt;m_maxicount = 0;
&lt;br&gt;+
&lt;br&gt;+	/* update secondary superblocks. */
&lt;br&gt;&amp;nbsp;	for (agno = 1; agno &amp;lt; nagcount; agno++) {
&lt;br&gt;&amp;nbsp;		error = xfs_read_buf(mp, mp-&amp;gt;m_ddev_targp,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp;XFS_AGB_TO_DADDR(mp, agno, XFS_SB_BLOCK(mp)),
&lt;br&gt;diff --git a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c
&lt;br&gt;index 884ee13..52c9d00 100644
&lt;br&gt;--- a/fs/xfs/xfs_ialloc.c
&lt;br&gt;+++ b/fs/xfs/xfs_ialloc.c
&lt;br&gt;@@ -383,11 +383,9 @@ xfs_ialloc_ag_alloc(
&lt;br&gt;&amp;nbsp;	newino = XFS_OFFBNO_TO_AGINO(args.mp, args.agbno, 0);
&lt;br&gt;&amp;nbsp;	be32_add_cpu(&amp;agi-&amp;gt;agi_count, newlen);
&lt;br&gt;&amp;nbsp;	be32_add_cpu(&amp;agi-&amp;gt;agi_freecount, newlen);
&lt;br&gt;-	down_read(&amp;args.mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	pag = xfs_perag_get(args.mp, agno);
&lt;br&gt;&amp;nbsp;	pag-&amp;gt;pagi_freecount += newlen;
&lt;br&gt;&amp;nbsp;	xfs_perag_put(pag);
&lt;br&gt;-	up_read(&amp;args.mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	agi-&amp;gt;agi_newino = cpu_to_be32(newino);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/*
&lt;br&gt;@@ -489,7 +487,6 @@ xfs_ialloc_ag_select(
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;&amp;nbsp;	agno = pagno;
&lt;br&gt;&amp;nbsp;	flags = XFS_ALLOC_FLAG_TRYLOCK;
&lt;br&gt;-	down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	for (;;) {
&lt;br&gt;&amp;nbsp;		pag = xfs_perag_get(mp, agno);
&lt;br&gt;&amp;nbsp;		if (!pag-&amp;gt;pagi_init) {
&lt;br&gt;@@ -531,7 +528,6 @@ xfs_ialloc_ag_select(
&lt;br&gt;&amp;nbsp;					goto nextag;
&lt;br&gt;&amp;nbsp;				}
&lt;br&gt;&amp;nbsp;				xfs_perag_put(pag);
&lt;br&gt;-				up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;				return agbp;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;@@ -544,18 +540,14 @@ nextag:
&lt;br&gt;&amp;nbsp;		 * No point in iterating over the rest, if we're shutting
&lt;br&gt;&amp;nbsp;		 * down.
&lt;br&gt;&amp;nbsp;		 */
&lt;br&gt;-		if (XFS_FORCED_SHUTDOWN(mp)) {
&lt;br&gt;-			up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;+		if (XFS_FORCED_SHUTDOWN(mp))
&lt;br&gt;&amp;nbsp;			return NULL;
&lt;br&gt;-		}
&lt;br&gt;&amp;nbsp;		agno++;
&lt;br&gt;&amp;nbsp;		if (agno &amp;gt;= agcount)
&lt;br&gt;&amp;nbsp;			agno = 0;
&lt;br&gt;&amp;nbsp;		if (agno == pagno) {
&lt;br&gt;-			if (flags == 0) {
&lt;br&gt;-				up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;+			if (flags == 0)
&lt;br&gt;&amp;nbsp;				return NULL;
&lt;br&gt;-			}
&lt;br&gt;&amp;nbsp;			flags = 0;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -777,16 +769,13 @@ nextag:
&lt;br&gt;&amp;nbsp;			*inop = NULLFSINO;
&lt;br&gt;&amp;nbsp;			return noroom ? ENOSPC : 0;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;-		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		pag = xfs_perag_get(mp, tagno);
&lt;br&gt;&amp;nbsp;		if (pag-&amp;gt;pagi_inodeok == 0) {
&lt;br&gt;&amp;nbsp;			xfs_perag_put(pag);
&lt;br&gt;-			up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;			goto nextag;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		error = xfs_ialloc_read_agi(mp, tp, tagno, &amp;agbp);
&lt;br&gt;&amp;nbsp;		xfs_perag_put(pag);
&lt;br&gt;-		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		if (error)
&lt;br&gt;&amp;nbsp;			goto nextag;
&lt;br&gt;&amp;nbsp;		agi = XFS_BUF_TO_AGI(agbp);
&lt;br&gt;@@ -1015,9 +1004,7 @@ alloc_inode:
&lt;br&gt;&amp;nbsp;		goto error0;
&lt;br&gt;&amp;nbsp;	be32_add_cpu(&amp;agi-&amp;gt;agi_freecount, -1);
&lt;br&gt;&amp;nbsp;	xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT);
&lt;br&gt;-	down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	pag-&amp;gt;pagi_freecount--;
&lt;br&gt;-	up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	error = xfs_check_agi_freecount(cur, agi);
&lt;br&gt;&amp;nbsp;	if (error)
&lt;br&gt;@@ -1100,9 +1087,7 @@ xfs_difree(
&lt;br&gt;&amp;nbsp;	/*
&lt;br&gt;&amp;nbsp;	 * Get the allocation group header.
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;-	down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	error = xfs_ialloc_read_agi(mp, tp, agno, &amp;agbp);
&lt;br&gt;-	up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	if (error) {
&lt;br&gt;&amp;nbsp;		cmn_err(CE_WARN,
&lt;br&gt;&amp;nbsp;			&amp;quot;xfs_difree: xfs_ialloc_read_agi() returned an error %d on %s. &amp;nbsp;Returning error.&amp;quot;,
&lt;br&gt;@@ -1169,11 +1154,9 @@ xfs_difree(
&lt;br&gt;&amp;nbsp;		be32_add_cpu(&amp;agi-&amp;gt;agi_count, -ilen);
&lt;br&gt;&amp;nbsp;		be32_add_cpu(&amp;agi-&amp;gt;agi_freecount, -(ilen - 1));
&lt;br&gt;&amp;nbsp;		xfs_ialloc_log_agi(tp, agbp, XFS_AGI_COUNT | XFS_AGI_FREECOUNT);
&lt;br&gt;-		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		pag = xfs_perag_get(mp, agno);
&lt;br&gt;&amp;nbsp;		pag-&amp;gt;pagi_freecount -= ilen - 1;
&lt;br&gt;&amp;nbsp;		xfs_perag_put(pag);
&lt;br&gt;-		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		xfs_trans_mod_sb(tp, XFS_TRANS_SB_ICOUNT, -ilen);
&lt;br&gt;&amp;nbsp;		xfs_trans_mod_sb(tp, XFS_TRANS_SB_IFREE, -(ilen - 1));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1202,11 +1185,9 @@ xfs_difree(
&lt;br&gt;&amp;nbsp;		 */
&lt;br&gt;&amp;nbsp;		be32_add_cpu(&amp;agi-&amp;gt;agi_freecount, 1);
&lt;br&gt;&amp;nbsp;		xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT);
&lt;br&gt;-		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		pag = xfs_perag_get(mp, agno);
&lt;br&gt;&amp;nbsp;		pag-&amp;gt;pagi_freecount++;
&lt;br&gt;&amp;nbsp;		xfs_perag_put(pag);
&lt;br&gt;-		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		xfs_trans_mod_sb(tp, XFS_TRANS_SB_IFREE, 1);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1328,9 +1309,7 @@ xfs_imap(
&lt;br&gt;&amp;nbsp;		xfs_buf_t	*agbp;	/* agi buffer */
&lt;br&gt;&amp;nbsp;		int		i;	/* temp state */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		error = xfs_ialloc_read_agi(mp, tp, agno, &amp;agbp);
&lt;br&gt;-		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		if (error) {
&lt;br&gt;&amp;nbsp;			xfs_fs_cmn_err(CE_ALERT, mp, &amp;quot;xfs_imap: &amp;quot;
&lt;br&gt;&amp;nbsp;					&amp;quot;xfs_ialloc_read_agi() returned &amp;quot;
&lt;br&gt;diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c
&lt;br&gt;index 62efab2..940307a 100644
&lt;br&gt;--- a/fs/xfs/xfs_itable.c
&lt;br&gt;+++ b/fs/xfs/xfs_itable.c
&lt;br&gt;@@ -420,9 +420,7 @@ xfs_bulkstat(
&lt;br&gt;&amp;nbsp;	while (XFS_BULKSTAT_UBLEFT(ubleft) &amp;&amp; agno &amp;lt; mp-&amp;gt;m_sb.sb_agcount) {
&lt;br&gt;&amp;nbsp;		cond_resched();
&lt;br&gt;&amp;nbsp;		bp = NULL;
&lt;br&gt;-		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		error = xfs_ialloc_read_agi(mp, NULL, agno, &amp;agbp);
&lt;br&gt;-		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		if (error) {
&lt;br&gt;&amp;nbsp;			/*
&lt;br&gt;&amp;nbsp;			 * Skip this allocation group and go to the next one.
&lt;br&gt;@@ -849,9 +847,7 @@ xfs_inumbers(
&lt;br&gt;&amp;nbsp;	agbp = NULL;
&lt;br&gt;&amp;nbsp;	while (left &amp;gt; 0 &amp;&amp; agno &amp;lt; mp-&amp;gt;m_sb.sb_agcount) {
&lt;br&gt;&amp;nbsp;		if (agbp == NULL) {
&lt;br&gt;-			down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;			error = xfs_ialloc_read_agi(mp, NULL, agno, &amp;agbp);
&lt;br&gt;-			up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;			if (error) {
&lt;br&gt;&amp;nbsp;				/*
&lt;br&gt;&amp;nbsp;				 * If we can't read the AGI of this ag,
&lt;br&gt;diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
&lt;br&gt;index 4739c2c..73d61d4 100644
&lt;br&gt;--- a/fs/xfs/xfs_mount.c
&lt;br&gt;+++ b/fs/xfs/xfs_mount.c
&lt;br&gt;@@ -209,13 +209,16 @@ STATIC void
&lt;br&gt;&amp;nbsp;xfs_free_perag(
&lt;br&gt;&amp;nbsp;	xfs_mount_t	*mp)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	if (mp-&amp;gt;m_perag) {
&lt;br&gt;-		int	agno;
&lt;br&gt;+	xfs_agnumber_t	agno;
&lt;br&gt;+	struct xfs_perag *pag;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		for (agno = 0; agno &amp;lt; mp-&amp;gt;m_maxagi; agno++)
&lt;br&gt;-			if (mp-&amp;gt;m_perag[agno].pagb_list)
&lt;br&gt;-				kmem_free(mp-&amp;gt;m_perag[agno].pagb_list);
&lt;br&gt;-		kmem_free(mp-&amp;gt;m_perag);
&lt;br&gt;+	for (agno = 0; agno &amp;lt; mp-&amp;gt;m_sb.sb_agcount; agno++) {
&lt;br&gt;+		spin_lock(&amp;mp-&amp;gt;m_perag_lock);
&lt;br&gt;+		pag = radix_tree_delete(&amp;mp-&amp;gt;m_perag_tree, agno);
&lt;br&gt;+		spin_unlock(&amp;mp-&amp;gt;m_perag_lock);
&lt;br&gt;+		ASSERT(pag);
&lt;br&gt;+		kmem_free(pag-&amp;gt;pagb_list);
&lt;br&gt;+		kmem_free(pag);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -389,10 +392,11 @@ xfs_initialize_perag_icache(
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-xfs_agnumber_t
&lt;br&gt;+int
&lt;br&gt;&amp;nbsp;xfs_initialize_perag(
&lt;br&gt;&amp;nbsp;	xfs_mount_t	*mp,
&lt;br&gt;-	xfs_agnumber_t	agcount)
&lt;br&gt;+	xfs_agnumber_t	agcount,
&lt;br&gt;+	xfs_agnumber_t	*maxagi)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	xfs_agnumber_t	index, max_metadata;
&lt;br&gt;&amp;nbsp;	xfs_perag_t	*pag;
&lt;br&gt;@@ -405,6 +409,33 @@ xfs_initialize_perag(
&lt;br&gt;&amp;nbsp;	agino = XFS_OFFBNO_TO_AGINO(mp, sbp-&amp;gt;sb_agblocks - 1, 0);
&lt;br&gt;&amp;nbsp;	ino = XFS_AGINO_TO_INO(mp, agcount - 1, agino);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	/*
&lt;br&gt;+	 * Walk the current per-ag tree so we don't try to initialise AGs
&lt;br&gt;+	 * that already exist (growfs case). Allocate and insert all the
&lt;br&gt;+	 * AGs we don't find ready for initialisation.
&lt;br&gt;+	 */
&lt;br&gt;+	for (index = 0; index &amp;lt; agcount; index++) {
&lt;br&gt;+		pag = xfs_perag_get(mp, index);
&lt;br&gt;+		if (pag) {
&lt;br&gt;+			xfs_perag_put(pag);
&lt;br&gt;+			continue;
&lt;br&gt;+		}
&lt;br&gt;+		pag = kmem_zalloc(sizeof(*pag), KM_MAYFAIL);
&lt;br&gt;+		if (!pag)
&lt;br&gt;+			return -ENOMEM;
&lt;br&gt;+		if (radix_tree_preload(GFP_NOFS))
&lt;br&gt;+			return -ENOMEM;
&lt;br&gt;+		spin_lock(&amp;mp-&amp;gt;m_perag_lock);
&lt;br&gt;+		if (radix_tree_insert(&amp;mp-&amp;gt;m_perag_tree, index, pag)) {
&lt;br&gt;+			BUG();
&lt;br&gt;+			spin_unlock(&amp;mp-&amp;gt;m_perag_lock);
&lt;br&gt;+			kmem_free(pag);
&lt;br&gt;+			return -EEXIST;
&lt;br&gt;+		}
&lt;br&gt;+		spin_unlock(&amp;mp-&amp;gt;m_perag_lock);
&lt;br&gt;+		radix_tree_preload_end();
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	/* Clear the mount flag if no inode can overflow 32 bits
&lt;br&gt;&amp;nbsp;	 * on this filesystem, or if specifically requested..
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;@@ -454,7 +485,9 @@ xfs_initialize_perag(
&lt;br&gt;&amp;nbsp;			xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	return index;
&lt;br&gt;+	if (maxagi)
&lt;br&gt;+		*maxagi = index;
&lt;br&gt;+	return 0;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void
&lt;br&gt;@@ -1155,13 +1188,13 @@ xfs_mountfs(
&lt;br&gt;&amp;nbsp;	/*
&lt;br&gt;&amp;nbsp;	 * Allocate and initialize the per-ag data.
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;-	init_rwsem(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;-	mp-&amp;gt;m_perag = kmem_zalloc(sbp-&amp;gt;sb_agcount * sizeof(xfs_perag_t),
&lt;br&gt;-				 &amp;nbsp;KM_MAYFAIL);
&lt;br&gt;-	if (!mp-&amp;gt;m_perag)
&lt;br&gt;+	spin_lock_init(&amp;mp-&amp;gt;m_perag_lock);
&lt;br&gt;+	INIT_RADIX_TREE(&amp;mp-&amp;gt;m_perag_tree, GFP_NOFS);
&lt;br&gt;+	error = xfs_initialize_perag(mp, sbp-&amp;gt;sb_agcount, &amp;mp-&amp;gt;m_maxagi);
&lt;br&gt;+	if (error) {
&lt;br&gt;+		cmn_err(CE_WARN, &amp;quot;XFS: Failed per-ag init: %d&amp;quot;, error);
&lt;br&gt;&amp;nbsp;		goto out_remove_uuid;
&lt;br&gt;-
&lt;br&gt;-	mp-&amp;gt;m_maxagi = xfs_initialize_perag(mp, sbp-&amp;gt;sb_agcount);
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (!sbp-&amp;gt;sb_logblocks) {
&lt;br&gt;&amp;nbsp;		cmn_err(CE_WARN, &amp;quot;XFS: no log defined&amp;quot;);
&lt;br&gt;diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
&lt;br&gt;index f8a68a2..cfa7a5d 100644
&lt;br&gt;--- a/fs/xfs/xfs_mount.h
&lt;br&gt;+++ b/fs/xfs/xfs_mount.h
&lt;br&gt;@@ -207,8 +207,8 @@ typedef struct xfs_mount {
&lt;br&gt;&amp;nbsp;	uint			m_ag_maxlevels;	/* XFS_AG_MAXLEVELS */
&lt;br&gt;&amp;nbsp;	uint			m_bm_maxlevels[2]; /* XFS_BM_MAXLEVELS */
&lt;br&gt;&amp;nbsp;	uint			m_in_maxlevels;	/* max inobt btree levels. */
&lt;br&gt;-	struct xfs_perag	*m_perag;	/* per-ag accounting info */
&lt;br&gt;-	struct rw_semaphore	m_peraglock;	/* lock for m_perag (pointer) */
&lt;br&gt;+	struct radix_tree_root	m_perag_tree;	/* per-ag accounting info */
&lt;br&gt;+	spinlock_t		m_perag_lock;	/* lock for m_perag_tree */
&lt;br&gt;&amp;nbsp;	struct mutex		m_growlock;	/* growfs mutex */
&lt;br&gt;&amp;nbsp;	int			m_fixedfsid[2];	/* unchanged for life of FS */
&lt;br&gt;&amp;nbsp;	uint			m_dmevmask;	/* DMI events for this FS */
&lt;br&gt;@@ -389,7 +389,12 @@ xfs_daddr_to_agbno(struct xfs_mount *mp, xfs_daddr_t d)
&lt;br&gt;&amp;nbsp;static inline struct xfs_perag *
&lt;br&gt;&amp;nbsp;xfs_perag_get(struct xfs_mount *mp, xfs_agnumber_t agno)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	return &amp;mp-&amp;gt;m_perag[agno];
&lt;br&gt;+	struct xfs_perag	*pag;
&lt;br&gt;+
&lt;br&gt;+	spin_lock(&amp;mp-&amp;gt;m_perag_lock);
&lt;br&gt;+	pag = radix_tree_lookup(&amp;mp-&amp;gt;m_perag_tree, agno);
&lt;br&gt;+	spin_unlock(&amp;mp-&amp;gt;m_perag_lock);
&lt;br&gt;+	return pag;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static inline void
&lt;br&gt;@@ -450,7 +455,8 @@ extern struct xfs_dmops xfs_dmcore_xfs;
&lt;br&gt;&amp;nbsp;#endif	/* __KERNEL__ */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;extern void	xfs_mod_sb(struct xfs_trans *, __int64_t);
&lt;br&gt;-extern xfs_agnumber_t	xfs_initialize_perag(struct xfs_mount *, xfs_agnumber_t);
&lt;br&gt;+extern int	xfs_initialize_perag(struct xfs_mount *, xfs_agnumber_t,
&lt;br&gt;+					xfs_agnumber_t *);
&lt;br&gt;&amp;nbsp;extern void	xfs_sb_from_disk(struct xfs_sb *, struct xfs_dsb *);
&lt;br&gt;&amp;nbsp;extern void	xfs_sb_to_disk(struct xfs_dsb *, struct xfs_sb *, __int64_t);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.6.5
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790063&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-0-6--XFS%3A-Fix-growfs-deadlocks-and-per-AG-use-after-free-V3-tp26790057p26790063.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26790060</id>
	<title>[PATCH 4/6] XFS: convert remaining direct references to m_perag</title>
	<published>2009-12-14T22:11:15Z</published>
	<updated>2009-12-14T22:11:15Z</updated>
	<author>
		<name>Dave Chinner</name>
	</author>
	<content type="html">Convert the remaining direct lookups of the per ag structures
&lt;br&gt;to use get/put accesses. Ensure that the loops across AGs and
&lt;br&gt;prior users of the interface balance gets and puts correctly.
&lt;br&gt;&lt;br&gt;Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790060&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap.c &amp;nbsp; | &amp;nbsp; &amp;nbsp;8 +++++++-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_ialloc.c | &amp;nbsp; 35 +++++++++++++++++++++++++----------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode.c &amp;nbsp;| &amp;nbsp; &amp;nbsp;5 ++++-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_mount.c &amp;nbsp;| &amp;nbsp; &amp;nbsp;9 ++++++---
&lt;br&gt;&amp;nbsp;4 files changed, 42 insertions(+), 15 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c
&lt;br&gt;index 98251cd..a9b95d9 100644
&lt;br&gt;--- a/fs/xfs/xfs_bmap.c
&lt;br&gt;+++ b/fs/xfs/xfs_bmap.c
&lt;br&gt;@@ -2630,11 +2630,12 @@ xfs_bmap_btalloc(
&lt;br&gt;&amp;nbsp;			startag = ag = 0;
&lt;br&gt;&amp;nbsp;		notinit = 0;
&lt;br&gt;&amp;nbsp;		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;+		pag = xfs_perag_get(mp, ag);
&lt;br&gt;&amp;nbsp;		while (blen &amp;lt; ap-&amp;gt;alen) {
&lt;br&gt;-			pag = &amp;mp-&amp;gt;m_perag[ag];
&lt;br&gt;&amp;nbsp;			if (!pag-&amp;gt;pagf_init &amp;&amp;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;(error = xfs_alloc_pagf_init(mp, args.tp,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp;ag, XFS_ALLOC_FLAG_TRYLOCK))) {
&lt;br&gt;+				xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;				up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;				return error;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;@@ -2667,6 +2668,7 @@ xfs_bmap_btalloc(
&lt;br&gt;&amp;nbsp;						break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;					error = xfs_filestream_new_ag(ap, &amp;ag);
&lt;br&gt;+					xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;					if (error) {
&lt;br&gt;&amp;nbsp;						up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;						return error;
&lt;br&gt;@@ -2674,6 +2676,7 @@ xfs_bmap_btalloc(
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;					/* loop again to set 'blen'*/
&lt;br&gt;&amp;nbsp;					startag = NULLAGNUMBER;
&lt;br&gt;+					pag = xfs_perag_get(mp, ag);
&lt;br&gt;&amp;nbsp;					continue;
&lt;br&gt;&amp;nbsp;				}
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;@@ -2681,7 +2684,10 @@ xfs_bmap_btalloc(
&lt;br&gt;&amp;nbsp;				ag = 0;
&lt;br&gt;&amp;nbsp;			if (ag == startag)
&lt;br&gt;&amp;nbsp;				break;
&lt;br&gt;+			xfs_perag_put(pag);
&lt;br&gt;+			pag = xfs_perag_get(mp, ag);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+		xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		/*
&lt;br&gt;&amp;nbsp;		 * Since the above loop did a BUF_TRYLOCK, it is
&lt;br&gt;diff --git a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c
&lt;br&gt;index cb907ba..884ee13 100644
&lt;br&gt;--- a/fs/xfs/xfs_ialloc.c
&lt;br&gt;+++ b/fs/xfs/xfs_ialloc.c
&lt;br&gt;@@ -253,6 +253,7 @@ xfs_ialloc_ag_alloc(
&lt;br&gt;&amp;nbsp;	xfs_agino_t	thisino;	/* current inode number, for loop */
&lt;br&gt;&amp;nbsp;	int		isaligned = 0;	/* inode allocation at stripe unit */
&lt;br&gt;&amp;nbsp;					/* boundary */
&lt;br&gt;+	struct xfs_perag *pag;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	args.tp = tp;
&lt;br&gt;&amp;nbsp;	args.mp = tp-&amp;gt;t_mountp;
&lt;br&gt;@@ -383,7 +384,9 @@ xfs_ialloc_ag_alloc(
&lt;br&gt;&amp;nbsp;	be32_add_cpu(&amp;agi-&amp;gt;agi_count, newlen);
&lt;br&gt;&amp;nbsp;	be32_add_cpu(&amp;agi-&amp;gt;agi_freecount, newlen);
&lt;br&gt;&amp;nbsp;	down_read(&amp;args.mp-&amp;gt;m_peraglock);
&lt;br&gt;-	args.mp-&amp;gt;m_perag[agno].pagi_freecount += newlen;
&lt;br&gt;+	pag = xfs_perag_get(args.mp, agno);
&lt;br&gt;+	pag-&amp;gt;pagi_freecount += newlen;
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;	up_read(&amp;args.mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	agi-&amp;gt;agi_newino = cpu_to_be32(newino);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -488,7 +491,7 @@ xfs_ialloc_ag_select(
&lt;br&gt;&amp;nbsp;	flags = XFS_ALLOC_FLAG_TRYLOCK;
&lt;br&gt;&amp;nbsp;	down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	for (;;) {
&lt;br&gt;-		pag = &amp;mp-&amp;gt;m_perag[agno];
&lt;br&gt;+		pag = xfs_perag_get(mp, agno);
&lt;br&gt;&amp;nbsp;		if (!pag-&amp;gt;pagi_init) {
&lt;br&gt;&amp;nbsp;			if (xfs_ialloc_read_agi(mp, tp, agno, &amp;agbp)) {
&lt;br&gt;&amp;nbsp;				agbp = NULL;
&lt;br&gt;@@ -527,6 +530,7 @@ xfs_ialloc_ag_select(
&lt;br&gt;&amp;nbsp;					agbp = NULL;
&lt;br&gt;&amp;nbsp;					goto nextag;
&lt;br&gt;&amp;nbsp;				}
&lt;br&gt;+				xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;				up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;				return agbp;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;@@ -535,6 +539,7 @@ unlock_nextag:
&lt;br&gt;&amp;nbsp;		if (agbp)
&lt;br&gt;&amp;nbsp;			xfs_trans_brelse(tp, agbp);
&lt;br&gt;&amp;nbsp;nextag:
&lt;br&gt;+		xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;		/*
&lt;br&gt;&amp;nbsp;		 * No point in iterating over the rest, if we're shutting
&lt;br&gt;&amp;nbsp;		 * down.
&lt;br&gt;@@ -672,6 +677,7 @@ xfs_dialloc(
&lt;br&gt;&amp;nbsp;	xfs_agnumber_t	tagno;		/* testing allocation group number */
&lt;br&gt;&amp;nbsp;	xfs_btree_cur_t	*tcur;		/* temp cursor */
&lt;br&gt;&amp;nbsp;	xfs_inobt_rec_incore_t trec;	/* temp inode allocation record */
&lt;br&gt;+	struct xfs_perag *pag;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (*IO_agbp == NULL) {
&lt;br&gt;@@ -772,11 +778,14 @@ nextag:
&lt;br&gt;&amp;nbsp;			return noroom ? ENOSPC : 0;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;-		if (mp-&amp;gt;m_perag[tagno].pagi_inodeok == 0) {
&lt;br&gt;+		pag = xfs_perag_get(mp, tagno);
&lt;br&gt;+		if (pag-&amp;gt;pagi_inodeok == 0) {
&lt;br&gt;+			xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;			up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;			goto nextag;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		error = xfs_ialloc_read_agi(mp, tp, tagno, &amp;agbp);
&lt;br&gt;+		xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		if (error)
&lt;br&gt;&amp;nbsp;			goto nextag;
&lt;br&gt;@@ -790,6 +799,7 @@ nextag:
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;&amp;nbsp;	agno = tagno;
&lt;br&gt;&amp;nbsp;	*IO_agbp = NULL;
&lt;br&gt;+	pag = xfs_perag_get(mp, agno);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; restart_pagno:
&lt;br&gt;&amp;nbsp;	cur = xfs_inobt_init_cursor(mp, tp, agbp, be32_to_cpu(agi-&amp;gt;agi_seqno));
&lt;br&gt;@@ -808,7 +818,6 @@ nextag:
&lt;br&gt;&amp;nbsp;	 * If in the same AG as the parent, try to get near the parent.
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;&amp;nbsp;	if (pagno == agno) {
&lt;br&gt;-		xfs_perag_t	*pag = &amp;mp-&amp;gt;m_perag[agno];
&lt;br&gt;&amp;nbsp;		int		doneleft;	/* done, to the left */
&lt;br&gt;&amp;nbsp;		int		doneright;	/* done, to the right */
&lt;br&gt;&amp;nbsp;		int		searchdistance = 10;
&lt;br&gt;@@ -1007,7 +1016,7 @@ alloc_inode:
&lt;br&gt;&amp;nbsp;	be32_add_cpu(&amp;agi-&amp;gt;agi_freecount, -1);
&lt;br&gt;&amp;nbsp;	xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT);
&lt;br&gt;&amp;nbsp;	down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;-	mp-&amp;gt;m_perag[tagno].pagi_freecount--;
&lt;br&gt;+	pag-&amp;gt;pagi_freecount--;
&lt;br&gt;&amp;nbsp;	up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	error = xfs_check_agi_freecount(cur, agi);
&lt;br&gt;@@ -1016,12 +1025,14 @@ alloc_inode:
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR);
&lt;br&gt;&amp;nbsp;	xfs_trans_mod_sb(tp, XFS_TRANS_SB_IFREE, -1);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;	*inop = ino;
&lt;br&gt;&amp;nbsp;	return 0;
&lt;br&gt;&amp;nbsp;error1:
&lt;br&gt;&amp;nbsp;	xfs_btree_del_cursor(tcur, XFS_BTREE_ERROR);
&lt;br&gt;&amp;nbsp;error0:
&lt;br&gt;&amp;nbsp;	xfs_btree_del_cursor(cur, XFS_BTREE_ERROR);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;	return error;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1052,6 +1063,7 @@ xfs_difree(
&lt;br&gt;&amp;nbsp;	xfs_mount_t	*mp;	/* mount structure for filesystem */
&lt;br&gt;&amp;nbsp;	int		off;	/* offset of inode in inode chunk */
&lt;br&gt;&amp;nbsp;	xfs_inobt_rec_incore_t rec;	/* btree record */
&lt;br&gt;+	struct xfs_perag *pag;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	mp = tp-&amp;gt;t_mountp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1158,7 +1170,9 @@ xfs_difree(
&lt;br&gt;&amp;nbsp;		be32_add_cpu(&amp;agi-&amp;gt;agi_freecount, -(ilen - 1));
&lt;br&gt;&amp;nbsp;		xfs_ialloc_log_agi(tp, agbp, XFS_AGI_COUNT | XFS_AGI_FREECOUNT);
&lt;br&gt;&amp;nbsp;		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;-		mp-&amp;gt;m_perag[agno].pagi_freecount -= ilen - 1;
&lt;br&gt;+		pag = xfs_perag_get(mp, agno);
&lt;br&gt;+		pag-&amp;gt;pagi_freecount -= ilen - 1;
&lt;br&gt;+		xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		xfs_trans_mod_sb(tp, XFS_TRANS_SB_ICOUNT, -ilen);
&lt;br&gt;&amp;nbsp;		xfs_trans_mod_sb(tp, XFS_TRANS_SB_IFREE, -(ilen - 1));
&lt;br&gt;@@ -1189,7 +1203,9 @@ xfs_difree(
&lt;br&gt;&amp;nbsp;		be32_add_cpu(&amp;agi-&amp;gt;agi_freecount, 1);
&lt;br&gt;&amp;nbsp;		xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT);
&lt;br&gt;&amp;nbsp;		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;-		mp-&amp;gt;m_perag[agno].pagi_freecount++;
&lt;br&gt;+		pag = xfs_perag_get(mp, agno);
&lt;br&gt;+		pag-&amp;gt;pagi_freecount++;
&lt;br&gt;+		xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		xfs_trans_mod_sb(tp, XFS_TRANS_SB_IFREE, 1);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -1379,7 +1395,6 @@ xfs_imap(
&lt;br&gt;&amp;nbsp;			XFS_FSB_TO_BB(mp, mp-&amp;gt;m_sb.sb_dblocks));
&lt;br&gt;&amp;nbsp;		return XFS_ERROR(EINVAL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	return 0;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1523,8 +1538,7 @@ xfs_ialloc_read_agi(
&lt;br&gt;&amp;nbsp;		return error;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	agi = XFS_BUF_TO_AGI(*bpp);
&lt;br&gt;-	pag = &amp;mp-&amp;gt;m_perag[agno];
&lt;br&gt;-
&lt;br&gt;+	pag = xfs_perag_get(mp, agno);
&lt;br&gt;&amp;nbsp;	if (!pag-&amp;gt;pagi_init) {
&lt;br&gt;&amp;nbsp;		pag-&amp;gt;pagi_freecount = be32_to_cpu(agi-&amp;gt;agi_freecount);
&lt;br&gt;&amp;nbsp;		pag-&amp;gt;pagi_count = be32_to_cpu(agi-&amp;gt;agi_count);
&lt;br&gt;@@ -1537,6 +1551,7 @@ xfs_ialloc_read_agi(
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;&amp;nbsp;	ASSERT(pag-&amp;gt;pagi_freecount == be32_to_cpu(agi-&amp;gt;agi_freecount) ||
&lt;br&gt;&amp;nbsp;		XFS_FORCED_SHUTDOWN(mp));
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;	return 0;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
&lt;br&gt;index 1f69dda..c2618db 100644
&lt;br&gt;--- a/fs/xfs/xfs_inode.c
&lt;br&gt;+++ b/fs/xfs/xfs_inode.c
&lt;br&gt;@@ -2695,7 +2695,7 @@ xfs_iflush_cluster(
&lt;br&gt;&amp;nbsp;	ilist_size = inodes_per_cluster * sizeof(xfs_inode_t *);
&lt;br&gt;&amp;nbsp;	ilist = kmem_alloc(ilist_size, KM_MAYFAIL|KM_NOFS);
&lt;br&gt;&amp;nbsp;	if (!ilist)
&lt;br&gt;-		return 0;
&lt;br&gt;+		goto out_put;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	mask = ~(((XFS_INODE_CLUSTER_SIZE(mp) &amp;gt;&amp;gt; mp-&amp;gt;m_sb.sb_inodelog)) - 1);
&lt;br&gt;&amp;nbsp;	first_index = XFS_INO_TO_AGINO(mp, ip-&amp;gt;i_ino) &amp; mask;
&lt;br&gt;@@ -2764,6 +2764,8 @@ xfs_iflush_cluster(
&lt;br&gt;&amp;nbsp;out_free:
&lt;br&gt;&amp;nbsp;	read_unlock(&amp;pag-&amp;gt;pag_ici_lock);
&lt;br&gt;&amp;nbsp;	kmem_free(ilist);
&lt;br&gt;+out_put:
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;	return 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2807,6 +2809,7 @@ cluster_corrupt_out:
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;&amp;nbsp;	xfs_iflush_abort(iq);
&lt;br&gt;&amp;nbsp;	kmem_free(ilist);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;	return XFS_ERROR(EFSCORRUPTED);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
&lt;br&gt;index d652d59..4739c2c 100644
&lt;br&gt;--- a/fs/xfs/xfs_mount.c
&lt;br&gt;+++ b/fs/xfs/xfs_mount.c
&lt;br&gt;@@ -438,18 +438,20 @@ xfs_initialize_perag(
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			/* This ag is preferred for inodes */
&lt;br&gt;-			pag = &amp;mp-&amp;gt;m_perag[index];
&lt;br&gt;+			pag = xfs_perag_get(mp, index);
&lt;br&gt;&amp;nbsp;			pag-&amp;gt;pagi_inodeok = 1;
&lt;br&gt;&amp;nbsp;			if (index &amp;lt; max_metadata)
&lt;br&gt;&amp;nbsp;				pag-&amp;gt;pagf_metadata = 1;
&lt;br&gt;&amp;nbsp;			xfs_initialize_perag_icache(pag);
&lt;br&gt;+			xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;&amp;nbsp;		/* Setup default behavior for smaller filesystems */
&lt;br&gt;&amp;nbsp;		for (index = 0; index &amp;lt; agcount; index++) {
&lt;br&gt;-			pag = &amp;mp-&amp;gt;m_perag[index];
&lt;br&gt;+			pag = xfs_perag_get(mp, index);
&lt;br&gt;&amp;nbsp;			pag-&amp;gt;pagi_inodeok = 1;
&lt;br&gt;&amp;nbsp;			xfs_initialize_perag_icache(pag);
&lt;br&gt;+			xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	return index;
&lt;br&gt;@@ -731,12 +733,13 @@ xfs_initialize_perag_data(xfs_mount_t *mp, xfs_agnumber_t agcount)
&lt;br&gt;&amp;nbsp;		error = xfs_ialloc_pagi_init(mp, NULL, index);
&lt;br&gt;&amp;nbsp;		if (error)
&lt;br&gt;&amp;nbsp;			return error;
&lt;br&gt;-		pag = &amp;mp-&amp;gt;m_perag[index];
&lt;br&gt;+		pag = xfs_perag_get(mp, index);
&lt;br&gt;&amp;nbsp;		ifree += pag-&amp;gt;pagi_freecount;
&lt;br&gt;&amp;nbsp;		ialloc += pag-&amp;gt;pagi_count;
&lt;br&gt;&amp;nbsp;		bfree += pag-&amp;gt;pagf_freeblks;
&lt;br&gt;&amp;nbsp;		bfreelst += pag-&amp;gt;pagf_flcount;
&lt;br&gt;&amp;nbsp;		btree += pag-&amp;gt;pagf_btreeblks;
&lt;br&gt;+		xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	/*
&lt;br&gt;&amp;nbsp;	 * Overwrite incore superblock counters with just-read data
&lt;br&gt;-- 
&lt;br&gt;1.6.5
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790060&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-0-6--XFS%3A-Fix-growfs-deadlocks-and-per-AG-use-after-free-V3-tp26790057p26790060.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26790058</id>
	<title>[PATCH 3/6] XFS: Convert filestreams code to use per-ag get/put routines</title>
	<published>2009-12-14T22:11:14Z</published>
	<updated>2009-12-14T22:11:14Z</updated>
	<author>
		<name>Dave Chinner</name>
	</author>
	<content type="html">Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790058&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_filestream.c | &amp;nbsp; 19 ++++++++++++-------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_filestream.h | &amp;nbsp; 27 ++++++++++++++++++++++++---
&lt;br&gt;&amp;nbsp;2 files changed, 36 insertions(+), 10 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c
&lt;br&gt;index a631e14..e61f2aa 100644
&lt;br&gt;--- a/fs/xfs/xfs_filestream.c
&lt;br&gt;+++ b/fs/xfs/xfs_filestream.c
&lt;br&gt;@@ -140,6 +140,7 @@ _xfs_filestream_pick_ag(
&lt;br&gt;&amp;nbsp;	int		flags,
&lt;br&gt;&amp;nbsp;	xfs_extlen_t	minlen)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;+	int		streams, max_streams;
&lt;br&gt;&amp;nbsp;	int		err, trylock, nscan;
&lt;br&gt;&amp;nbsp;	xfs_extlen_t	longest, free, minfree, maxfree = 0;
&lt;br&gt;&amp;nbsp;	xfs_agnumber_t	ag, max_ag = NULLAGNUMBER;
&lt;br&gt;@@ -155,15 +156,15 @@ _xfs_filestream_pick_ag(
&lt;br&gt;&amp;nbsp;	trylock = XFS_ALLOC_FLAG_TRYLOCK;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	for (nscan = 0; 1; nscan++) {
&lt;br&gt;-
&lt;br&gt;-		TRACE_AG_SCAN(mp, ag, xfs_filestream_peek_ag(mp, ag));
&lt;br&gt;-
&lt;br&gt;-		pag = mp-&amp;gt;m_perag + ag;
&lt;br&gt;+		pag = xfs_perag_get(mp, ag);
&lt;br&gt;+		TRACE_AG_SCAN(mp, ag, atomic_read(&amp;pag-&amp;gt;pagf_fstrms));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		if (!pag-&amp;gt;pagf_init) {
&lt;br&gt;&amp;nbsp;			err = xfs_alloc_pagf_init(mp, NULL, ag, trylock);
&lt;br&gt;-			if (err &amp;&amp; !trylock)
&lt;br&gt;+			if (err &amp;&amp; !trylock) {
&lt;br&gt;+				xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;				return err;
&lt;br&gt;+			}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		/* Might fail sometimes during the 1st pass with trylock set. */
&lt;br&gt;@@ -173,6 +174,7 @@ _xfs_filestream_pick_ag(
&lt;br&gt;&amp;nbsp;		/* Keep track of the AG with the most free blocks. */
&lt;br&gt;&amp;nbsp;		if (pag-&amp;gt;pagf_freeblks &amp;gt; maxfree) {
&lt;br&gt;&amp;nbsp;			maxfree = pag-&amp;gt;pagf_freeblks;
&lt;br&gt;+			max_streams = atomic_read(&amp;pag-&amp;gt;pagf_fstrms);
&lt;br&gt;&amp;nbsp;			max_ag = ag;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -195,6 +197,8 @@ _xfs_filestream_pick_ag(
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			/* Break out, retaining the reference on the AG. */
&lt;br&gt;&amp;nbsp;			free = pag-&amp;gt;pagf_freeblks;
&lt;br&gt;+			streams = atomic_read(&amp;pag-&amp;gt;pagf_fstrms);
&lt;br&gt;+			xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;			*agp = ag;
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;@@ -202,6 +206,7 @@ _xfs_filestream_pick_ag(
&lt;br&gt;&amp;nbsp;		/* Drop the reference on this AG, it's not usable. */
&lt;br&gt;&amp;nbsp;		xfs_filestream_put_ag(mp, ag);
&lt;br&gt;&amp;nbsp;next_ag:
&lt;br&gt;+		xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;		/* Move to the next AG, wrapping to AG 0 if necessary. */
&lt;br&gt;&amp;nbsp;		if (++ag &amp;gt;= mp-&amp;gt;m_sb.sb_agcount)
&lt;br&gt;&amp;nbsp;			ag = 0;
&lt;br&gt;@@ -229,6 +234,7 @@ next_ag:
&lt;br&gt;&amp;nbsp;		if (max_ag != NULLAGNUMBER) {
&lt;br&gt;&amp;nbsp;			xfs_filestream_get_ag(mp, max_ag);
&lt;br&gt;&amp;nbsp;			TRACE_AG_PICK1(mp, max_ag, maxfree);
&lt;br&gt;+			streams = max_streams;
&lt;br&gt;&amp;nbsp;			free = maxfree;
&lt;br&gt;&amp;nbsp;			*agp = max_ag;
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;@@ -240,8 +246,7 @@ next_ag:
&lt;br&gt;&amp;nbsp;		return 0;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	TRACE_AG_PICK2(mp, startag, *agp, xfs_filestream_peek_ag(mp, *agp),
&lt;br&gt;-			free, nscan, flags);
&lt;br&gt;+	TRACE_AG_PICK2(mp, startag, *agp, streams, free, nscan, flags);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	return 0;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;diff --git a/fs/xfs/xfs_filestream.h b/fs/xfs/xfs_filestream.h
&lt;br&gt;index 4aba67c..58378b2 100644
&lt;br&gt;--- a/fs/xfs/xfs_filestream.h
&lt;br&gt;+++ b/fs/xfs/xfs_filestream.h
&lt;br&gt;@@ -79,12 +79,21 @@ extern ktrace_t *xfs_filestreams_trace_buf;
&lt;br&gt;&amp;nbsp; * the cache that reference per-ag array elements that have since been
&lt;br&gt;&amp;nbsp; * reallocated.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;+/*
&lt;br&gt;+ * xfs_filestream_peek_ag is only used in tracing code
&lt;br&gt;+ */
&lt;br&gt;&amp;nbsp;static inline int
&lt;br&gt;&amp;nbsp;xfs_filestream_peek_ag(
&lt;br&gt;&amp;nbsp;	xfs_mount_t	*mp,
&lt;br&gt;&amp;nbsp;	xfs_agnumber_t	agno)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	return atomic_read(&amp;mp-&amp;gt;m_perag[agno].pagf_fstrms);
&lt;br&gt;+	struct xfs_perag *pag;
&lt;br&gt;+	int		ret;
&lt;br&gt;+
&lt;br&gt;+	pag = xfs_perag_get(mp, agno);
&lt;br&gt;+	ret = atomic_read(&amp;pag-&amp;gt;pagf_fstrms);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;+	return ret;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static inline int
&lt;br&gt;@@ -92,7 +101,13 @@ xfs_filestream_get_ag(
&lt;br&gt;&amp;nbsp;	xfs_mount_t	*mp,
&lt;br&gt;&amp;nbsp;	xfs_agnumber_t	agno)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	return atomic_inc_return(&amp;mp-&amp;gt;m_perag[agno].pagf_fstrms);
&lt;br&gt;+	struct xfs_perag *pag;
&lt;br&gt;+	int		ret;
&lt;br&gt;+
&lt;br&gt;+	pag = xfs_perag_get(mp, agno);
&lt;br&gt;+	ret = atomic_inc_return(&amp;pag-&amp;gt;pagf_fstrms);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;+	return ret;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static inline int
&lt;br&gt;@@ -100,7 +115,13 @@ xfs_filestream_put_ag(
&lt;br&gt;&amp;nbsp;	xfs_mount_t	*mp,
&lt;br&gt;&amp;nbsp;	xfs_agnumber_t	agno)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	return atomic_dec_return(&amp;mp-&amp;gt;m_perag[agno].pagf_fstrms);
&lt;br&gt;+	struct xfs_perag *pag;
&lt;br&gt;+	int		ret;
&lt;br&gt;+
&lt;br&gt;+	pag = xfs_perag_get(mp, agno);
&lt;br&gt;+	ret = atomic_dec_return(&amp;pag-&amp;gt;pagf_fstrms);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;+	return ret;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* allocation selection flags */
&lt;br&gt;-- 
&lt;br&gt;1.6.5
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790058&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-0-6--XFS%3A-Fix-growfs-deadlocks-and-per-AG-use-after-free-V3-tp26790057p26790058.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26790062</id>
	<title>[PATCH 2/6] XFS: Don't directly reference m_perag in allocation code</title>
	<published>2009-12-14T22:11:13Z</published>
	<updated>2009-12-14T22:11:13Z</updated>
	<author>
		<name>Dave Chinner</name>
	</author>
	<content type="html">Start abstracting the perag references so that the indexing of the
&lt;br&gt;structures is not directly coded into all the places that uses the
&lt;br&gt;perag structures. This will allow us to separate the use of the
&lt;br&gt;perag structure and the way it is indexed and hence avoid the known
&lt;br&gt;deadlocks related to growing a busy filesystem.
&lt;br&gt;&lt;br&gt;Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790062&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_alloc.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 81 +++++++++++++++++++++++++--------------------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_alloc_btree.c | &amp;nbsp; &amp;nbsp;9 ++++-
&lt;br&gt;&amp;nbsp;2 files changed, 52 insertions(+), 38 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c
&lt;br&gt;index a1c65fc..3cb533c 100644
&lt;br&gt;--- a/fs/xfs/xfs_alloc.c
&lt;br&gt;+++ b/fs/xfs/xfs_alloc.c
&lt;br&gt;@@ -1662,11 +1662,13 @@ xfs_free_ag_extent(
&lt;br&gt;&amp;nbsp;		xfs_agf_t	*agf;
&lt;br&gt;&amp;nbsp;		xfs_perag_t	*pag;		/* per allocation group data */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+		pag = xfs_perag_get(mp, agno);
&lt;br&gt;+		pag-&amp;gt;pagf_freeblks += len;
&lt;br&gt;+		xfs_perag_put(pag);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		agf = XFS_BUF_TO_AGF(agbp);
&lt;br&gt;-		pag = &amp;mp-&amp;gt;m_perag[agno];
&lt;br&gt;&amp;nbsp;		be32_add_cpu(&amp;agf-&amp;gt;agf_freeblks, len);
&lt;br&gt;&amp;nbsp;		xfs_trans_agblocks_delta(tp, len);
&lt;br&gt;-		pag-&amp;gt;pagf_freeblks += len;
&lt;br&gt;&amp;nbsp;		XFS_WANT_CORRUPTED_GOTO(
&lt;br&gt;&amp;nbsp;			be32_to_cpu(agf-&amp;gt;agf_freeblks) &amp;lt;=
&lt;br&gt;&amp;nbsp;			be32_to_cpu(agf-&amp;gt;agf_length),
&lt;br&gt;@@ -1969,7 +1971,8 @@ xfs_alloc_get_freelist(
&lt;br&gt;&amp;nbsp;	xfs_trans_brelse(tp, agflbp);
&lt;br&gt;&amp;nbsp;	if (be32_to_cpu(agf-&amp;gt;agf_flfirst) == XFS_AGFL_SIZE(mp))
&lt;br&gt;&amp;nbsp;		agf-&amp;gt;agf_flfirst = 0;
&lt;br&gt;-	pag = &amp;mp-&amp;gt;m_perag[be32_to_cpu(agf-&amp;gt;agf_seqno)];
&lt;br&gt;+
&lt;br&gt;+	pag = xfs_perag_get(mp, be32_to_cpu(agf-&amp;gt;agf_seqno));
&lt;br&gt;&amp;nbsp;	be32_add_cpu(&amp;agf-&amp;gt;agf_flcount, -1);
&lt;br&gt;&amp;nbsp;	xfs_trans_agflist_delta(tp, -1);
&lt;br&gt;&amp;nbsp;	pag-&amp;gt;pagf_flcount--;
&lt;br&gt;@@ -2078,7 +2081,8 @@ xfs_alloc_put_freelist(
&lt;br&gt;&amp;nbsp;	be32_add_cpu(&amp;agf-&amp;gt;agf_fllast, 1);
&lt;br&gt;&amp;nbsp;	if (be32_to_cpu(agf-&amp;gt;agf_fllast) == XFS_AGFL_SIZE(mp))
&lt;br&gt;&amp;nbsp;		agf-&amp;gt;agf_fllast = 0;
&lt;br&gt;-	pag = &amp;mp-&amp;gt;m_perag[be32_to_cpu(agf-&amp;gt;agf_seqno)];
&lt;br&gt;+
&lt;br&gt;+	pag = xfs_perag_get(mp, be32_to_cpu(agf-&amp;gt;agf_seqno));
&lt;br&gt;&amp;nbsp;	be32_add_cpu(&amp;agf-&amp;gt;agf_flcount, 1);
&lt;br&gt;&amp;nbsp;	xfs_trans_agflist_delta(tp, 1);
&lt;br&gt;&amp;nbsp;	pag-&amp;gt;pagf_flcount++;
&lt;br&gt;@@ -2089,6 +2093,7 @@ xfs_alloc_put_freelist(
&lt;br&gt;&amp;nbsp;		pag-&amp;gt;pagf_btreeblks--;
&lt;br&gt;&amp;nbsp;		logflags |= XFS_AGF_BTREEBLKS;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	xfs_alloc_log_agf(tp, agbp, logflags);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2152,7 +2157,6 @@ xfs_read_agf(
&lt;br&gt;&amp;nbsp;		xfs_trans_brelse(tp, *bpp);
&lt;br&gt;&amp;nbsp;		return XFS_ERROR(EFSCORRUPTED);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	XFS_BUF_SET_VTYPE_REF(*bpp, B_FS_AGF, XFS_AGF_REF);
&lt;br&gt;&amp;nbsp;	return 0;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -2184,7 +2188,7 @@ xfs_alloc_read_agf(
&lt;br&gt;&amp;nbsp;	ASSERT(!XFS_BUF_GETERROR(*bpp));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	agf = XFS_BUF_TO_AGF(*bpp);
&lt;br&gt;-	pag = &amp;mp-&amp;gt;m_perag[agno];
&lt;br&gt;+	pag = xfs_perag_get(mp, agno);
&lt;br&gt;&amp;nbsp;	if (!pag-&amp;gt;pagf_init) {
&lt;br&gt;&amp;nbsp;		pag-&amp;gt;pagf_freeblks = be32_to_cpu(agf-&amp;gt;agf_freeblks);
&lt;br&gt;&amp;nbsp;		pag-&amp;gt;pagf_btreeblks = be32_to_cpu(agf-&amp;gt;agf_btreeblks);
&lt;br&gt;@@ -2211,6 +2215,7 @@ xfs_alloc_read_agf(
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; &amp;nbsp; be32_to_cpu(agf-&amp;gt;agf_levels[XFS_BTNUM_CNTi]));
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;	return 0;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2271,7 +2276,7 @@ xfs_alloc_vextent(
&lt;br&gt;&amp;nbsp;		 */
&lt;br&gt;&amp;nbsp;		args-&amp;gt;agno = XFS_FSB_TO_AGNO(mp, args-&amp;gt;fsbno);
&lt;br&gt;&amp;nbsp;		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;-		args-&amp;gt;pag = &amp;mp-&amp;gt;m_perag[args-&amp;gt;agno];
&lt;br&gt;+		args-&amp;gt;pag = xfs_perag_get(mp, args-&amp;gt;agno);
&lt;br&gt;&amp;nbsp;		args-&amp;gt;minleft = 0;
&lt;br&gt;&amp;nbsp;		error = xfs_alloc_fix_freelist(args, 0);
&lt;br&gt;&amp;nbsp;		args-&amp;gt;minleft = minleft;
&lt;br&gt;@@ -2341,7 +2346,7 @@ xfs_alloc_vextent(
&lt;br&gt;&amp;nbsp;		 */
&lt;br&gt;&amp;nbsp;		down_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		for (;;) {
&lt;br&gt;-			args-&amp;gt;pag = &amp;mp-&amp;gt;m_perag[args-&amp;gt;agno];
&lt;br&gt;+			args-&amp;gt;pag = xfs_perag_get(mp, args-&amp;gt;agno);
&lt;br&gt;&amp;nbsp;			if (no_min) args-&amp;gt;minleft = 0;
&lt;br&gt;&amp;nbsp;			error = xfs_alloc_fix_freelist(args, flags);
&lt;br&gt;&amp;nbsp;			args-&amp;gt;minleft = minleft;
&lt;br&gt;@@ -2400,6 +2405,7 @@ xfs_alloc_vextent(
&lt;br&gt;&amp;nbsp;					}
&lt;br&gt;&amp;nbsp;				}
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;+			xfs_perag_put(args-&amp;gt;pag);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;		if (bump_rotor || (type == XFS_ALLOCTYPE_ANY_AG)) {
&lt;br&gt;@@ -2427,8 +2433,10 @@ xfs_alloc_vextent(
&lt;br&gt;&amp;nbsp;			args-&amp;gt;len);
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+	xfs_perag_put(args-&amp;gt;pag);
&lt;br&gt;&amp;nbsp;	return 0;
&lt;br&gt;&amp;nbsp;error0:
&lt;br&gt;+	xfs_perag_put(args-&amp;gt;pag);
&lt;br&gt;&amp;nbsp;	up_read(&amp;mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	return error;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -2455,7 +2463,7 @@ xfs_free_extent(
&lt;br&gt;&amp;nbsp;	ASSERT(args.agno &amp;lt; args.mp-&amp;gt;m_sb.sb_agcount);
&lt;br&gt;&amp;nbsp;	args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno);
&lt;br&gt;&amp;nbsp;	down_read(&amp;args.mp-&amp;gt;m_peraglock);
&lt;br&gt;-	args.pag = &amp;args.mp-&amp;gt;m_perag[args.agno];
&lt;br&gt;+	args.pag = xfs_perag_get(args.mp, args.agno);
&lt;br&gt;&amp;nbsp;	if ((error = xfs_alloc_fix_freelist(&amp;args, XFS_ALLOC_FLAG_FREEING)))
&lt;br&gt;&amp;nbsp;		goto error0;
&lt;br&gt;&amp;nbsp;#ifdef DEBUG
&lt;br&gt;@@ -2465,6 +2473,7 @@ xfs_free_extent(
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;&amp;nbsp;	error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, len, 0);
&lt;br&gt;&amp;nbsp;error0:
&lt;br&gt;+	xfs_perag_put(args.pag);
&lt;br&gt;&amp;nbsp;	up_read(&amp;args.mp-&amp;gt;m_peraglock);
&lt;br&gt;&amp;nbsp;	return error;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -2486,15 +2495,15 @@ xfs_alloc_mark_busy(xfs_trans_t *tp,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp;xfs_agblock_t bno,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp;xfs_extlen_t len)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	xfs_mount_t		*mp;
&lt;br&gt;&amp;nbsp;	xfs_perag_busy_t	*bsy;
&lt;br&gt;+	struct xfs_perag	*pag;
&lt;br&gt;&amp;nbsp;	int			n;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	mp = tp-&amp;gt;t_mountp;
&lt;br&gt;-	spin_lock(&amp;mp-&amp;gt;m_perag[agno].pagb_lock);
&lt;br&gt;+	pag = xfs_perag_get(tp-&amp;gt;t_mountp, agno);
&lt;br&gt;+	spin_lock(&amp;pag-&amp;gt;pagb_lock);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/* search pagb_list for an open slot */
&lt;br&gt;-	for (bsy = mp-&amp;gt;m_perag[agno].pagb_list, n = 0;
&lt;br&gt;+	for (bsy = pag-&amp;gt;pagb_list, n = 0;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; n &amp;lt; XFS_PAGB_NUM_SLOTS;
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; bsy++, n++) {
&lt;br&gt;&amp;nbsp;		if (bsy-&amp;gt;busy_tp == NULL) {
&lt;br&gt;@@ -2502,11 +2511,11 @@ xfs_alloc_mark_busy(xfs_trans_t *tp,
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	trace_xfs_alloc_busy(mp, agno, bno, len, n);
&lt;br&gt;+	trace_xfs_alloc_busy(tp-&amp;gt;t_mountp, agno, bno, len, n);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (n &amp;lt; XFS_PAGB_NUM_SLOTS) {
&lt;br&gt;-		bsy = &amp;mp-&amp;gt;m_perag[agno].pagb_list[n];
&lt;br&gt;-		mp-&amp;gt;m_perag[agno].pagb_count++;
&lt;br&gt;+		bsy = &amp;pag-&amp;gt;pagb_list[n];
&lt;br&gt;+		pag-&amp;gt;pagb_count++;
&lt;br&gt;&amp;nbsp;		bsy-&amp;gt;busy_start = bno;
&lt;br&gt;&amp;nbsp;		bsy-&amp;gt;busy_length = len;
&lt;br&gt;&amp;nbsp;		bsy-&amp;gt;busy_tp = tp;
&lt;br&gt;@@ -2521,7 +2530,8 @@ xfs_alloc_mark_busy(xfs_trans_t *tp,
&lt;br&gt;&amp;nbsp;		xfs_trans_set_sync(tp);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	spin_unlock(&amp;mp-&amp;gt;m_perag[agno].pagb_lock);
&lt;br&gt;+	spin_unlock(&amp;pag-&amp;gt;pagb_lock);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void
&lt;br&gt;@@ -2529,24 +2539,23 @@ xfs_alloc_clear_busy(xfs_trans_t *tp,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; xfs_agnumber_t agno,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; int idx)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	xfs_mount_t		*mp;
&lt;br&gt;+	struct xfs_perag	*pag;
&lt;br&gt;&amp;nbsp;	xfs_perag_busy_t	*list;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	mp = tp-&amp;gt;t_mountp;
&lt;br&gt;-
&lt;br&gt;-	spin_lock(&amp;mp-&amp;gt;m_perag[agno].pagb_lock);
&lt;br&gt;-	list = mp-&amp;gt;m_perag[agno].pagb_list;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	ASSERT(idx &amp;lt; XFS_PAGB_NUM_SLOTS);
&lt;br&gt;+	pag = xfs_perag_get(tp-&amp;gt;t_mountp, agno);
&lt;br&gt;+	spin_lock(&amp;pag-&amp;gt;pagb_lock);
&lt;br&gt;+	list = pag-&amp;gt;pagb_list;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	trace_xfs_alloc_unbusy(mp, agno, idx, list[idx].busy_tp == tp);
&lt;br&gt;+	trace_xfs_alloc_unbusy(tp-&amp;gt;t_mountp, agno, idx, list[idx].busy_tp == tp);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (list[idx].busy_tp == tp) {
&lt;br&gt;&amp;nbsp;		list[idx].busy_tp = NULL;
&lt;br&gt;-		mp-&amp;gt;m_perag[agno].pagb_count--;
&lt;br&gt;+		pag-&amp;gt;pagb_count--;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	spin_unlock(&amp;mp-&amp;gt;m_perag[agno].pagb_lock);
&lt;br&gt;+	spin_unlock(&amp;pag-&amp;gt;pagb_lock);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2560,21 +2569,20 @@ xfs_alloc_search_busy(xfs_trans_t *tp,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp;xfs_agblock_t bno,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp;xfs_extlen_t len)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	xfs_mount_t		*mp;
&lt;br&gt;+	struct xfs_perag	*pag;
&lt;br&gt;&amp;nbsp;	xfs_perag_busy_t	*bsy;
&lt;br&gt;&amp;nbsp;	xfs_agblock_t		uend, bend;
&lt;br&gt;&amp;nbsp;	xfs_lsn_t		lsn;
&lt;br&gt;&amp;nbsp;	int			cnt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	mp = tp-&amp;gt;t_mountp;
&lt;br&gt;-
&lt;br&gt;-	spin_lock(&amp;mp-&amp;gt;m_perag[agno].pagb_lock);
&lt;br&gt;-	cnt = mp-&amp;gt;m_perag[agno].pagb_count;
&lt;br&gt;+	pag = xfs_perag_get(tp-&amp;gt;t_mountp, agno);
&lt;br&gt;+	spin_lock(&amp;pag-&amp;gt;pagb_lock);
&lt;br&gt;+	cnt = pag-&amp;gt;pagb_count;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	uend = bno + len - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/* search pagb_list for this slot, skipping open slots */
&lt;br&gt;-	for (bsy = mp-&amp;gt;m_perag[agno].pagb_list; cnt; bsy++) {
&lt;br&gt;+	for (bsy = pag-&amp;gt;pagb_list; cnt; bsy++) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		/*
&lt;br&gt;&amp;nbsp;		 * (start1,length1) within (start2, length2)
&lt;br&gt;@@ -2589,7 +2597,7 @@ xfs_alloc_search_busy(xfs_trans_t *tp,
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	trace_xfs_alloc_busysearch(mp, agno, bno, len, !!cnt);
&lt;br&gt;+	trace_xfs_alloc_busysearch(tp-&amp;gt;t_mountp, agno, bno, len, !!cnt);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/*
&lt;br&gt;&amp;nbsp;	 * If a block was found, force the log through the LSN of the
&lt;br&gt;@@ -2597,9 +2605,10 @@ xfs_alloc_search_busy(xfs_trans_t *tp,
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;&amp;nbsp;	if (cnt) {
&lt;br&gt;&amp;nbsp;		lsn = bsy-&amp;gt;busy_tp-&amp;gt;t_commit_lsn;
&lt;br&gt;-		spin_unlock(&amp;mp-&amp;gt;m_perag[agno].pagb_lock);
&lt;br&gt;-		xfs_log_force(mp, lsn, XFS_LOG_FORCE|XFS_LOG_SYNC);
&lt;br&gt;+		spin_unlock(&amp;pag-&amp;gt;pagb_lock);
&lt;br&gt;+		xfs_log_force(tp-&amp;gt;t_mountp, lsn, XFS_LOG_FORCE|XFS_LOG_SYNC);
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;-		spin_unlock(&amp;mp-&amp;gt;m_perag[agno].pagb_lock);
&lt;br&gt;+		spin_unlock(&amp;pag-&amp;gt;pagb_lock);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;diff --git a/fs/xfs/xfs_alloc_btree.c b/fs/xfs/xfs_alloc_btree.c
&lt;br&gt;index adbd914..b726e10 100644
&lt;br&gt;--- a/fs/xfs/xfs_alloc_btree.c
&lt;br&gt;+++ b/fs/xfs/xfs_alloc_btree.c
&lt;br&gt;@@ -61,12 +61,14 @@ xfs_allocbt_set_root(
&lt;br&gt;&amp;nbsp;	struct xfs_agf		*agf = XFS_BUF_TO_AGF(agbp);
&lt;br&gt;&amp;nbsp;	xfs_agnumber_t		seqno = be32_to_cpu(agf-&amp;gt;agf_seqno);
&lt;br&gt;&amp;nbsp;	int			btnum = cur-&amp;gt;bc_btnum;
&lt;br&gt;+	struct xfs_perag	*pag = xfs_perag_get(cur-&amp;gt;bc_mp, seqno);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	ASSERT(ptr-&amp;gt;s != 0);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	agf-&amp;gt;agf_roots[btnum] = ptr-&amp;gt;s;
&lt;br&gt;&amp;nbsp;	be32_add_cpu(&amp;agf-&amp;gt;agf_levels[btnum], inc);
&lt;br&gt;-	cur-&amp;gt;bc_mp-&amp;gt;m_perag[seqno].pagf_levels[btnum] += inc;
&lt;br&gt;+	pag-&amp;gt;pagf_levels[btnum] += inc;
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	xfs_alloc_log_agf(cur-&amp;gt;bc_tp, agbp, XFS_AGF_ROOTS | XFS_AGF_LEVELS);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -150,6 +152,7 @@ xfs_allocbt_update_lastrec(
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	struct xfs_agf		*agf = XFS_BUF_TO_AGF(cur-&amp;gt;bc_private.a.agbp);
&lt;br&gt;&amp;nbsp;	xfs_agnumber_t		seqno = be32_to_cpu(agf-&amp;gt;agf_seqno);
&lt;br&gt;+	struct xfs_perag	*pag;
&lt;br&gt;&amp;nbsp;	__be32			len;
&lt;br&gt;&amp;nbsp;	int			numrecs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -193,7 +196,9 @@ xfs_allocbt_update_lastrec(
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	agf-&amp;gt;agf_longest = len;
&lt;br&gt;-	cur-&amp;gt;bc_mp-&amp;gt;m_perag[seqno].pagf_longest = be32_to_cpu(len);
&lt;br&gt;+	pag = xfs_perag_get(cur-&amp;gt;bc_mp, seqno);
&lt;br&gt;+	pag-&amp;gt;pagf_longest = be32_to_cpu(len);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;	xfs_alloc_log_agf(cur-&amp;gt;bc_tp, cur-&amp;gt;bc_private.a.agbp, XFS_AGF_LONGEST);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-- 
&lt;br&gt;1.6.5
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790062&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-0-6--XFS%3A-Fix-growfs-deadlocks-and-per-AG-use-after-free-V3-tp26790057p26790062.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26790061</id>
	<title>[PATCH 1/6] XFS: rename xfs_get_perag</title>
	<published>2009-12-14T22:11:12Z</published>
	<updated>2009-12-14T22:11:12Z</updated>
	<author>
		<name>Dave Chinner</name>
	</author>
	<content type="html">xfs_get_perag is really getting the perag that an inode
&lt;br&gt;belongs to based on it's inode number. Convert the use of this
&lt;br&gt;function to just get the perag from a provided ag number.
&lt;br&gt;Use this new function to obtain the per-ag structure when
&lt;br&gt;traversing the per AG inode trees for sync and reclaim.
&lt;br&gt;&lt;br&gt;Signed-off-by: Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790061&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_sync.c | &amp;nbsp; 33 +++++++++++++++++++++------------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iget.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 10 +++++-----
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +++++---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_mount.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 ++++----
&lt;br&gt;&amp;nbsp;4 files changed, 35 insertions(+), 24 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/fs/xfs/linux-2.6/xfs_sync.c b/fs/xfs/linux-2.6/xfs_sync.c
&lt;br&gt;index 6fed97a..0e17683 100644
&lt;br&gt;--- a/fs/xfs/linux-2.6/xfs_sync.c
&lt;br&gt;+++ b/fs/xfs/linux-2.6/xfs_sync.c
&lt;br&gt;@@ -96,13 +96,12 @@ unlock:
&lt;br&gt;&amp;nbsp;STATIC int
&lt;br&gt;&amp;nbsp;xfs_inode_ag_walk(
&lt;br&gt;&amp;nbsp;	struct xfs_mount	*mp,
&lt;br&gt;-	xfs_agnumber_t		ag,
&lt;br&gt;+	struct xfs_perag	*pag,
&lt;br&gt;&amp;nbsp;	int			(*execute)(struct xfs_inode *ip,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; struct xfs_perag *pag, int flags),
&lt;br&gt;&amp;nbsp;	int			flags,
&lt;br&gt;&amp;nbsp;	int			tag)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	struct xfs_perag	*pag = &amp;mp-&amp;gt;m_perag[ag];
&lt;br&gt;&amp;nbsp;	uint32_t		first_index;
&lt;br&gt;&amp;nbsp;	int			last_error = 0;
&lt;br&gt;&amp;nbsp;	int			skipped;
&lt;br&gt;@@ -137,8 +136,6 @@ restart:
&lt;br&gt;&amp;nbsp;		delay(1);
&lt;br&gt;&amp;nbsp;		goto restart;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-
&lt;br&gt;-	xfs_put_perag(mp, pag);
&lt;br&gt;&amp;nbsp;	return last_error;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -155,9 +152,15 @@ xfs_inode_ag_iterator(
&lt;br&gt;&amp;nbsp;	xfs_agnumber_t		ag;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	for (ag = 0; ag &amp;lt; mp-&amp;gt;m_sb.sb_agcount; ag++) {
&lt;br&gt;-		if (!mp-&amp;gt;m_perag[ag].pag_ici_init)
&lt;br&gt;+		struct xfs_perag	*pag;
&lt;br&gt;+
&lt;br&gt;+		pag = xfs_perag_get(mp, ag);
&lt;br&gt;+		if (!pag-&amp;gt;pag_ici_init) {
&lt;br&gt;+			xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;			continue;
&lt;br&gt;-		error = xfs_inode_ag_walk(mp, ag, execute, flags, tag);
&lt;br&gt;+		}
&lt;br&gt;+		error = xfs_inode_ag_walk(mp, pag, execute, flags, tag);
&lt;br&gt;+		xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;		if (error) {
&lt;br&gt;&amp;nbsp;			last_error = error;
&lt;br&gt;&amp;nbsp;			if (error == EFSCORRUPTED)
&lt;br&gt;@@ -669,25 +672,30 @@ xfs_reclaim_inode(
&lt;br&gt;&amp;nbsp;	xfs_inode_t	*ip,
&lt;br&gt;&amp;nbsp;	int		sync_mode)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	xfs_perag_t	*pag = xfs_get_perag(ip-&amp;gt;i_mount, ip-&amp;gt;i_ino);
&lt;br&gt;+	struct xfs_mount *mp = ip-&amp;gt;i_mount;
&lt;br&gt;+	struct xfs_perag *pag;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	/* The hash lock here protects a thread in xfs_iget_core from
&lt;br&gt;+	/*
&lt;br&gt;+	 * The radix tree lock here protects a thread in xfs_iget_core from
&lt;br&gt;&amp;nbsp;	 * racing with us on linking the inode back with a vnode.
&lt;br&gt;&amp;nbsp;	 * Once we have the XFS_IRECLAIM flag set it will not touch
&lt;br&gt;&amp;nbsp;	 * us.
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;+	pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip-&amp;gt;i_ino));
&lt;br&gt;&amp;nbsp;	write_lock(&amp;pag-&amp;gt;pag_ici_lock);
&lt;br&gt;&amp;nbsp;	spin_lock(&amp;ip-&amp;gt;i_flags_lock);
&lt;br&gt;&amp;nbsp;	if (__xfs_iflags_test(ip, XFS_IRECLAIM) ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp;!__xfs_iflags_test(ip, XFS_IRECLAIMABLE)) {
&lt;br&gt;&amp;nbsp;		spin_unlock(&amp;ip-&amp;gt;i_flags_lock);
&lt;br&gt;&amp;nbsp;		write_unlock(&amp;pag-&amp;gt;pag_ici_lock);
&lt;br&gt;+		xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;		return -EAGAIN;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	__xfs_iflags_set(ip, XFS_IRECLAIM);
&lt;br&gt;&amp;nbsp;	spin_unlock(&amp;ip-&amp;gt;i_flags_lock);
&lt;br&gt;&amp;nbsp;	write_unlock(&amp;pag-&amp;gt;pag_ici_lock);
&lt;br&gt;-	xfs_put_perag(ip-&amp;gt;i_mount, pag);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/*
&lt;br&gt;&amp;nbsp;	 * If the inode is still dirty, then flush it out. &amp;nbsp;If the inode
&lt;br&gt;@@ -737,16 +745,17 @@ void
&lt;br&gt;&amp;nbsp;xfs_inode_set_reclaim_tag(
&lt;br&gt;&amp;nbsp;	xfs_inode_t	*ip)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	xfs_mount_t	*mp = ip-&amp;gt;i_mount;
&lt;br&gt;-	xfs_perag_t	*pag = xfs_get_perag(mp, ip-&amp;gt;i_ino);
&lt;br&gt;+	struct xfs_mount *mp = ip-&amp;gt;i_mount;
&lt;br&gt;+	struct xfs_perag *pag;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip-&amp;gt;i_ino));
&lt;br&gt;&amp;nbsp;	read_lock(&amp;pag-&amp;gt;pag_ici_lock);
&lt;br&gt;&amp;nbsp;	spin_lock(&amp;ip-&amp;gt;i_flags_lock);
&lt;br&gt;&amp;nbsp;	__xfs_inode_set_reclaim_tag(pag, ip);
&lt;br&gt;&amp;nbsp;	__xfs_iflags_set(ip, XFS_IRECLAIMABLE);
&lt;br&gt;&amp;nbsp;	spin_unlock(&amp;ip-&amp;gt;i_flags_lock);
&lt;br&gt;&amp;nbsp;	read_unlock(&amp;pag-&amp;gt;pag_ici_lock);
&lt;br&gt;-	xfs_put_perag(mp, pag);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void
&lt;br&gt;diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c
&lt;br&gt;index f5c904a..d1e7250 100644
&lt;br&gt;--- a/fs/xfs/xfs_iget.c
&lt;br&gt;+++ b/fs/xfs/xfs_iget.c
&lt;br&gt;@@ -375,7 +375,7 @@ xfs_iget(
&lt;br&gt;&amp;nbsp;		return EINVAL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/* get the perag structure and ensure that it's inode capable */
&lt;br&gt;-	pag = xfs_get_perag(mp, ino);
&lt;br&gt;+	pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ino));
&lt;br&gt;&amp;nbsp;	if (!pag-&amp;gt;pagi_inodeok)
&lt;br&gt;&amp;nbsp;		return EINVAL;
&lt;br&gt;&amp;nbsp;	ASSERT(pag-&amp;gt;pag_ici_init);
&lt;br&gt;@@ -399,7 +399,7 @@ again:
&lt;br&gt;&amp;nbsp;		if (error)
&lt;br&gt;&amp;nbsp;			goto out_error_or_again;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	xfs_put_perag(mp, pag);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	*ipp = ip;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -418,7 +418,7 @@ out_error_or_again:
&lt;br&gt;&amp;nbsp;		delay(1);
&lt;br&gt;&amp;nbsp;		goto again;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	xfs_put_perag(mp, pag);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;	return error;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -486,11 +486,11 @@ xfs_ireclaim(
&lt;br&gt;&amp;nbsp;	 * if it was never added to it because radix_tree_delete can deal
&lt;br&gt;&amp;nbsp;	 * with that case just fine.
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;-	pag = xfs_get_perag(mp, ip-&amp;gt;i_ino);
&lt;br&gt;+	pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip-&amp;gt;i_ino));
&lt;br&gt;&amp;nbsp;	write_lock(&amp;pag-&amp;gt;pag_ici_lock);
&lt;br&gt;&amp;nbsp;	radix_tree_delete(&amp;pag-&amp;gt;pag_ici_root, XFS_INO_TO_AGINO(mp, ip-&amp;gt;i_ino));
&lt;br&gt;&amp;nbsp;	write_unlock(&amp;pag-&amp;gt;pag_ici_lock);
&lt;br&gt;-	xfs_put_perag(mp, pag);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/*
&lt;br&gt;&amp;nbsp;	 * Here we do an (almost) spurious inode lock in order to coordinate
&lt;br&gt;diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
&lt;br&gt;index ce278b3..1f69dda 100644
&lt;br&gt;--- a/fs/xfs/xfs_inode.c
&lt;br&gt;+++ b/fs/xfs/xfs_inode.c
&lt;br&gt;@@ -1946,8 +1946,9 @@ xfs_ifree_cluster(
&lt;br&gt;&amp;nbsp;	xfs_inode_t		*ip, **ip_found;
&lt;br&gt;&amp;nbsp;	xfs_inode_log_item_t	*iip;
&lt;br&gt;&amp;nbsp;	xfs_log_item_t		*lip;
&lt;br&gt;-	xfs_perag_t		*pag = xfs_get_perag(mp, inum);
&lt;br&gt;+	struct xfs_perag	*pag;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, inum));
&lt;br&gt;&amp;nbsp;	if (mp-&amp;gt;m_sb.sb_blocksize &amp;gt;= XFS_INODE_CLUSTER_SIZE(mp)) {
&lt;br&gt;&amp;nbsp;		blks_per_cluster = 1;
&lt;br&gt;&amp;nbsp;		ninodes = mp-&amp;gt;m_sb.sb_inopblock;
&lt;br&gt;@@ -2088,7 +2089,7 @@ xfs_ifree_cluster(
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	kmem_free(ip_found);
&lt;br&gt;-	xfs_put_perag(mp, pag);
&lt;br&gt;+	xfs_perag_put(pag);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;@@ -2675,7 +2676,7 @@ xfs_iflush_cluster(
&lt;br&gt;&amp;nbsp;	xfs_buf_t	*bp)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	xfs_mount_t		*mp = ip-&amp;gt;i_mount;
&lt;br&gt;-	xfs_perag_t		*pag = xfs_get_perag(mp, ip-&amp;gt;i_ino);
&lt;br&gt;+	struct xfs_perag	*pag;
&lt;br&gt;&amp;nbsp;	unsigned long		first_index, mask;
&lt;br&gt;&amp;nbsp;	unsigned long		inodes_per_cluster;
&lt;br&gt;&amp;nbsp;	int			ilist_size;
&lt;br&gt;@@ -2686,6 +2687,7 @@ xfs_iflush_cluster(
&lt;br&gt;&amp;nbsp;	int			bufwasdelwri;
&lt;br&gt;&amp;nbsp;	int			i;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip-&amp;gt;i_ino));
&lt;br&gt;&amp;nbsp;	ASSERT(pag-&amp;gt;pagi_inodeok);
&lt;br&gt;&amp;nbsp;	ASSERT(pag-&amp;gt;pag_ici_init);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
&lt;br&gt;index 1df7e45..f8a68a2 100644
&lt;br&gt;--- a/fs/xfs/xfs_mount.h
&lt;br&gt;+++ b/fs/xfs/xfs_mount.h
&lt;br&gt;@@ -386,14 +386,14 @@ xfs_daddr_to_agbno(struct xfs_mount *mp, xfs_daddr_t d)
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * perag get/put wrappers for eventual ref counting
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;-static inline xfs_perag_t *
&lt;br&gt;-xfs_get_perag(struct xfs_mount *mp, xfs_ino_t ino)
&lt;br&gt;+static inline struct xfs_perag *
&lt;br&gt;+xfs_perag_get(struct xfs_mount *mp, xfs_agnumber_t agno)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	return &amp;mp-&amp;gt;m_perag[XFS_INO_TO_AGNO(mp, ino)];
&lt;br&gt;+	return &amp;mp-&amp;gt;m_perag[agno];
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static inline void
&lt;br&gt;-xfs_put_perag(struct xfs_mount *mp, xfs_perag_t *pag)
&lt;br&gt;+xfs_perag_put(struct xfs_perag *pag)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	/* nothing to see here, move along */
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;-- 
&lt;br&gt;1.6.5
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790061&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-0-6--XFS%3A-Fix-growfs-deadlocks-and-per-AG-use-after-free-V3-tp26790057p26790061.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26790057</id>
	<title>[PATCH 0/6] XFS: Fix growfs deadlocks and per-AG use after free V3</title>
	<published>2009-12-14T22:11:11Z</published>
	<updated>2009-12-14T22:11:11Z</updated>
	<author>
		<name>Dave Chinner</name>
	</author>
	<content type="html">The use of an array for the xfs_perag structures results in growfs having
&lt;br&gt;to realocate the array. This requires exclusion to prevent use-after-free
&lt;br&gt;situations. The current locking is prone to deadlocks when growing under
&lt;br&gt;load, and the xfssyncd currently has no protection against the array being
&lt;br&gt;reallocated that can lead to panics.
&lt;br&gt;&lt;br&gt;This series abstracts the per-ag structure access and then removes the array
&lt;br&gt;to replace it with individual xfs_perag structures indexed by a radix tree.
&lt;br&gt;The only locking required is for the radix tree, hence the deadlocks go away
&lt;br&gt;as the tree lock is always the innermost lock. The use after frees go away
&lt;br&gt;as well as growfs does not need to reallocate structures fo pre-existing
&lt;br&gt;allocation groups - it only needs to allocate the structures for the new
&lt;br&gt;AGs and insert them into the tree.
&lt;br&gt;&lt;br&gt;This series also adds reference counting to the xfs-perag structure to
&lt;br&gt;ensure that we balance get/put accesses to the structures and provide the
&lt;br&gt;infrastructure to determine if the structure is in use or not.
&lt;br&gt;&lt;br&gt;Version 3: Rebase for current upstream tree.
&lt;br&gt;Version 2: Fix review comments from Christoph.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26790057&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-0-6--XFS%3A-Fix-growfs-deadlocks-and-per-AG-use-after-free-V3-tp26790057p26790057.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26789875</id>
	<title>Re: [BUG report]xfs_btree_make_block_unfull generated an OOPS</title>
	<published>2009-12-14T21:36:29Z</published>
	<updated>2009-12-14T21:36:29Z</updated>
	<author>
		<name>hank peng</name>
	</author>
	<content type="html">2009/12/15 Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789875&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Tue, Dec 15, 2009 at 08:49:37AM +0800, hank peng wrote:
&lt;br&gt;&amp;gt;&amp;gt; Hi, Eric:
&lt;br&gt;&amp;gt;&amp;gt; I add some code like this:
&lt;br&gt;&amp;gt;&amp;gt; if (*stat) {
&lt;br&gt;&amp;gt;&amp;gt;                 printk(&amp;quot;*stat = 0x%08x, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;                                 *stat, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;                 if (oindex == NULL || index == NULL) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This won't catch bad non-NULL pointers like you are seeing.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;                         printk(&amp;quot;BUG occured!\n&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;                         printk(&amp;quot;oindex = %p, index = %p\n&amp;quot;, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;                         BUG();
&lt;br&gt;&amp;gt;&amp;gt;                 }
&lt;br&gt;&amp;gt;&amp;gt;                 *oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;&amp;gt;&amp;gt;                 return 0;
&lt;br&gt;&amp;gt;&amp;gt;         }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; And the same OOPS happened again but a little different, kernel messages are:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = 00000501, index = 22008424
&lt;br&gt;&amp;gt;&amp;gt; Unable to handle kernel paging request for data at address 0x22008424
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Given that oindex and index are stack varibles, this indicates some
&lt;/div&gt;&lt;br&gt;In xfs_btree_make_block_unfull, it seems that oindex and index are
&lt;br&gt;optimised to register variables. So, it become more odd.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; thing is probably smashing the stack. Possibly a buffer overrun. To
&lt;br&gt;&amp;gt; narrow down the possible cause, can you add the debug:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;        printk(&amp;quot;%s:%s: oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;                        __func__, __LINE__, oindex, index);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; throughout the xfs_btree_make_block_unfull() function? i.e. at
&lt;br&gt;&amp;gt; first entry, before the xfs_btree_rshift() call, before the
&lt;br&gt;&amp;gt; xfs_btree_lshift() call, etc, to see if any of the parameters
&lt;br&gt;&amp;gt; are being modified during execution of the function?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If the variables being passed into xfs_btree_make_block_unfull() are
&lt;br&gt;&amp;gt; already bad, then do the same thing for the caller
&lt;br&gt;&amp;gt; xfs_btree_insert(). This may help narrow down where the problem
&lt;br&gt;&amp;gt; is coming from....
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Dave.
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Dave Chinner
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789875&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;The simplest is not all best but the best is surely the simplest!
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789875&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-BUG-report-xfs_btree_make_block_unfull-generated-an-OOPS-tp26703993p26789875.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26789691</id>
	<title>Re: [PATCH 0/6] XFS: Fix growfs deadlocks and per-AG use after free V2</title>
	<published>2009-12-14T21:14:55Z</published>
	<updated>2009-12-14T21:14:55Z</updated>
	<author>
		<name>Dave Chinner</name>
	</author>
	<content type="html">On Tue, Dec 15, 2009 at 10:11:04AM +1100, Dave Chinner wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; The use of an array for the xfs_perag structures results in growfs having
&lt;br&gt;&amp;gt; to realocate the array. This requires exclusion to prevent use-after-free
&lt;br&gt;&amp;gt; situations. The current locking is prone to deadlocks when growing under
&lt;br&gt;&amp;gt; load, and the xfssyncd currently has no protection against the array being
&lt;br&gt;&amp;gt; reallocated that can lead to panics.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; This series abstracts the per-ag structure access and then removes the array
&lt;br&gt;&amp;gt; to replace it with individual xfs_perag structures indexed by a radix tree.
&lt;br&gt;&amp;gt; The only locking required is for the radix tree, hence the deadlocks go away
&lt;br&gt;&amp;gt; as the tree lock is always the innermost lock. The use after frees go away
&lt;br&gt;&amp;gt; as well as growfs does not need to reallocate structures fo pre-existing
&lt;br&gt;&amp;gt; allocation groups - it only needs to allocate the structures for the new
&lt;br&gt;&amp;gt; AGs and insert them into the tree.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; This series also adds reference counting to the xfs-perag structure to
&lt;br&gt;&amp;gt; ensure that we balance get/put accesses to the structures and provide the
&lt;br&gt;&amp;gt; infrastructure to determine if the structure is in use or not.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Version 2: Fix review comments from Christoph.
&lt;/div&gt;&lt;br&gt;This series needs updating after the trace patches were merged. I'll
&lt;br&gt;post it again soon...
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Dave.
&lt;br&gt;-- 
&lt;br&gt;Dave Chinner
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789691&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789691&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-0-6--XFS%3A-Fix-growfs-deadlocks-and-per-AG-use-after-free-V2-tp26786924p26789691.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26789520</id>
	<title>[XFS updates] XFS development tree branch, master, updated. v2.6.30-rc4-24753-gd0c1562</title>
	<published>2009-12-14T20:56:20Z</published>
	<updated>2009-12-14T20:56:20Z</updated>
	<author>
		<name>Xfs - General mailing list</name>
	</author>
	<content type="html">This is an automated email from the git hooks/post-receive script. It was
&lt;br&gt;generated because a ref change was pushed to the repository containing
&lt;br&gt;the project &amp;quot;XFS development tree&amp;quot;.
&lt;br&gt;&lt;br&gt;The branch, master has been updated
&lt;br&gt;&amp;nbsp; d0c1562 xfs: event tracing support
&lt;br&gt;&amp;nbsp; b3460b3 xfs: change the xfs_iext_insert / xfs_iext_remove
&lt;br&gt;&amp;nbsp; febec43 xfs: cleanup bmap extent state macros
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; from &amp;nbsp;44a743f68705c681439f264deb05f8f38e9048d3 (commit)
&lt;br&gt;&lt;br&gt;Those revisions listed above that are new to this repository have
&lt;br&gt;not appeared on any other notification email; so we list those
&lt;br&gt;revisions in full, below.
&lt;br&gt;&lt;br&gt;- Log -----------------------------------------------------------------
&lt;br&gt;commit d0c156230fa510e7e091e60d4c9c3ea7bd96edf6
&lt;br&gt;Author: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789520&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Mon Dec 14 23:14:59 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: event tracing support
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Convert the old xfs tracing support that could only be used with the
&lt;br&gt;&amp;nbsp; &amp;nbsp; out of tree kdb and xfsidbg patches to use the generic event tracer.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; To use it make sure CONFIG_EVENT_TRACING is enabled and then enable
&lt;br&gt;&amp;nbsp; &amp;nbsp; all xfs trace channels by:
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;echo 1 &amp;gt; /sys/kernel/debug/tracing/events/xfs/enable
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; or alternatively enable single events by just doing the same in one
&lt;br&gt;&amp;nbsp; &amp;nbsp; event subdirectory, e.g.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;echo 1 &amp;gt; /sys/kernel/debug/tracing/events/xfs/xfs_ihold/enable
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; or set more complex filters, etc. In Documentation/trace/events.txt
&lt;br&gt;&amp;nbsp; &amp;nbsp; all this is desctribed in more detail. &amp;nbsp;To reads the events do a
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cat /sys/kernel/debug/tracing/trace
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Compared to the last posting this patch converts the tracing mostly to
&lt;br&gt;&amp;nbsp; &amp;nbsp; the one tracepoint per callsite model that other users of the new
&lt;br&gt;&amp;nbsp; &amp;nbsp; tracing facility also employ. &amp;nbsp;This allows a very fine-grained control
&lt;br&gt;&amp;nbsp; &amp;nbsp; of the tracing, a cleaner output of the traces and also enables the
&lt;br&gt;&amp;nbsp; &amp;nbsp; perf tool to use each tracepoint as a virtual performance counter,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allowing us to e.g. count how often certain workloads git various
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;spots in XFS. &amp;nbsp;Take a look at
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://lwn.net/Articles/346470/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lwn.net/Articles/346470/&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; for some examples.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Also the btree tracing isn't included at all yet, as it will require
&lt;br&gt;&amp;nbsp; &amp;nbsp; additional core tracing features not in mainline yet, I plan to
&lt;br&gt;&amp;nbsp; &amp;nbsp; deliver it later.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; And the really nice thing about this patch is that it actually removes
&lt;br&gt;&amp;nbsp; &amp;nbsp; many lines of code while adding this nice functionality:
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/Makefile &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_acl.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_aops.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; 52 -
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_aops.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_buf.c &amp;nbsp; &amp;nbsp; | &amp;nbsp;117 +--
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_buf.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; 33
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_fs_subr.c | &amp;nbsp; &amp;nbsp;3
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_ioctl.c &amp;nbsp; | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_ioctl32.c | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_iops.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_linux.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_lrw.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; 87 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_lrw.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; 45 -
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_super.c &amp;nbsp; | &amp;nbsp;104 ---
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_super.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;7
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_sync.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_trace.c &amp;nbsp; | &amp;nbsp; 75 ++
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_trace.h &amp;nbsp; | 1369 +++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/linux-2.6/xfs_vnode.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;4
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/quota/xfs_dquot.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;110 ---
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/quota/xfs_dquot.h &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 21
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/quota/xfs_qm.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 40 -
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/quota/xfs_qm_syscalls.c | &amp;nbsp; &amp;nbsp;4
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/support/ktrace.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;323 ---------
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/support/ktrace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 85 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 16
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_ag.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 14
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_alloc.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;230 +-----
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_alloc.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 27
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_alloc_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_attr.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;107 ---
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_attr.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 10
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_attr_leaf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 14
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_attr_sf.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 40 -
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_bmap.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;507 +++------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_bmap.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 49 -
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_bmap_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;6
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_btree_trace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 17
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_buf_item.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 87 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_buf_item.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_da_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_da_btree.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;7
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dfrag.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2_block.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2_leaf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 21
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2_node.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 27
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2_sf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 26
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2_trace.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;216 ------
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_dir2_trace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 72 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_filestream.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_fsops.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_iget.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;111 ---
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_inode.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 67 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_inode.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 76 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_inode_item.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;5
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_iomap.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 85 --
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_iomap.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;8
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_log.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;181 +----
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_log_priv.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_log_recover.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_mount.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_quota.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;8
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_rename.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_rtalloc.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_rw.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_trans.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 47 +
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_trans_buf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 62 -
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;fs/xfs/xfs_vnodeops.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;70 files changed, 2151 insertions(+), 2592 deletions(-)
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789520&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789520&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit b3460b3bf6a017a2cb0a67e4fe74c0b6dc25ddd7
&lt;br&gt;Author: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789520&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Wed Nov 25 00:00:21 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: change the xfs_iext_insert / xfs_iext_remove
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Change the xfs_iext_insert / xfs_iext_remove prototypes to pass more
&lt;br&gt;&amp;nbsp; &amp;nbsp; information which will allow pushing the trace points from the callers
&lt;br&gt;&amp;nbsp; &amp;nbsp; into those functions. &amp;nbsp;This includes folding the whichfork information
&lt;br&gt;&amp;nbsp; &amp;nbsp; into the state variable to minimize the addition stack footprint.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789520&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789520&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;commit febec432aeeaa5edead1c4a6db3b75e2402b0e9d
&lt;br&gt;Author: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789520&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Date: &amp;nbsp; Wed Nov 25 00:00:19 2009 +0000
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; xfs: cleanup bmap extent state macros
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Cleanup the extent state macros in the bmap code to use one common set of
&lt;br&gt;&amp;nbsp; &amp;nbsp; flags that we can pass to the tracing code later and remove a lot of the
&lt;br&gt;&amp;nbsp; &amp;nbsp; macro obsfucation.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789520&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789520&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;-----------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;Summary of changes:
&lt;br&gt;&amp;nbsp;fs/xfs/Makefile &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_acl.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_aops.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; 52 +--
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_aops.h &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;2 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_buf.c &amp;nbsp; &amp;nbsp; | &amp;nbsp;117 ++---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_buf.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; 33 +-
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_fs_subr.c | &amp;nbsp; &amp;nbsp;3 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_ioctl.c &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_ioctl32.c | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_iops.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_linux.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 -
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_lrw.c &amp;nbsp; &amp;nbsp; | &amp;nbsp; 87 +---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_lrw.h &amp;nbsp; &amp;nbsp; | &amp;nbsp; 45 --
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_super.c &amp;nbsp; | &amp;nbsp;104 +---
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_super.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;7 -
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_sync.c &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_trace.c &amp;nbsp; | &amp;nbsp; 75 +++
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_trace.h &amp;nbsp; | 1369 ++++++++++++++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;fs/xfs/linux-2.6/xfs_vnode.h &amp;nbsp; | &amp;nbsp; &amp;nbsp;4 +
&lt;br&gt;&amp;nbsp;fs/xfs/quota/xfs_dquot.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;110 +---
&lt;br&gt;&amp;nbsp;fs/xfs/quota/xfs_dquot.h &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 21 -
&lt;br&gt;&amp;nbsp;fs/xfs/quota/xfs_qm.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 40 +-
&lt;br&gt;&amp;nbsp;fs/xfs/quota/xfs_qm_syscalls.c | &amp;nbsp; &amp;nbsp;4 +-
&lt;br&gt;&amp;nbsp;fs/xfs/support/ktrace.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;323 ----------
&lt;br&gt;&amp;nbsp;fs/xfs/support/ktrace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 85 ---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 16 -
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_ag.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 14 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_alloc.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;230 ++------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_alloc.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 27 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_alloc_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_attr.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;107 +---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_attr.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 10 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_attr_leaf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 14 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_attr_sf.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 40 --
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;942 +++++++++-------------------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 58 ++-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_bmap_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;6 -
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;5 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_btree_trace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 17 -
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_buf_item.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 87 +--
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_buf_item.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_da_btree.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_da_btree.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;7 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dfrag.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_block.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_leaf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 21 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_node.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 27 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_sf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 26 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_trace.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;216 -------
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_dir2_trace.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 72 ---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_filestream.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_fsops.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iget.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp;111 +---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 79 +--
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 82 +--
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_inode_item.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;5 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iomap.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 85 +---
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_iomap.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;8 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;181 ++----
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log_priv.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 20 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_log_recover.c &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_mount.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;2 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_quota.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;8 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_rename.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_rtalloc.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;1 +
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_rw.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;3 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_trans.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 47 ++
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_trans_buf.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 62 +-
&lt;br&gt;&amp;nbsp;fs/xfs/xfs_vnodeops.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +-
&lt;br&gt;&amp;nbsp;70 files changed, 2369 insertions(+), 2836 deletions(-)
&lt;br&gt;&amp;nbsp;create mode 100644 fs/xfs/linux-2.6/xfs_trace.c
&lt;br&gt;&amp;nbsp;create mode 100644 fs/xfs/linux-2.6/xfs_trace.h
&lt;br&gt;&amp;nbsp;delete mode 100644 fs/xfs/support/ktrace.c
&lt;br&gt;&amp;nbsp;delete mode 100644 fs/xfs/support/ktrace.h
&lt;br&gt;&amp;nbsp;delete mode 100644 fs/xfs/xfs_dir2_trace.c
&lt;br&gt;&amp;nbsp;delete mode 100644 fs/xfs/xfs_dir2_trace.h
&lt;br&gt;&lt;br&gt;&lt;br&gt;hooks/post-receive
&lt;br&gt;-- 
&lt;br&gt;XFS development tree
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789520&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-XFS-updates--XFS-development-tree-branch%2C-master%2C-updated.-v2.6.30-rc4-24753-gd0c1562-tp26789520p26789520.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26789518</id>
	<title>RE: [PATCH 3/3] xfs: event tracing support</title>
	<published>2009-12-14T20:47:22Z</published>
	<updated>2009-12-14T20:47:22Z</updated>
	<author>
		<name>Alex Elder</name>
	</author>
	<content type="html">Christoph Hellwig wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Mon, Dec 14, 2009 at 04:40:36PM -0600, Alex Elder wrote:
&lt;br&gt;&amp;gt;&amp;gt; There is a problem with trace_xfs_bmap_insert(). &amp;nbsp;It is
&lt;br&gt;&amp;gt;&amp;gt; referenced once (in xfs_bmap_trace_exlist()), but never defined.
&lt;br&gt;&amp;gt;&amp;gt; The reference does not match the prototype defined for the other bmap tracepoints either.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Rather than trying to figure out what you intended I thought I'd
&lt;br&gt;&amp;gt;&amp;gt; give you a chance to offer a fix. &amp;nbsp;If you do, please just send me
&lt;br&gt;&amp;gt;&amp;gt; an update of that portion of the code if possible. &amp;nbsp;Meanwhile
&lt;br&gt;&amp;gt;&amp;gt; I've commented out that reference and am going to try to complete
&lt;br&gt;&amp;gt;&amp;gt; my review of this patch shortly.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Details are in the excerpts below. &amp;nbsp;I didn't add any commentary,
&lt;br&gt;&amp;gt;&amp;gt; I'm just calling attention to the code I'm referring to.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Yeah, that was some debug build that got missed in the last iteration of
&lt;br&gt;&amp;gt; the patch. &amp;nbsp;Updated version below:
&lt;/div&gt;&lt;br&gt;OK, this looks good. &amp;nbsp;Compared to the first time around, I gave
&lt;br&gt;it a very cursory review. &amp;nbsp;But we'll get it in.
&lt;br&gt;&lt;br&gt;Signed-off-by: Alex Elder &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789518&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aelder@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Subject: xfs: event tracing support
&lt;br&gt;&amp;gt; From: Christoph Hellwig &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789518&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;hch@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Convert the old xfs tracing support that could only be used with the out
&lt;br&gt;&amp;gt; of tree kdb and xfsidbg patches to use the generic event tracer.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; To use it make sure CONFIG_EVENT_TRACING is enabled and then enable all
&lt;br&gt;&amp;gt; xfs trace channels by:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;echo 1 &amp;gt; /sys/kernel/debug/tracing/events/xfs/enable
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; or alternatively enable single events by just doing the same in one
&lt;br&gt;&amp;gt; event subdirectory, e.g.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;echo 1 &amp;gt; /sys/kernel/debug/tracing/events/xfs/xfs_ihold/enable
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; or set more complex filters, etc. In Documentation/trace/events.txt all
&lt;/div&gt;&lt;br&gt;. . .
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26789518&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH-3-3--xfs%3A-event-tracing-support-tp26505436p26789518.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26788907</id>
	<title>Re: [BUG report]xfs_btree_make_block_unfull generated an OOPS</title>
	<published>2009-12-14T19:22:59Z</published>
	<updated>2009-12-14T19:22:59Z</updated>
	<author>
		<name>hank peng</name>
	</author>
	<content type="html">2009/12/15 Eric Sandeen &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788907&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sandeen@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; hank peng wrote:
&lt;br&gt;&amp;gt;&amp;gt; 2009/12/15 Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788907&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; On Tue, Dec 15, 2009 at 08:49:37AM +0800, hank peng wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi, Eric:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I add some code like this:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; if (*stat) {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;                 printk(&amp;quot;*stat = 0x%08x, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;                                 *stat, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;                 if (oindex == NULL || index == NULL) {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; This won't catch bad non-NULL pointers like you are seeing.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;                         printk(&amp;quot;BUG occured!\n&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;                         printk(&amp;quot;oindex = %p, index = %p\n&amp;quot;, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;                         BUG();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;                 }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;                 *oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;                 return 0;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;         }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; And the same OOPS happened again but a little different, kernel messages are:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = 00000501, index = 22008424
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Unable to handle kernel paging request for data at address 0x22008424
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Are you using any of the xfs userspace prior to this error, or is it a
&lt;br&gt;&amp;gt; fresh boot and just normal IO?
&lt;br&gt;&amp;gt;
&lt;/div&gt;no xfs userspace prior to this error, just normal IO. Besides, it need
&lt;br&gt;some time to produce the OOPS.
&lt;br&gt;&lt;br&gt;&amp;gt; I ask because libxfs calls sys_ustat() which at one point was corrupting
&lt;br&gt;&amp;gt; userspace, at least, with 32-bit userspace on a 64-bit kernel:
&lt;br&gt;&amp;gt; &lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=472795&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bugzilla.redhat.com/show_bug.cgi?id=472795&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;Forgot to say, I use &amp;quot;-o inode64&amp;quot; when mount.
&lt;br&gt;&lt;br&gt;# uname -a
&lt;br&gt;Linux Storage 2.6.31.6-svn40 #30 Tue Dec 15 09:50:02 CST 2009 ppc unknown
&lt;br&gt;# mount
&lt;br&gt;rootfs on / type rootfs (rw)
&lt;br&gt;/dev/root on / type ext2 (rw,relatime,errors=continue)
&lt;br&gt;/dev/mtdblock2 on /mnt/sys_data type jffs2 (rw,relatime)
&lt;br&gt;proc on /proc type proc (rw,relatime)
&lt;br&gt;sysfs on /sys type sysfs (rw,relatime)
&lt;br&gt;tmpfs on /opt/upgrade type tmpfs (rw,relatime)
&lt;br&gt;devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)
&lt;br&gt;/dev/Pool_md2/ss1 on /mnt/Pool_md2/ss1 type xfs
&lt;br&gt;(rw,relatime,attr2,inode64,noquota)
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Even with that fixed there were still some reports of odd behavior
&lt;br&gt;&amp;gt; on ppc... I don't know if things might be going wrong in kernelspace
&lt;br&gt;&amp;gt; as well...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=517994&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bugzilla.redhat.com/show_bug.cgi?id=517994&lt;/a&gt;&lt;br&gt;&amp;gt; and I haven't gotten to the bottom of that yet ...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Very few things actually use sys_ustat, but xfs userspace does...
&lt;br&gt;&amp;gt; just a random thought.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -eric
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Given that oindex and index are stack varibles, this indicates some
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; thing is probably smashing the stack. Possibly a buffer overrun. To
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; narrow down the possible cause, can you add the debug:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;        printk(&amp;quot;%s:%s: oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;                        __func__, __LINE__, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; throughout the xfs_btree_make_block_unfull() function? i.e. at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; first entry, before the xfs_btree_rshift() call, before the
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; xfs_btree_lshift() call, etc, to see if any of the parameters
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; are being modified during execution of the function?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; If the variables being passed into xfs_btree_make_block_unfull() are
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; already bad, then do the same thing for the caller
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; xfs_btree_insert(). This may help narrow down where the problem
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; is coming from....
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Thanks for your reply!
&lt;br&gt;&amp;gt;&amp;gt; As you said, I added some code like this:
&lt;br&gt;&amp;gt;&amp;gt; /* First, try shifting an entry to the right neighbor. */
&lt;br&gt;&amp;gt;&amp;gt;         printk(&amp;quot;%s: before xfs_btree_rshift, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;                         __func__, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;         error = xfs_btree_rshift(cur, level, stat);
&lt;br&gt;&amp;gt;&amp;gt;         if (error || *stat)
&lt;br&gt;&amp;gt;&amp;gt;                 return error;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;         /* Next, try shifting an entry to the left neighbor. */
&lt;br&gt;&amp;gt;&amp;gt;         printk(&amp;quot;%s: before xfs_btree_lshift, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;                         __func__, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;         error = xfs_btree_lshift(cur, level, stat);
&lt;br&gt;&amp;gt;&amp;gt;         if (error)
&lt;br&gt;&amp;gt;&amp;gt;                 return error;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;         if (*stat) {
&lt;br&gt;&amp;gt;&amp;gt;                 printk(&amp;quot;*stat = 0x%08x, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;                                 *stat, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;                 if (oindex == NULL || index == NULL) {
&lt;br&gt;&amp;gt;&amp;gt;                         printk(&amp;quot;BUG occured!\n&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;                         printk(&amp;quot;oindex = %p, index = %p\n&amp;quot;, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;                         BUG();
&lt;br&gt;&amp;gt;&amp;gt;                 }
&lt;br&gt;&amp;gt;&amp;gt;                 *oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;&amp;gt;&amp;gt;                 return 0;
&lt;br&gt;&amp;gt;&amp;gt;         }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; xfs_btree_set_ptr_null(cur, &amp;nptr);
&lt;br&gt;&amp;gt;&amp;gt;         if (numrecs == cur-&amp;gt;bc_ops-&amp;gt;get_maxrecs(cur, level)) {
&lt;br&gt;&amp;gt;&amp;gt;                 printk(&amp;quot;%s: before calling
&lt;br&gt;&amp;gt;&amp;gt; xfs_btree_make_block_unfull, &amp;optr = %p, &amp;ptr = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;                                 __func__, &amp;optr, &amp;ptr);
&lt;br&gt;&amp;gt;&amp;gt;                 error = xfs_btree_make_block_unfull(cur, level, numrecs,
&lt;br&gt;&amp;gt;&amp;gt;                                         &amp;optr, &amp;ptr, &amp;nptr, &amp;ncur, &amp;nrec, stat);
&lt;br&gt;&amp;gt;&amp;gt;                 if (error || *stat == 0)
&lt;br&gt;&amp;gt;&amp;gt;                         goto error0;
&lt;br&gt;&amp;gt;&amp;gt;         }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; We are waiting for OOPS to happen.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I hope it will nerver be memory corrupt problem which is nightmare for
&lt;br&gt;&amp;gt;&amp;gt; me to debug.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Dave.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Dave Chinner
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788907&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;The simplest is not all best but the best is surely the simplest!
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788907&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-BUG-report-xfs_btree_make_block_unfull-generated-an-OOPS-tp26703993p26788907.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26788906</id>
	<title>Re: [BUG report]xfs_btree_make_block_unfull generated an OOPS</title>
	<published>2009-12-14T19:15:09Z</published>
	<updated>2009-12-14T19:15:09Z</updated>
	<author>
		<name>Eric Sandeen-3</name>
	</author>
	<content type="html">hank peng wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 2009/12/15 Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788906&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt; On Tue, Dec 15, 2009 at 08:49:37AM +0800, hank peng wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Hi, Eric:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I add some code like this:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; if (*stat) {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;*stat = 0x%08x, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *stat, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (oindex == NULL || index == NULL) {
&lt;br&gt;&amp;gt;&amp;gt; This won't catch bad non-NULL pointers like you are seeing.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;BUG occured!\n&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;oindex = %p, index = %p\n&amp;quot;, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BUG();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; And the same OOPS happened again but a little different, kernel messages are:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = 00000501, index = 22008424
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Unable to handle kernel paging request for data at address 0x22008424
&lt;/div&gt;&lt;br&gt;Are you using any of the xfs userspace prior to this error, or is it a
&lt;br&gt;fresh boot and just normal IO?
&lt;br&gt;&lt;br&gt;I ask because libxfs calls sys_ustat() which at one point was corrupting
&lt;br&gt;userspace, at least, with 32-bit userspace on a 64-bit kernel:
&lt;br&gt;&lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=472795&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bugzilla.redhat.com/show_bug.cgi?id=472795&lt;/a&gt;&lt;br&gt;&lt;br&gt;Even with that fixed there were still some reports of odd behavior
&lt;br&gt;on ppc... I don't know if things might be going wrong in kernelspace
&lt;br&gt;as well...
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=517994&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bugzilla.redhat.com/show_bug.cgi?id=517994&lt;/a&gt;&lt;br&gt;and I haven't gotten to the bottom of that yet ...
&lt;br&gt;&lt;br&gt;Very few things actually use sys_ustat, but xfs userspace does...
&lt;br&gt;just a random thought.
&lt;br&gt;&lt;br&gt;-eric
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;&amp;gt; Given that oindex and index are stack varibles, this indicates some
&lt;br&gt;&amp;gt;&amp;gt; thing is probably smashing the stack. Possibly a buffer overrun. To
&lt;br&gt;&amp;gt;&amp;gt; narrow down the possible cause, can you add the debug:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printk(&amp;quot;%s:%s: oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;__func__, __LINE__, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; throughout the xfs_btree_make_block_unfull() function? i.e. at
&lt;br&gt;&amp;gt;&amp;gt; first entry, before the xfs_btree_rshift() call, before the
&lt;br&gt;&amp;gt;&amp;gt; xfs_btree_lshift() call, etc, to see if any of the parameters
&lt;br&gt;&amp;gt;&amp;gt; are being modified during execution of the function?
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; If the variables being passed into xfs_btree_make_block_unfull() are
&lt;br&gt;&amp;gt;&amp;gt; already bad, then do the same thing for the caller
&lt;br&gt;&amp;gt;&amp;gt; xfs_btree_insert(). This may help narrow down where the problem
&lt;br&gt;&amp;gt;&amp;gt; is coming from....
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks for your reply!
&lt;br&gt;&amp;gt; As you said, I added some code like this:
&lt;br&gt;&amp;gt; /* First, try shifting an entry to the right neighbor. */
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;%s: before xfs_btree_rshift, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __func__, oindex, index);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error = xfs_btree_rshift(cur, level, stat);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (error || *stat)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return error;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Next, try shifting an entry to the left neighbor. */
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;%s: before xfs_btree_lshift, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __func__, oindex, index);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error = xfs_btree_lshift(cur, level, stat);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (error)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return error;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (*stat) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;*stat = 0x%08x, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *stat, oindex, index);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (oindex == NULL || index == NULL) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;BUG occured!\n&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;oindex = %p, index = %p\n&amp;quot;, oindex, index);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BUG();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; xfs_btree_set_ptr_null(cur, &amp;nptr);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (numrecs == cur-&amp;gt;bc_ops-&amp;gt;get_maxrecs(cur, level)) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;%s: before calling
&lt;br&gt;&amp;gt; xfs_btree_make_block_unfull, &amp;optr = %p, &amp;ptr = %p\n&amp;quot;,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __func__, &amp;optr, &amp;ptr);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error = xfs_btree_make_block_unfull(cur, level, numrecs,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;optr, &amp;ptr, &amp;nptr, &amp;ncur, &amp;nrec, stat);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (error || *stat == 0)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; goto error0;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; We are waiting for OOPS to happen.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I hope it will nerver be memory corrupt problem which is nightmare for
&lt;br&gt;&amp;gt; me to debug.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Dave.
&lt;br&gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; Dave Chinner
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788906&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788906&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-BUG-report-xfs_btree_make_block_unfull-generated-an-OOPS-tp26703993p26788906.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26788229</id>
	<title>Re: [BUG report]xfs_btree_make_block_unfull generated an OOPS</title>
	<published>2009-12-14T17:56:32Z</published>
	<updated>2009-12-14T17:56:32Z</updated>
	<author>
		<name>hank peng</name>
	</author>
	<content type="html">2009/12/15 Dave Chinner &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788229&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Tue, Dec 15, 2009 at 08:49:37AM +0800, hank peng wrote:
&lt;br&gt;&amp;gt;&amp;gt; Hi, Eric:
&lt;br&gt;&amp;gt;&amp;gt; I add some code like this:
&lt;br&gt;&amp;gt;&amp;gt; if (*stat) {
&lt;br&gt;&amp;gt;&amp;gt;                 printk(&amp;quot;*stat = 0x%08x, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;                                 *stat, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;                 if (oindex == NULL || index == NULL) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This won't catch bad non-NULL pointers like you are seeing.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;                         printk(&amp;quot;BUG occured!\n&amp;quot;);
&lt;br&gt;&amp;gt;&amp;gt;                         printk(&amp;quot;oindex = %p, index = %p\n&amp;quot;, oindex, index);
&lt;br&gt;&amp;gt;&amp;gt;                         BUG();
&lt;br&gt;&amp;gt;&amp;gt;                 }
&lt;br&gt;&amp;gt;&amp;gt;                 *oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;&amp;gt;&amp;gt;                 return 0;
&lt;br&gt;&amp;gt;&amp;gt;         }
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; And the same OOPS happened again but a little different, kernel messages are:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt;&amp;gt; *stat = 0x00000001, oindex = 00000501, index = 22008424
&lt;br&gt;&amp;gt;&amp;gt; Unable to handle kernel paging request for data at address 0x22008424
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Given that oindex and index are stack varibles, this indicates some
&lt;br&gt;&amp;gt; thing is probably smashing the stack. Possibly a buffer overrun. To
&lt;br&gt;&amp;gt; narrow down the possible cause, can you add the debug:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;        printk(&amp;quot;%s:%s: oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;                        __func__, __LINE__, oindex, index);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; throughout the xfs_btree_make_block_unfull() function? i.e. at
&lt;br&gt;&amp;gt; first entry, before the xfs_btree_rshift() call, before the
&lt;br&gt;&amp;gt; xfs_btree_lshift() call, etc, to see if any of the parameters
&lt;br&gt;&amp;gt; are being modified during execution of the function?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If the variables being passed into xfs_btree_make_block_unfull() are
&lt;br&gt;&amp;gt; already bad, then do the same thing for the caller
&lt;br&gt;&amp;gt; xfs_btree_insert(). This may help narrow down where the problem
&lt;br&gt;&amp;gt; is coming from....
&lt;br&gt;&amp;gt;
&lt;/div&gt;Thanks for your reply!
&lt;br&gt;As you said, I added some code like this:
&lt;br&gt;/* First, try shifting an entry to the right neighbor. */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;%s: before xfs_btree_rshift, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __func__, oindex, index);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error = xfs_btree_rshift(cur, level, stat);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (error || *stat)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return error;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Next, try shifting an entry to the left neighbor. */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;%s: before xfs_btree_lshift, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __func__, oindex, index);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error = xfs_btree_lshift(cur, level, stat);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (error)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return error;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (*stat) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;*stat = 0x%08x, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *stat, oindex, index);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (oindex == NULL || index == NULL) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;BUG occured!\n&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;oindex = %p, index = %p\n&amp;quot;, oindex, index);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BUG();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&lt;br&gt;xfs_btree_set_ptr_null(cur, &amp;nptr);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (numrecs == cur-&amp;gt;bc_ops-&amp;gt;get_maxrecs(cur, level)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;%s: before calling
&lt;br&gt;xfs_btree_make_block_unfull, &amp;optr = %p, &amp;ptr = %p\n&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __func__, &amp;optr, &amp;ptr);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error = xfs_btree_make_block_unfull(cur, level, numrecs,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;optr, &amp;ptr, &amp;nptr, &amp;ncur, &amp;nrec, stat);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (error || *stat == 0)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; goto error0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&lt;br&gt;We are waiting for OOPS to happen.
&lt;br&gt;&lt;br&gt;I hope it will nerver be memory corrupt problem which is nightmare for
&lt;br&gt;me to debug.
&lt;br&gt;&lt;br&gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Dave.
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Dave Chinner
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788229&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;The simplest is not all best but the best is surely the simplest!
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788229&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-BUG-report-xfs_btree_make_block_unfull-generated-an-OOPS-tp26703993p26788229.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26788017</id>
	<title>Re: [BUG report]xfs_btree_make_block_unfull generated an OOPS</title>
	<published>2009-12-14T17:26:40Z</published>
	<updated>2009-12-14T17:26:40Z</updated>
	<author>
		<name>Dave Chinner</name>
	</author>
	<content type="html">On Tue, Dec 15, 2009 at 08:49:37AM +0800, hank peng wrote:
&lt;br&gt;&amp;gt; Hi, Eric:
&lt;br&gt;&amp;gt; I add some code like this:
&lt;br&gt;&amp;gt; if (*stat) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;*stat = 0x%08x, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *stat, oindex, index);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (oindex == NULL || index == NULL) {
&lt;br&gt;&lt;br&gt;This won't catch bad non-NULL pointers like you are seeing.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;BUG occured!\n&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;oindex = %p, index = %p\n&amp;quot;, oindex, index);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BUG();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; And the same OOPS happened again but a little different, kernel messages are:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt; *stat = 0x00000001, oindex = 00000501, index = 22008424
&lt;br&gt;&amp;gt; Unable to handle kernel paging request for data at address 0x22008424
&lt;/div&gt;&lt;br&gt;Given that oindex and index are stack varibles, this indicates some
&lt;br&gt;thing is probably smashing the stack. Possibly a buffer overrun. To
&lt;br&gt;narrow down the possible cause, can you add the debug:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;%s:%s: oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __func__, __LINE__, oindex, index);
&lt;br&gt;&lt;br&gt;throughout the xfs_btree_make_block_unfull() function? i.e. at
&lt;br&gt;first entry, before the xfs_btree_rshift() call, before the
&lt;br&gt;xfs_btree_lshift() call, etc, to see if any of the parameters
&lt;br&gt;are being modified during execution of the function?
&lt;br&gt;&lt;br&gt;If the variables being passed into xfs_btree_make_block_unfull() are
&lt;br&gt;already bad, then do the same thing for the caller
&lt;br&gt;xfs_btree_insert(). This may help narrow down where the problem
&lt;br&gt;is coming from....
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;Dave.
&lt;br&gt;-- 
&lt;br&gt;Dave Chinner
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788017&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;david@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26788017&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-BUG-report-xfs_btree_make_block_unfull-generated-an-OOPS-tp26703993p26788017.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26787805</id>
	<title>Re: [BUG report]xfs_btree_make_block_unfull generated an OOPS</title>
	<published>2009-12-14T16:58:15Z</published>
	<updated>2009-12-14T16:58:15Z</updated>
	<author>
		<name>hank peng</name>
	</author>
	<content type="html">2009/12/15 hank peng &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787805&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pengxihan@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi, Eric:
&lt;br&gt;&amp;gt; I add some code like this:
&lt;br&gt;&amp;gt; if (*stat) {
&lt;br&gt;&amp;gt;                printk(&amp;quot;*stat = 0x%08x, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;gt;                                *stat, oindex, index);
&lt;br&gt;&amp;gt;                if (oindex == NULL || index == NULL) {
&lt;br&gt;&amp;gt;                        printk(&amp;quot;BUG occured!\n&amp;quot;);
&lt;br&gt;&amp;gt;                        printk(&amp;quot;oindex = %p, index = %p\n&amp;quot;, oindex, index);
&lt;br&gt;&amp;gt;                        BUG();
&lt;br&gt;&amp;gt;                }
&lt;br&gt;&amp;gt;                *oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;&amp;gt;                return 0;
&lt;br&gt;&amp;gt;        }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; And the same OOPS happened again but a little different, kernel messages are:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt; *stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;&amp;gt; *stat = 0x00000001, oindex = 00000501, index = 22008424
&lt;br&gt;&amp;gt; Unable to handle kernel paging request for data at address 0x22008424
&lt;br&gt;&amp;gt; Faulting instruction address: 0xc019f568
&lt;br&gt;&amp;gt; Oops: Kernel access of bad area, sig: 11 [#1]
&lt;br&gt;&amp;gt; MPC85xx CDS
&lt;br&gt;&amp;gt; Modules linked in:
&lt;br&gt;&amp;gt; NIP: c019f568 LR: c019f54c CTR: c023f9f4
&lt;br&gt;&amp;gt; REGS: e87d7af0 TRAP: 0300   Not tainted  (2.6.31.6-svn40)
&lt;br&gt;&amp;gt; MSR: 00029000 &amp;lt;EE,ME,CE&amp;gt;  CR: 22008424  XER: 20000000
&lt;br&gt;&amp;gt; DEAR: 22008424, ESR: 00800000
&lt;br&gt;&amp;gt; TASK = efb03390[17279] 'SS_Server' THREAD: e87d6000
&lt;br&gt;&amp;gt; GPR00: 000001fd e87d7ba0 efb03390 0000003b 00031d91 ffffffff c023cfa4 00031d91
&lt;br&gt;&amp;gt; GPR08: c04a7c40 e84511c8 00031d91 00004000 20008482 1016d410 3fff5400 100a0000
&lt;br&gt;&amp;gt; GPR16: 100d0408 00000000 00000000 e8fa3558 c019d0ac 00029000 e87d7c5c c01876f0
&lt;br&gt;&amp;gt; GPR24: c019d088 00000000 22008424 00000000 00000501 e87d7c58 00000000 e84511c8
&lt;br&gt;&amp;gt; NIP [c019f568] xfs_btree_make_block_unfull+0xe4/0x1f4
&lt;br&gt;&amp;gt; LR [c019f54c] xfs_btree_make_block_unfull+0xc8/0x1f4
&lt;br&gt;&amp;gt; Call Trace:
&lt;br&gt;&amp;gt; [e87d7ba0] [c019f54c] xfs_btree_make_block_unfull+0xc8/0x1f4 (unreliable)
&lt;br&gt;&amp;gt; [e87d7be0] [c019f9ec] xfs_btree_insrec+0x374/0x4b0
&lt;br&gt;&amp;gt; [e87d7c50] [c019fba4] xfs_btree_insert+0x7c/0x1c0
&lt;br&gt;&amp;gt; [e87d7cb0] [c01866ac] xfs_free_ag_extent+0x408/0x810
&lt;br&gt;&amp;gt; [e87d7d20] [c0187188] xfs_free_extent+0xdc/0x104
&lt;br&gt;&amp;gt; [e87d7db0] [c018fe70] xfs_bmap_finish+0x154/0x1a0
&lt;br&gt;&amp;gt; [e87d7de0] [c01b6998] xfs_itruncate_finish+0x254/0x3b8
&lt;br&gt;&amp;gt; [e87d7e60] [c01d0ea0] xfs_free_eofblocks+0x254/0x29c
&lt;br&gt;&amp;gt; [e87d7ee0] [c01da70c] xfs_file_release+0x14/0x28
&lt;br&gt;&amp;gt; [e87d7ef0] [c00957dc] __fput+0xe8/0x1dc
&lt;br&gt;&amp;gt; [e87d7f10] [c00920d8] filp_close+0x70/0xb0
&lt;br&gt;&amp;gt; [e87d7f30] [c00921ac] sys_close+0x94/0xc0
&lt;br&gt;&amp;gt; [e87d7f40] [c000f7cc] ret_from_syscall+0x0/0x3c
&lt;br&gt;&amp;gt; Instruction dump:
&lt;br&gt;&amp;gt; 7f85e378 3863ed7c 7f46d378 4cc63182 4be97ea1 2f9c0000 419e00f8 2f9a0000
&lt;br&gt;&amp;gt; 419e00f0 57c9103a 7d29fa14 80090050 &amp;lt;901a0000&amp;gt; 901c0000 4bffff88 3b810010
&lt;br&gt;&amp;gt; ---[ end trace f245b6a670339d8f ]---
&lt;br&gt;&amp;gt; &amp;lt;/snip&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; As you see, after printing &amp;quot;*stat = 0x00000001, oindex = 00000501,
&lt;br&gt;&amp;gt; index = 22008424&amp;quot;, OOPS happened.
&lt;br&gt;&amp;gt; Although my BUG() was not invoked, it did access bad area.
&lt;br&gt;&amp;gt;
&lt;/div&gt;This is what gdb shows:
&lt;br&gt;&lt;br&gt;(gdb) list *xfs_btree_make_block_unfull+0xe4
&lt;br&gt;0xc019f568 is in xfs_btree_make_block_unfull (fs/xfs/xfs_btree.c:2650).
&lt;br&gt;2645 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (oindex == NULL || index == NULL) {
&lt;br&gt;2646 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printk(&amp;quot;BUG occured!\n&amp;quot;);
&lt;br&gt;2647 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printk(&amp;quot;oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;oindex, index);
&lt;br&gt;2648 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BUG();
&lt;br&gt;2649 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;2650 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;/* why alaways here????? */
&lt;br&gt;2651 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 0;
&lt;br&gt;2652 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;2653
&lt;br&gt;2654 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/*
&lt;br&gt;(gdb)
&lt;br&gt;Why suddenly abnormal? memory corrupt? If so, why this OOPS always
&lt;br&gt;occured at the same place?
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2009/12/14 Eric Sandeen &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787805&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sandeen@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt; hank peng wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Hi,Eric:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I think I have found the reason to this problem, but I need you a little help.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; We have tested it again, and the same OOPS occured again:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Ok, let's keep this on the list please ...
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Unable to handle kernel paging request for data at address 0x00000000
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Faulting instruction address: 0xc019f4b8
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Oops: Kernel access of bad area, sig: 11 [#1]
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; MPC85xx CDS
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Modules linked in:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; NIP: c019f4b8 LR: c019f490 CTR: 00000000
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; REGS: ef965af0 TRAP: 0300   Not tainted  (2.6.31.6-svn40)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; MSR: 00029000 &amp;lt;EE,ME,CE&amp;gt;  CR: 22008284  XER: 00000000
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; DEAR: 00000000, ESR: 00800000
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; TASK = e8a56580[3450] 'SS_Server' THREAD: ef964000
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; GPR00: 000001fd ef965ba0 e8a56580 00000000 00000000 00000001 00000001 00000001
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; GPR08: e8fa10e8 e8fa1a18 e8fa10f0 000001fd 22008222 1016d410 3fff5400 100a0000
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; GPR16: 100d2408 00000000 00000000 d42b12f8 c019d01c 00029000 ef965c5c c0187660
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; GPR24: c019cff8 00000000 22008224 ef965c08 00000000 ef965c58 00000000 e8fa1a18
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; NIP [c019f4b8] xfs_btree_make_block_unfull+0xc4/0x1b0
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; LR [c019f490] xfs_btree_make_block_unfull+0x9c/0x1b0
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Call Trace:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965ba0] [c019f490] xfs_btree_make_block_unfull+0x9c/0x1b0 (unreliable)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965be0] [c019f918] xfs_btree_insrec+0x374/0x4b0
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965c50] [c019fad0] xfs_btree_insert+0x7c/0x1c0
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965cb0] [c018661c] xfs_free_ag_extent+0x408/0x810
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965d20] [c01870f8] xfs_free_extent+0xdc/0x104
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965db0] [c018fde0] xfs_bmap_finish+0x154/0x1a0
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965de0] [c01b68c4] xfs_itruncate_finish+0x254/0x3b8
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965e60] [c01d0dcc] xfs_free_eofblocks+0x254/0x29c
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965ee0] [c01da638] xfs_file_release+0x14/0x28
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965ef0] [c009574c] __fput+0xe8/0x1dc
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965f10] [c0092048] filp_close+0x70/0xb0
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965f30] [c009211c] sys_close+0x94/0xc0
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [ef965f40] [c000f784] ret_from_syscall+0x0/0x3c
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Instruction dump:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 7fa5eb78 4bffdf59 7c7c1b79 40a2ffd4 801d0000 2f800000 419e0064 57c9103a
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 7f83e378 7d29fa14 80090050 90170000 &amp;lt;90190000&amp;gt; 80010044 bae1001c 38210040
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ---[ end trace 356726176eeecd9c ]---
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Oops: Exception in kernel mode, sig: 4 [#2]
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; MPC85xx CDS
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Modules linked in:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; NIP: c0187660 LR: c019b26c CTR: c0187660
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; REGS: d42076a0 TRAP: 0700   Tainted: G      D     (2.6.31.6-svn40)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; MSR: 00029000 &amp;lt;EE,ME,CE&amp;gt;  CR: 22222082  XER: 00000000
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; TASK = e08a6ee0[8533] 'pdflush' THREAD: d4206000
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; GPR00: 00000004 d4207750 e08a6ee0 d42b1098 00000001 00000001 e8e97d80 00000003
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; GPR08: c2c65300 c0187660 41425443 41425443 00001000 1001a1c4 c01842f8 00000001
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; GPR16: d4207880 d42077e0 00000002 d42077d8 d42077e0 d42077e8 d42b10ec 00000001
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; GPR24: c0486be0 00000000 d42b1098 09c40000 c019b4f0 00000011 e88bf000 d4207750
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; NIP [c0187660] xfs_allocbt_get_maxrecs+0x0/0x20
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; LR [c019b26c] xfs_btree_check_sblock+0xb0/0xf8
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Call Trace:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207770] [c019b4f0] xfs_btree_read_buf_block+0x8c/0xb8
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d42077a0] [c019b5a8] xfs_btree_lookup_get_block+0x8c/0xfc
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d42077d0] [c019c638] xfs_btree_lookup+0x124/0x3fc
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207850] [c01842f8] xfs_alloc_lookup_ge+0x20/0x30
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207860] [c0185828] xfs_alloc_ag_vextent_near+0x60/0xa4c
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d42078e0] [c0186af4] xfs_alloc_ag_vextent+0xd0/0x168
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207900] [c01873f0] xfs_alloc_vextent+0x2d0/0x524
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207940] [c01940fc] xfs_bmap_btalloc+0x274/0xa60
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207a00] [c01988bc] xfs_bmapi+0xb30/0x10dc
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207b40] [c01bb190] xfs_iomap_write_allocate+0x11c/0x450
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207c00] [c01bc2e8] xfs_iomap+0x320/0x35c
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207c80] [c01d5d5c] xfs_map_blocks+0x2c/0x40
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207ca0] [c01d6dc0] xfs_page_state_convert+0x2e8/0x744
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207d60] [c01d7384] xfs_vm_writepage+0x7c/0x128
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207d90] [c006d740] __writepage+0x24/0x80
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207da0] [c006db44] write_cache_pages+0x1e4/0x3a0
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207e50] [c01d5e14] xfs_vm_writepages+0x24/0x34
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207e60] [c006dd70] do_writepages+0x48/0x7c
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207e70] [c00b2120] writeback_single_inode+0xf8/0x2e4
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207ec0] [c00b2788] generic_sync_sb_inodes+0x280/0x398
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207ef0] [c00b295c] writeback_inodes+0xb8/0xd4
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207f10] [c006ece0] wb_kupdate+0xd4/0x154
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207f70] [c006f3bc] pdflush+0xd4/0x1c4
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; [d4207fc0] [c004c750] kthread+0x78/0x7c
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;...&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; There were another OOPS which followed the first one.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; After the first oops I think the rest is not interesting, things
&lt;br&gt;&amp;gt;&amp;gt; are in bad shape by now.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Please note that
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; in the second OOPS, a SIGILL has been invoked and address of illegal
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; instrucion is 0xc0187660.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; In the first OOPS, look at the following registers:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; GPR00: 000001fd ef965ba0 e8a56580 00000000 00000000 00000001 00000001 00000001
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; GPR08: e8fa10e8 e8fa1a18 e8fa10f0 000001fd 22008222 1016d410 3fff5400 100a0000
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; GPR16: 100d2408 00000000 00000000 d42b12f8 c019d01c 00029000 ef965c5c c0187660
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; GPR24: c019cff8 00000000 22008224 ef965c08 00000000 ef965c58 00000000 e8fa1a18
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I noticed that the value of r23 is also 0xc0187660. I have a little
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; powerpc assembly code knowledge, if I am not wrong,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; *oindex = *index = cur-&amp;gt;bc_ptrs[level];' in fs/xfs/xfs_btree.c was
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; built into the following asm code which I send it to you ealier:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 80 09 00 50     lwz     r0,80(r9)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 90 17 00 00     stw     r0,0(r23)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 90 19 00 00     stw     r0,0(r25)              &amp;lt;OOPs occured here&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; So, r23 should have pointed to address of index and never had a chace
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; to point to a code adress, but it did. What's worse, the code at
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 0xc0187660 had been changed and the second OOPS happened imediately.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Could you correct my analysis if I am wrong?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; In addition, I think the problem may be caused by stack overflow, what
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; is your comments?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Perhaps, but if this is the 2nd oops I think it is not worth investigating;
&lt;br&gt;&amp;gt;&amp;gt; we need to figure out why the first one happened, and from that stack trace
&lt;br&gt;&amp;gt;&amp;gt; I don't think you are close to overflowing...
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; -eric
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 2009/12/9 hank peng &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787805&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pengxihan@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2009/12/9 hank peng &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787805&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pengxihan@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2009/12/9 Eric Sandeen &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787805&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sandeen@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; hank peng wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2009/12/9 Eric Sandeen &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787805&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sandeen@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; hank peng wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks for your replay.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I made this conclusion from assembly code, correct me if I am wrong.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; #powerpc-linux-gnuspe-objdump vmlinux | less
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (off list; if this works maybe you can reply on-list?)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Could you use gdb to look?  Maybe:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (gdb) list *xfs_btree_make_block_unfull+0xc4
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I use gdb on my PC and get this:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [root@localhost linux-2.6.31.6]# gdb vmlinux
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; GNU gdb Red Hat Linux (6.5-37.el5rh)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Copyright (C) 2006 Free Software Foundation, Inc.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; GDB is free software, covered by the GNU General Public License, and you are
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; welcome to change it and/or distribute copies of it under certain conditions.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Type &amp;quot;show copying&amp;quot; to see the conditions.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; This GDB was configured as &amp;quot;i386-redhat-linux-gnu&amp;quot;...Using host
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (gdb) list *xfs_btree_make_block_unfull+0xc4
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; No source file for address 0xc019ea28.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (gdb)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -Eric
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; so I guess it is not built with debugging symbols perhaps?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Try rebuilding it with CONFIG_DEBUG_INFO on maybe?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; yes, you are right, now I get the result:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (gdb) l *xfs_btree_make_block_unfull+0xc4
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 0xc019ea30 is in xfs_btree_make_block_unfull (fs/xfs/xfs_btree.c:2643).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2638            error = xfs_btree_lshift(cur, level, stat);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2639            if (error)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2640                    return error;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2641
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2642            if (*stat) {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2643                    *oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2644                    return 0;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2645            }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2646
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2647            /*
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; It indeed points to &amp;quot;*oindex = *index = cur-&amp;gt;bc_ptrs[level];&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Very strange, as you said, xfs_btree_insrec passes address local
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; variable to xfs_btree_make_block_unfull, so it is impossible for
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; oindex to be NULL.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Do you think it may be an memory corrupt?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -Eric
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The simplest is not all best but the best is surely the simplest!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The simplest is not all best but the best is surely the simplest!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; The simplest is not all best but the best is surely the simplest!
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;The simplest is not all best but the best is surely the simplest!
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787805&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-BUG-report-xfs_btree_make_block_unfull-generated-an-OOPS-tp26703993p26787805.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26787804</id>
	<title>Re: [BUG report]xfs_btree_make_block_unfull generated an OOPS</title>
	<published>2009-12-14T16:49:37Z</published>
	<updated>2009-12-14T16:49:37Z</updated>
	<author>
		<name>hank peng</name>
	</author>
	<content type="html">Hi, Eric:
&lt;br&gt;I add some code like this:
&lt;br&gt;if (*stat) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;*stat = 0x%08x, oindex = %p, index = %p\n&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *stat, oindex, index);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (oindex == NULL || index == NULL) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;BUG occured!\n&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printk(&amp;quot;oindex = %p, index = %p\n&amp;quot;, oindex, index);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BUG();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 0;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;And the same OOPS happened again but a little different, kernel messages are:
&lt;br&gt;&lt;br&gt;&amp;lt;snip&amp;gt;
&lt;br&gt;*stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;*stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;*stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;*stat = 0x00000001, oindex = e87d7bf8, index = e87d7bfc
&lt;br&gt;*stat = 0x00000001, oindex = 00000501, index = 22008424
&lt;br&gt;Unable to handle kernel paging request for data at address 0x22008424
&lt;br&gt;Faulting instruction address: 0xc019f568
&lt;br&gt;Oops: Kernel access of bad area, sig: 11 [#1]
&lt;br&gt;MPC85xx CDS
&lt;br&gt;Modules linked in:
&lt;br&gt;NIP: c019f568 LR: c019f54c CTR: c023f9f4
&lt;br&gt;REGS: e87d7af0 TRAP: 0300 &amp;nbsp; Not tainted &amp;nbsp;(2.6.31.6-svn40)
&lt;br&gt;MSR: 00029000 &amp;lt;EE,ME,CE&amp;gt; &amp;nbsp;CR: 22008424 &amp;nbsp;XER: 20000000
&lt;br&gt;DEAR: 22008424, ESR: 00800000
&lt;br&gt;TASK = efb03390[17279] 'SS_Server' THREAD: e87d6000
&lt;br&gt;GPR00: 000001fd e87d7ba0 efb03390 0000003b 00031d91 ffffffff c023cfa4 00031d91
&lt;br&gt;GPR08: c04a7c40 e84511c8 00031d91 00004000 20008482 1016d410 3fff5400 100a0000
&lt;br&gt;GPR16: 100d0408 00000000 00000000 e8fa3558 c019d0ac 00029000 e87d7c5c c01876f0
&lt;br&gt;GPR24: c019d088 00000000 22008424 00000000 00000501 e87d7c58 00000000 e84511c8
&lt;br&gt;NIP [c019f568] xfs_btree_make_block_unfull+0xe4/0x1f4
&lt;br&gt;LR [c019f54c] xfs_btree_make_block_unfull+0xc8/0x1f4
&lt;br&gt;Call Trace:
&lt;br&gt;[e87d7ba0] [c019f54c] xfs_btree_make_block_unfull+0xc8/0x1f4 (unreliable)
&lt;br&gt;[e87d7be0] [c019f9ec] xfs_btree_insrec+0x374/0x4b0
&lt;br&gt;[e87d7c50] [c019fba4] xfs_btree_insert+0x7c/0x1c0
&lt;br&gt;[e87d7cb0] [c01866ac] xfs_free_ag_extent+0x408/0x810
&lt;br&gt;[e87d7d20] [c0187188] xfs_free_extent+0xdc/0x104
&lt;br&gt;[e87d7db0] [c018fe70] xfs_bmap_finish+0x154/0x1a0
&lt;br&gt;[e87d7de0] [c01b6998] xfs_itruncate_finish+0x254/0x3b8
&lt;br&gt;[e87d7e60] [c01d0ea0] xfs_free_eofblocks+0x254/0x29c
&lt;br&gt;[e87d7ee0] [c01da70c] xfs_file_release+0x14/0x28
&lt;br&gt;[e87d7ef0] [c00957dc] __fput+0xe8/0x1dc
&lt;br&gt;[e87d7f10] [c00920d8] filp_close+0x70/0xb0
&lt;br&gt;[e87d7f30] [c00921ac] sys_close+0x94/0xc0
&lt;br&gt;[e87d7f40] [c000f7cc] ret_from_syscall+0x0/0x3c
&lt;br&gt;Instruction dump:
&lt;br&gt;7f85e378 3863ed7c 7f46d378 4cc63182 4be97ea1 2f9c0000 419e00f8 2f9a0000
&lt;br&gt;419e00f0 57c9103a 7d29fa14 80090050 &amp;lt;901a0000&amp;gt; 901c0000 4bffff88 3b810010
&lt;br&gt;---[ end trace f245b6a670339d8f ]---
&lt;br&gt;&amp;lt;/snip&amp;gt;
&lt;br&gt;&lt;br&gt;As you see, after printing &amp;quot;*stat = 0x00000001, oindex = 00000501,
&lt;br&gt;index = 22008424&amp;quot;, OOPS happened.
&lt;br&gt;Although my BUG() was not invoked, it did access bad area.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;2009/12/14 Eric Sandeen &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787804&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sandeen@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; hank peng wrote:
&lt;br&gt;&amp;gt;&amp;gt; Hi,Eric:
&lt;br&gt;&amp;gt;&amp;gt; I think I have found the reason to this problem, but I need you a little help.
&lt;br&gt;&amp;gt;&amp;gt; We have tested it again, and the same OOPS occured again:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Ok, let's keep this on the list please ...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Unable to handle kernel paging request for data at address 0x00000000
&lt;br&gt;&amp;gt;&amp;gt; Faulting instruction address: 0xc019f4b8
&lt;br&gt;&amp;gt;&amp;gt; Oops: Kernel access of bad area, sig: 11 [#1]
&lt;br&gt;&amp;gt;&amp;gt; MPC85xx CDS
&lt;br&gt;&amp;gt;&amp;gt; Modules linked in:
&lt;br&gt;&amp;gt;&amp;gt; NIP: c019f4b8 LR: c019f490 CTR: 00000000
&lt;br&gt;&amp;gt;&amp;gt; REGS: ef965af0 TRAP: 0300   Not tainted  (2.6.31.6-svn40)
&lt;br&gt;&amp;gt;&amp;gt; MSR: 00029000 &amp;lt;EE,ME,CE&amp;gt;  CR: 22008284  XER: 00000000
&lt;br&gt;&amp;gt;&amp;gt; DEAR: 00000000, ESR: 00800000
&lt;br&gt;&amp;gt;&amp;gt; TASK = e8a56580[3450] 'SS_Server' THREAD: ef964000
&lt;br&gt;&amp;gt;&amp;gt; GPR00: 000001fd ef965ba0 e8a56580 00000000 00000000 00000001 00000001 00000001
&lt;br&gt;&amp;gt;&amp;gt; GPR08: e8fa10e8 e8fa1a18 e8fa10f0 000001fd 22008222 1016d410 3fff5400 100a0000
&lt;br&gt;&amp;gt;&amp;gt; GPR16: 100d2408 00000000 00000000 d42b12f8 c019d01c 00029000 ef965c5c c0187660
&lt;br&gt;&amp;gt;&amp;gt; GPR24: c019cff8 00000000 22008224 ef965c08 00000000 ef965c58 00000000 e8fa1a18
&lt;br&gt;&amp;gt;&amp;gt; NIP [c019f4b8] xfs_btree_make_block_unfull+0xc4/0x1b0
&lt;br&gt;&amp;gt;&amp;gt; LR [c019f490] xfs_btree_make_block_unfull+0x9c/0x1b0
&lt;br&gt;&amp;gt;&amp;gt; Call Trace:
&lt;br&gt;&amp;gt;&amp;gt; [ef965ba0] [c019f490] xfs_btree_make_block_unfull+0x9c/0x1b0 (unreliable)
&lt;br&gt;&amp;gt;&amp;gt; [ef965be0] [c019f918] xfs_btree_insrec+0x374/0x4b0
&lt;br&gt;&amp;gt;&amp;gt; [ef965c50] [c019fad0] xfs_btree_insert+0x7c/0x1c0
&lt;br&gt;&amp;gt;&amp;gt; [ef965cb0] [c018661c] xfs_free_ag_extent+0x408/0x810
&lt;br&gt;&amp;gt;&amp;gt; [ef965d20] [c01870f8] xfs_free_extent+0xdc/0x104
&lt;br&gt;&amp;gt;&amp;gt; [ef965db0] [c018fde0] xfs_bmap_finish+0x154/0x1a0
&lt;br&gt;&amp;gt;&amp;gt; [ef965de0] [c01b68c4] xfs_itruncate_finish+0x254/0x3b8
&lt;br&gt;&amp;gt;&amp;gt; [ef965e60] [c01d0dcc] xfs_free_eofblocks+0x254/0x29c
&lt;br&gt;&amp;gt;&amp;gt; [ef965ee0] [c01da638] xfs_file_release+0x14/0x28
&lt;br&gt;&amp;gt;&amp;gt; [ef965ef0] [c009574c] __fput+0xe8/0x1dc
&lt;br&gt;&amp;gt;&amp;gt; [ef965f10] [c0092048] filp_close+0x70/0xb0
&lt;br&gt;&amp;gt;&amp;gt; [ef965f30] [c009211c] sys_close+0x94/0xc0
&lt;br&gt;&amp;gt;&amp;gt; [ef965f40] [c000f784] ret_from_syscall+0x0/0x3c
&lt;br&gt;&amp;gt;&amp;gt; Instruction dump:
&lt;br&gt;&amp;gt;&amp;gt; 7fa5eb78 4bffdf59 7c7c1b79 40a2ffd4 801d0000 2f800000 419e0064 57c9103a
&lt;br&gt;&amp;gt;&amp;gt; 7f83e378 7d29fa14 80090050 90170000 &amp;lt;90190000&amp;gt; 80010044 bae1001c 38210040
&lt;br&gt;&amp;gt;&amp;gt; ---[ end trace 356726176eeecd9c ]---
&lt;br&gt;&amp;gt;&amp;gt; Oops: Exception in kernel mode, sig: 4 [#2]
&lt;br&gt;&amp;gt;&amp;gt; MPC85xx CDS
&lt;br&gt;&amp;gt;&amp;gt; Modules linked in:
&lt;br&gt;&amp;gt;&amp;gt; NIP: c0187660 LR: c019b26c CTR: c0187660
&lt;br&gt;&amp;gt;&amp;gt; REGS: d42076a0 TRAP: 0700   Tainted: G      D     (2.6.31.6-svn40)
&lt;br&gt;&amp;gt;&amp;gt; MSR: 00029000 &amp;lt;EE,ME,CE&amp;gt;  CR: 22222082  XER: 00000000
&lt;br&gt;&amp;gt;&amp;gt; TASK = e08a6ee0[8533] 'pdflush' THREAD: d4206000
&lt;br&gt;&amp;gt;&amp;gt; GPR00: 00000004 d4207750 e08a6ee0 d42b1098 00000001 00000001 e8e97d80 00000003
&lt;br&gt;&amp;gt;&amp;gt; GPR08: c2c65300 c0187660 41425443 41425443 00001000 1001a1c4 c01842f8 00000001
&lt;br&gt;&amp;gt;&amp;gt; GPR16: d4207880 d42077e0 00000002 d42077d8 d42077e0 d42077e8 d42b10ec 00000001
&lt;br&gt;&amp;gt;&amp;gt; GPR24: c0486be0 00000000 d42b1098 09c40000 c019b4f0 00000011 e88bf000 d4207750
&lt;br&gt;&amp;gt;&amp;gt; NIP [c0187660] xfs_allocbt_get_maxrecs+0x0/0x20
&lt;br&gt;&amp;gt;&amp;gt; LR [c019b26c] xfs_btree_check_sblock+0xb0/0xf8
&lt;br&gt;&amp;gt;&amp;gt; Call Trace:
&lt;br&gt;&amp;gt;&amp;gt; [d4207770] [c019b4f0] xfs_btree_read_buf_block+0x8c/0xb8
&lt;br&gt;&amp;gt;&amp;gt; [d42077a0] [c019b5a8] xfs_btree_lookup_get_block+0x8c/0xfc
&lt;br&gt;&amp;gt;&amp;gt; [d42077d0] [c019c638] xfs_btree_lookup+0x124/0x3fc
&lt;br&gt;&amp;gt;&amp;gt; [d4207850] [c01842f8] xfs_alloc_lookup_ge+0x20/0x30
&lt;br&gt;&amp;gt;&amp;gt; [d4207860] [c0185828] xfs_alloc_ag_vextent_near+0x60/0xa4c
&lt;br&gt;&amp;gt;&amp;gt; [d42078e0] [c0186af4] xfs_alloc_ag_vextent+0xd0/0x168
&lt;br&gt;&amp;gt;&amp;gt; [d4207900] [c01873f0] xfs_alloc_vextent+0x2d0/0x524
&lt;br&gt;&amp;gt;&amp;gt; [d4207940] [c01940fc] xfs_bmap_btalloc+0x274/0xa60
&lt;br&gt;&amp;gt;&amp;gt; [d4207a00] [c01988bc] xfs_bmapi+0xb30/0x10dc
&lt;br&gt;&amp;gt;&amp;gt; [d4207b40] [c01bb190] xfs_iomap_write_allocate+0x11c/0x450
&lt;br&gt;&amp;gt;&amp;gt; [d4207c00] [c01bc2e8] xfs_iomap+0x320/0x35c
&lt;br&gt;&amp;gt;&amp;gt; [d4207c80] [c01d5d5c] xfs_map_blocks+0x2c/0x40
&lt;br&gt;&amp;gt;&amp;gt; [d4207ca0] [c01d6dc0] xfs_page_state_convert+0x2e8/0x744
&lt;br&gt;&amp;gt;&amp;gt; [d4207d60] [c01d7384] xfs_vm_writepage+0x7c/0x128
&lt;br&gt;&amp;gt;&amp;gt; [d4207d90] [c006d740] __writepage+0x24/0x80
&lt;br&gt;&amp;gt;&amp;gt; [d4207da0] [c006db44] write_cache_pages+0x1e4/0x3a0
&lt;br&gt;&amp;gt;&amp;gt; [d4207e50] [c01d5e14] xfs_vm_writepages+0x24/0x34
&lt;br&gt;&amp;gt;&amp;gt; [d4207e60] [c006dd70] do_writepages+0x48/0x7c
&lt;br&gt;&amp;gt;&amp;gt; [d4207e70] [c00b2120] writeback_single_inode+0xf8/0x2e4
&lt;br&gt;&amp;gt;&amp;gt; [d4207ec0] [c00b2788] generic_sync_sb_inodes+0x280/0x398
&lt;br&gt;&amp;gt;&amp;gt; [d4207ef0] [c00b295c] writeback_inodes+0xb8/0xd4
&lt;br&gt;&amp;gt;&amp;gt; [d4207f10] [c006ece0] wb_kupdate+0xd4/0x154
&lt;br&gt;&amp;gt;&amp;gt; [d4207f70] [c006f3bc] pdflush+0xd4/0x1c4
&lt;br&gt;&amp;gt;&amp;gt; [d4207fc0] [c004c750] kthread+0x78/0x7c
&lt;br&gt;&amp;gt;&amp;gt; &amp;lt;...&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; There were another OOPS which followed the first one.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; After the first oops I think the rest is not interesting, things
&lt;br&gt;&amp;gt; are in bad shape by now.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Please note that
&lt;br&gt;&amp;gt;&amp;gt; in the second OOPS, a SIGILL has been invoked and address of illegal
&lt;br&gt;&amp;gt;&amp;gt; instrucion is 0xc0187660.
&lt;br&gt;&amp;gt;&amp;gt; In the first OOPS, look at the following registers:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; GPR00: 000001fd ef965ba0 e8a56580 00000000 00000000 00000001 00000001 00000001
&lt;br&gt;&amp;gt;&amp;gt; GPR08: e8fa10e8 e8fa1a18 e8fa10f0 000001fd 22008222 1016d410 3fff5400 100a0000
&lt;br&gt;&amp;gt;&amp;gt; GPR16: 100d2408 00000000 00000000 d42b12f8 c019d01c 00029000 ef965c5c c0187660
&lt;br&gt;&amp;gt;&amp;gt; GPR24: c019cff8 00000000 22008224 ef965c08 00000000 ef965c58 00000000 e8fa1a18
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I noticed that the value of r23 is also 0xc0187660. I have a little
&lt;br&gt;&amp;gt;&amp;gt; powerpc assembly code knowledge, if I am not wrong,
&lt;br&gt;&amp;gt;&amp;gt; *oindex = *index = cur-&amp;gt;bc_ptrs[level];' in fs/xfs/xfs_btree.c was
&lt;br&gt;&amp;gt;&amp;gt; built into the following asm code which I send it to you ealier:
&lt;br&gt;&amp;gt;&amp;gt; 80 09 00 50     lwz     r0,80(r9)
&lt;br&gt;&amp;gt;&amp;gt; 90 17 00 00     stw     r0,0(r23)
&lt;br&gt;&amp;gt;&amp;gt; 90 19 00 00     stw     r0,0(r25)              &amp;lt;OOPs occured here&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; So, r23 should have pointed to address of index and never had a chace
&lt;br&gt;&amp;gt;&amp;gt; to point to a code adress, but it did. What's worse, the code at
&lt;br&gt;&amp;gt;&amp;gt; 0xc0187660 had been changed and the second OOPS happened imediately.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Could you correct my analysis if I am wrong?
&lt;br&gt;&amp;gt;&amp;gt; In addition, I think the problem may be caused by stack overflow, what
&lt;br&gt;&amp;gt;&amp;gt; is your comments?
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; Perhaps, but if this is the 2nd oops I think it is not worth investigating;
&lt;br&gt;&amp;gt; we need to figure out why the first one happened, and from that stack trace
&lt;br&gt;&amp;gt; I don't think you are close to overflowing...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -eric
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; 2009/12/9 hank peng &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787804&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pengxihan@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 2009/12/9 hank peng &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787804&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;pengxihan@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2009/12/9 Eric Sandeen &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787804&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sandeen@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; hank peng wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2009/12/9 Eric Sandeen &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787804&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sandeen@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; hank peng wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks for your replay.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I made this conclusion from assembly code, correct me if I am wrong.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; #powerpc-linux-gnuspe-objdump vmlinux | less
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;snip&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (off list; if this works maybe you can reply on-list?)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Could you use gdb to look?  Maybe:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (gdb) list *xfs_btree_make_block_unfull+0xc4
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I use gdb on my PC and get this:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [root@localhost linux-2.6.31.6]# gdb vmlinux
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; GNU gdb Red Hat Linux (6.5-37.el5rh)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Copyright (C) 2006 Free Software Foundation, Inc.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; GDB is free software, covered by the GNU General Public License, and you are
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; welcome to change it and/or distribute copies of it under certain conditions.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Type &amp;quot;show copying&amp;quot; to see the conditions.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; There is absolutely no warranty for GDB.  Type &amp;quot;show warranty&amp;quot; for details.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; This GDB was configured as &amp;quot;i386-redhat-linux-gnu&amp;quot;...Using host
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (gdb) list *xfs_btree_make_block_unfull+0xc4
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; No source file for address 0xc019ea28.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (gdb)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -Eric
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; so I guess it is not built with debugging symbols perhaps?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Try rebuilding it with CONFIG_DEBUG_INFO on maybe?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; yes, you are right, now I get the result:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (gdb) l *xfs_btree_make_block_unfull+0xc4
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 0xc019ea30 is in xfs_btree_make_block_unfull (fs/xfs/xfs_btree.c:2643).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2638            error = xfs_btree_lshift(cur, level, stat);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2639            if (error)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2640                    return error;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2641
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2642            if (*stat) {
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2643                    *oindex = *index = cur-&amp;gt;bc_ptrs[level];
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2644                    return 0;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2645            }
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2646
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2647            /*
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; It indeed points to &amp;quot;*oindex = *index = cur-&amp;gt;bc_ptrs[level];&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Very strange, as you said, xfs_btree_insrec passes address local
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; variable to xfs_btree_make_block_unfull, so it is impossible for
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; oindex to be NULL.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Do you think it may be an memory corrupt?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -Eric
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The simplest is not all best but the best is surely the simplest!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; The simplest is not all best but the best is surely the simplest!
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;The simplest is not all best but the best is surely the simplest!
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;xfs mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26787804&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xfs@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://oss.sgi.com/mailman/listinfo/xfs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.sgi.com/mailman/listinfo/xfs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-BUG-report-xfs_btree_make_block_unfull-generated-an-OOPS-tp26703993p26787804.html" />
</entry>

</feed>
