<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/fs/gfs2/glops.c, branch linux-3.14.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.14.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.14.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2014-01-16T10:31:13Z</updated>
<entry>
<title>GFS2: Don't use ENOBUFS when ENOMEM is the correct error code</title>
<updated>2014-01-16T10:31:13Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2014-01-16T10:31:13Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ac3beb6a5de048e7c0676f630ad2048a7b37b305'/>
<id>urn:sha1:ac3beb6a5de048e7c0676f630ad2048a7b37b305</id>
<content type='text'>
Al Viro has tactfully pointed out that we are using the incorrect
error code in some cases. This patch fixes that, and also removes
the (unused) return value for glock dumping.

&gt;        * gfs2_iget() - ENOBUFS instead of ENOMEM.  ENOBUFS is
&gt; "No buffer space available (POSIX.1 (XSI STREAMS option))" and since
&gt; we don't support STREAMS it's probably fair game, but... what the hell?

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Cc: Al Viro &lt;viro@ZenIV.linux.org.uk&gt;
</content>
</entry>
<entry>
<title>GFS2: Use only a single address space for rgrps</title>
<updated>2014-01-03T10:01:50Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2013-12-06T16:19:54Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=70d4ee94b370c5ef54d0870600f16bd92d18013c'/>
<id>urn:sha1:70d4ee94b370c5ef54d0870600f16bd92d18013c</id>
<content type='text'>
Prior to this patch, GFS2 had one address space for each rgrp,
stored in the glock. This patch changes them to use a single
address space in the super block. This therefore saves
(sizeof(struct address_space) * nr_of_rgrps) bytes of memory
and for large filesystems, that can be significant.

It would be nice to be able to do something similar and merge
the inode metadata address space into the same global
address space. However, that is rather more complicated as the
on-disk location doesn't have a 1:1 mapping with the inodes in
general. So while it could be done, it will be a more complicated
operation as it requires changing a lot more code paths.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: Use range based functions for rgrp sync/invalidation</title>
<updated>2014-01-03T10:00:31Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2013-12-06T10:16:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=7005c3e4ae42858dbb695b2d03d340af799b1f1b'/>
<id>urn:sha1:7005c3e4ae42858dbb695b2d03d340af799b1f1b</id>
<content type='text'>
Each rgrp header is represented as a single extent on disk, so we
can calculate the position within the address space, since we are
using address spaces mapped 1:1 to the disk. This means that it
is possible to use the range based versions of filemap_fdatawrite/wait
and for invalidating the page cache.

Our eventual intent is to then be able to merge the address spaces
used for rgrps into a single address space, rather than to have
one for each glock, saving memory and reducing complexity.

Since during umount, the rgrp structures are disposed of before
the glocks, we need to store the extent information in the glock
so that is is available for a final invalidation. This patch uses
a field which is otherwise unused in rgrp glocks to do that, so
that we do not have to expand the size of a glock.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: Wait for async DIO in glock state changes</title>
<updated>2013-12-20T10:42:08Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2013-12-19T11:04:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=582d2f7aedfde9e1a01170deb003df510aa778d3'/>
<id>urn:sha1:582d2f7aedfde9e1a01170deb003df510aa778d3</id>
<content type='text'>
We need to wait for any outstanding DIO to complete in a couple
of situations. Firstly, in case we are changing out of deferred
mode (in inode_go_sync) where GLF_DIRTY will not be set. That
call could be prefixed with a test for gl_state == LM_ST_DEFERRED
but it doesn't seem worth it bearing in mind that the test for
outstanding DIO is very quick anyway, in the usual case that there
is none.

The second case is in inode_go_lock which will catch the cases
where we have a cached EX lock, but where we grant deferred locks
against it so that there is no glock state transistion. We only
need to wait if the state is not deferred, since DIO is valid
anyway in that state.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: Use lockref for glocks</title>
<updated>2013-10-15T14:18:08Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2013-10-15T14:18:08Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=e66cf161098a634dc96e32d0089c5767cf25668a'/>
<id>urn:sha1:e66cf161098a634dc96e32d0089c5767cf25668a</id>
<content type='text'>
Currently glocks have an atomic reference count and also a spinlock
which covers various internal fields, such as the state. This intent of
this patch is to replace the spinlock and the atomic reference count
with a lockref structure. This contains a spinlock which we can continue
to use as before, and a reference counter which is used in conjuction
with the spinlock to replace the previous atomic counter.

As a result of this there are some new rules for reference counting on
glocks. We need to distinguish between reference count changes under
gl_spin (which are now just increment or decrement of the new counter,
provided the count cannot hit zero) and those which are outside of
gl_spin, but which now take gl_spin internally.

The conversion is relatively straight forward. There is probably some
further clean up which can be done, but the priority at this stage is to
make the change in as simple a manner as possible.

A consequence of this change is that the reference count is being
decoupled from the lru list processing. This should allow future
adoption of the lru_list code with glocks in due course.

