<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/fs/gfs2/dir.h, 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-08T09:52:12Z</updated>
<entry>
<title>GFS2: Add readahead to sequential directory traversal</title>
<updated>2011-11-08T09:52:12Z</updated>
<author>
<name>Bob Peterson</name>
</author>
<published>2011-10-27T16:16:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=dfe4d34b39b80faff52489f950a18523da7581bf'/>
<id>urn:sha1:dfe4d34b39b80faff52489f950a18523da7581bf</id>
<content type='text'>
This patch adds read-ahead capability to GFS2's
directory hash table management.  It greatly improves
performance for some directory operations.  For example:
In one of my file systems that has 1000 directories, each
of which has 1000 files, time to execute a recursive
ls (time ls -fR /mnt/gfs2 &gt; /dev/null) was reduced
from 2m2.814s on a stock kernel to 0m45.938s.

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: When adding a new dir entry, inc link count if it is a subdir</title>
<updated>2011-05-09T15:43:53Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2011-05-09T12:30:08Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=3d6ecb7d16fd4248fce58387a982a0756ad3fcc2'/>
<id>urn:sha1:3d6ecb7d16fd4248fce58387a982a0756ad3fcc2</id>
<content type='text'>
This adds an increment of the link count when we add a new directory
entry, if that entry is itself a directory. This means that we no
longer need separate code to perform this operation.

Now that both adding and removing directory entries automatically
update the parent directory's link count if required, that makes
the code shorter and simpler than before.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: Make gfs2_dir_del update link count when required</title>
<updated>2011-05-09T15:42:37Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2011-05-09T15:42:37Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=855d23ce2665c56437bd88fa6a0d45b6713bd194'/>
<id>urn:sha1:855d23ce2665c56437bd88fa6a0d45b6713bd194</id>
<content type='text'>
When we remove an entry from a directory, we can save ourselves
some trouble if we know the type of the entry in question, since
if it is itself a directory, we can update the link count of the
parent at the same time as removing the directory entry.

In addition this patch also merges the rmdir and unlink code which
was almost identical anyway. This eliminates the calls to remove
the . and .. directory entries on each rmdir (not needed since the
directory will be deallocated, anyway) which was the only thing preventing
passing the dentry to gfs2_dir_del(). The passing of the dentry
rather than just the name allows us to figure out the type of the entry
which is being removed, and thus adjust the link count when required.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: Make . and .. qstrs constant</title>
<updated>2010-09-20T10:21:09Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2010-09-17T11:30:23Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=8d1235852b462cfb66aa036bd4a2686763c69ed4'/>
<id>urn:sha1:8d1235852b462cfb66aa036bd4a2686763c69ed4</id>
<content type='text'>
Rather than calculating the qstrs for . and .. each time
we need them, its better to keep a constant version of
these and just refer to them when required.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Reviewed-by: Christoph Hellwig &lt;hch@infradead.org&gt;
</content>
</entry>
<entry>
<title>GFS2: Fix bug in gfs2_lock_fs_check_clean()</title>
<updated>2009-01-05T07:39:11Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2008-11-26T12:49:26Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b52896813c2f16bcc5c5b67bb3c3f75bc084439b'/>
<id>urn:sha1:b52896813c2f16bcc5c5b67bb3c3f75bc084439b</id>
<content type='text'>
gfs2_lock_fs_check_clean() should not be calling gfs2_jindex_hold()
since it doesn't work like rindex hold, despite the comment. That
allows gfs2_jindex_hold() to be moved into ops_fstype.c where it
can be made static.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>[GFS2] Clean up inode number handling</title>
<updated>2007-07-09T07:22:24Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2007-05-15T14:37:50Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=dbb7cae2a36170cd17ffbe286ec0c91a998740ff'/>
<id>urn:sha1:dbb7cae2a36170cd17ffbe286ec0c91a998740ff</id>
<content type='text'>
This patch cleans up the inode number handling code. The main difference
is that instead of looking up the inodes using a struct gfs2_inum_host
we now use just the no_addr member of this structure. The tests relating
to no_formal_ino can then be done by the calling code. This has
advantages in that we want to do different things in different code
paths if the no_formal_ino doesn't match. In the NFS patch we want to
return -ESTALE, but in the -&gt;lookup() path, its a bug in the fs if the
no_formal_ino doesn't match and thus we can withdraw in this case.

In order to later fix bz #201012, we need to be able to look up an inode
without knowing no_formal_ino, as the only information that is known to
us is the on-disk location of the inode in question.

This patch will also help us to fix bz #236099 at a later date by
cleaning up a lot of the code in that area.

There are no user visible changes as a result of this patch and there
are no changes to the on-disk format either.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>[GFS2] Clean up/speed up readdir</title>
<updated>2007-02-05T18:37:04Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2007-01-17T15:09:20Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=3699e3a44bf56e0cd58c97e8655f375ad9b65d9d'/>
<id>urn:sha1:3699e3a44bf56e0cd58c97e8655f375ad9b65d9d</id>
<content type='text'>
This removes the extra filldir callback which gfs2 was using to
enclose an attempt at readahead for inodes during readdir. The
code was too complicated and also hurts performance badly in the
case that the getdents64/readdir call isn't being followed by
stat() and it wasn't even getting it right all the time when it
was.

As a result, on my test box an "ls" of a directory containing 250000
files fell from about 7mins (freshly mounted, so nothing cached) to
between about 15 to 25 seconds. When the directory content was cached,
the time taken fell from about 3mins to about 4 or 5 seconds.

Interestingly in the cached case, running "ls -l" once reduced the time
taken for subsequent runs of "ls" to about 6 secs even without this
patch. Now it turns out that there was a special case of glocks being
used for prefetching the metadata, but because of the timeouts for these
locks (set to 10 secs) the metadata was being timed out before it was
being used and this the prefetch code was constantly trying to prefetch
the same data over and over.

Calling "ls -l" meant that the inodes were brought into memory and once
the inodes are cached, the glocks are not disposed of until the inodes
are pushed out of the cache, thus extending the lifetime of the glocks,
and thus bringing down the time for subsequent runs of "ls"
considerably.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>[GFS2] split and annotate gfs2_inum</title>
<updated>2006-11-30T15:33:32Z</updated>
<author>
<name>Al Viro</name>
</author>
<published>2006-10-14T02:51:24Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=629a21e7ecedf779c68dcaa9a186069f57a7c652'/>
<id>urn:sha1:629a21e7ecedf779c68dcaa9a186069f57a7c652</id>
<content type='text'>
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>[GFS2] Make headers compile on their own</title>
<updated>2006-09-05T14:39:21Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2006-09-05T14:39:21Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f2f7ba5237e2fe10ba3e328a4f728b9e1ff141da'/>
<id>urn:sha1:f2f7ba5237e2fe10ba3e328a4f728b9e1ff141da</id>
<content type='text'>
As per Jan Engelhardt's comments, this should make all the headers
compile on their own by including and/or declaring structures
early.

Cc: Jan Engelhardt &lt;jengelh@linux01.gwdg.de&gt;
Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
</feed>
