<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/fs/xfs/linux-2.6, branch linux-2.6.37.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-2.6.37.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-2.6.37.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2010-12-01T13:40:20Z</updated>
<entry>
<title>xfs: push stale, pinned buffers on trylock failures</title>
<updated>2010-12-01T13:40:20Z</updated>
<author>
<name>Dave Chinner</name>
</author>
<published>2010-11-30T04:16:16Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=90810b9e82a36c3c57c1aeb8b2918b242a130b26'/>
<id>urn:sha1:90810b9e82a36c3c57c1aeb8b2918b242a130b26</id>
<content type='text'>
As reported by Nick Piggin, XFS is suffering from long pauses under
highly concurrent workloads when hosted on ramdisks. The problem is
that an inode buffer is stuck in the pinned state in memory and as a
result either the inode buffer or one of the inodes within the
buffer is stopping the tail of the log from being moved forward.

The system remains in this state until a periodic log force issued
by xfssyncd causes the buffer to be unpinned. The main problem is
that these are stale buffers, and are hence held locked until the
transaction/checkpoint that marked them state has been committed to
disk. When the filesystem gets into this state, only the xfssyncd
can cause the async transactions to be committed to disk and hence
unpin the inode buffer.

This problem was encountered when scaling the busy extent list, but
only the blocking lock interface was fixed to solve the problem.
Extend the same fix to the buffer trylock operations - if we fail to
lock a pinned, stale buffer, then force the log immediately so that
when the next attempt to lock it comes around, it will have been
unpinned.

Signed-off-by: Dave Chinner &lt;dchinner@redhat.com&gt;
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
</content>
</entry>
<entry>
<title>xfs: fix failed write truncation handling.</title>
<updated>2010-12-01T13:40:19Z</updated>
<author>
<name>Dave Chinner</name>
</author>
<published>2010-11-30T04:14:39Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c726de4409a8d3a03877b1ef4342bfe8a15f5e5e'/>
<id>urn:sha1:c726de4409a8d3a03877b1ef4342bfe8a15f5e5e</id>
<content type='text'>
Since the move to the new truncate sequence we call xfs_setattr to
truncate down excessively instanciated blocks.  As shown by the testcase
in kernel.org BZ #22452 that doesn't work too well.  Due to the confusion
of the internal inode size, and the VFS inode i_size it zeroes data that
it shouldn't.

But full blown truncate seems like overkill here.  We only instanciate
delayed allocations in the write path, and given that we never released
the iolock we can't have converted them to real allocations yet either.

The only nasty case is pre-existing preallocation which we need to skip.
We already do this for page discard during writeback, so make the delayed
allocation block punching a generic function and call it from the failed
write path as well as xfs_aops_discard_page. The callers are
responsible for ensuring that partial blocks are not truncated away,
and that they hold the ilock.

Based on a fix originally from Christoph Hellwig. This version used
filesystem blocks as the range unit.

Signed-off-by: Dave Chinner &lt;dchinner@redhat.com&gt;
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
</content>
</entry>
<entry>
<title>xfs: remove incorrect assert in xfs_vm_writepage</title>
<updated>2010-11-10T21:51:10Z</updated>
<author>
<name>Christoph Hellwig</name>
</author>
<published>2010-11-10T21:39:11Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ece413f59f257682de4a2e2e42af33b016af53f3'/>
<id>urn:sha1:ece413f59f257682de4a2e2e42af33b016af53f3</id>
<content type='text'>
In commit 20cb52ebd1b5ca6fa8a5d9b6b1392292f5ca8a45, titled
"xfs: simplify xfs_vm_writepage" I added an assert that any !mapped and
uptodate buffers are not dirty.  That asserts turns out to trigger a lot
when running fsx on filesystems with small block sizes.  The reason for
that is that the assert is simply incorrect.  !mapped and uptodate
just mean this buffer covers a hole, and whenever we do a set_page_dirty
we mark all blocks in the page dirty, no matter if they have data or
not.  So remove the assert, and update the comment above the condition
to match reality.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Alex Elder &lt;aelder@sgi.com&gt;
</content>
</entry>
<entry>
<title>xfs: use hlist_add_fake</title>
<updated>2010-11-10T18:00:48Z</updated>
<author>
<name>Christoph Hellwig</name>
</author>
<published>2010-11-06T11:43:08Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c6f6cd0608b1826ee1797cf57a808416e4bdb806'/>
<id>urn:sha1:c6f6cd0608b1826ee1797cf57a808416e4bdb806</id>
<content type='text'>
XFS does not need it's inodes to actuall be hashed in the VFS inode
cache, but we require the inode to be marked hashed for the
writeback code to work.

