<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/fs/gfs2/glops.c, branch linux-3.3.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.3.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.3.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2011-11-02T11:53:43Z</updated>
<entry>
<title>filesystems: add set_nlink()</title>
<updated>2011-11-02T11:53:43Z</updated>
<author>
<name>Miklos Szeredi</name>
</author>
<published>2011-10-28T12:13:29Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=bfe8684869601dacfcb2cd69ef8cfd9045f62170'/>
<id>urn:sha1:bfe8684869601dacfcb2cd69ef8cfd9045f62170</id>
<content type='text'>
Replace remaining direct i_nlink updates with a new set_nlink()
updater function.

Signed-off-by: Miklos Szeredi &lt;mszeredi@suse.cz&gt;
Tested-by: Toshiyuki Okajima &lt;toshi.okajima@jp.fujitsu.com&gt;
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
</content>
</entry>
<entry>
<title>GFS2: Fix AIL flush issue during fsync</title>
<updated>2011-10-21T11:39:41Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2011-09-07T09:33:25Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b5b24d7aeb9608935786369ac2d3e9f362877d55'/>
<id>urn:sha1:b5b24d7aeb9608935786369ac2d3e9f362877d55</id>
<content type='text'>
Unfortunately, it is not enough to just ignore locked buffers during
the AIL flush from fsync. We need to be able to ignore all buffers
which are locked, dirty or pinned at this stage as they might have
been added subsequent to the log flush earlier in the fsync function.

In addition, this means that we no longer need to rely on i_mutex to
keep out writes during fsync, so we can, as a side-effect, remove
that protection too.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Tested-By: Abhijith Das &lt;adas@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: Make resource groups "append only" during life of fs</title>
<updated>2011-10-21T11:39:33Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2011-08-31T15:38:29Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=8339ee543ece6e2dcc1bbd97d5350163c198cf00'/>
<id>urn:sha1:8339ee543ece6e2dcc1bbd97d5350163c198cf00</id>
<content type='text'>
Since we have ruled out supporting online filesystem shrink,
it is possible to make the resource group list append only
during the life of a super block. This gives several benefits:

Firstly, we only need to read new rindex elements as they are added
rather than needing to reread the whole rindex file each time one
element is added.

Secondly, the rindex glock can be held for much shorter periods of
time, and is completely removed from the fast path for allocations.
The lock is taken in shared mode only when updating the resource
groups when the first allocation occurs, and after a grow has
taken place.

Thirdly, this results in a reduction in code size, and everything
gets a lot simpler to understand in this area.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: Use rbtree for resource groups and clean up bitmap buffer ref count scheme</title>
<updated>2011-10-21T11:39:31Z</updated>
<author>
<name>Bob Peterson</name>
</author>
<published>2011-08-31T08:53:19Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=7c9ca621137cde26be05448133fc1a554345f4f8'/>
<id>urn:sha1:7c9ca621137cde26be05448133fc1a554345f4f8</id>
<content type='text'>
Here is an update of Bob's original rbtree patch which, in addition, also
resolves the rather strange ref counting that was being done relating to
the bitmap blocks.

Originally we had a dual system for journaling resource groups. The metadata
blocks were journaled and also the rgrp itself was added to a list. The reason
for adding the rgrp to the list in the journal was so that the "repolish
clones" code could be run to update the free space, and potentially send any
discard requests when the log was flushed. This was done by comparing the
"cloned" bitmap with what had been written back on disk during the transaction
commit.

Due to this, there was a requirement to hang on to the rgrps' bitmap buffers
until the journal had been flushed. For that reason, there was a rather
complicated set up in the -&gt;go_lock -&gt;go_unlock functions for rgrps involving
both a mutex and a spinlock (the -&gt;sd_rindex_spin) to maintain a reference
count on the buffers.

However, the journal maintains a reference count on the buffers anyway, since
they are being journaled as metadata buffers. So by moving the code which deals
with the post-journal accounting for bitmap blocks to the metadata journaling
code, we can entirely dispense with the rather strange buffer ref counting
scheme and also the requirement to journal the rgrps.

The net result of all this is that the -&gt;sd_rindex_spin is left to do exactly
one job, and that is to look after the rbtree or rgrps.

This patch is designed to be a stepping stone towards using RCU for the rbtree
of resource groups, however the reduction in the number of uses of the
-&gt;sd_rindex_spin is likely to have benefits for multi-threaded workloads,
anyway.

The patch retains -&gt;go_lock and -&gt;go_unlock for rgrps, however these maybe also
be removed in future in favour of calling the functions directly where required
in the code. That will allow locking of resource groups without needing to
actually read them in - something that could be useful in speeding up statfs.

