* [Cluster-devel] [gfs2-utils PATCH] gfs2-utils: Wrong hash value used to clean journals
[not found] <1020823401.52190420.1544796956864.JavaMail.zimbra@redhat.com>
@ 2018-12-14 14:16 ` Bob Peterson
2018-12-14 15:26 ` Andrew Price
0 siblings, 1 reply; 2+ messages in thread
From: Bob Peterson @ 2018-12-14 14:16 UTC (permalink / raw)
To: cluster-devel.redhat.com
Hi,
When fsck.gfs2 sees a dirty journal, (one that does not have a
log header with the UNMOUNT flag set at the wrap-point), it replays
the journal and writes a log header out to "clean" the journal.
Unfortunately, before this patch, it was using the wrong hash value.
So every time fsck.gfs2 was run, it would not recognize its own
log header because of the wrong hash, and therefore it would always
see the journal as dirty with every run (until the file system is
mounted and unmounted, which would write a new correct log header).
Therefore, multiple runs of fsck.gfs2 would always result in a
replay of the journal, which remains "dirty."
This patch changes function clean_journal so that it uses the
correct hash function. Therefore, the journal will be truly clean
and consecutive runs (or mounts) will find the journal clean.
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
---
gfs2/libgfs2/recovery.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gfs2/libgfs2/recovery.c b/gfs2/libgfs2/recovery.c
index 6b14bf94..06f81116 100644
--- a/gfs2/libgfs2/recovery.c
+++ b/gfs2/libgfs2/recovery.c
@@ -241,7 +241,7 @@ int clean_journal(struct gfs2_inode *ip, struct gfs2_log_header *head)
lh->lh_sequence = cpu_to_be64(head->lh_sequence + 1);
lh->lh_flags = cpu_to_be32(GFS2_LOG_HEAD_UNMOUNT);
lh->lh_blkno = cpu_to_be32(lblock);
- hash = gfs2_disk_hash((const char *)lh, sizeof(struct gfs2_log_header));
+ hash = lgfs2_log_header_hash(bh->b_data);
lh->lh_hash = cpu_to_be32(hash);
bmodified(bh);
brelse(bh);
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [Cluster-devel] [gfs2-utils PATCH] gfs2-utils: Wrong hash value used to clean journals
2018-12-14 14:16 ` [Cluster-devel] [gfs2-utils PATCH] gfs2-utils: Wrong hash value used to clean journals Bob Peterson
@ 2018-12-14 15:26 ` Andrew Price
0 siblings, 0 replies; 2+ messages in thread
From: Andrew Price @ 2018-12-14 15:26 UTC (permalink / raw)
To: cluster-devel.redhat.com
On 14/12/2018 14:16, Bob Peterson wrote:
> Hi,
>
> When fsck.gfs2 sees a dirty journal, (one that does not have a
> log header with the UNMOUNT flag set at the wrap-point), it replays
> the journal and writes a log header out to "clean" the journal.
> Unfortunately, before this patch, it was using the wrong hash value.
> So every time fsck.gfs2 was run, it would not recognize its own
> log header because of the wrong hash, and therefore it would always
> see the journal as dirty with every run (until the file system is
> mounted and unmounted, which would write a new correct log header).
> Therefore, multiple runs of fsck.gfs2 would always result in a
> replay of the journal, which remains "dirty."
>
> This patch changes function clean_journal so that it uses the
> correct hash function. Therefore, the journal will be truly clean
> and consecutive runs (or mounts) will find the journal clean.
>
> Signed-off-by: Bob Peterson <rpeterso@redhat.com>
> ---
> gfs2/libgfs2/recovery.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gfs2/libgfs2/recovery.c b/gfs2/libgfs2/recovery.c
> index 6b14bf94..06f81116 100644
> --- a/gfs2/libgfs2/recovery.c
> +++ b/gfs2/libgfs2/recovery.c
> @@ -241,7 +241,7 @@ int clean_journal(struct gfs2_inode *ip, struct gfs2_log_header *head)
> lh->lh_sequence = cpu_to_be64(head->lh_sequence + 1);
> lh->lh_flags = cpu_to_be32(GFS2_LOG_HEAD_UNMOUNT);
> lh->lh_blkno = cpu_to_be32(lblock);
> - hash = gfs2_disk_hash((const char *)lh, sizeof(struct gfs2_log_header));
> + hash = lgfs2_log_header_hash(bh->b_data);
> lh->lh_hash = cpu_to_be32(hash);
> bmodified(bh);
> brelse(bh);
>
Thanks Bob, I've pushed the patch as it's a clear fix.
Andy
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-12-14 15:26 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1020823401.52190420.1544796956864.JavaMail.zimbra@redhat.com>
2018-12-14 14:16 ` [Cluster-devel] [gfs2-utils PATCH] gfs2-utils: Wrong hash value used to clean journals Bob Peterson
2018-12-14 15:26 ` Andrew Price
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).