All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bob Peterson <rpeterso@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH 8/8] libgfs2: Add support for rg_crc
Date: Thu, 7 Dec 2017 08:53:35 -0500 (EST)	[thread overview]
Message-ID: <2019565341.39460003.1512654815613.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <20171207115339.3797-9-anprice@redhat.com>

Hi,

----- Original Message -----
| This new field in the resource group headers is set on write and checked
| on read so that fsck.gfs2 now considers a resource group with a bad,
| non-zero crc to be corrupted. gfs2_grow, gfs2_edit, and mkfs.gfs2 all
| now support the rg_crc field, including save/restoremeta.
| 
| Signed-off-by: Andrew Price <anprice@redhat.com>
| ---
(snip)
| diff --git a/gfs2/libgfs2/rgrp.c b/gfs2/libgfs2/rgrp.c
| index 17178bd9..03861d14 100644
| --- a/gfs2/libgfs2/rgrp.c
| +++ b/gfs2/libgfs2/rgrp.c
| @@ -158,6 +158,42 @@ void lgfs2_rgrp_bitbuf_free(lgfs2_rgrp_t rg)
|  }
|  
|  /**
| + * Check a resource group's crc
| + * Returns 0 on success, non-zero if crc is bad
| + */
| +int lgfs2_rgrp_crc_check(const struct gfs2_rgrp *rg, char *buf)
| +{
| +	int ret = 0;
| +#ifdef GFS2_HAS_RG_RI_FIELDS
| +	uint32_t crc = rg->rg_crc;
| +
| +	if (crc == 0)
| +		return 0;
| +
| +	((struct gfs2_rgrp *)buf)->rg_crc = 0;
| +	if (crc != gfs2_disk_hash(buf, sizeof(struct gfs2_rgrp)))
| +		ret = 1;
| +	((struct gfs2_rgrp *)buf)->rg_crc = cpu_to_be32(crc);

I didn't trace the code all the way back, so I might be wrong. But:

My concern here is that lgfs2_rgrp_crc_check can modify the contents
of the buffer here. That is exactly what you want in most cases, but
it might be a problem for fsck.gfs2 cases other than -y. For example,
The -n option instructs fsck to not make any changes, and without -y,
it's supposed to ask before making any changes. So hopefully this
buffer is never rewritten without permission, at some other point in
fsck. It's worth checking. It also may be worth testing to make sure
specifying -n detects crc errors, reports them, but does not fix them
with -n.

(snip)
| +/**
| + * Set the crc of an on-disk resource group
| + */
| +void lgfs2_rgrp_crc_set(char *buf)
| +{
| +#ifdef GFS2_HAS_RG_RI_FIELDS
| +	struct gfs2_rgrp *rg = (struct gfs2_rgrp *)buf;
| +	uint32_t crc;
| +
| +	rg->rg_crc = 0;
| +	crc = gfs2_disk_hash(buf, sizeof(struct gfs2_rgrp));
| +	rg->rg_crc = cpu_to_be32(crc);
| +#endif
| +}

You may want to move the initialization of rg_crc (and supporting
code, obviously) outside the #ifdef so it gets initialized to 0.

The rest looked good.

Bob Peterson



  parent reply	other threads:[~2017-12-07 13:53 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-07 11:53 [Cluster-devel] [PATCH 0/8] gfs2-utils: Add support for new resource group fields Andrew Price
2017-12-07 11:53 ` [Cluster-devel] [PATCH 1/8] gfs2-utils configure: Check for rg_skip Andrew Price
2017-12-07 11:53 ` [Cluster-devel] [PATCH 2/8] libgfs2: Add rgrp_skip support Andrew Price
2017-12-07 11:53 ` [Cluster-devel] [PATCH 3/8] mkfs.gfs2: Pull place_journals() out of place_rgrps() Andrew Price
2017-12-07 11:53 ` [Cluster-devel] [PATCH 4/8] mkfs.gfs2: Set the rg_skip field in new rgrps Andrew Price
2017-12-07 13:29   ` Bob Peterson
2017-12-07 14:14     ` Andrew Price
2017-12-07 11:53 ` [Cluster-devel] [PATCH 5/8] gfs2-utils configure: Check for rg_data0, rg_data and rg_bitbytes Andrew Price
2017-12-07 13:29   ` Bob Peterson
2017-12-07 11:53 ` [Cluster-devel] [PATCH 6/8] libgfs2: Add support " Andrew Price
2017-12-07 13:30   ` Bob Peterson
2017-12-07 11:53 ` [Cluster-devel] [PATCH 7/8] mkfs.gfs2: Set the rg_data0, rg_data and rg_bitbytes fields Andrew Price
2017-12-07 13:31   ` Bob Peterson
2017-12-07 11:53 ` [Cluster-devel] [PATCH 8/8] libgfs2: Add support for rg_crc Andrew Price
2017-12-07 12:06   ` Steven Whitehouse
2017-12-07 13:53   ` Bob Peterson [this message]
2017-12-07 15:42     ` Andrew Price

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2019565341.39460003.1512654815613.JavaMail.zimbra@redhat.com \
    --to=rpeterso@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.