The reason for using the "dead" state and not just relying on 0 being
the "invalid state" is so that in due course 0 ref counts can be
allowable. The intent is to eventually be able to remove the ref count
changes which are currently hidden away in state_change().

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: don't overrun reserved revokes</title>
<updated>2013-08-19T08:33:16Z</updated>
<author>
<name>Benjamin Marzinski</name>
</author>
<published>2013-07-26T22:09:33Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=1bc333f4cf601f77ba0f5046ff226fe654e83bee'/>
<id>urn:sha1:1bc333f4cf601f77ba0f5046ff226fe654e83bee</id>
<content type='text'>
When run during fsync, a gfs2_log_flush could happen between the
time when gfs2_ail_flush checked the number of blocks to revoke,
and when it actually started the transaction to do those revokes.
This occassionally caused it to need more revokes than it reserved,
causing gfs2 to crash.

Instead of just reserving enough revokes to handle the blocks that
currently need them, this patch makes gfs2_ail_flush reserve the
maximum number of revokes it can, without increasing the total number
of reserved log blocks. This patch also passes the number of reserved
revokes to __gfs2_ail_flush() so that it doesn't go over its limit
and cause a crash like we're seeing. Non-fsync calls to __gfs2_ail_flush
will still cause a BUG() necessary revokes are skipped.

Signed-off-by: Benjamin Marzinski &lt;bmarzins@redhat.com&gt;
Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>GFS2: aggressively issue revokes in gfs2_log_flush</title>
<updated>2013-06-19T08:41:59Z</updated>
<author>
<name>Benjamin Marzinski</name>
</author>
<published>2013-06-14T16:38:29Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=5d054964f57ade1adb310313c3cfb8e93e804e8f'/>
<id>urn:sha1:5d054964f57ade1adb310313c3cfb8e93e804e8f</id>
<content type='text'>
This patch looks at all the outstanding blocks in all the transactions
on the log, and moves the completed ones to the ail2 list.  Then it
issues revokes for these blocks.  This will hopefully speed things up
in situations where there is a lot of contention for glocks, especially
if they are acquired serially.

revoke_lo_before_commit will issue at most one log block's full of these
preemptive revokes. The amount of reserved log space that
gfs2_log_reserve() ignores has been incremented to allow for this extra
block.

This patch also consolidates the common revoke instructions into one
function, gfs2_add_revoke().

Signed-off-by: Benjamin Marzinski &lt;bmarzins@redhat.com&gt;
Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;

</content>
</entry>
<entry>
<title>GFS2: Add origin indicator to glock callbacks</title>
<updated>2013-04-10T09:26:55Z</updated>
<author>
<name>Steven Whitehouse</name>
</author>
<published>2013-04-10T09:26:55Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=81ffbf654f0cfeeb44e69832b3d301958a4108d8'/>
<id>urn:sha1:81ffbf654f0cfeeb44e69832b3d301958a4108d8</id>
<content type='text'>
This patch adds a bool indicating whether the demote
request was originated locally or remotely. This is then
used by the iopen -&gt;go_callback() to make 100% sure that
it will only respond to remote callbacks.

Since -&gt;evict_inode() uses GL_NOCACHE when it attempts to
get an exclusive lock on the iopen lock, this may result
in extra scheduling of the workqueue in case that the
exclusive promotion request failed. This patch prevents
that from happening.

Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
</content>
</entry>
<entry>
<title>gfs2: Convert uids and gids between dinodes and vfs inodes.</title>
<updated>2013-02-13T14:15:11Z</updated>
<author>
<name>Eric W. Biederman</name>
</author>
<published>2013-02-01T06:08:10Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d0546426426ca96f0b815581c0a9ed0db28319b6'/>
<id>urn:sha1:d0546426426ca96f0b815581c0a9ed0db28319b6</id>
<content type='text'>
When reading dinodes from the disk convert uids and gids
into kuids and kgids to store in vfs data structures.

When writing to dinodes to the disk convert kuids and kgids
in the in memory structures into plain uids and gids.

For now all on disk data structures are assumed to be
stored in the initial user namespace.

Cc: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Signed-off-by: "Eric W. Biederman" &lt;ebiederm@xmission.com&gt;
</content>
</entry>
<entry>
<title>GFS2: only use lvb on glocks that need it</title>
<updated>2012-11-15T10:16:59Z</updated>
<author>
<name>David Teigland</name>
</author>
<published>2012-11-14T18:46:53Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=dba2d70c5dc520fdb569d1fd8dbd45c0e330253e'/>
<id>urn:sha1:dba2d70c5dc520fdb569d1fd8dbd45c0e330253e</id>
<content type='text'>
Save the effort of allocating, reading and writing
the lvb for most glocks that do not use it.

Signed-off-by: David Teigland &lt;teigland@redhat.com&gt;
Signed-off-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;

</content>
</entry>
</feed>