Insted of using insert_inode_hash, which requires a second
inode_lock roundtrip after the partial merge of the inode
scalability patches in 2.6.37-rc simply use the new hlist_add_fake
helper to mark it hashed without requiring a lock or touching a
global cache line.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Alex Elder &lt;aelder@sgi.com&gt;
</content>
</entry>
<entry>
<title>xfs: move delayed write buffer trace</title>
<updated>2010-11-10T18:00:48Z</updated>
<author>
<name>Dave Chinner</name>
</author>
<published>2010-11-08T08:55:05Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=bfe2741967eaa3434fa9b3d8f24b1422d4540e7d'/>
<id>urn:sha1:bfe2741967eaa3434fa9b3d8f24b1422d4540e7d</id>
<content type='text'>
The delayed write buffer split trace currently issues a trace for
every buffer it scans. These buffers are not necessarily queued for
delayed write. Indeed, when buffers are pinned, there can be
thousands of traces of buffers that aren't actually queued for
delayed write and the ones that are are lost in the noise. Move the
trace point to record only buffers that are split out for IO to be
issued on.

Signed-off-by: Dave Chinner &lt;dchinner@redhat.com&gt;
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Alex Elder &lt;aelder@sgi.com&gt;
</content>
</entry>
<entry>
<title>xfs: fix per-ag reference counting in inode reclaim tree walking</title>
<updated>2010-11-10T18:00:48Z</updated>
<author>
<name>Dave Chinner</name>
</author>
<published>2010-11-08T08:55:04Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f83282a8ef799c0bdcb0c32971487087da1bc216'/>
<id>urn:sha1:f83282a8ef799c0bdcb0c32971487087da1bc216</id>
<content type='text'>
The walk fails to decrement the per-ag reference count when the
non-blocking walk fails to obtain the per-ag reclaim lock, leading
to an assert failure on debug kernels when unmounting a filesystem.

Signed-off-by: Dave Chinner &lt;dchinner@redhat.com&gt;
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Alex Elder &lt;aelder@sgi.com&gt;
</content>
</entry>
<entry>
<title>xfs: xfs_ioctl: fix information leak to userland</title>
<updated>2010-11-10T18:00:47Z</updated>
<author>
<name>Kulikov Vasiliy</name>
</author>
<published>2010-10-30T14:26:17Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=6762b938eac878a30a90e770ac655874c36bc642'/>
<id>urn:sha1:6762b938eac878a30a90e770ac655874c36bc642</id>
<content type='text'>
al_hreq is copied from userland.  If al_hreq.buflen is not properly aligned
then xfs_attr_list will ignore the last bytes of kbuf.  These bytes are
unitialized.  It leads to leaking of contents of kernel stack memory.

Signed-off-by: Vasiliy Kulikov &lt;segooon@gmail.com&gt;
Signed-off-by: Alex Elder &lt;aelder@sgi.com&gt;
</content>
</entry>
<entry>
<title>xfs: remove experimental tag from the delaylog option</title>
<updated>2010-11-10T18:00:47Z</updated>
<author>
<name>Christoph Hellwig</name>
</author>
<published>2010-10-28T21:37:10Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=5d0af85cd0964bb845b63d5059bb20e8f7731e65'/>
<id>urn:sha1:5d0af85cd0964bb845b63d5059bb20e8f7731e65</id>
<content type='text'>
We promised to do this for 2.6.37, and the code looks stable enough to
keep that promise.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Reviewed-by: Dave Chinner &lt;dchinner@redhat.com&gt;
Signed-off-by: Alex Elder &lt;aelder@sgi.com&gt;
</content>
</entry>
<entry>
<title>new helper: mount_bdev()</title>
<updated>2010-10-29T08:16:13Z</updated>
<author>
<name>Al Viro</name>
</author>
<published>2010-07-24T20:46:55Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=152a08366671080f27b32e0c411ad620c5f88b57'/>
<id>urn:sha1:152a08366671080f27b32e0c411ad620c5f88b57</id>
<content type='text'>
... and switch of the obvious get_sb_bdev() users to -&gt;mount()

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
</entry>
<entry>
<title>Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6</title>
<updated>2010-10-27T00:58:44Z</updated>
<author>
<name>Linus Torvalds</name>
</author>
<published>2010-10-27T00:58:44Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=426e1f5cec4821945642230218876b0e89aafab1'/>
<id>urn:sha1:426e1f5cec4821945642230218876b0e89aafab1</id>
<content type='text'>
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (52 commits)
  split invalidate_inodes()
  fs: skip I_FREEING inodes in writeback_sb_inodes
  fs: fold invalidate_list into invalidate_inodes
  fs: do not drop inode_lock in dispose_list
  fs: inode split IO and LRU lists
  fs: switch bdev inode bdi's correctly
  fs: fix buffer invalidation in invalidate_list
  fsnotify: use dget_parent
  smbfs: use dget_parent
  exportfs: use dget_parent
  fs: use RCU read side protection in d_validate
  fs: clean up dentry lru modification
  fs: split __shrink_dcache_sb
  fs: improve DCACHE_REFERENCED usage
  fs: use percpu counter for nr_dentry and nr_dentry_unused
  fs: simplify __d_free
  fs: take dcache_lock inside __d_path
  fs: do not assign default i_ino in new_inode
  fs: introduce a per-cpu last_ino allocator
  new helper: ihold()
  ...
</content>
</entry>
</feed>
