GFS2: Tag all metadata with jid
authorSteven Whitehouse <swhiteho@redhat.com>
Fri, 6 Nov 2009 16:20:51 +0000 (16:20 +0000)
committerSteven Whitehouse <swhiteho@redhat.com>
Thu, 3 Dec 2009 11:58:47 +0000 (11:58 +0000)
commit0ab7d13fcbd7ce1658c563e345990ba453719deb
tree5db7f97c264883765da4a9c6324019f0cf746e44
parent2c77634965ee28c8b4790ffb5e83dd5ff7ac8988
GFS2: Tag all metadata with jid

There are two spare field in the header common to all GFS2
metadata. One is just the right size to fit a journal id
in it, and this patch updates the journal code so that each
time a metadata block is modified, we tag it with the journal
id of the node which is performing the modification.

The reason for this is that it should make it much easier to
debug issues which arise if we can tell which node was the
last to modify a particular metadata block.

Since the field is updated before the block is written into
the journal, each journal should only contain metadata which
is tagged with its own journal id. The one exception to this
is the journal header block, which might have a different node's
id in it, if that journal was recovered by another node in the
cluster.

Thus each journal will contain a record of which nodes recovered
it, via the journal header.

The other field in the metadata header could potentially be
used to hold information about what kind of operation was
performed, but for the time being we just zero it on each
transaction so that if we use it for that in future, we'll
know that the information (where it exists) is reliable.

I did consider using the other field to hold the journal
sequence number, however since in GFS2's journaling we write
the modified data into the journal and not the original
data, this gives no information as to what action caused the
modification, so I think we can probably come up with a better
use for those 64 bits in the future.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/inode.c
fs/gfs2/log.c
fs/gfs2/lops.c
fs/gfs2/recovery.c
include/linux/gfs2_ondisk.h