In the mean time though it is valid to dereference -&gt;bi_bh only when the rgrp
is locked. This is basically the same rule as before, modulo the references not
being valid until the following journal flush.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Signed-off-by: Bob Peterson &lt;rpeterso@redhat.com&gt;
Cc: Benjamin Marzinski &lt;bmarzins@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: Fix bug trap and journaled data fsync</title>
<updated>2011-10-21T11:39:25Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2011-08-05T09:12:47Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f18185291d605ea9e442e00e2cf6c917a84d9837'/>
<id>urn:sha1:f18185291d605ea9e442e00e2cf6c917a84d9837</id>
<content type='text'>
Journaled data requires that a complete flush of all dirty data for
the file is done, in order that the ail flush which comes after
will succeed.

Also the recently enhanced bug trap can trigger falsely in case
an ail flush from fsync races with a page read. This updates the
bug trap such that it will ignore buffers which are locked and
only trigger on dirty and/or pinned buffers when the ail flush
is run from fsync. The original bug trap is retained when ail
flush is run from -&gt;go_sync()

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: Fix bug-trap in ail flush code</title>
<updated>2011-10-21T11:39:20Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2011-08-02T12:09:36Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=75549186edf1515062fe2fcbfbd92bd99659afba'/>
<id>urn:sha1:75549186edf1515062fe2fcbfbd92bd99659afba</id>
<content type='text'>
The assert was being tested under the wrong lock, a
legacy of the original code. Also, if it does trigger,
the resulting information was not always a lot of help.

This moves the patch under the correct lock and also
prints out more useful information in tacking down the
source of the problem.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: Add S_NOSEC support</title>
<updated>2011-07-15T08:32:35Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2011-06-16T13:06:55Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=9964afbb797329e4c6e5d05ebc199c39af618c5f'/>
<id>urn:sha1:9964afbb797329e4c6e5d05ebc199c39af618c5f</id>
<content type='text'>
This adds S_NOSEC support to GFS2. We set/reset the flag either when
a user calls setattr or when we have just regained the glock
from another node. The flag is only set if there are no xattrs
on the inode and there is no suid bit set.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Reviewed-by: Andi Kleen &lt;ak@linux.intel.com&gt;
Cc: Al Viro &lt;viro@ZenIV.linux.org.uk&gt;
</content>
</entry>
<entry>
<title>GFS2: Automatically adjust glock min hold time</title>
<updated>2011-07-15T08:32:11Z</updated>
<author>
<name>Bob Peterson</name>
</author>
<published>2011-06-15T15:41:48Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=7cf8dcd3b68a760d66fbc7f0d75d3fbb8f21775d'/>
<id>urn:sha1:7cf8dcd3b68a760d66fbc7f0d75d3fbb8f21775d</id>
<content type='text'>
This patch is a performance improvement for GFS2 in a clustered
environment. It makes the glock hold time self-adjusting.

Signed-off-by: Bob Peterson &lt;rpeterso@redhat.com&gt;
Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: Cache dir hash table in a contiguous buffer</title>
<updated>2011-07-15T08:31:48Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2011-06-15T09:29:37Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=17d539f0499fa2c0321b7c260831cca2bb36d119'/>
<id>urn:sha1:17d539f0499fa2c0321b7c260831cca2bb36d119</id>
<content type='text'>
This patch adds a cache for the hash table to the directory code
in order to help simplify the way in which the hash table is
accessed. This is intended to be a first step towards introducing
some performance improvements in the directory code.

There are two follow ups that I'm hoping to see fairly shortly. One
is to simplify the hash table reading code now that we always read the
complete hash table, whether we want one entry or all of them. The
other is to introduce readahead on the heads of the hash chains
which are referred to from the table.

The hash table is a maximum of 128k in size, so it is not worth trying
to read it in small chunks.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: Resolve inode eviction and ail list interaction bug</title>
<updated>2011-07-14T07:59:44Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2011-07-14T07:59:44Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=380f7c65a7eb3288e4b6812acf3474a1de230707'/>
<id>urn:sha1:380f7c65a7eb3288e4b6812acf3474a1de230707</id>
<content type='text'>
This patch contains a few misc fixes which resolve a recently
reported issue. This patch has been a real team effort and has
received a lot of testing.

The first issue is that the ail lock needs to be held over a few
more operations. The lock thats added into gfs2_releasepage() may
possibly be a candidate for replacing with RCU at some future
point, but at this stage we've gone for the obvious fix.

The second issue is that gfs2_write_inode() can end up calling
a glock recursively when called from gfs2_evict_inode() via the
syncing code, so it needs a guard added.

The third issue is that we either need to not truncate the metadata
pages of inodes which have zero link count, but which we cannot
deallocate due to them still being in use by other nodes, or we need
to ensure that those pages have all made it through the journal and
ail lists first. This patch takes the former approach, but the
latter has also been tested and there is nothing to choose between
them performance-wise. So again, we could revise that decision
in the future.

Also, the inode eviction process is now better documented.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Tested-by: Bob Peterson &lt;rpeterso@redhat.com&gt;
Tested-by: Abhijith Das &lt;adas@redhat.com&gt;
Reported-by: Barry J. Marson &lt;bmarson@redhat.com&gt;
Reported-by: David Teigland &lt;teigland@redhat.com&gt;
</content>
</entry>
</feed>
